niyue

Archive for the ‘java’ Category

Java界技术名人堂

In javaother on 4月 18, 2005 at 12:30 上午

Java界技术名人堂

上次在某个blog上面看到过一个关于Java人仕的综合介绍,人列了不少,不过讲的比较没有规律并且不是很全.今天在赛迪网上看到了这些资料,但是阅读起来很不方便,这里为其修改了其链接上的错误并将原来分散的资源做了一个综合.想知道更多的人还可以看看TheServerSide上面的这篇文章: Who’s Who in the Enterprise Java World? Make your opinion known! 里面断断续续的也讲了不少人^_^

A



Adrian Colyer

IBM的AspectJ DeveloperJava研究项目负责人,同时也是Eclipse上AspectJ项目的领导者。AspectJ项目起源于帕洛阿尔托(Palo Alto)研究中心(缩写为PARC)。该中心由Xerox集团资助,Gregor Kiczales领导,从1997年开始致力于AspectJ的开发,1998年第一次发布给外部用户,2001年发布1.0 release。为了推动AspectJ技术和社团的发展,PARC在2003年3月正式将AspectJ项目移交给了Eclipse组织,因为AspectJ的发展和受关注程度大大超出了PARC的预期,他们已经无力继续维持它的发展。

AspectJ是用于实现面向方面编程(AOP)的Java语言扩展。通过分离各种正交问题,AspectJ使得开发者能够更轻松地解决大型软件系统中常见的一些棘手问题,如日志记录、错误处理之类。

AspectJ项目经过近十年的发展,对于AOP的具体实现已经相当成熟,但其仍存在诸如过于复杂、破坏封装、需要专门的Java编译器等缺点。在接收了AspectJ项目之后,Eclipse项目组已经把AspectJ集成在Eclipse Java开发环境中。通过这样的集成,Eclipse IDE将可以提供对AOP的支持,并弥补AspectJ本身的一些不足之处。


B



Ben Galbraith

AOP活跃人士,其在TSSJS2005(全称:The ServerSide Java Symposium)上关于“AJax Toy”的演讲被与会者认为颇有新意。AJAX是Asynchronous JavaScript + XML的缩写,而且AJax可以很好的和JSF的Component结合起来,开发者不需要成为AJax方面的专家。


Benjamin Renaud

BEA的副CTO。BEA是企业级平台中间件的领导厂商,其2002财年收入达到9.34亿美元,在全球拥有超过15,000家企业用户。1995年,BEA收购Tuexdo联机事物处理监视器[Tuxedo online transaction processing(OLTP) monitor],并由此而进入平台中间件市场。1998年又收购了WebLogic,而WebLogic技术随后在1999年成为Java应用服务器领域中的领导者。


Bill Burke

JBoss组织首席架构师,EJB 3.0专家组里的JBoss代表。JBoss是一个用纯Java编写、开放源代码、遵循J2EE规范的应用服务器软件,它遵循LGPL开放源码协议。JBoss起初只是一个EJB容器,后来逐步发展成为一个具有复杂功能的应用服务器。现在,最高的版本是4.0。它从创建到现在,经历了4年的发展历程。JBoss组织是一家位于美国亚特兰大的商业服务组织。他们为JBoss应用服务器提供技术支持和顾问咨询。


Bob McWhirter

Groovy和Drools的开发者。Groovy是一种敏捷开发语言,完全以Java编程API为基础,于2004年3月底获得批准。Groovy还是与JRE兼容的一种脚本语言,使用了Java开发人员最熟悉的功能和库(将它们放到了一个敏捷开发框架中)。Groovy具有使开发人员不用编译、允许动态类型、使合成结构容易、脚本可在普通Java应用程序中使用、提供shell解析器等特性,这使其成为一种特别容易学习和使用的语言,不管是有经验的Java开发人员还是刚接触Java平台的人,都可以快速掌握。有些人说它可能会永久性地改变开发人员看待和使用Java平台的方式。

Drools是Bob McWhirter开发的开源项目,是Charles Forgy Rete算法的一个增强的Java语言实现,放在The Codehaus上。Rete算法是Charles Forgy在1979年发明的,是目前用于生产系统的效率最高的算法(除了私有的Rete II)。Rete是唯一的、效率与执行规则数目无关的决策支持算法。Rete应用于生产系统已经有很多年了,但在Java开源软件中并没有得到广泛应用。

除了应用了Rete核心算法、开源软件和100%的Java实现外,Drools还提供了很多有用的特性。其中包括实现了JSR94 API和创新的规则语义系统,这个语义系统可用来编写描述规则的语言。目前,Drools提供了三种语义模块,即Python模块、Java模块和Groovy模块。


C



Cedric Beust

EJB 3专家组的成员,也是其他一些流行的开源项目(例如EJBGen和Doclipse)的创造者。目前是BEA的Weblogic架构师。EJBGen是一种EJB 2.0原始码生成器,它能够从一个EJB bean类生成本地界面/远端界面、本地主界面/远端主界面、主键类和部署描述符。

Doclipse是一个Eclipse下的JavaDoc插件。

Java中的包(Package)其实指的就是目录,它是为了更好地管理Java类(Class)和接口(Interface)。Java语言的包可以被另一个Java开发包所使用。

EJB是SUN公司倡导的基于JAVA的组件构架,是J2EE中的主要技术之一。EJB定义了一个集成的编程模型和标准的API接口,是实现服务器端应用服务的组件。



Cliff Schmidt

Cliff Schmidt,标准和开源策略产品经理,也是Apache蜂巢项目负责人。蜂巢计划(Project Beehive)是一个基于 WebLogic Workshop应用框架的用于 J2EE&SOA 应用的开源项目。该框架本身是独立的,但要依靠WebLogic来运行。 在2004年5月,BEA宣布该框架以后的所有开发都是开放源码的,这就是Apache蜂巢项目,名为Beehive。


Craig McClanahan

Craig McClanahan目前是SUN公司的高级工程师,主要从事J2EE的WEB层的工作。主要参加的开放源码有:

1.Catalina Servlet Container:主要的开发人员,该Servlet Container是Apache软件基金的Jarkarta 中的TOMCAT 4.x和5.x版中的核心部分。

2.Struts: 发起人和主要的开发人员,2000年该项目转为Apache软件基金的Jarkarta项目,该框架目前成为采用Java Servlet 和JSP技术构件Web应用的最流行的框架。

3.Digester:发起人和主要的开发人员,本来该项目是为Struts中处理配置文件的一些功能类,后来觉得不错,就转成Apache软件基金的Jarkarta项目的Common中的一个组件项目。

4.JavaServer Faces(JSR-127), 和SUN公司的Ed Burns一起负责该标准。

著作:《Struts in action》


D



David Nuescheler

Day Software的CTO,也是Java Content Repository(Java内容录仓库)JCR 170专家组负责人。Java Content Repository是一个寻址内容仓库的标准化API建议。2002年2月,该建议提交到JCR(Java Community Process),JCR专家组于2003年下半年完成最终草案。


Dion Almaer

TSS主编、中间件公司首席架构师、JDO专家组成员。Middleware Company (www.middleware-company.com)即中间件公司是领先的EJB/J2EE和B2B技术培训机构之一。Middleware Company还构建和维护一流的在线J2EE社区TheServerSide.com。


Doug Cutting

TSS的CEO、MiddleWare公司CEO、《Mastering EJB》作者。他是一位资深全文索引/检索专家,曾经是V-Twin搜索引擎(Apple的Copland操作系统的成就之一)的主要开发者,后在Excite担任高级系统架构设计师,目前从事于一些INTERNET底层架构的研究。他贡献出的Lucene的目标是为各种中小型应用程序加入全文检索功能。Lucene不是一个完整的全文索引应用,而是是一个用Java写的全文索引引擎工具包,它可以方便的嵌入到各种应用中实现针对应用的全文索引/检索功能。早先发布在作者自己的www.lucene.com,后来发布在SourceForge,2001年年底成为APACHE基金会jakarta的一个子项目:http://jakarta.apache.org/lucene/

E



Erich Gamma

经典书籍《Design Patterns(设计模式)》(Addison-Wesley,1995)的四位作者之一,Eclipse的总设计师,并且是EclipseJava开发工具(JDT)项目的领导人。


Edward Burns

JSF 1.2规格主导者。SPEC是System PerformanceEvaluation Cooperative的缩写,是几十家世界知名计算机大厂商所支持的非盈利的合作组织,旨在开发共同认可的标准基准程序。

SPEC基准程序是由SPEC开发的一组用于计算机性能综合评价的程序。以对VAX11/780机的测试结果作为基数,其他计算机的测试结果以相对于这个基数的比率来表示。SPEC基准程序能较全面地反映机器性能,有一定的参考价值。

SPEC版本1.0是1989年10月宣布的,是一套复杂的基准程序集,主要用于测试与工程和科学应用有关的数值密集型的整数和浮点数方面的计算。源程序超过15万行,包含10个测试程序,使用的数据量比较大,分别测试应用的各个方面。

SPEC基准程序测试结果一般以SPECmark(SPEC分数)、SPECint(SPEC整数)和SPECfp(SPEC浮点数)来表示。其中SPEC分数是10个程序的几何平均值,SPEC整数是4个整数程序的几何平均值,SPEC浮点数是6个浮点程序的集合平均值。

1992年在原来SPECint89和SPECfp89的基础上增加了两个整数测试程序和8个浮点数测试程序,因此SPECint92由6个程序组成,SPECfp92由14个程序组成。这20个基准程序是基于不同的应用写成的,主要测量32位cpu、主存储器、编译器和操作系统的性能。

参加这个组织的主要成员有:IBM,AT&T,BULL,Compag,CDC,DG,DEC,Fujitsu,HP,Intel,MIPS,Motorola,SGI,SUN和Unisys等。1995年,这些厂商又共同推出了SPECint95和SPECfp95作为最新的测试标准程序。


F



Floyd Marinescu

《EJB Design Patterns》作者。他架构、建置并执行了TheServerSide.com(知名J2EE社区)。他写了无以计数的文章并且经常在Java研讨会上发表演说。

G



Gavin King

Hibernate的作者,EJB3.0专家委员会成员,JBoss核心成员之一,也是《Hibernate in Action》一书的作者。Gavin King 1974年出生于澳大利亚,现在居住在澳大利亚默尔本市。Hibernate 是Java平台上的一种流行的、容易使用的开放源代码对象关系(OR)映射框架。Hibernate诞生在2001年11月,在短短的两年多时间就发展成为Java世界主流的持久层框架软件,令人侧目。Hibernate是一个雄心勃勃的项目,它的目标是成为Java中管理持续性数据问题的一种完整的解决方案。它协调应用与关系数据库的交互,让开发者解放出来专注于手边的业务问题。Hibernate是一种非强迫的解决方案。


Gregor Hohpe

《Enterprise Integration Patterns》作者,目前在ThoughtWorks工作。


Gregor Kiczales

人称AOP之父,是其领导了开发AOP和AspectJ的PARC团队。他是知名的AOP传教士,并且致力于建立同时给实践者和研究者服务的社区。他在开发高级编程技术并把这些技术传授给开发者方面有二十年的经验,是ANSI CLOS设计团队的成员,同时还是CLOS参考实现的作者,以及《The Art of Metaobject Protocol》(MIT出版社,1991)的作者之一。他现在是British Columbia大学软件设计方面的Sierra System教授。


Graham Hamilton

Sun副总裁,J2SE1.3、1.4、5.0项目领导人。

H



Hani Suleiman

OSWorkflow开发者,BileBlog的作者。osworkflow是一个轻量级的又极为灵活的工作流引擎,较容易和其它架构做整合。


Howard Lewis Ship

HLS的Blog:http://howardlewisship.com/blog/Tapestry和Hivemind的开发者,《Tapestry in Action》作者。

Tapestry是类似WebForms机制的Java Web Framework,Hivemind是一个微内核的IoC容器,Tapestry和Hivemind都是Apache Foundation Software旗下的软件。


J



James Strachan

Geronimo的发起者之一,Jakarta项目管理委员会成员,N多JSR expert group的成员。Geronimo是Apache软件基金会为了创造一个兼容J2EE的容器,而整理出来的一个新成果。

Jakarta是一个Sun公司支持的开源项目。它的最终目标是创造一个质量达到了那些商业解决方案要求的免费J2EE服务器端解决方案。Tomcat应用程序是整个项目的主要部分,并且在很多人看来,它几乎就等同于整个的Jakarta项目。



Jason Careria

Webwork2,Xwork核心的开发者。WebWork2.x前身是Rickard Oberg开发的WebWork,但现在WebWork已经被拆分成了XWork1和WebWork2两个项目。


Jason Hunter

Apache基金会管理员,《Java Servlet Programming》作者,Xquery,Jdom等的开发者。


John Crupi

Sun Java Center系统架构师,目前专著于SOA。


Jonathan Bruce

JDBC规格主导人。


Joshua Bloch

《Effective Java》作者,前java平台核心开发者,目前在google。


Jon Tirsen

Nanning的首席开发者,PicoContainer和NanoContainer活跃开发者,目前在ThoughtWorks工作,Damage Control的项目领导者之一。


Juergen Hoeler

Juergen Hoeler是SpringFramework的共同作者之一,与Rod Johnson共同发起和创造了SpringFramework。SpringFramework中Hibernate相关的API是由Juergen Hoeler完成的。对于喜欢使用Spring/Hibernate架构的程序员来说一定对这部分非常熟悉。Juergen Hoeler也是《J2EE Development without EJB》一书的共同作者之一。

K



Kent Beck

设计模式的开创者之一。XP[eXtreme Programming(极限编程)]和TDD的创始人,xUnit的开发者。是《The Smalltalk Best Practice Patterns》、《Extreme Programming Explained》和《Planning Extreme Programming(与Martin Fowler合著)》等书的作者。

L


Linda DeMichiel

EJB 3.0规格主导者,在SUN工作。

M



Marc Fleury

博士,1968年生于巴黎。马克原先在太阳微视(法国)从事过销售工作。毕业于法国声名显赫的Ecole Poly技术学院的他,同时也是伞兵队的前任上尉。后来,马克从巴黎高等师范学校获得理论物理专业的硕士和博士学位。在从事物理方面的研究过程中,他也在麻省理工学院做过X射线激光器方面的访问学者。目前,马克是JBoss公司,即一个坐落在亚特兰大郊外的、提供优质服务的公司的总裁。JBoss公司,由Marc Fleury领衔的、由世界范围内100多位开发者组成的公司。他们分发各种用途的J2EE工具,并且致力于将JBoss发展为J2EE平台中的主流企业Java应用服务器。


Mark Hapner

Mark Hapner不仅是J2EE 1.4规范的主导者,还是Web Service协同工作组织中Sun公司的代表。简而言之,他是Sun驱动J2EE技术趋势的关键人物。Mark于1996年加 入Sun的Java软件公司,参与JDBC API的开发。接着,他撰写了EJB规范和JMS规范。


Martin Fowler

从80年代开始,他就一直从事软件开发的工作。他写过四本软件开发方面的书。《分析模式》是对他商业建模的经验的收集回顾,其中有很多重要的商业对象开发模式。《UML Disilled》是对UML符号、语意以及迭代式开发过程的概览,在1998年获得软件开发生产力奖金,现在已经出到了第二版。《Refactoring》描述了如何以可控的、快速的方式改变现有软件的设计。他最近与Kent Beck合写的《Planning Extreme Programming》则描述了如何进行XP设计。这四本书被全世界的软件开发者奉为经典,尤其是后两本,让软件开发者们看到了快速、灵活的软件开发的可能性。他所描述的重构技术和基于重构的XP方法,被称为“软件开发史上的一次风暴”。Martin Fowler在许多软件开发的国际性会议上做过演讲。他还是OOPSLA、软件开发委员会、UML世界、XP2001、TOOLS等几个协会的会员。同时,他还是“分布式运算”杂志的专栏作家。现在,他又为“软件开发”杂志做顾问,同时还为“IEEE软件”写一个设计专栏。目前是ThoughtWorks(系统集成及顾问公司)的CEO。


Matt Raible

1997年毕业于Denver大学,获得俄语、国际商业和经济学位。《Spring live》一书的作者。


Mike Cannon-Brookes

OpenSymphony及Atlassian的开发者,《Java Open Source programing》一书的作者。

P



Pat Lightbody

Webwork的开发者。


Patrick Linskey

JDO活跃人士,JDO2.0,EJB3.0专家组成员。

R



Rick Ross

Javalobby公司创建人。


Rickard Oberg

Xdoclet及Webwork的开发者,Jboss的前架构师,目前主要研究AOP。Oberg是瑞典Java编程竞赛“Software Reuse Cafe”的两度折桂者,这使得他成为瑞典最好的Java程序员之一。


Robin Roos

JDO2.0活跃人士,《Java Data Object》一书的作者。


Rod Johnson

Rod Johnson在2002年出版了一本非常畅销的J2EE书籍《Expert One-on-One J2EE Design and Development》,阐述了J2EE开发的方方面面的经验和设计,同时他根据本书的思路,开发了SpringFramework。如今SpringFramework是最流行的轻量级Java IoC容器。Rod本人也是Servlet2.4和JDO2.0专家委员会成员,他同时也是一位经验丰富的技术咨询专家。Rod开了一家咨询公司,提供SpringFramework的技术支持和培训。Rod Johnson也是反EJB方面一个代表人物,他创建的Spring的最终目标是取代EJB。

S



Scott Ambler

Scott W. Ambler是Ronin International的总裁,该公司是一家专门提供面向对象过程指导、体系结构建模和Enterprise JavaBean(EJB)开发的咨询企业。他自己著作了或者与其他人合著了几本有关面向对象开发的书籍,包括最近出版的《The Object Primer 2nd Edition》。可以通过scott.ambler@ronin-intl.com与他联系,他的网站位于www.ambysoft.com。


Sergey Dmitriev

Jetbrains公司CEO,Intelij IDEA的开发者。Sergey Dmitriev认为,我们今天把领域问题映射成通用编程语言如Java、C#,就像把C语言用汇编代码表达出来一样如在石器时代。所以我们需要可以随意制造贴近问题域的DSL。

T


Ted Neward

Ted Neward是Manning出版社元老级的作者,Manning最早出版的书正是Ted Neward的《Core OWL》与《Advanced OWL》(一本入门,一本进阶)。有趣的是,当Ted Neward的OWL这两本书快出版时,Borland居然宣布停止开发OWL。Ted Neward花了这么多心血,居然换来这样的结果。OWL本来市场就很小,又被Borland宣布死刑,Ted Neward的这两本书卖得奇惨。后来,Ted Neward转向Java,在Manning出版了一本很受好评的《Effective Enterprise Java》。接着,Ted Neward开始和O’Reilly合作,出版了好几本与他人合著的.NET书,包括了《C# in a Nutshell》、《VB.NET Core Classes in a Nutshell》、《C# Language Packet Reference》、《Shared Source CLI Essentials》。其中,《Shared Source CLI Essentials》一书是剖析Rotor的第一本书,2003年三月底出版。

V



Vincent Massol

Vincent Massol是Jakarta Cactus测试框架的创建者,也是Maven和MockObjects开发团队的活跃参与者。他是Pivolis的CTO,还是一位敏捷软件开发专家。《Junit in action》一书的作者。

jBpm2中的sample分析

In java on 4月 10, 2005 at 2:08 下午

jBpm的文档不是很多,所以真正开始coding的时候就想起来“书到用时放恨少”这句话了。前面大概看了一下jBpm2自带的那个请求加薪的例子,感觉写的实在不是一个好例子。因为既然是一个样例,就应该写的清晰易懂,这样初学者看起来才能够迅速上手,结果就那个例子我就分析了几个小时才大概看清一个头绪。这里稍微总结一部分,主要是关于其中的表单定义的。

从用户的观点来看,很希望工作流管理系统能够提供表单的定制,最起码我感觉这个对于开发人员来说是很贴心的一项功能,当然相对与工作流引擎来说,这可能不是那么核心的一个问题。在jPdl中甚至没有包括对于应用的接口的参数或者表单参数的这种定义的能力,感觉XPDL在这方面要强大很多(不过似乎jBpm3要支持BPEL了,那时候肯定这方面的能力会得到加强)。由于jPdl中没有关于这些表单的参数定义,开发人员就要自己在其他的地方定义这些参数。在jBpm2的样例中,它是定义在forms.xml这个文件中的。

<forms>

<form>
<file>forms/request.form</file>
<state-name>request a payraise</state-name>
<task-name>request a pay raise</task-name>
<variable name=”reason” />
<variable name=”amount.asked” format=”org.jbpm.web.formgen.format.DoubleFormat” />
</form>

<form>
<file>forms/evaluating.form</file>
<state-name>evaluating</state-name>
<task-name>evaluate a pay raise</task-name>
<variable name=”requester” />
<variable name=”reason” />
<variable name=”amount.asked” format=”org.jbpm.web.formgen.format.DoubleFormat” />
<variable name=”amount.granted” format=”org.jbpm.web.formgen.format.DoubleFormat” />
<submitbutton value=”Approve Pay Raise” transition-name=”approve” />
<submitbutton value=”Disapprove Pay Raise” transition-name=”disapprove” />
</form>

<form>
<file>forms/treat.form</file>
<state-name>treating collegues on cake and pie</state-name>
<task-name>treat collegues</task-name>
</form>

<form>
<file>forms/update.erp.form</file>
<state-name>updating erp asynchronously</state-name>
<task-name>update the erp system</task-name>
<variable name=”requester” />
<variable name=”amount.granted” format=”org.jbpm.web.formgen.format.DoubleFormat” />
</form>

</forms>

在这个表单定义文件中,定义了所有表单的信息,包括表单对应的html显示、表单在流程中的哪个状态使用、表单的action、以及表单中使用的参数。

这个表单定义文件的使用主要有以下几步:

(1)在HomeAction中,调用Form类的静态方法initialiseForms对可能用到的表单信息进行初始化,这其中包括了:1. 用户当前正在进行的这一工作流定义的表单 2.所有的最新版本的工作流定义需要的表单

(2)在initialiseForm方法中,读取forms.xml这一定义文件,并实例化新的Form对象,在Form类的构造函数中解析这一xml文件的各个元素,并调用initializeSubmitButtons方法将button和解析出的变迁建立map,调用initializeVariableFormats方法将变量与变量类型建立map。

(3)循环将该流程中所有的状态名与解析完成的form实例建立map,而后将该流程id与前面建立的map再建立map allForms(静态成员变量)

(4)在其他的Actionz中通过Form类的方法getForm访问allForms map以得到各个表单中的参数信息

jBpm中的泳道

In javaprogramming on 4月 3, 2005 at 1:09 下午

在jBpm的邮件列表上的一些关于jBpm泳道的信息:
2 posible transitions for 2 different roles

Hello,
i’m reading the docs but i can’t see if, being in 1 state and having 2 possible actions (transitions to make), it’s possible to be performed by 2 different roles.
For example :
<state name=”evaluating”>
<transition name=”approve” to=”fork”/>
<transition name=”disapprove” to=”done”/>
</state>
The approve transition can be made by role 1 (swimlane) and the disapprove transition can be made only by another role(swimlane).

Can i do that?… Or how can i represent that scenario..

Thanks a lot.

You are right, it can’t. A state is acted on by one role. (think in states, not in activities!!!!)

You can ofcourse write your own gui and have additional roles there and only allow one actor to submit one transition and vise versa, but that is not what you (and I) want.

Can you explain a little What do you want to achieve? The first to act wins? IF I know a little more detail, I can maybe give you a good answer.

Ronald

jbpm does not do authentication. this should be done by the environment. (e.g. the webapplication environment or the ejb environment).

in one of the previous versions, we had the most generic organisation module possible. turned out not te be generic enough. so we eliminated any dependency from within the jbpm code. Your organisation model should only be used from within your AssignmentHandler implementations. jBPM only stores references to actors as text so they can represent people, groups or systems in your context.

regards, tom.

from one state to two different swimlane ?

Hi,
I have a use case:
– a user can submit a request
– a user can cancel a request
– a manager can approve/reject a request

So I think I need to define two swimlanes, one for requester, and one for manager. However, I donot know how to transition from ‘evaluating’ state to two states which are for different swimlanes:
<!– START-STATE –>
<start-state name=”request”
swimlane=”requester”>
<transition to=”evaluating”/>
</start-state>

<!– NODES –>
<state name=”evaluating”>
<assignment swimlane=”owner” />
<transition name=”approve” to=”done”/>
<transition name=”reject” to=”done”/>
</state>

How do I define the ‘cancel’ state for the requester ? thanks
li xin

How to assign swimlanes properly?

Thanks for your replies…

I used the following state definition:

<state name=”life”>
<assignment swimlane=”human” authentication=”verify” />
<transition to=”death” />
</state>

The test code:

try {
executionService.endOfState(token.getId());
fail(“Task is closed by unauthorized user.”);
} catch (ExecutionException e) {
e.printStackTrace();
}

Now the code passed the test.

As much as I understand from the documentation and your replies, authentication is not part of the primary responsibilities of Jbpm. But we should use getTaskList method in order to assign the tasks to the correct user.

openExecutionService(actorId) method mislead me. I thought that executionService is bound to the actorId. Thus it is responsible of authentication of the endOfState method. However the actorId parameter is passed to the executionService for logging purposes. Thus it is optional.

Thank you very much for your help…

Best regards,

Mert Nuhoglu

Tom Baeyens谈jPdl

In javaprogramming on 4月 3, 2005 at 11:36 上午

在sourceforge的jBpm项目的论坛上看到的Tom的言论:Ardian,

The reason why jBpm sticks to UML-activity-diagrams is for easy-acceptance.
Petri nets are easy, but not as easy and widespread as UML-activity-diagrams.
The downside of UML-activity-diagrams is that they are not exact and they do not contain enough information to specify a complete business process.
That is why each tool or standard that starts from an UML-activity-diagram has to extend the diagrams with information such as : which data-items are input/output on which activities, how does the process interact with other systems, to whom will the activity be assigned, …
jBpm specifies these extensions in http://jbpm.org/new/jpdl.html

So after extending the UML-activity-diagram concepts, the resulting language will be quite close to high-level-petri-nets.
That is why, in my opinion, high-level-petri-nets should be seen as the ‘mother of all process languages’
So a good BPM-system should present an easy interface to the users (=process developers) and base the internal impementation on high-level-petri-nets.
As for jBpm I think using UML-activity-diagrams is an easy way of presenting the concepts to users that lowers the learning curve. But I did not yet have time to actually compare jBpm’s interal model with high-level-petri-nets or YAWL. But I’m convinced they will not be far apart.

I talked last month to Wil van der Aalst (after I wrote the initial message of this thread) and it is also his vision that BPM-tools should be based internally on high-level-petri-nets (or YAWL) and that they should try to present it as easy as possible to the user. YAWL is an exact specified version of high-level-petri-nets that is customized for building process definitions. He thinks of YAWL as a kind of playground for research-purposes. So I got the impression that he didn’t expect that YAWL would be used in BPM-engines at this stage.

Now, I’m starting to form a new vision on standards and languages. I want to build jBpm in 2 layers : a generic layer and a set of default implementations. jBpm’s delegation principle (see http://jbpm.org/new/concepts.html#delegationprinciple) is in my opinion a very good basis for such an approach.
The generic layer should be a kind of framework for BPM-systems. The generic layer should be the basis of a BPM-engine in which implementations can be plugged (i.e. in a process definition). The generic layer should be constructed in a way that implementations can be plugged that support all workflow-patterns (see http://tmitwww.tm.tue.nl/research/patterns)
By separating these two layers, support of a specific standard or behaviour should be easy to add.

Regards, Tom.

jPdl参考手册

In java on 3月 29, 2005 at 8:30 上午

今天开始看JBoss的jBpm,看起来感觉也是比较简单的一个工作流系统,和osworkflow很像总感觉,过程建模的模型都很类似UML的活动图,都是以状态为核心,但是jBpm有泳道的概念,而osworkflow没有,两者都有split和join的这种概念.还有一个很相象的地方就是两者都有一个类似java.util.Map的这种机制来持续化变量.不过为什么感觉好像还没有达到我想象中的那种工作流系统的理想状况呢?花了一个下午时间把jPdl翻译了一遍,翻完以后看了一下感觉很多意思都损失了,有空的话还是看英文吧.jPdl参考手册.pdf

xalan处理xslt遇到的uri异常

In javaprogramming on 3月 19, 2005 at 3:13 下午

昨天在用xalan处理xslt样式表时遇到了以下异常:com.sun.org.apache.xml.internal.utils.URI$MalformedURIException: URI 中未找到模式.因为处理的这个样式表原来在Stylus Studio里面使用过,显示是正常的,这里应该也不会有什么问题,但是在重构代码的时候将xsl文件的读取由硬编码文件路径改成为用ClassLoader的getResource方法来进行读取了.

开始的时候丝毫没有意识到是这里出了问题,还以为是xsl文件中引用的uri出了问题(因为上面那个异常导致了xalan编译xsl样式表的时候无法找到import的locale.xsl文件,于是编译器又报了locale.xsl中定义的变量找不到的错误,就是这个错误误导了我好长时间而没有发现错误的源头),修改了好半天的xsl文件都没发现有问题,而且用xalan.jar直接进行xslt转换可以通过,弄了一个晚上也没搞懂到底是怎么回事,彻底没想法掉了那个时候.

今天放松了一天,回来继续看的时候去看了一下uri解析的源码,本来想看看这个uri到底是怎么解析而后出错的,好不容易找到这段报错在源码中的位置,但是看不懂这里到底怎么解析的,和其他部分源码的关联太高了,不过看的时候看到了解析的时候有关于slash符号”/”的解析,有种顿悟的感觉,因为前面ClassLoader的getResource方法给出的绝对路径是以”/”开始的(像/G:/src/xsl/folder.xsl这种形式),开始看着就觉得很奇怪,但是直接使用这个路径确实找的到样式表所以也就没去多想,但是实际情况是xalan如果用这种路径访问样式表对于样式表中import的样式表就找不到(异常显示说没有这种模式)!

不知道这算不算是xalan的一个bug呢?或者是jdk的一个bug,ClassLoader的getResource方法给出的路径为什么前面加上一个”/”要?呼,即使不是一个bug的话,也是在这两个api同时使用时会出现的一个问题,解决方法很简单,把getResource得到的路径前面的”/”去掉就可以了,xalan一下就通过了这一样式表的编译,其他地方对这一路径的使用也没问题.

Java国际化工具

In java on 3月 14, 2005 at 4:07 下午

Java 国际化和本地化 Toolkit 2.0Resource Bundle Inspector For Java

Resource Bundle Inspector For JavaTM enables initial verification and inspection of translated messages in resource bundles before product testing is done. These translated messages have come from different geographical translation centers. This tool helps testers to speed up the verification of messages before integrating them into any product. Bugs found in translated messages can be detected at early stage of product testing cycle; this helps in increasing the testing cycle efficiency.

Zaval Java Resource Editor (JRC-Editor)

The Zaval JRC Editor is best used for regular access to various resource files. You can add your own language support to the existing software if strings are not hard-coded to the software. One of the greatest things in the internationalization is that you don’t need to make code changes.

Another great area in this tool usage is resource bundle synchronization. Our tool can handle this task easily – it compares the files set and highlights all differences. It allows separating development process and resource management process. That’s why this tool can be used as part of your software pack to provide 3rd party localization.

Java中的异常处理

In javaprogramming on 3月 12, 2005 at 5:18 上午

The Dilemma of Exception 来自 透明思考

现在的异常体系设计是:系统内部所有异常继承同一个基类BaseException,BaseException又继承RuntimeException。在一个层次(例如DAO层或者Business Service层)中有一个异常基类,对于每种具体的出错情形再派生一个新的异常类,例如UserCannotFound、HaveNoPermission等等。
这样做的好处是避免了在接口上出现异常签名,因为“抛出哪种异常”是方法的私事。如果接口签名上指明详细的异常信息,又采用Checked Exception,当方法内部实现改变时,接口就会受到影响;如果接口签名上只泛泛地标注一个高层次异常(例如Exception甚至Throwable),又起不到任何提示的效果。
但是接口上不留异常签名又带来另一个问题:client程序员要到运行时(甚至可能要过相当长的时间)才知道这个方法可能抛出哪些异常,给编写代码造成相当大的麻烦。我想的折中办法是:(1)方法稳定之后,在接口上标注异常签名,由于全部异常继承RuntimeException,即使接口异常签名改变也不会破坏client;(2)用一个拦截器把所有异常log到统一的地方,并提供足够的信息,方便调试。

ExceptionHandler 异常处理 来自 冰云@Blogging

我现在的异常处理和你做的差不多。每一层都有BaseUnckeckedException,但有时候也用CheckedException。以前在onjava看到过一篇讨论受它影响比较深。对于无法处理的异常,就用UnChecked,例如SQL错误,产生于DAL,对于系统的来说是致命的。交给BusinessLayer毫无用处,因此抛出DaException。如果是有用的可处理的例如处理用户登录的时候,UserNotExistException或PasswordNotVerfiedException就用CheckedException,交给Client去处理,显示不同的信息。 另外,在处理异常方面,我现在采用的是Struts1.1的ExceptionHandler机制。在ExceptionHandler捕获所有的Throwable,然后交给一个统一的或者按照module区分的Error.Jsp页面来显示。 另外有一个问题就是i18n在异常中如何处理。抛出的异常最终会显示到界面上。如果不做任何i18n处理恐怕不够友好。因此我让所有的自定义Exception实现一个ErrorKeyable接口。包含的Error就是i18n的key。如果我在ExceptionHandler中得到的Exception是ErrorKeyable的实例,那么就显示定制的错误信息。如果不是,就显示Unkown Error,呵呵。然后做个按钮在错误页让用户提交给admin。

早就想写一篇异常处理的文章。今天看到gigix写了一篇《The Dilemma of Exception》
基于他的观点,我也写了一点东西。基本上,思路是一致的。

trackback不能用真是郁闷。

我现在的异常处理和gigix做的差不多。每一层都有BaseUnckeckedException,但有时候也用到CheckedException。以前在onjava看到过一篇讨论受它影响比较深。对于无法处理的异常,就用UnChecked。例如SQL错误,产生于DAL,对于系统的来说是致命的。交给BusinessLayer毫无用处,因此抛出DaException。如果是有用的可处理异常就应该处理。例如用户登录的时候会产生UserNotExistException或PasswordNotVerfiedException,就用CheckedException,交给Client去处理,以显示不同的信息。 Gigix的异常签名方法看起来很好。下次可以试试看。将Exception标记在javadoc中也是应该考虑的事情。在处理异常方面,我现在采用的是Struts1.1的ExceptionHandler机制。用ExceptionHandler捕获所有的Throwable,交给一个统一的或者按照module区分的Error.Jsp页面来显示。 有一个问题就是在异常中如何处理i18n。抛出的异常最终会显示到界面上。如果不做任何i18n处理恐怕不够友好。因此我让所有的自定义Exception实现一个ErrorKeyable接口。包含的ErrorKey就是i18n的key。如果我在ExceptionHandler中得到的Exception是ErrorKeyable的实例,那么就显示定制的错误信息。如果不是,就显示Unkown Error,呵呵。当然,对于后台产生的错误以及Exception的Message,服务器的locale基本不变,并且log只有开发人员或网管才看。因此i18n毫无用处,所以内部的ExceptionMessage采用中文或者英文均可。我是采用英文,因为中的的话,不同的编译环境还可能导致乱麻。还不如英文呢简单。最后做个按钮在错误页上,一旦产生错误,就让用户按按钮将错误信息提交给admin以便记录。 后台已经有了log为什么还要这样做哪?以上的部分已经在项目中实施,基本上比较方便。不用看到Tomcat中蓝色Stupid错误提示。

JIRA破解

In javaprogramming on 3月 8, 2005 at 7:40 上午

JIRA可真是个好东西啊,自定义能力超强,虽然主要是用来做bug跟踪管理的,但是很容易的就可以改造成项目管理系统.只可惜是要收费的,为了使用它,sorry啊,只好下载了一个注册机.不过下载的注册机是JIRA3.0版的,现在的JIRA已经出到3.1版了.试了一下发现注册机不行用.几乎放弃了就,但是仔细分析了一下JIRA的包的结构,发现注册机不行用很可能是因为3.1版的包结构改变了,破解需要的那个licence包的位置变掉了.于是抱着侥幸心理把下载的注册机keygen.class反编译了一下,结果发现注册机没有被混淆过,很容易就看到了所有的代码,于是就将注册机import的包名改了一下,重新编译,呃,可以用了,真是对不起,做了错事了.

// Decompiled by DJ v3.7.7.81 Copyright 2004 Atanas Neshkov Date: 2005-2-26 22:13:16
// Home Page :
http://members.fortunecity.com/neshkov/dj.html – Check often for new version!
// Decompiler options: packimports(3)
// Source File Name: keygen.java

import com.atlassian.License.LicensePair;
import java.io.*;
import java.security.KeyFactory;
import java.security.Signature;
import java.security.spec.PKCS8EncodedKeySpec;

public class keygen
{

public keygen()
{
}

public static void main(String args[])
throws IOException
{
try
{
long l = 267L;
long l1 = System.currentTimeMillis();
long l2 = System.currentTimeMillis();
String s = “”;
System.out.println(“Keygen for JIRA Enterprise Edition.”);
System.out.print(“created by mydaj[ROR].”);
do
{
System.out.print(“\nEnter your organization name: “);
for(int i = System.in.read(); i != 10 && i != 13; i = System.in.read())
s = s + (char)i;

} while(s == “”);
try
{
PKCS8EncodedKeySpec pkcs8encodedkeyspec = new PKCS8EncodedKeySpec(EncodedPrvKey);
KeyFactory keyfactory = KeyFactory.getInstance(“DSA”, “SUN”);
java.security.PrivateKey privatekey = keyfactory.generatePrivate(pkcs8encodedkeyspec);
String s1 = Long.toString(l, 10);
s1 = s1 + “^^”;
s1 = s1 + Long.toString(l1, 10);
s1 = s1 + “^^”;
s1 = s1 + Long.toString(l2, 10);
s1 = s1 + “^^”;
s1 = s1 + s;
byte abyte0[] = s1.getBytes();
Signature signature = Signature.getInstance(“SHA1withDSA”);
signature.initSign(privatekey);
signature.update(abyte0);
byte abyte1[] = signature.sign();
LicensePair licensepair = null;
try
{
licensepair = new LicensePair(abyte0, abyte1);
}
catch(Exception exception1)
{
exception1.printStackTrace();
}
System.out.println(s1);
System.out.println(“Your license key is: “);
System.out.println(licensepair.toString());
}
catch(Exception exception)
{
exception.printStackTrace();
}
}
catch(IOException ioexception) { }
}

static byte EncodedPrvKey[] = {
48, -126, 1, 75, 2, 1, 0, 48, -126, 1,
44, 6, 7, 42, -122, 72, -50, 56, 4, 1,
48, -126, 1, 31, 2, -127, -127, 0, -3, 127,
83, -127, 29, 117, 18, 41, 82, -33, 74, -100,
46, -20, -28, -25, -10, 17, -73, 82, 60, -17,
68, 0, -61, 30, 63, -128, -74, 81, 38, 105,
69, 93, 64, 34, 81, -5, 89, 61, -115, 88,
-6, -65, -59, -11, -70, 48, -10, -53, -101, 85,
108, -41, -127, 59, -128, 29, 52, 111, -14, 102,
96, -73, 107, -103, 80, -91, -92, -97, -97, -24,
4, 123, 16, 34, -62, 79, -69, -87, -41, -2,
-73, -58, 27, -8, 59, 87, -25, -58, -88, -90,
21, 15, 4, -5, -125, -10, -45, -59, 30, -61,
2, 53, 84, 19, 90, 22, -111, 50, -10, 117,
-13, -82, 43, 97, -41, 42, -17, -14, 34, 3,
25, -99, -47, 72, 1, -57, 2, 21, 0, -105,
96, 80, -113, 21, 35, 11, -52, -78, -110, -71,
-126, -94, -21, -124, 11, -16, 88, 28, -11, 2,
-127, -127, 0, -9, -31, -96, -123, -42, -101, 61,
-34, -53, -68, -85, 92, 54, -72, 87, -71, 121,
-108, -81, -69, -6, 58, -22, -126, -7, 87, 76,
11, 61, 7, -126, 103, 81, 89, 87, -114, -70,
-44, 89, 79, -26, 113, 7, 16, -127, -128, -76,
73, 22, 113, 35, -24, 76, 40, 22, 19, -73,
-49, 9, 50, -116, -56, -90, -31, 60, 22, 122,
-117, 84, 124, -115, 40, -32, -93, -82, 30, 43,
-77, -90, 117, -111, 110, -93, 127, 11, -6, 33,
53, 98, -15, -5, 98, 122, 1, 36, 59, -52,
-92, -15, -66, -88, 81, -112, -119, -88, -125, -33,
-31, 90, -27, -97, 6, -110, -117, 102, 94, -128,
123, 85, 37, 100, 1, 76, 59, -2, -49, 73,
42, 4, 22, 2, 20, 42, 50, -88, 30, 125,
-37, 118, -50, 20, -82, -63, 0, 8, -36, 106,
-9, -110, 124, 107, 68
};

}

Open Source Software in Java

In javasoftware on 3月 6, 2005 at 3:12 上午

ONJava.com -- The Independent Source for Enterprise Java

1. Open Source Java Directory

http://blogger.org.cn/blog/

2. Open Source Software in Java(tm)

logo

3. JavaToolBox