JAVA项目开发笔记(3)Shark部分:配置和运行Shark及Shark的Demo:SharkJSPClient

本文详细介绍了如何配置Shark工作流引擎以支持不同的数据库类型,包括MSSQL,并解决了SharkJSPClient示例项目的配置问题。此外,还提供了如何在使用JOTM作为事务管理器的情况下配置Shark的具体步骤。

 记录使用Shark的API方式开发中遇到的问题和技巧,不定时更新

转载请注明出处(Cooper的专栏    http://blog.youkuaiyun.com/cooper_lyt

  • Shark的Demo:SharkJSPClient

    这是Shark安装后自带的一个JSP的DEMO,不过要想运行起这个DEMO来要费点周章,Shark1.1的运行起来很方便,什么都不用动直接copy到tomcat目录中就可以使用了。但是Shark2就不是这样了,由于使用了JOTM,而它的demo的配置好像也不用来配到Tomcat中去的,所以要改到一些地方。改动方法可参见这篇文章:http://blog.youkuaiyun.com/JavaWHB/archive/2008/04/07/2257568.aspx

写的很好。照着做就行了(注意项目部署的物理路径最好不要有空格,我第一次部署就没有成功,后来重装的tomcat并把tomcat路径重设到了没有空格和特殊字符的目录后就没问题了)。如果有时间我会把我修改完的找地方上传一下供大家参考。

  • 更改Shark使用的数据库

    shark默认使用的数据库是HypersonicSQL,是文件型的数据库,这当然不行,shark支持几乎所有的主流关系型数据库(shark2.0还支持MSSQL2005)只要改一下配置,shark就会自动为你选择的数据库中生成工作流库,并把一些配置文件改为你所选择的数据库,也就是说如果你还使用hibernate的话那么选择什么库数据对程序来说是透明的,在项目开发完成后你可改任务更改你所选择的数据库而不用更改一句代码。

更改shark所使用的数据库的方法如下(shark1.1和shark2是一样的,只是shark1.1不支持msql2005):

1.准备你所使用的数据库驱动,并在你的数据库中建立名为“shark"的库。

2.修改你shark安装目录下的configure.properties文件

我选用的是MSSQL数据库,使用其它数据库根据你所选库设置(下面只列我更改的地方)

# database vendor, pick one of:
# db2, hsql, informix, msql, msql2005, mysql, oracle, postgresql, sybase

#可选项就在上面的注释中
db_loader_job=msql
......

# directory containing JDBC driver jar/zip files

#填入你放数据库驱动的路径,例如我的被我放到了shark的lib目录中去了,注意"/"而不是"/".
db_ext_dirs=C:/tws22/lib

......

# MSQL
msql_JdbcDriver=com.microsoft.jdbc.sqlserver.SQLServerDriver

#注意shark2.0配置文件中竞然把MSSQL的数据库驱动类的名子写错了注意修改
msql_Connection_Url=jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=shark;SelectMethod=cursor
msql_user=sa
msql_passwd=null

3.运行configure.bat .剩下的就是等待了。

 

Shark的Demo:SharkJSPClient

做完上述步骤后Shark会把你的JSPClient中的demo也重新按你的配置修改好并重新打包了,把Shark安装目录下的JSPClient中的sharkworklisthandler.war  拷到tomcat的项目目录 但还是不能直接运行的,还需要改到一下配置才能运行,shark1.1的比较方便,好像连DEMO中的那个shark.conf的配置也自动改了(有点记不清楚了),如果没改的话只要到Shark.conf中改动一下数据库驱动类名、数据库url、数据库用户名和密码就可以了,shark2.0就不这么方便了,因为使用了jotm所以要改动的地方比较多,

一开始我是按照上面我提到的文章中(只提到了oracler的配置方式)的方法改的,但是没有成功,报错如下javax.naming.NameNotFoundException
 at org.objectweb.carol.jndi.enc.java.CompNamingContext.lookupCtx(CompNamingContext.java:689)...

后来我仔细研究了shark里面自带的jotm发现它使用用的是jotm自带的命名服务,设置如下:

carol.start.jndi=true

.......

carol.jndi.java.naming.factory.url.pkgs=org.objectweb.carol.jndi.enc

但是用这种方式我用自已的代码在命名服务器中都查找不到定义的数据源,所以我自已写了一份JOTM的配置放到了项的了CLASSPATH中去使用TOMCAT的命名服务,并修改了Shark配置中的命名按照tomcat的命名规则进行了修改。

另外我还重新编译了JOTM的carol库,因为这个库在jdk5.0以上的版本中使用会出现问题,从它配置文件的说明中可以看出,说明引用如下:

# IP address or network mask of the local network interface to use to send
# multicast messages
# Needed only when the server has several network interfaces and the multicast
# messages do not go through to interface you want them to use
# Works only on JDK 1.4
#carol.cmi.multicast.itf 192.168.25.0/24

具本的请参见我关于JOTM的文章。(http://blog.youkuaiyun.com/Cooper_Lyt/archive/2008/10/06/3022772.aspxJTA 部分:使用JOTM

 

下面列出我主要修改的地方

 

context.xml:

    1. <?xml version='1.0' encoding='utf-8'?>
    2. <Context >
    3.     <Resource name="sharkdb" auth="Container"
    4.         type="javax.sql.DataSource"
    5.         factory="org.objectweb.jndi.DataSourceFactory" maxWait="5000"
    6.         maxActive="300" maxIdle="2" username="sa" password="null"
    7.         driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
    8.         url="jdbc:microsoft:sqlserver://127.0.0.1:1433;DatabaseName=shark;SelectMethod=cursor" />
    9.     <Transaction factory="org.objectweb.jotm.UserTransactionFactory"
    10.         jotm.timeout="180" />
    11. </Context>

SharkJSPClient.conf:

 

XaUserTransactionLookupName=java:comp/UserTransaction

DatabaseManager.defaults.XATransactionManagerLookupName=java:comp/UserTransaction
DatabaseManager.DB.sharkdb.Connection.DataSourceName="java:comp/env/sharkdb"
SharkTxSynchronizationFactory.XATransactionManagerLookupName=java:comp/UserTransaction

 

carol.properties(这个太长只列我修改的部分)

carol.protocols.default=jrmp

# start or not all non started name services
carol.start.ns=false

# use carol rmi (Multi PRODelegate)
carol.start.rmi=true

# use carol naming (Multi JNDI)
carol.start.jndi=false

# local call optimization for jrmp
carol.jvm.rmi.local.call=true

......

carol.jndi.java.naming.factory.url.pkgs=org.apache.naming

 

各部分修改的意义请自已查阅JOTM相关资料

 

转载请注明出处(Cooper的专栏    http://blog.youkuaiyun.com/cooper_lyt

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值