转载请注明出处(Cooper的专栏 http://blog.youkuaiyun.com/cooper_lyt)
- Shark的初始化:
shark的初始化很简单:只要调用Shark.configure(......)就可以了,参数可以是文件或者属性或流,参照Demo很快就能搞定,网上关于这部分的文章也有不少,可以找来看一下。不过需要注意的是:如果使用Shark2.0以上也就是TWS的话那么在初始化之前一定要先开启一个事务,初始化结束后提交这个事务,如DEMO中的:
- JSPClientUtilities.initProperties(getServletContext().getRealPath("/"));
- UserTransaction ut = null;
- try {
- ut = JSPClientUtilities.getUserTransaction();
- ut.begin();
- JSPClientUtilities.init();
- ut.commit();
- } catch (Exception ex) {
- try {
- if (ut.getStatus() != Status.STATUS_NO_TRANSACTION) {
- ut.rollback();
- }
- } catch (Exception _) {
- }
- throw ex;
- }
Shark的Demo中的初始化是写到了Index页中去了,但在实际的项目中是不可以这样的,因为总不能每次有人访问index页就要初始化Shark,虽然有是否已经初始化的判断,但是如果初始化过始有错误,或用户直接访问功能页都会出现问题,而且初始化的过程需要一段时间的等待。那有没有在Tomcat启动和项目部署时就启动Shark的办法。答案就是 监听器 tomcat的监听器有两种类型的,而ServletContextListener 监听器正好符合我们的要求,用法也很简单,下面贴代码。
实现一个ServletContextListener(SharkAdapter 是我自已写的一个类,代码中所用的两个方法,同Shark的Demo中的相似):
如果是Shark1.1就是这样的:
- package com.dgsoft.fc.biz.impl;
- import javax.servlet.ServletContextEvent;
- import javax.servlet.ServletContextListener;
- import com.dgsoft.shark.webAdapter.SharkAdapter;
- public class WorkFlowEngineInitListener implements ServletContextListener {
- public void contextDestroyed(ServletContextEvent arg0) {
- }
- public void contextInitialized(ServletContextEvent arg0) {
- try {
- SharkAdapter.initProperties(arg0.getServletContext().getRealPath(
- "/"));
- SharkAdapter.init();
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
- }
Shark2.0需要开启一个事务是要修改一下的
- package com.dgsoft.fc.biz.impl;
- import javax.servlet.ServletContextEvent;
- import javax.servlet.ServletContextListener;
- import javax.transaction.Status;
- import javax.transaction.UserTransaction;
- import com.dgsoft.shark.webAdapter.SharkAdapter;
- public class WorkFlowEngineInitListener implements ServletContextListener {
- public void contextDestroyed(ServletContextEvent arg0) {
- }
- public void contextInitialized(ServletContextEvent arg0) {
- UserTransaction ut = null;
- try {
- SharkAdapter.initProperties(arg0.getServletContext().getRealPath(
- "/"));
- ut = SharkAdapter.getUserTransaction();
- ut.begin();
- SharkAdapter.init();
- ut.commit();
- } catch (Exception ex) {
- try {
- if (ut.getStatus() != Status.STATUS_NO_TRANSACTION) {
- ut.rollback();
- }
- } catch (Exception _) {
- }
- ex.printStackTrace();
- }
- }
- }
在web.xml中注册监听器(注意监听器的顺序,应该在Spring等监听器之前,不然Spring在建立bean时如果用到了Shark的方法,而Shark还没有初始化,那么会出错的)
- <listener>
- <listener-class>
- com.dgsoft.fc.biz.impl.WorkFlowEngineInitListener
- </listener-class>
- </listener>
OK 现在Shark的初始化就完成了。