window.location.href="http://snakerdoc.jd-app.com/";
集成
集成snaker必须在classpath下增加snaker.properties,选择性的配置snaker.xml
snaker.properties配置明细:
属性名称 | 描述 | 默认值 |
---|---|---|
config | 定义snaker.xml文件的名称 | snaker.xml |
jdbc.pageSize | 查询结果的每页显示数量 | 15 |
jdbc.* | 如果指定了JDBC+dbutils方式但未提供DataSource时使用 | 无 |
hibernate.* | 如果指定了Hibernate方式但未提供SessionFactory时使用 | 无 |
tx.jta.userTransaction | 如果用API集成,并且采用JTA事务时配置 | 无 |
snaker.properties一般配置如下:
config=snaker.xml
#page must config
jdbc.pageSize=15
snaker.xml用于配置自定义扩展,所配置的bean实例属于单例对象,并且存放在ServiceContext上下文中(SimpleContext、SpringContext),具体配置如下:
<config>
<!--jdbc的数据库访问与事务拦截器
<bean class="org.snaker.engine.access.jdbc.JdbcAccess"/>
<bean class="org.snaker.engine.access.transaction.DataSourceTransactionInterceptor"/>
-->
<!--
<bean class="org.snaker.engine.access.transaction.JtaTransactionInterceptor"/>
-->
<!--hibernate3的数据库访问与事务拦截器
<bean class="org.snaker.engine.access.hibernate3.HibernateAccess"/>
<bean class="org.snaker.engine.access.transaction.Hibernate3TransactionInterceptor"/>
-->
<!--mybatis的数据库访问与事务拦截器
<bean class="org.snaker.engine.access.mybatis.MybatisAccess"/>
<bean class="org.snaker.engine.access.transaction.MybatisTransactionInterceptor"/>
-->
<!-- 数据库方言配置。如果使用orm框架已自带了方言的支持,这里不需要配置
<bean class="org.snaker.engine.access.dialect.OracleDialect"/>
<bean class="org.snaker.engine.access.dialect.MySqlDialect"/>
<bean class="org.snaker.engine.access.dialect.SQLServerDialect"/>
-->
<!-- 任务拦截器,这里可配置多个拦截器,在任务执行后进行拦截处理(如:记录日志、短信提醒等) -->
<bean class="org.snaker.engine.impl.LogInterceptor"/>
<!-- 表达式引擎配置 -->
<bean class="org.snaker.engine.impl.JuelExpression"/>
</config>
snaker.xml不是必须配置的,视具体应用环境而定。
注:与Spring集成的项目中不需要配置DBAccess、TransactionIntercptor。数据库方言Dialect实现类根据orm框架而定(仅Hibernate框架不需要配置Dialect),
此处配置的拦截器属于全局拦截器,只要产生Task,就会执行拦截处理。
1 Spring集成
Spring集成Snaker时,需要配置流程引擎及服务、事务管理、数据访问方式、缓存管理.具体可参考snaker-web
<!-- 流程引擎配置 -->
<bean class="org.snaker.engine.spring.SpringSnakerEngine">
<property name="processService" ref="processService"/>
<property name="orderService" ref="orderService"/>
<property name="taskService" ref="taskService"/>
<property name="queryService" ref="queryService"/>
<property name="managerService" ref="managerService"/>
</bean>
<bean id="dbAccess" class="org.snaker.engine.access.hibernate.Hibernate3Access">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
<bean id="processService" class="org.snaker.engine.core.ProcessService">
<property name="access" ref="dbAccess"/>
<property name="cacheManager" ref="cacheManager"/>
</bean>
<bean id="orderService" class="org.snaker.engine.core.OrderService">
<property name="access" ref="dbAccess"/>
</bean>
<bean id="taskService" class="org.snaker.engine.core.TaskService">
<property name="access" ref="dbAccess"/>
</bean>
<bean id="managerService" class="org.snaker.engine.core.ManagerService">
<property name="access" ref="dbAccess"/>
</bean>
<bean id="queryService" class="org.snaker.engine.core.QueryService">
<property name="access" ref="dbAccess"/>
</bean>
<bean id="cacheManager" class="org.snaker.engine.cache.memory.MemoryCacheManager"/<
<!-- 流程事务配置 aop的pointcut中增加:or execution(* org.snaker.engine..*.*(..))-->
<tx:attributes>
<tx:method name="start*" propagation="REQUIRED"/>
<tx:method name="execute*" propagation="REQUIRED"/>
<tx:method name="save*" propagation="REQUIRED"/>
<tx:method name="delete*" propagation="REQUIRED" />
<tx:method name="update*" propagation="REQUIRED" />
<tx:method name="remove*" propagation="REQUIRED" />
<tx:method name="add*" propagation="REQUIRED" />
<tx:method name="assign*" propagation="REQUIRED" />
<tx:method name="create*" propagation="REQUIRED" />
<tx:method name="complete*" propagation="REQUIRED" />
<tx:method name="finish*" propagation="REQUIRED" />
<tx:method name="terminate*" propagation="REQUIRED" />
<tx:method name="take*" propagation="REQUIRED" />
<tx:method name="deploy*" propagation="REQUIRED" />
<tx:method name="redeploy*" propagation="REQUIRED" />
<tx:method name="undeploy*" propagation="REQUIRED" />
<tx:method name="withdrawTask*" propagation="REQUIRED" />
<tx:method name="native*" propagation="REQUIRED" />
<tx:method name="get*" propagation="REQUIRED" read-only="true" />
<tx:method name="find*" propagation="REQUIRED" read-only="true" />
<tx:method name="query*" propagation="REQUIRED" read-only="true" />
<tx:method name="search*" propagation="REQUIRED" read-only="true" />
<tx:method name="is*" propagation="REQUIRED" read-only="true" />
</tx:attributes>
1.1 SpringJdbc
<bean id="dbAccess" class="org.snaker.engine.access.spring.SpringJdbcAccess">
<property name="dataSource" ref="dataSource"/>
<property name="lobHandler" ref="lobHandler"/>
</bean>
<bean id="lobHandler" class="org.springframework.jdbc.support.lob.DefaultLobHandler" lazy-init="true" />
1.2 Hibernate
需要在sessionFactory的bean配置中增加mappingResources属性
<property name="mappingResources">
<list>
<value>hbm/snaker.task.hbm.xml</value>
<value>hbm/snaker.order.hbm.xml</value>
<value>hbm/snaker.ccorder.hbm.xml</value>
<value>hbm/snaker.process.hbm.xml</value>
<value>hbm/snaker.taskactor.hbm.xml</value>
<value>hbm/snaker.workitem.hbm.xml</value>
<value>hbm/snaker.surrogate.hbm.xml</value>
</list>
</property>
<bean id="dbAccess" class="org.snaker.engine.access.hibernate3.HibernateAccess">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>
1.3 mybatis
<bean id="sqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean">
<property name="configLocation" value="classpath:mybatis.cfg.xml"/>
<property name="dataSource" ref="dataSource" />
<property name="typeAliasesPackage" value="org.snaker.engine.entity" />
</bean>
<bean id="dbAccess" class="org.snaker.engine.access.mybatis.MybatisAccess">
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
mybatis.cfg.xml配置如下:
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE configuration PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-config.dtd">
<configuration>
<mappers>
<mapper resource="mapper/process.xml"/>
<mapper resource="mapper/order.xml"/>
<mapper resource="mapper/task.xml"/>
<mapper resource="mapper/task-actor.xml"/>
<mapper resource="mapper/hist-order.xml"/>
<mapper resource="mapper/hist-task.xml"/>
<mapper resource="mapper/hist-task-actor.xml"/>
<mapper resource="mapper/query.xml"/>
<mapper resource="mapper/hist-query.xml"/>
</mappers>
</configuration>
<bean id="dbAccess" class="org.snaker.engine.access.mybatis.MybatisAccess">
<property name="sqlSessionFactory" ref="sqlSessionFactory"/>
</bean>
2 API集成
如果使用api集成,需要在snaker.xml中配置DBAccess、Transaction、Dialect
import javax.sql.DataSource;
import org.snaker.engine.SnakerEngine;
import org.snaker.engine.access.jdbc.JdbcHelper;
import org.snaker.engine.cfg.Configuration;
public class SnakerHelper {
private static final SnakerEngine engine;
static {
//使用项目中已有的DataSource、SessionFactory、SqlSessionFactory对象
//传递至initAccessDBObject方法中都可以
DataSource dataSource = JdbcHelper.getDataSource();
engine = new Configuration()
.initAccessDBObject(dataSource)
.buildSnakerEngine();
}
public static SnakerEngine getEngine() {
return engine;
}
}
initAccessDBObject方法传递的参数值与snaker.xml配置的数据库访问对应关系:
参数类型 | 访问对象 | 事务管理拦截器 | 依赖库 |
---|---|---|---|
DataSource | JdbcAccess | DataSourceTransactionInterceptor | commons-dbcp-1.4.jar
|
SessionFactory | HibernateAccess | Hibernate3TransactionInterceptor | hibernate-*-3.5.5.jar |
SqlSessionFactory | MybatisAccess | MybatisTransactionInterceptor | mybatis-3.2.3.jar |
initAccessDBObject方法也可以不调用,而使用snaker.properties中的jdbc.*或hibernate.*来初始化DataSource、SessionFactory、SqlSessionFactory。但在实际的项目,还是建议使用该项目已有的访问对象
3 Jfinal集成
在Jfinal平台中集成Snaker,可按照如下步骤操作:
3.1 增加maven依赖或jar
snaker-jfinal的maven坐标为:
<dependency>
<groupId>com.github.snakerflow</groupId>
<artifactId>snaker-jfinal</artifactId>
<version>2.0.0</version>
</dependency>
如果非maven项目,则需要在百度网盘上下载snaker-jfinal-***.jr
3.2 配置插件SnakerPlugin
import org.snaker.jfinal.plugin.SnakerPlugin;
......
/**
* 配置插件
*/
public void configPlugin(Plugins me) {
// 配置C3p0数据库连接池插件
C3p0Plugin c3p0Plugin = new C3p0Plugin(getProperty("jdbcUrl"), getProperty("user"), getProperty("password").trim());
me.add(c3p0Plugin);
// 配置ActiveRecord插件
ActiveRecordPlugin arp = new ActiveRecordPlugin(c3p0Plugin);
me.add(arp);
arp.addMapping("blog", Blog.class);// 映射blog 表到 Blog模型
// 配置Snaker插件
SnakerPlugin snakerPlugin = new SnakerPlugin(c3p0Plugin);
me.add(snakerPlugin);
}
3.3 配置Jfinal方式的DBAccess、事务拦截器
在snaker.xml中配置数据库访问类路径:
<bean class="org.snaker.jfinal.access.JfinalAccess"/>
<bean class="org.snaker.jfinal.access.JfinalTransactionInterceptor"/>
3.4 使用
//直接从SnakerPlugin的静态方法getEngine获得引擎实现类,再调用其API进行操作即可
SnakerPlugin.getEngine().startInstanceByName("simple", null, "test", args);
© 2013-2015 Snaker 皖ICP备14011739号
var _bdhmProtocol = (("https:" == document.location.protocol) ? " https://" : " http://");
document.write(unescape("%3Cscript src='" + _bdhmProtocol + "hm.baidu.com/h.js%3Fc131f59e6a5a93f75a74790c7acad03e' type='text/javascript'%3E%3C/script%3E"));
一键复制
编辑
Web IDE
原始数据
按行查看
历史