收藏 分销(赏)

sshjbpm整合.doc

上传人:xrp****65 文档编号:7689044 上传时间:2025-01-12 格式:DOC 页数:19 大小:49KB 下载积分:10 金币
下载 相关 举报
sshjbpm整合.doc_第1页
第1页 / 共19页
sshjbpm整合.doc_第2页
第2页 / 共19页


点击查看更多>>
资源描述
简述 Jbpm工作流框架与现有ssh框架的集成工作其实很简单,但国内外的资料太小,所以会在集成时走入太多误区,本文是在struts1.2,spring2.5,hibernate3.2上集成成功的详细步骤。其中解决了,jbpm的访问数据库session与原有hibernate的session不同的问题,string-max大字段问题。完成了流程部署web及后台程序。利用spring-modules-0.8当中的spring31做为集成的桥梁(其实它已经做好了集成,但文档和实例实在是太简单)。 使用jbpm-starters-kit-3.1.4生成数据库表及安装eclipse图形化配置插件 1下载jbpm-starters-kit-3.1.4到其网站,包含所有需要的工具及jar包。 2数据库的安装以oracle为例,其它数据库可按此例修改。 2.1创建所需用户及表空间,如果有了用户和表空间就不需要了。 2.2 找到jbpm-starters-kit-3.1.4文件夹,在其下的jbpm文件夹的下级文件夹lib中加入oracle的驱动包ojdbc14.jar. 2.3 在jbpm\src\resources文件夹下建立oracle文件夹, 将\jbpm\src\resources\hsqldb里的create.db.hibernate.properties和identity.db.xml文件copy到刚刚建立的oracle文件夹当中. 2.4 修改create.db.hibernate.properties文件,修改目标数据库的连接属性如下: # these properties are used by the build script to create # a hypersonic database in the build/db directory that contains # the jbpm tables and a process deployed in there hibernate.dialect=org.hibernate.dialect.OracleDialect hibernate.connection.driver_class=oracle.jdbc.driver.OracleDriver hibernate.connection.url=jdbc:oracle:thin:@10.62.1.12:1521:oracle hibernate.connection.username=dpf hibernate.connection.password=dpf hibernate.show_sql=true hibernate.cache.provider_class=org.hibernate.cache.HashtableCacheProvider 2.5 修改jbpm\src\config.files\hibernate.cfg.xml文件,同样是配置数据库的连接属性如下:     <!-- jdbc connection properties -->     <property name="hibernate.dialect">org.hibernate.dialect.OracleDialect</property>     <property name="hibernate.connection.driver_class">oracle.jdbc.driver.OracleDriver</property>     <property name="hibernate.connection.url">jdbc:oracle:thin:@10.62.1.12:1521:oracle</property>     <property name="hibernate.connection.username">dpf</property>     <property name="hibernate.connection.password">dpf</property> <property name="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</property> 2.6 修改jbpm\build.deploy.xml文件.找到create.db项并进行如下修改:   <!-- ============== -->   <!-- === SERVER === -->   <!-- ============== -->   <target name="create.db" depends="declare.jbpm.tasks, db.clean, db.start" description="creates a hypersonic database with the jbpm tables and loads the processes in there">     <jbpmschema actions="create"                 cfg="${basedir}/src/config.files/hibernate.cfg.xml"                 properties="${basedir}/src/resources/oracle/create.db.hibernate.properties"/>     <loadidentities file="${basedir}/src/resources/oracle/identity.db.xml"                 cfg="${basedir}/src/config.files/hibernate.cfg.xml"                 properties="${basedir}/src/resources/oracle/create.db.hibernate.properties"/>     <ant antfile="build.xml" target="build.processes" inheritall="false" />     <deployprocess cfg="${basedir}/src/config.files/hibernate.cfg.xml"                    properties="${basedir}/src/resources/oracle/create.db.hibernate.properties">       <fileset dir="build" includes="*.process" />     </deployprocess>     <antcall target="db.stop" />   </target> 2.7 配置ant,在jbpm目录执行 ant create.db –buildfile build.deploy.xml命令。 会有一些小错误的提示,没有关系数据库的表已经建立完成。 2.8 eclipse的图形化配置插件安装文件可以到jbpm-starters-kit-3.1.4\jbpm-designer\ jbpm-gpd-feature\eclipse下找到,需注意版本。 部署jbpm的jar包和moudle的jar包 1 把如下jar包放入\WEB-INF\lib文件夹下, spring-modules-jbpm31.jar可以在 spring-modules-0.8下找到,其它的都属于jbpm工具包。 bsh-1.3.0.jar bsf.jar spring-modules-jbpm31.jar jbpm-webapp-3.1.4.jar jbpm-identity-3.1.4.jar jbpm-3.1.4.jar 部署hbm文件到项目 1 在jbpm文件夹中找到所有的*.hbm.xml数据库映射文件。放到项目的一个文件夹当中。本例放到\com\gresoft\security\model\hbm文件夹中。并且在hibernate的sessionfactory建立时,设置为相关路径配置。 2 此文件需在spring管理的hibernate配置文件下修改,本例为 dataAccessContext-hibernate.xml,如下: <!--Hibernate SessionFatory-->     <bean id="sessionFactory"        class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">        <property name="dataSource" ref="dataSource" />        <property name="annotatedClasses">            <list>            </list>        </property>        <property name="hibernateProperties">            <props>               <prop key="hibernate.dialect">                   org.hibernate.dialect.Oracle9Dialect               </prop>               <prop key="hibernate.show_sql">true</prop>               <prop key="hibernate.cache.provider_class">                   org.hibernate.cache.EhCacheProvider               </prop>               <prop key="hibernate.cache.use_query_cache">true</prop>            </props>        </property>               <property name="typeDefinitions">        <ref bean="jbpmTypes" />        </property>         <property name="mappingDirectoryLocations">            <list>               <value>                   classpath*:/com/gresoft/security/model/hbm/               </value>                        </list>        </property>     </bean> 设置大字段string-max 1 此文件需在spring管理的hibernate配置文件下修改,本例为 dataAccessContext-hibernate.xml,如下: <!-- 处理大字段 -->     <bean id="jbpmTypes" class="org.springframework.orm.hibernate3.TypeDefinitionBean">        <property name="typeName" value="string_max" />        <property name="typeClass" value="org.jbpm.db.hibernate.StringMax" />     </bean> 配置configration、template 说明: jbpmConfiguration是根据springmodules所提供的 LocalJbpmConfigurationFactoryBean进行配置,其集成好对jbpmConfiguration的管理。在系统使用时JbpmConfiguration需调用jbpmTemplate的jbpmTemplate.getJbpmConfiguration()方法得到。 1 此文件需在spring管理的hibernate配置文件下修改,本例为 dataAccessContext-hibernate.xml,如下: <!-- jBPM configuration-->      <bean id="jbpmConfiguration" class="org.springmodules.workflow.jbpm31.LocalJbpmConfigurationFactoryBean">          <property name="sessionFactory" ref="sessionFactory" />          <property name="configuration" value="classpath:/datasql/jbpm.cfg.xml" />      </bean>          <!-- jBPM template -->      <bean id="jbpmTemplate" class="org.springmodules.workflow.jbpm31.JbpmTemplate">          <constructor-arg index="0" ref="jbpmConfiguration" />   </bean>  2 增加类路径中jbpm.cfg.xml文件,可以根据 jbpm-starters-kit-3.1.4\jbpm\src\java.jbpm\org\jbpm\default.jbpm.cfg.xml 复制后修改。本例放到/datasql/jbpm.cfg.xml下。上面配置文件有相关配置。全部内容如下: <jbpm-configuration> <!— - 增加如下内容 - à   <jbpm-context>     <service name="persistence">              <factory>                  <bean class="org.jbpm.persistence.db.DbPersistenceServiceFactory">                      <field name="isTransactionEnabled">                          <false />                      </field>                      <field name="isCurrentSessionEnabled">                         <true />                        </field>                  </bean>              </factory>          </service>      <service name="message" factory="org.jbpm.msg.db.DbMessageServiceFactory" />     <service name="scheduler" factory="org.jbpm.scheduler.db.DbSchedulerServiceFactory" />     <service name="logging" factory="org.jbpm.logging.db.DbLoggingServiceFactory" />     <service name="authentication" factory="org.jbpm.security.authentication.DefaultAuthenticationServiceFactory" />   </jbpm-context>   <!-- configuration resource files pointing to default configuration files in jbpm-{version}.jar --> <!-- 不再使用<string name="resource.hibernate.cfg.xml" value="hibernate.cfg.xml" />-->    <string name="resource.business.calendar" value="org/jbpm/calendar/jbpm.business.calendar.properties" />   <string name="resource.default.modules" value="org/jbpm/graph/def/jbpm.default.modules.properties" />   <string name="resource.converter" value="org/jbpm/db/hibernate/jbpm.converter.properties" />   <string name="resource.action.types" value="org/jbpm/graph/action/action.types.xml" />   <string name="resource.node.types" value="org/jbpm/graph/node/node.types.xml" />   <string name="resource.parsers" value="org/jbpm/jpdl/par/jbpm.parsers.xml" />   <string name="resource.varmapping" value="org/jbpm/context/exe/jbpm.varmapping.xml" />   <long   name="jbpm.msg.wait.timout" value="5000" singleton="true" />   <int    name="jbpm.byte.block.size" value="1024" singleton="true" />   <string name="mail.smtp.host" value="localhost" />   <bean   name="jbpm.task.instance.factory" class="org.jbpm.taskmgmt.impl.DefaultTaskInstanceFactoryImpl" singleton="true" />   <bean   name="jbpm.variable.resolver" class="org.jbpm.jpdl.el.impl.JbpmVariableResolver" singleton="true" />   <bean   name="jbpm.mail.address.resolver" class="org.jbpm.identity.mail.IdentityAddressResolver" singleton="true" /> </jbpm-configuration> 过滤器的设置与建立 过滤器的建立是为了保证一个session的正常工作。 1 web.xml中的修改 本例中描述如下:     <!-- 注入jbpm过滤器,使用统一的Session -->     <filter>     <filter-name>JbpmContextFilter</filter-name>      <filter-class>ponents.jbpm.JbpmContextHolder</filter-class>     </filter> 2建立对应的类文件 本例中描述如下: package ponents.jbpm; import java.io.IOException; import java.io.Serializable; import java.security.Principal; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import org.jbpm.JbpmConfiguration; import org.jbpm.JbpmContext; import org.springframework.web.context.WebApplicationContext; public class JbpmContextHolder implements Filter, Serializable {          private static final long serialVersionUID = 1L;          String jbpmConfigurationResource = null;          String jbpmContextName = null;          boolean isAuthenticationEnabled = true;          public void init(FilterConfig filterConfig) throws ServletException {                    // get the jbpm configuration resource                    this.jbpmConfigurationResource = filterConfig                                      .getInitParameter("jbpm.configuration.resource");                    // get the jbpm context to be used from the jbpm configuration                    this.jbpmContextName = filterConfig                                      .getInitParameter("jbpm.context.name");                    if (jbpmContextName == null) {                             jbpmContextName = JbpmContext.DEFAULT_JBPM_CONTEXT_NAME;                    }                    // see if authentication is turned off                    String isAuthenticationEnabledText = filterConfig                                      .getInitParameter("authentication");                    if ((isAuthenticationEnabledText != null)                                      && ("disabled".equalsIgnoreCase(isAuthenticationEnabledText))) {                             isAuthenticationEnabled = false;                    }          }          public void doFilter(ServletRequest servletRequest,                             ServletResponse servletResponse, FilterChain filterChain)                             throws IOException, ServletException {                    String actorId = null;                    // see if we can get the authenticated swimlaneActorId                    if (servletRequest instanceof HttpServletRequest) {                             HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;                             Principal userPrincipal = httpServletRequest.getUserPrincipal();                             if (userPrincipal != null) {                                      actorId = userPrincipal.getName();                             }                    }                    JbpmContext jbpmContext = getJbpmConfiguration(servletRequest)                                      .createJbpmContext(jbpmContextName);                    try {                             if (isAuthenticationEnabled) {                                      jbpmContext.setActorId(actorId);                             }                             filterChain.doFilter(servletRequest, servletResponse);                    } finally {                             jbpmContext.close();                    }          }          /*           * 从spring获取JbpmConfiguration的bean加载方式           */          protected JbpmConfiguration getJbpmConfiguration(                             ServletRequest servletRequest) {                    WebApplicationContext webApplicationContext = (WebApplicationContext) ((HttpServletRequest) servletRequest)                                      .getSession()                                      .getServletContext()                                      .getAttribute(                                                         WebApplicationContext.ROOT_WEB_APPLICATION_CONTEXT_ATTRIBUTE);                    JbpmConfiguration jbpmConfiguration = (JbpmConfiguration) webApplicationContext                                      .getBean("jbpmConfiguration"); // 得到业务Bean(在这里是你需要注入的bean)                    System.out.println("------------------------------------------------------------------------------------------");                    System.out.println("jbpmconfiguration对象化=" + jbpmConfiguration.toString());                    System.out.println("------------------------------------------------------------------------------------------");                    return jbpmConfiguration;          }                   public void destroy() {          } } 编写发布流程定义xml的人机页面及程序 1  JSP页面使用struts1.2,spring2.0,hibernate3.2框架。此为流程发布页面。 <%@ page contentType="text/html;charset=UTF-8"%> <html> <head> </head> <body> <form action="项目名/jbpmtest.do?method=deploy" name="formupload" method="post" enctype="multipart/form-data">        请选择要发布的流程文件<input name="workflowfile" type="file" id="workflowfile" >         <input type="submit" name="submit"> </form> </body> </html> 2 后台对应类 /******************************************************************************* * 文件名: JbpmAction.java<br> * 版本: <br> * 描述:  <br> * 版权所有: <br> * //////////////////////////////////////////////////////// <br> * 创建者: 沙振中 <br> * 创建日期: Dec 27, 2007 <br> * 修改者:  <br> * 修改日期:  <br> * 修改说明:  <br> ********************************************************************
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 教育专区 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2026 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服