JAVA项目开发笔记(3)Shark部分:初始化Shark

 

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

  • Shark的初始化:

        shark的初始化很简单:只要调用Shark.configure(......)就可以了,参数可以是文件或者属性或流,参照Demo很快就能搞定,网上关于这部分的文章也有不少,可以找来看一下。不过需要注意的是:如果使用Shark2.0以上也就是TWS的话那么在初始化之前一定要先开启一个事务,初始化结束后提交这个事务,如DEMO中的:

  1. JSPClientUtilities.initProperties(getServletContext().getRealPath("/"));
  2.          UserTransaction ut = null;
  3.          try {
  4.             ut = JSPClientUtilities.getUserTransaction();
  5.             ut.begin();
  6.             JSPClientUtilities.init();
  7.             ut.commit();
  8.          } catch (Exception ex) {
  9.             try {
  10.                if (ut.getStatus() != Status.STATUS_NO_TRANSACTION) {
  11.                   ut.rollback();
  12.                }
  13.             } catch (Exception _) {
  14.             }
  15.             throw ex;
  16.          }

Shark的Demo中的初始化是写到了Index页中去了,但在实际的项目中是不可以这样的,因为总不能每次有人访问index页就要初始化Shark,虽然有是否已经初始化的判断,但是如果初始化过始有错误,或用户直接访问功能页都会出现问题,而且初始化的过程需要一段时间的等待。那有没有在Tomcat启动和项目部署时就启动Shark的办法。答案就是 监听器 tomcat的监听器有两种类型的,而ServletContextListener 监听器正好符合我们的要求,用法也很简单,下面贴代码。

 

实现一个ServletContextListener(SharkAdapter 是我自已写的一个类,代码中所用的两个方法,同Shark的Demo中的相似):

如果是Shark1.1就是这样的:

  1. package com.dgsoft.fc.biz.impl;
  2. import javax.servlet.ServletContextEvent;
  3. import javax.servlet.ServletContextListener;
  4. import com.dgsoft.shark.webAdapter.SharkAdapter;
  5. public class WorkFlowEngineInitListener implements ServletContextListener {
  6.     public void contextDestroyed(ServletContextEvent arg0) {
  7.     }
  8.     public void contextInitialized(ServletContextEvent arg0) {
  9.         try {
  10.             SharkAdapter.initProperties(arg0.getServletContext().getRealPath(
  11.                     "/"));
  12.             SharkAdapter.init();
  13.         } catch (Exception e) {
  14.             e.printStackTrace();
  15.         }
  16.     }
  17. }

Shark2.0需要开启一个事务是要修改一下的

 

  1. package com.dgsoft.fc.biz.impl;
  2. import javax.servlet.ServletContextEvent;
  3. import javax.servlet.ServletContextListener;
  4. import javax.transaction.Status;
  5. import javax.transaction.UserTransaction;
  6. import com.dgsoft.shark.webAdapter.SharkAdapter;
  7. public class WorkFlowEngineInitListener implements ServletContextListener {
  8.     public void contextDestroyed(ServletContextEvent arg0) {
  9.     }
  10.     public void contextInitialized(ServletContextEvent arg0) {
  11.         UserTransaction ut  = null;
  12.         try {
  13.             SharkAdapter.initProperties(arg0.getServletContext().getRealPath(
  14.                     "/"));
  15.             ut = SharkAdapter.getUserTransaction();
  16.             ut.begin();
  17.             SharkAdapter.init();
  18.             ut.commit();
  19.         } catch (Exception ex) {
  20.             try {
  21.                 if (ut.getStatus() != Status.STATUS_NO_TRANSACTION) {
  22.                     ut.rollback();
  23.                 }
  24.             } catch (Exception _) {
  25.             }
  26.             ex.printStackTrace();
  27.         }
  28.     }
  29. }

在web.xml中注册监听器(注意监听器的顺序,应该在Spring等监听器之前,不然Spring在建立bean时如果用到了Shark的方法,而Shark还没有初始化,那么会出错的)

  1.     <listener>
  2.         <listener-class>
  3.             com.dgsoft.fc.biz.impl.WorkFlowEngineInitListener
  4.         </listener-class>
  5.     </listener>

OK 现在Shark的初始化就完成了。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值