jbpm-6.3.0.Final-installer-full在Windows上的部署、数据库由H2切换为MySql、Linux上的部署全过程
Andy 2016-4
前提:
1,从官网上下载了jbpm-6.3.0.Final-installer-full.zip,300多M
2,部署的OS上安装了Ant,我用的是Ant1.8.1
3,部署的OS上安装了JDK1.7,注意是JDK1.7。
原因是1.6版本低不能用,而1.8默认的Javascript引擎是Nashorn,与1.7默认使用的Rhino不一样。所以在Linux下部署时若使用1.8,下面有些步骤会不适用。
PS:不同操作系统(Windows/Linux,32位,64位)JDK不一样,注意别下载错了
4,我的目的是在网站上去使用和管理工作流,所以没有涉及eclipse及jbpm的eclipse插件的下载、安装;
5,我的部署环境是内网,Windows需要通过代理访问外网,所以jbpm部署过程中想要访问外网时会试图获取一些资源,这时就得想办法在本地准备好,或者设置上网代理。在Linux上部署时,则完全没有外网访问条件,需要将所有下载依赖的内容准备好。
6,jbpm-6.3.0.Final-installer-full默认使用wildfly作为应用服务器,所以如果对它或者jboss熟悉,那么会顺利很多。
7,jbpm-6.3.0.Final-installer-full默认使用H2数据库。
=====================================================
1,jbpm-6.3.0.Final-installer-full在Windows上的部署使用:
1.1,jbpm-6.3.0.Final-installer-full.zip解压,得到jbpm-installer目录;
1.2,修改jbpm-installer/build.xml文件,禁止Hibernate 相关的4个jar包的下载。否则ant install.demo.noeclipse时,会因为下载失败而出错。
目录里其实已经有此4个jar包,现成的。但build.xml文件还是会试图连网下载,所以需要修改。
修改:
修改前:
<get src="${hibernate4.download.url}/hibernate-core/4.3.11.Final/hibernate-core-4.3.11.Final.jar" dest="${install.home}/lib/hibernate4" />
<get src="${hibernate4.download.url}/hibernate-entitymanager/4.3.11.Final/hibernate-entitymanager-4.3.11.Final.jar" dest="${install.home}/lib/hibernate4" />
<get src="${hibernate4.download.url}/hibernate-envers/4.3.11.Final/hibernate-envers-4.3.11.Final.jar" dest="${install.home}/lib/hibernate4" />
<get src="${hibernate4.download.url}/hibernate-infinispan/4.3.11.Final/hibernate-infinispan-4.3.11.Final.jar" dest="${install.home}/lib/hibernate4" />
修改后(注释掉):
<!-- Andy: delete 4 lines.
<get src="${hibernate4.download.url}/hibernate-core/4.3.11.Final/hibernate-core-4.3.11.Final.jar" dest="${install.home}/lib/hibernate4" />
<get src="${hibernate4.download.url}/hibernate-entitymanager/4.3.11.Final/hibernate-entitymanager-4.3.11.Final.jar" dest="${install.home}/lib/hibernate4" />
<get src="${hibernate4.download.url}/hibernate-envers/4.3.11.Final/hibernate-envers-4.3.11.Final.jar" dest="${install.home}/lib/hibernate4" />
<get src="${hibernate4.download.url}/hibernate-infinispan/4.3.11.Final/hibernate-infinispan-4.3.11.Final.jar" dest="${install.home}/lib/hibernate4" />
-->
1.3,修改jbpm-installer/build.xml文件,为JVM增加上网代理。(注意替换为有效IP和端口)
类似于1,ant start.demo.noeclipse中启动wildfly 时,会访问git的一些网址(HTTPS),因此若在办公代理上网环境,要在相应位置为Jboss的JVM增加代理信息:
修改前:
<env key="JAVA_OPTS" value="-XX:MaxPermSize=256m -Xms256m -Xmx512m " />
修改后:
<!-- http and https proxy-info is added by Andy -->
<env key="JAVA_OPTS" value="-XX:MaxPermSize=256m -Xms256m -Xmx512m -Dhttp.proxyHost=<yourIP> -Dhttp.proxyPort=<yourPort> -Dhttps.proxyHost=<yourIP2> -Dhttps.proxyPort=<yourPort2>" />
详情参考:
http://stackoverflow.com/questions/22054047/jbpm-console-not-working-failed-to-start-service-jboss-deployment-unit-jbpm-c
帖子精华摘录如下:
As salaboy said, this problem happens if you don't have a direct internet connection or accessing internet through a proxy.
If you don't have an internet connection, then follow the answer by dleerob.
If you are behind a proxy, then give the proxy details as Java VM parameters in build.xml
In build.xml, find the target named start.jboss . There are two exec commands in this target; one for windows and one for linux. Based on your environment, specify the proxy details in <env key="JAVA_OPTS" parameter using the following JVM options with your proxy and port.
-Dhttp.proxyHost=proxyname -Dhttp.proxyPort=port-Dhttps.proxyHost=proxyname -Dhttps.proxyPort=port
1.4,Ant目录下的ant.bat也增加代理信息
在ant.bat文件的开始加入下面内容(注意替换为有效IP和端口)
set ANT_OPTS=-Dhttp.proxyHost=<yourIP> -Dhttp.proxyPort=<yourPort> -Dhttps.proxyHost=<yourIP2> -Dhttps.proxyPort=<yourPort2>
1.4 至此,Windows下的配置修改就算完成了,可以尝试安装、启动服务
在jbpm-installer目录下执行:
安装:ant install.demo.noeclipse
启动:ant start.demo.noeclipse
停止:ant stop.demo
反安装:ant clean.demo
=====================================================
2,jbpm-6.3.0.Final-installer-full数据库由H2切换为Mysql:
主要参考文档是官方帮助的3.6节。
2.1,准备好自己的mysql 数据库:URL、name/password
务必注意:自己的MySQL库,增删改查的sql语句要求不能区分大小写。如果Mysql安装在Windows上,就没有这问题。但通常是安装在Linux上,所以务必注意。否则部署后使用时会找不到表……
如何配置MySQL不区分大小写,网文一大片,随便搜索。
2.2,修改jbpm-installer/db/jbpm-persistence-JPA2.xml,将hibernate.dialect修改为mysql
修改前:
<property name="hibernate.dialect" value="org.hibernate.dialect.H2Dialect" />
修改后:
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
2.3,修改下面两个文件的数据源信息(这两个文件的内容在安装时,会被Ant放到wildfly的standalone/configuration中)
jbpm-installer/standalone-full-wildfly-8.1.0.Final.xml
jbpm-installer/standalone-wildfly-8.1.0.Final.xml
两个文件作同样的修改。
【注:jbpm-installer有若干条类似的文件,修改哪个,取决于使用的应用服务器。安装包默认使用wildfly,所以修改上面两个文件。】
修改前:
<datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true">
<connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=FALSE</connection-url>
<driver>h2</driver>
<security>
<user-name>sa</user-name>
<password>sa</password>
</security>
</datasource>
<datasource jta="true" jndi-name="java:jboss/datasources/jbpmDS" pool-name="H2DS" enabled="true" use-java-context="true" use-ccm="true">
<connection-url>jdbc:h2:tcp://localhost/~/jbpm-db;MVCC=TRUE</connection-url>
<driver>h2</driver>
<security>
<user-name>sa</user-name>
</security>
</datasource>
<drivers>
<driver name="h2" module="com.h2database.h2">
<xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
</driver>
</drivers>
修改后:
<datasource jndi-name="java:jboss/datasources/ExampleDS" pool-name="ExampleDS" enabled="true" use-java-context="true">
<connection-url>jdbc:mysql://<yourMysqlIP:3306/<yourDBName>?useUnicode=true&characterEncoding=utf8</connection-url>
<driver>mysql</driver>
<security>
<user-name>user</user-name>
<password>pass</password>
</security>
</datasource>
<datasource jta="true" jndi-name="java:jboss/datasources/jbpmDS" pool-name="MySQLDS" enabled="true" use-java-context="true" use-ccm="true">
<connection-url>jdbc:mysql://<yourMysqlIP:3306/<yourDBName>?useUnicode=true&characterEncoding=utf8</connection-url>
<driver>mysql</driver>
<security>
<user-name>user</user-name>
<password>pass</password>
</security>
</datasource>
<drivers>
<driver name="mysql" module="com.mysql">
<xa-datasource-class>com.mysql.jdbc.jdbc2.optional.MysqlXADataSource</xa-datasource-class>
</driver>
</drivers>
</datasources>
2.4,修改jbpm-installer/build.properties的使用数据库,注释掉H2,放出来Mysql
修改后:
# default is H2
#H2.version=1.3.168
#db.name=h2
#db.driver.jar.name=h2-${H2.version}.jar
#db.driver.download.url=http://repo1.maven.org/maven2/com/h2database/h2/${H2.version}/h2-${H2.version}.jar
#other options are:
#mysql
db.name=mysql
db.driver.module.prefix=com/mysql
db.driver.jar.name=mysql-connector-java-5.1.18.jar
db.driver.download.url=https://repository.jboss.org/nexus/service/local/repositories/central/content/mysql/mysql-connector-java/5.1.18/mysql-connector-java-5.1.18.jar
2.5,修改jbpm-installer/db/mysql_module.xml
将其中的MySQL驱动jar包名称改为与实际使用的一致:
修改前:
resource-root path="mysql-connector-java.jar"
修改后:
resource-root path="mysql-connector-java-5.1.18.jar"
=====================================================
3,jbpm-6.3.0.Final-installer-full在Linux上的部署使用:
综述:因为我的Linux无法访问外网,所以所有的网络访问行为都要禁止。
前提:
将步骤1中的全部内容执行完,或要使用MySQL,步骤2中的全部内容也要执行。
3.1,从别的途径下载mysql-connector-java-5.1.18.jar,放到jbpm-installer/db/driver/mysql-connector-java-5.1.18.jar目录下
3.2,如果Linux上没有JDK和Ant,分别下载、解压,并配置PATH、CLASSPATH:
下面的示例临时设置PATH、CLASSPATH(退出Linux terminal窗口后即失效,永久配置上网搜):
export JAVA_HOME=/opt/app/jbpm_test/jdk1.7.0_80
export PATH=$JAVA_HOME/bin:/opt/app/jbpm_test/apache-ant-1.8.1/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$CLASSPATH
3.3,修改jbpm-installer/build.xml文件,禁止jbpm示例的下载:
修改前
-Dorg.kie.demo=true
修改后
-Dorg.kie.demo=false
这个“示例”是什么,起什么作用,还在研究。
3.4, 修改下面两个文件的访问允许信息,使得wildfly不仅在本机可以访问(localhost)其他机器也可以访问。(这两个文件的内容在安装时,会被Ant放到wildfly的standalone/configuration中)
jbpm-installer/standalone-full-wildfly-8.1.0.Final.xml
jbpm-installer/standalone-wildfly-8.1.0.Final.xml
两个文件作同样的修改。
3.4.1 修改一:增加
<interface name="any">
<any-ipv4-address/>
</interface>
修改前:
<interfaces>
<interface name="management">
<inet-address value="${jboss.bind.address.management:127.0.0.1}"/>
</interface>
<interface name="public">
<inet-address value="${jboss.bind.address:127.0.0.1}"/>
</interface>
<!-- TODO - only show this if the jacorb subsystem is added -->
<interface name="unsecure">
<!--
~ Used for IIOP sockets in the standard configuration.
~ To secure JacORB you need to setup SSL
-->
<inet-address value="${jboss.bind.address.unsecure:127.0.0.1}"/>
</interface>
</interfaces>
修改后:
<interfaces>
<interface name="management">
<inet-address value="${jboss.bind.address.management:127.0.0.1}"/>
</interface>
<interface name="public">
<inet-address value="${jboss.bind.address:127.0.0.1}"/>
</interface>
<interface name="any">
<any-ipv4-address/>
</interface>
<!-- TODO - only show this if the jacorb subsystem is added -->
<interface name="unsecure">
<!--
~ Used for IIOP sockets in the standard configuration.
~ To secure JacORB you need to setup SSL
-->
<inet-address value="${jboss.bind.address.unsecure:127.0.0.1}"/>
</interface>
</interfaces>
3.4.2 修改二:修改默认public为新增的any:
修改前:
<socket-binding-group name="standard-sockets" default-interface="public" port-offset="${jboss.socket.binding.port-offset:0}">
修改后:
<socket-binding-group name="standard-sockets" default-interface="any" port-offset="${jboss.socket.binding.port-offset:0}">
3.5,Wildfly配置修改,删除掉JDK1.7中不包含的NashornScriptEngineFactory(否则wildfly启动时报Error):
(注1:JDK1.8中不包含RhinoScriptEngineFactory,JDK1.7中不包含NashornScriptEngineFactory
注2:Windows无此问题)
wildfly-8.1.0.Final/modules/system/layers/base/sun/jdk/main/service-loader-resources/META-INF/services/javax.script.ScriptEngineFactory
修改前:
com.sun.script.javascript.RhinoScriptEngineFactory
jdk.nashorn.api.scripting.NashornScriptEngineFactory
修改后:
com.sun.script.javascript.RhinoScriptEngineFactory
参考文档:https://developer.jboss.org/thread/239467?start=0
主要内容:
Re: Wildfly Scripting Engine (Rhino vs Nashorn)
Tomaz Cerar
Master
Tomaz Cerar 2014-4-3 下午7:02 (回复 Brandon Lederer)
hmm, we are probably missing few paths in our sun.jdk module to make this work properly.
add open WILDFLY_HOME\modules\system\layers\base\sun\jdk\main\module.xml
missing paths.
other thing you can do is open
WILDFLY_HOME\modules\system\layers\base\sun\jdk\main\service-loader-resources\META-INF\services\javax.script.ScriptEngineFactory
and remove the one that gives you problems.
3.6 至此大功告成,可以执行安装、启动流程了:
在jbpm-installer目录下执行:
安装:ant install.demo.noeclipse
启动:ant start.demo.noeclipse
停止:ant stop.demo
反安装:ant clean.demo
3.7 访问http://<yourIP>:8080/jbpm-console,使用admin/admin登录
=====================================================
4 后记:注意事项:
4.1 经常查看Wildfly的启动日志,根据关键词排错;
4.2 频繁地ant start... ant stop...,有时候wildfly进程未能正常结束。所以有必要经常查看wildfly进程,以及系统端口的占用情况、wildfly-8.1.0.Final\standalone\deployments下的部署情况;
4.3 (可选)如果配置文件中一些下载项未去掉,安装过程中Ant会尝试去某处的git 库下载依赖内容,这时它需要使用9418端口。此时要确定本机的9418未占用;