`
guofengcn
  • 浏览: 51033 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

集成Seam,Spring和jBPM指南(转)

    博客分类:
  • java
阅读更多
    这篇指南描述了一种为了使Spring和jBPM(当然还有Seam)能使用同一个Hibernate SessionFactory而将Seam,Spring和jBPM集成的方法。
    首先您要确保使用的是2.1.0版本的Seam,因为2.0.1版本的Seam和SpringTransaction会有些麻烦。

相关的配置部分如下:
1.在你的Spring bean配置中,像平常一样定义你的Hibernate SessionFactory并且设置如下这些属性
<bean id="hibernateSessionFactory" class="">

        <!-- The hibernate properties  -->
        <property name="hibernateProperties">
                <props>                                

                        <prop key="hibernate.hbm2ddl.auto">update</prop>
                        <!-- set to create-drop to NOT maintain state between two executions of the app -->
                        
                        <prop key="hibernate.transaction.flush_before_completion">
                                        true
                        </prop>
                        <prop key="hibernate.connection.release_mode">
                                        after_transaction
                        </prop>

                </props>
        </property>

<!-- this property must be set to false so we can use independent sessions -->
        <property name="useTransactionAwareDataSource">
                <value>false</value>
        </property>

        <property name="mappingResources">
                <list>

                <!-- here you have to list all the *hbm.xml files for jBPM -->
                <!-- see the default hibernate.cfg.xml file from jBPM -->



</bean>


2.为了集成Seam和Spring,我们需要两个bean
<bean id="sessionFactory"
                class="org.jboss.seam.ioc.spring.SeamManagedSessionFactoryBean">
                <property name="sessionName" value="hibernateSession" />
</bean>        
<bean id="localTransactionManager"
                class="org.springframework.orm.hibernate3.HibernateTransactionManager">
                <property name="sessionFactory" ref="hibernateSessionFactory" />
</bean>


以上就是针对Spring的配置
现在我们需要配置components.xml文件
<!-- use the power of Spring transactions -->
<spring:spring-transaction platform-transaction-manager-name="localTransactionManager"/>
          
<persistence:managed-hibernate-session name="hibernateSession" auto-create="true"
        session-factory="#{hibernateSessionFactory}"/>         
   
<component class="org.jboss.seam.bpm.Jbpm">
        <property name="processDefinitions">processdefinition.jpdl.xml</property>
</component>


为了在jBPM中使用hibernateSession,我从jBPM中扩展了一个子类DbPersistenceService:
package your.namespace.jbpm.integration;

import org.hibernate.Session;
import org.hibernate.SessionFactory;

import org.jboss.seam.Component;
import org.jboss.seam.contexts.Contexts;

import org.jbpm.svc.Service;

/**
 * @author Frank Bitzer
 * 
 * EL4J - The Extension Library for Java.
 *
 */
public class DbPersistenceServiceFactory extends
                org.jbpm.persistence.db.DbPersistenceServiceFactory {

        private static final long serialVersionUID = 997L;

        
        SessionFactory sessionFactory;
        
        /**
         * {@inheritDoc}
         */
        public Service openService() {
            
                //create instance of own service implementation
            return new your.namespace.jbpm.integration.DbPersistenceService(this);
          }
                
        /**
         * Retrieve Hibernate sessionFactory
         */
        @Override
        public synchronized SessionFactory getSessionFactory() {
           
                if (sessionFactory==null) {
                
                         if(Contexts.isApplicationContextActive()){
                                 
                                 //access seam component holding session
                                 Session session = (Session)
                                         Component.getInstance("hibernateSession");
                                
                                 //and extract sessionFactory
                                sessionFactory = session.getSessionFactory();
                                
                         }
                        
            }
            
            return sessionFactory;
        }
        
        /**
         * Set sessionFactory
         */
        @Override
        public void setSessionFactory(SessionFactory sessionFactory) {
            this.sessionFactory = sessionFactory;
          }
                
}

package your.namespace.jbpm.integration;

import org.hibernate.Session;
import org.jbpm.JbpmContext;
import org.jbpm.persistence.db.DbPersistenceServiceFactory;
import org.jbpm.svc.Services;
import org.springframework.orm.hibernate3.SessionFactoryUtils;

/**
 * @author Frank Bitzer
 * 
 * EL4J - The Extension Library for Java.
 *
 */
public class DbPersistenceService extends
                org.jbpm.persistence.db.DbPersistenceService {

        private static final long serialVersionUID = 996L;

        public DbPersistenceService(
                        DbPersistenceServiceFactory persistenceServiceFactory) {
                this(persistenceServiceFactory, getCurrentServices());
        }

        static Services getCurrentServices() {
                Services services = null;
                JbpmContext currentJbpmContext = JbpmContext.getCurrentJbpmContext();
                if (currentJbpmContext != null) {
                        services = currentJbpmContext.getServices();
                }
                return services;
        }

        DbPersistenceService(DbPersistenceServiceFactory persistenceServiceFactory,
                        Services services) {

                super(persistenceServiceFactory);

                this.persistenceServiceFactory = persistenceServiceFactory;
                this.isTransactionEnabled = persistenceServiceFactory
                                .isTransactionEnabled();
                this.isCurrentSessionEnabled = persistenceServiceFactory
                                .isCurrentSessionEnabled();
                this.services = services;

        }
        
        /**
         * Use Hibernate sessionFactory to retrieve a Session instance.
         */
        public Session getSession() {

                if ((session == null) && (getSessionFactory() != null)) {

                        session = getSessionFactory().openSession();

                        mustSessionBeClosed = true;
                        mustSessionBeFlushed = true;
                        mustConnectionBeClosed = false;

                        isTransactionEnabled = !SessionFactoryUtils.isSessionTransactional(
                                        session, getSessionFactory());

                        if (isTransactionEnabled) {

                                beginTransaction();
                        }

                }
                return session;
        }

}      


为了结束工作,只需要像下面一样简单的在jbpm.cfg.xml中使用刚刚定义的DbPersistenceService

<jbpm-context>
    <service name="persistence">
                <factory>
                        <bean class="your.namespace.jbpm.integration.DbPersistenceServiceFactory">
                                <field name="isTransactionEnabled">
                                    <false/>
                                </field>
                        </bean>
                </factory>
        </service>
</jbpm-context>


同时,要保证你的Spring WebApplicationContext初始化要在seam启动之前,这个可以通过在你的web.xml中Spring的Listener方在org.jboss.seam.servlet.SeamListener之前来实现。
分享到:
评论

相关推荐

    droolsjbpm-integration, Drools和jBPM与 seam,spring,camel的集成. ..zip

    droolsjbpm-integration, Drools和jBPM与 seam,spring,camel的集成. . 开发口水和 jBPM如果你想要构建或者贡献到一个项目,则阅读这里文档 。 我们将通过正确设置开发环境来节省你和我们大量的时间。 它解决了所有...

    seam+spring+hibernate+richfaces配置

    Seam、Spring、Hibernate和RichFaces是Java Web开发中的四大框架,它们的集成可以构建功能强大的企业级应用程序。本文将详细解析这四个组件的核心概念、它们如何协同工作以及配置过程。 **Seam框架** Seam是一款...

    Seam JBPM Eclipse工程例子

    这个例子对于学习如何在Java EE环境中集成和使用Seam、JBPM、EJB和JSF非常有价值。它展示了如何在Eclipse中配置和管理这样的项目,以及如何利用这些技术来创建一个完整的、带有工作流程管理功能的应用程序。通过这个...

    SEAM 中文开发指南

    - **工作原理**:这个示例演示了如何利用 SEAM 和 jBPM 来实现工作流集成,具体包括任务的分配、跟踪和完成等。 ##### 1.5 SEAM 页面流:猜数字游戏示例 - **代码分析**: - 通过 SEAM 的页面流功能实现简单的猜...

    《SeamInAction》+《JbossSeam》+《官方中文指南》

    Seam是一个全面的Java开发框架,专...总之,拥有《Seam In Action》、《JBoss Seam》和《官方中文指南》这些资源,开发者可以系统地学习和精通Seam框架,从而在企业级Java应用开发中游刃有余,提高开发效率和应用质量。

    jboss seam 教程

    - **工作原理**:通过Seam与jBPM的集成,实现了业务流程与Web界面的紧密结合。 ##### 2.4 Seam页面流:猜数字游戏 - **理解代码**:解释了一个使用Seam页面流技术实现的简单猜数字游戏。 - **工作原理**:页面流是...

    JbossSeam中文开发指南.docx

    Jboss Seam中文开发指南 Jboss Seam是基于Java EE 5.0的框架,提供了一个基于组件的架构,能够帮助开发者快速构建企业级应用程序。Seam框架提供了一个统一的编程模型,能够将JSF、EJB、JPA等技术整合在一起,提供了...

    jbpm简介\jbpm简介

    4. **支持多种流程定义语言**:除了默认支持的jPDL、WS-BPEL和Seam框架的Pageflow外,jBPM还计划支持更多流程定义语言,以适应不同的业务场景需求。 5. **严格的流程版本控制**:jBPM提供了严格的版本控制机制,...

    jbpm7示例(jbpm-7.3.0.Final-examples)

    与Seam,Spring,OSGi等集成 BPM通过以业务用户和开发人员喜欢的方式提供流程管理功能和工具,从而实现业务分析师,开发人员和最终用户之间的桥梁。域特定的节点可以插入调色板,使业务用户更容易理解这些过程。 ...

    jboss seam

    这是中文手册,Seam为持久化集成了JPA和Hibernate 3,为轻量化的异步性集成了EJB Timer Service和Quartz,为工作流集成了jBPM,为业务规则集成了JBoss规则,为电子邮件集成了Meldware Mail,为完整的文本搜索集成了...

    seam2.1说明文档

    为了帮助开发人员快速上手,Seam 2.1 提供了一系列的工具和指南,包括使用 seam-gen 快速生成项目模板的方法。 - **Setting up an Eclipse project**:指导如何在 Eclipse IDE 中设置 Seam 2.1 的开发环境。 - **...

    jboss seam 学习资料,seam in action和官方手册

    3. **JSF集成指南**:深入理解Seam与JSF的交互,包括Facelets模板和Seam组件的使用。 4. **EJB和CDI集成**:讲解Seam如何与Enterprise JavaBeans和Contexts and Dependency Injection (CDI)框架协作。 5. **持久化...

    seam的使用说明文档

    除了以上示例外,Seam框架还提供了详细的指南来帮助开发者快速搭建开发环境,并介绍了一系列实用的工具和技术,如seam-gen等。 - **Seam-gen**:Seam-gen是一个基于Maven的工具,可以帮助开发者自动生成项目骨架、...

    jboss seam 2.01GA REF DOC

    - **Seam 和 jBPM 集成**:通过将 Seam 组件与 jBPM 流程引擎相结合,实现业务流程的自动化。 - **任务管理**:Seam 负责用户界面和交互逻辑,jBPM 负责处理任务的执行流程。 **1.4.2 工作原理** - **流程定义**:...

    Jboss Seam中文版

    结合了Seam和jBPM(Java Business Process Management),实现了一个待办事项管理应用,展示了如何集成工作流引擎。 1. **代码理解**:重点介绍了如何定义业务流程,并将其与Seam组件关联起来。 2. **工作原理**:...

    Seam框架文档简述

    除了JBPM(一个用于业务流程管理的工具)之外,Seam还支持与其他常用的工具和组件如Spring、邮件发送、权限管理等进行集成,从而增强应用的功能。 #### 三、Seam框架的功能与特点 ##### 1. 一站式(FullStack)的...

    Seam_2.0_Reference_zh_CN

    Seam 2.0 是一个全面的Java EE框架,它为开发人员提供了一种整合多种技术,如JavaServer Faces (JSF)、Enterprise JavaBeans (EJB)、Java Persistence API (JPA)以及Spring等的强大工具。这个"Seam_2.0_Reference_zh...

    Practical_JBoss_Seam书的源代码

    Seam集成了Spring Security(原Acegi)和其他安全组件,提供了一套完整的安全解决方案。 5. **rich-client**:这部分可能涉及Seam与富客户端界面(Rich Client Interface, RCI)的集成,如使用RichFaces库来增强JSF...

Global site tag (gtag.js) - Google Analytics