- 浏览: 168000 次
- 性别:
- 来自: 深圳
文章分类
最新评论
-
mythet:
上面的配置有问题,测试半天都访问不了,原因是web.xml缺少 ...
lucene solr配置,集成到struts中 -
graduate2011:
楼主你好,想问一下你编译tomcat源码是不是用ant?编译好 ...
tomcat WebappClassLoader 加密class文件
1.先修改jbpm-human-task/src/man/resources/META-INF/persistence.xml文件,将其修改成要链接的数据库,内容如下:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<persistence version="1.0"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd
http://java.sun.com/xml/ns/persistence/orm http://java.sun.com/xml/ns/persistence/orm_1_0.xsd"
xmlns:orm="http://java.sun.com/xml/ns/persistence/orm" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/persistence">
<persistence-unit name="org.jbpm.task">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<class>org.jbpm.task.Attachment</class>
<class>org.jbpm.task.Content</class>
<class>org.jbpm.task.BooleanExpression</class>
<class>org.jbpm.task.Comment</class>
<class>org.jbpm.task.Deadline</class>
<class>org.jbpm.task.Comment</class>
<class>org.jbpm.task.Deadline</class>
<class>org.jbpm.task.Delegation</class>
<class>org.jbpm.task.Escalation</class>
<class>org.jbpm.task.Group</class>
<class>org.jbpm.task.I18NText</class>
<class>org.jbpm.task.Notification</class>
<class>org.jbpm.task.EmailNotification</class>
<class>org.jbpm.task.EmailNotificationHeader</class>
<class>org.jbpm.task.PeopleAssignments</class>
<class>org.jbpm.task.Reassignment</class>
<class>org.jbpm.task.Status</class>
<class>org.jbpm.task.Task</class>
<class>org.jbpm.task.TaskData</class>
<class>org.jbpm.task.SubTasksStrategy</class>
<class>org.jbpm.task.OnParentAbortAllSubTasksEndStrategy</class>
<class>org.jbpm.task.OnAllSubTasksEndParentEndStrategy</class>
<class>org.jbpm.task.User</class>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.OracleDialect" />
<property name="hibernate.connection.driver_class" value="oracle.jdbc.driver.OracleDriver" />
<property name="hibernate.connection.url" value="jdbc:oracle:thin:@192.168.1.101:1521:XE" />
<property name="hibernate.connection.username" value="kevin" />
<property name="hibernate.connection.password" value="asdfff" />
<property name="hibernate.connection.autocommit" value="false" />
<property name="hibernate.max_fetch_depth" value="3" />
<property name="hibernate.show_sql" value="true" />
</properties>
</persistence-unit>
</persistence>
2.修改完成后可用一个写好的类启动mina,起动mina的类内容如下:
package com.kevin;
import java.io.IOException;
import java.io.Reader;
import java.util.Map;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import org.drools.SystemEventListenerFactory;
import org.jbpm.task.AccessType;
import org.jbpm.task.AllowedToDelegate;
import org.jbpm.task.Attachment;
import org.jbpm.task.BooleanExpression;
import org.jbpm.task.Comment;
import org.jbpm.task.Deadline;
import org.jbpm.task.Deadlines;
import org.jbpm.task.Delegation;
import org.jbpm.task.Escalation;
import org.jbpm.task.Group;
import org.jbpm.task.I18NText;
import org.jbpm.task.Notification;
import org.jbpm.task.OrganizationalEntity;
import org.jbpm.task.PeopleAssignments;
import org.jbpm.task.Reassignment;
import org.jbpm.task.Status;
import org.jbpm.task.Task;
import org.jbpm.task.TaskData;
import org.jbpm.task.User;
import org.jbpm.task.query.TaskSummary;
import org.jbpm.task.service.TaskService;
import org.jbpm.task.service.TaskServiceSession;
import org.jbpm.task.service.mina.MinaTaskServer;
import org.mvel2.MVEL;
import org.mvel2.ParserContext;
import org.mvel2.compiler.ExpressionCompiler;
public class MinaServer {
public static void main(String[] args) {
EntityManagerFactory emf = Persistence
.createEntityManagerFactory("org.jbpm.task");
TaskService taskService = new TaskService(emf,
SystemEventListenerFactory.getSystemEventListener());
TaskServiceSession taskSession = taskService.createSession();
// Add users
// Map vars = new HashMap();
// Reader reader = new InputStreamReader(
// BaseTest.class.getResourceAsStream( "LoadUsers.mvel" ) );
// Map<String, User> users = ( Map<String, User> ) eval( reader, vars );
// for ( User user : users.values() ) {
// taskSession.addUser( user );
// }
// 增加ActionId, by Kevin.
// taskSession.addUser(new User("register"));
// taskSession.addUser(new User("divert"));
// taskSession.addUser(new User("deal"));
// taskSession.addUser(new User("finish"));
//
// reader = new InputStreamReader( BaseTest.class.getResourceAsStream(
// "LoadGroups.mvel" ) );
// Map<String, Group> groups = ( Map<String, Group> ) eval( reader, vars
// );
// for ( Group group : groups.values() ) {
// taskSession.addGroup( group );
// }
// start server
MinaTaskServer server = new MinaTaskServer(taskService);
Thread thread = new Thread(server);
thread.start();
System.out.println("Mina has stated.");
taskSession.dispose();
}
@SuppressWarnings({ "rawtypes" })
public static Object eval(Reader reader, Map vars) {
try {
return eval(toString(reader), vars);
} catch (IOException e) {
throw new RuntimeException("Exception Thrown", e);
}
}
public static String toString(Reader reader) throws IOException {
int charValue = 0;
StringBuffer sb = new StringBuffer(1024);
while ((charValue = reader.read()) != -1) {
// result = result + (char) charValue;
sb.append((char) charValue);
}
return sb.toString();
}
@SuppressWarnings({ "deprecation", "rawtypes" })
public static Object eval(String str, Map vars) {
ExpressionCompiler compiler = new ExpressionCompiler(str.trim());
ParserContext context = new ParserContext();
context.addPackageImport("org.drools.task");
context.addPackageImport("java.util");
context.addImport("AccessType", AccessType.class);
context.addImport("AllowedToDelegate", AllowedToDelegate.class);
context.addImport("Attachment", Attachment.class);
context.addImport("BooleanExpression", BooleanExpression.class);
context.addImport("Comment", Comment.class);
context.addImport("Deadline", Deadline.class);
context.addImport("Deadlines", Deadlines.class);
context.addImport("Delegation", Delegation.class);
context.addImport("Escalation", Escalation.class);
context.addImport("Group", Group.class);
context.addImport("I18NText", I18NText.class);
context.addImport("Notification", Notification.class);
context.addImport("OrganizationalEntity", OrganizationalEntity.class);
context.addImport("PeopleAssignments", PeopleAssignments.class);
context.addImport("Reassignment", Reassignment.class);
context.addImport("Status", Status.class);
context.addImport("Task", Task.class);
context.addImport("TaskData", TaskData.class);
context.addImport("TaskSummary", TaskSummary.class);
context.addImport("User", User.class);
return MVEL.executeExpression(compiler.compile(context), vars);
}
}
3.对spring进行配置,配置文件内容如下:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context"
xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
xmlns:aop="http://www.springframework.org/schema/aop" xmlns:task="http://www.springframework.org/schema/task"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans.xsd
http://www.springframework.org/schema/context
http://www.springframework.org/schema/context/spring-context-3.0.xsd
http://www.springframework.org/schema/jee
http://www.springframework.org/schema/jee/spring-jee-3.0.xsd
http://www.springframework.org/schema/tx
http://www.springframework.org/schema/tx/spring-tx-3.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-3.0.xsd
http://www.springframework.org/schema/task
http://www.springframework.org/schema/task/spring-task-3.0.xsd">
<context:component-scan base-package="*" />
<context:annotation-config />
<aop:aspectj-autoproxy />
<tx:annotation-driven transaction-manager="txManager"
proxy-target-class="true" />
<bean id="txManager"
class="org.springframework.transaction.jta.JtaTransactionManager" />
<jee:jndi-lookup id="datasource" jndi-name="jdbc/mvnstruts2" />
<bean id="sessionFactory"
class="org.springframework.orm.hibernate3.annotation.AnnotationSessionFactoryBean">
<property name="dataSource" ref="datasource" />
<property name="packagesToScan" value="com.kevin.entity" />
</bean>
<bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
<property name="sessionFactory" ref="sessionFactory" />
</bean>
<!-- 启动 Mina 供工作流用. -->
<bean id="myemf"
class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean">
<property name="dataSource" ref="datasource" />
<property name="persistenceUnitName" value="org.jbpm.mvnstruts2" />
<property name="loadTimeWeaver">
<bean
class="org.springframework.instrument.classloading.InstrumentationLoadTimeWeaver" />
</property>
</bean>
<bean
class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor" />
<bean id="minaClient" class="com.kevin.workflow.MinaClient" />
<bean id="taskClient" factory-bean="minaClient" factory-method="getTaskClient" />
<bean id="ksession" class="com.kevin.workflow.Ksession"
init-method="start" />
</beans>
3.1 tomcat中server.xml的context内容如下:
<Context docBase="jbpm_ssh" path="/jbpm_ssh" reloadable="true"
source="org.eclipse.jst.jee.server:jbpm_ssh">
<Resource name="jdbc/mvnstruts2" auth="Container"
type="javax.sql.DataSource" factory="org.objectweb.jotm.datasource.DataSourceFactory"
driverClassName="oracle.jdbc.driver.OracleDriver" username="kevin"
password="asdfff" url="jdbc:oracle:thin:@192.168.1.101:1521:XE" />
<Resource name="UserTransaction" auth="Container"
type="javax.transaction.UserTransaction" />
<Transaction factory="org.objectweb.jotm.UserTransactionFactory"
jotm.timeout="60" />
</Context>
4.spring.xml配置中,Ksession的内容如下:
package com.kevin.workflow;
import java.util.Map;
import javax.persistence.EntityManagerFactory;
import javax.persistence.PersistenceUnit;
import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactory;
import org.drools.builder.KnowledgeBuilder;
import org.drools.builder.KnowledgeBuilderFactory;
import org.drools.builder.ResourceType;
import org.drools.io.ResourceFactory;
import org.drools.logger.KnowledgeRuntimeLogger;
import org.drools.logger.KnowledgeRuntimeLoggerFactory;
import org.drools.persistence.jpa.JPAKnowledgeService;
import org.drools.runtime.Environment;
import org.drools.runtime.EnvironmentName;
import org.drools.runtime.StatefulKnowledgeSession;
import org.drools.runtime.process.ProcessInstance;
import org.jbpm.process.workitem.wsht.WSHumanTaskHandler;
public class Ksession {
private StatefulKnowledgeSession ksession;
private EntityManagerFactory emf;
@PersistenceUnit(name = "org.jbpm.mvnstruts2")
public void setEntityManagerFactory(EntityManagerFactory emf) {
this.emf = emf;
}
public void start() {
KnowledgeBase kbase;
try {
Environment env = KnowledgeBaseFactory.newEnvironment();
env.set(EnvironmentName.ENTITY_MANAGER_FACTORY, emf);
kbase = readKnowledgeBase();
ksession = JPAKnowledgeService.newStatefulKnowledgeSession(kbase,
null, env);
KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory
.newThreadedFileLogger(ksession, "test", 1000);
ksession.getWorkItemManager().registerWorkItemHandler("Human Task",
new WSHumanTaskHandler());
} catch (Exception e) {
e.printStackTrace();
}
}
private KnowledgeBase readKnowledgeBase() throws Exception {
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory
.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newClassPathResource("eventProcess.bpmn"),
ResourceType.BPMN2);
return kbuilder.newKnowledgeBase();
}
public ProcessInstance startProcess(Map<String, Object> parameters) {
ProcessInstance processInstance = ksession.startProcess(
"com.kevin.eventProcess", parameters);
return processInstance;
}
}
5.spring配置中minaclient的内容如下:
package com.kevin.workflow;
import org.drools.SystemEventListenerFactory;
import org.jbpm.task.service.TaskClient;
import org.jbpm.task.service.mina.MinaTaskClientConnector;
import org.jbpm.task.service.mina.MinaTaskClientHandler;
public class MinaClient {
private TaskClient taskClient;
public MinaClient() {
SystemEventListenerFactory
.setSystemEventListener(new SystemEventListener());
taskClient = new TaskClient(new MinaTaskClientConnector(
"MinaConnector", new MinaTaskClientHandler(
SystemEventListenerFactory.getSystemEventListener())));
taskClient.connect("127.0.0.1", 9123);
}
public TaskClient getTaskClient() {
return taskClient;
}
private static class SystemEventListener implements
org.drools.SystemEventListener {
public void debug(String arg0) {
}
public void debug(String arg0, Object arg1) {
}
public void exception(Throwable arg0) {
}
public void exception(String arg0, Throwable arg1) {
}
public void info(String arg0) {
}
public void info(String arg0, Object arg1) {
}
public void warning(String arg0) {
}
public void warning(String arg0, Object arg1) {
}
}
}
6.处理过程可参考jbpm-example中humantask的例子。
相关推荐
Struts、Hibernate、Spring 和 jBPM 是四个在企业级应用开发中广泛使用的开源框架,它们结合在一起可以构建出高效且灵活的智能工作流系统。下面将分别介绍这些技术及其在工作流系统中的作用。 **Struts** Struts 是...
在这个“struts2+spring+hibernate+jbpm工作流实例”中,主要展示了如何利用这些技术实现一个公文审批流转的过程。 首先,Struts2是一个基于MVC设计模式的Web应用框架,它负责处理HTTP请求,并将这些请求映射到相应...
Struts、Hibernate、Spring 和 jBPM 是四个在IT行业中广泛应用的开源框架和技术,它们共同构建了一个智能工作流系统。这个系统集成了多种技术,旨在提供高效、灵活且可扩展的工作流程管理解决方案。 首先,Struts ...
**JBPM**:JBPM是业务流程管理(BPM)和工作流引擎,用于设计、执行和管理业务流程。它可以定义、执行和监控复杂的业务流程,并且与Spring和其他Java框架有很好的集成。在这个实例中,jbpm-demo可能包含了一个具体的...
基于Struts、Spring和Hibernate的集成框架SSH,加上流程管理工具jbpm,构建出的工作流系统是一种高效、灵活的企业级应用解决方案。这种系统主要用于实现业务流程自动化,提升企业的运营效率。 **Struts**:Struts是...
4. **jbpm流程引擎**:jbpm是一款开源的工作流和业务流程管理系统,它可以管理和执行业务流程。在OA办公系统中,jbpm负责定义和执行各种审批流程,如请假申请、报销审批等,使得工作流程自动化。 5. **DWR(Direct ...
而jBPM则是一种灵活的工作流引擎,用于实现复杂多变的业务流程管理。将这三个技术进行整合能够提供一个全面的企业级应用解决方案。 #### 二、Spring框架简介 Spring框架是一个轻量级的Java开发框架,它支持多种...
**jBPM** 是一个开源的工作流和业务流程管理系统,用于处理业务流程自动化。它支持BPMN(Business Process Model and Notation)标准,允许设计、执行和监控业务流程。jBPM可以与Spring、Hibernate等其他框架集成,...
6. **JBPM**:JBPM 是一个业务流程管理(BPM)和工作流引擎,用于设计、执行和管理业务流程。JBPM的配置涉及流程定义文件(.bpmn或.xml)、数据源、事务管理等。 7. **Compass**:Compass 是一个基于Lucene的搜索...
JBPM5工作流引擎 S2SH+JBPM4.4开发工作流的一个完整的请假流程例子。带有文档教程和所有源码+JAR包。在网上找了半天jbpm6\jbpm7的资料,都很少。所以 环境:Myeclipse2015 JDK1.7 mysql 5.0 Struts2+Spring3.1 1...
**Jbpm** 是一个开源的工作流管理系统,它允许开发者定义、执行和监控业务流程。Jbpm提供了一种图形化的方式来设计流程,可以灵活地定义审批流程、任务分配等。在OA系统中,Jbpm可能用于实现如请假申请、报销审批等...
这个项目组合提供了从表现层到数据持久化层的全面解决方案,并通过jbpm5.4来实现流程自动化和工作流管理。 Spring框架是SSH的核心部分,它负责管理应用对象的生命周期和依赖关系,提供了AOP(面向切面编程)和IoC...
包括配置文件(如struts.xml、spring配置文件)、实体类(对应数据库表)、DAO(数据访问对象)、Service(业务逻辑服务)、Action(Struts2的控制器)、流程定义文件(jbpm的工作流定义)、以及视图层的JSP或...
总结来说,"spring4.1.1+jbpm6.4.0+maven"的组合提供了一种高效、灵活且易于管理的方式来开发和部署包含复杂工作流的企业级应用。通过熟练掌握这三个工具的使用,开发者可以构建出强大且易于维护的业务系统。
在这个最新的SSH项目中,结合了Jbpm工作流引擎和FreeMarker模板引擎,使得项目的功能更加强大和完善。 1. **Struts**:Struts 是一个基于MVC设计模式的Web应用框架,主要用于控制应用程序的流程。它通过Action类...
Jbpm 4.4 版本提供了工作流建模、执行、监控和管理的功能,支持BPMN 2.0标准,允许通过图形化界面设计流程。在本项目中,Jbpm 4.4 被整合到Spring框架中,用于实现流程驱动的应用,如审批流程、订单处理等。 **...
本项目是关于"activiti+spring+spring Mvc+mybatis+maven"的整合,旨在创建一个基于Activiti工作流引擎、Spring、Spring MVC、MyBatis以及Maven的开发环境。下面将详细介绍这些技术及其整合过程。 首先,`activiti`...
本文旨在详细介绍如何将JBPM工作流框架与SSH框架进行整合,并通过具体的步骤来解决实际开发过程中可能遇到的问题。 #### 二、SSH框架简介 1. **Spring**:一种轻量级的Java EE应用程序框架,用于简化企业级应用开发...
**标题解析:** "Extjs4.1+jbpm4综合案例视频教程" 指的是一个教学资源,涵盖了使用Extjs 4.1版本(一个JavaScript框架,用于构建富客户端Web应用程序)与jbpm4(一个开源的工作流管理系统)进行集成开发的实践案例...
Spring与JBoss JBPM工作流集成开发指南 Spring与JBoss JBPM工作流集成开发指南是关于JBPM与Spring框架集成的开发文档,涵盖了工作流的基本概念、设计要点、常见问题解答、参考资源等。下面是从该文件中生成的相关...