Shark的在Eclipse环境下的联合调试跟踪
胡长城(银狐999)
Shark的modules分的很清晰,但是代码量和包结构,是很复杂的,而且屏蔽了大量的实现类,这更增加了阅读程序的难度······
一般意思上说,阅读代码最好的方式,是“调试与跟踪”。所以,学习shark,最好的方式,也是跟踪其代码的运行逻辑。
但是,一般要启动Shark,就必须启动shark的tns,corba server(SharkCORBAServer),admin(SharkAdmin)。这种情况,很容易让人感觉,调试或者跟踪程序是件很麻烦的事情,其实不然。
建议大家从shark cvs中获取::pserver:anonymous@cvs.forge.objectweb.org:/cvsroot/shark
然后利用Eclipse加载shark的工程,是非常简单的事情(哈哈,这个不用说了),稍微补充以下,就是从cvs上拽的工程,不包含hibernate.jar。但是shark编译的需要。
配置SharkAdmin 调试环境:
这个实际上没什么说的,SharkAdmin仅仅是个Application。
配置SharkCORBAServer的调试环境
这个当然要参考一下run.bat或run.sh文件。查阅一下其调用应用程序所需要的Environment及classpath。可以看见其需要“PATH=lib\contrib\ext;%PATH%”。
在lib/ext目录下,存在NTEventLogAppender.dll 等几个dll文件,需要加入Path环境中。
知道这个需求,就很简单了。只需在Eclipse的Debug中将Environment 的“Path”引入(默认是没有的),并且编辑以下,将NTEventLogAppender.dll等文件的位置引入即可。
还剩一个TNS
这个最简单的了,也不许要调试跟踪,只是提供一个命名服务。从shark网站下载shark2.7.0 的安装文件(当然,也可以通过cvs的代码打包,方式请参考http://shark.objectweb.org/doc/sfs/sharkfromscratch1.html)。不过通过cvs直接打包后出现一些错误,于是我利用shark提供的安装文件直接使用。
安装后,直接运行bin/tns.bat即可。然后再eclipse环境中启动 shark server调试,然后再启动shark admin 调试。
那么现在,设置你所希望的断点吧······ 跟踪调试:F6,F5,F7···
获取更加详细的信息
这样配置的调制环境是不支持log信息输出的。Shark采用common-logging,这个就非常容易解决。将commons-logging.properties 和log4j.properties 引入即可。
推荐设置断点的类
有两个非常值得研究的类:
org.enhydra.shark.WfActivityImpl
org.enhydra.shark.WfProcessImpl
这两个类,是“Activity”和“Process”服务期端(注意,是server端)的核心类。必然针对流程、活动的操作,都会影响到这两个类。所以,跟踪这两个类,就会明白很多。