5.3.3. 部署 WAR 到 WildFly
CUBA 应用程序的 WAR 包可以部署在 WildFly 应用服务中。下面这个示例是部署使用 PostgreSQL 的 CUBA 应用程序到 Windows 的 WildFly 18.0.1。
-
编辑
build.gradle
并在 global 模块的dependencies
部分添加依赖:runtime 'org.reactivestreams:reactive-streams:1.0.1'
-
组装并且部署项目到默认的 Tomcat 服务,以便加载项目所有的依赖到本地。
-
为程序配置应用程序主目录:
-
创建一个 WildFly 服务能完全控制的目录,比如
C:\Users\UserName\app_home
。 -
从
tomcat/conf
拷贝logback.xml
文件到这个目录,并修改logDir
属性:
<property name="logDir" value="${app.home}/logs"/>
-
-
配置 WildFly 服务
-
在本地目录安装 WildFly,比如
C:\wildfly
。 -
编辑
C:\wildfly\bin\standalone.conf.bat
文件,并将下面这行添加到文件末尾:
set "JAVA_OPTS=%JAVA_OPTS% -Dapp.home=%USERPROFILE%/app_home -Dlogback.configurationFile=%USERPROFILE%/app_home/logback.xml"
这行里将
app.home
系统属性指向之前创建的应用程序主目录,并且设置日志的配置文件指向先前创建的logback.xml
文件。也可以使用绝对路径替换%USERPROFILE%
变量。-
对比一下 WildFly 的 Hibernate Validator 版本跟 CUBA 的有没有不同,如果 CUBA 使用的是比较新的版本,那么用
tomcat\shared\lib
下面的版本(比如hibernate-validator-6.1.1.Final.jar
)替换掉C:\wildfly\modules\system\layers\base\org\hibernate\validator\main\hibernate-validator-x.y.z-sometext.jar
。 -
在
\wildfly\modules\system\layers\base\org\hibernate\validator\main\module.xml
文件中更新一下替换的 JAR 包的版本。 -
在 WildFly 中注册 PostgreSQL 驱动,从
tomcat\lib
目录拷贝postgresql-42.2.5.jar
到C:\wildfly\standalone\deployments
目录。 -
配置 WildFly logger:打开
\wildfly\standalone\configuration\standalone.xml
文件,在<subsystem xmlns="urn:jboss:domain:logging:{version}"
区域添加下面两行:<subsystem xmlns="urn:jboss:domain:logging:8.0"> <add-logging-api-dependencies value="false"/> <use-deployment-logging-config value="false"/> . . . </subsystem>
-
-
创建 JDBC 数据源
-
执行
standalone.bat
启动 WildFly。 -
浏览器打开管理员窗口
http://localhost:9990
。第一次登录的时候,需要创建用户名和密码。 -
打开 Configuration - Subsystems - Datasources and Drivers - Datasources 标签页,为应用程序创建新数据源:
Name: Cuba JNDI Name: java:/jdbc/CubaDS JDBC Driver: postgresql-42.2.5.jar Driver Module Name: org.postgresql Driver Class Name: org.postgresql.Driver Connection URL: your database URL Username: your database username Password: your database password
如果按照之前的步骤拷贝了
postgresql-x.y.z.jar
,那么 JDBC 驱动会在自动检测到的驱动列表里显示。点击 Test connection 按钮测试数据库连接。
-
启用这个数据源。
-
或者,可以使用
bin/jboss-cli.bat
命令行工具创建 JDBC 数据源:[disconnected /] connect [standalone@localhost:9990 /] data-source add --name=Cuba --jndi-name="java:/jdbc/CubaDS" --driver-name=postgresql-42.2.5.jar --user-name=dblogin --password=dbpassword --connection-url="jdbc:postgresql://dbhost/dbname" [standalone@localhost:9990 /] quit
-
-
构建应用程序
-
在 Studio 中打开 CUBA 项目树 > Project > Deployment > WAR Settings 窗口。
-
勾选 Build WAR 复选框。
-
保存设置。
-
在 IDE 中打开 build.gradle 并且在 buildWar 任务中添加
doAfter
属性。这个属性会控制拷贝 WildFly 部署描述文件:task buildWar(type: CubaWarBuilding) { appProperties = ['cuba.automaticDatabaseUpdate' : true] singleWar = false doAfter = { copy { from 'jboss-deployment-structure.xml' into "${project.buildDir}/tmp/buildWar/core/war/META-INF/" } copy { from 'jboss-deployment-structure.xml' into "${project.buildDir}/tmp/buildWar/web/war/META-INF/" } } }
对于单一 WAR(singleWAR)配置,这个任务稍有不同:
task buildWar(type: CubaWarBuilding) { webXmlPath = 'modules/web/web/WEB-INF/single-war-web.xml' appProperties = ['cuba.automaticDatabaseUpdate' : true] doAfter = { copy { from 'jboss-deployment-structure.xml' into "${project.buildDir}/tmp/buildWar/META-INF/" } } }
如果项目还包含了 Polymer 模块,在
single-war-web.xml
文件中添加下面这些配置:<servlet> <servlet-name>default</servlet-name> <init-param> <param-name>resolve-against-context-root</param-name> <param-value>true</param-value> </init-param> </servlet>
-
在项目根目录,创建
jboss-deployment-structure.xml
文件,在里面添加 WildFly 部署描述文件:
<?xml version="1.0" encoding="UTF-8"?> <jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0"> <deployment> <exclusions> <module name="org.apache.commons.logging" /> <module name="org.apache.log4j" /> <module name="org.jboss.logging" /> <module name="org.jboss.logging.jul-to-slf4j-stub" /> <module name="org.jboss.logmanager" /> <module name="org.jboss.logmanager.log4j" /> <module name="org.slf4j" /> <module name="org.slf4j.impl" /> <module name="org.slf4j.jcl-over-slf4j" /> </exclusions> </deployment> </jboss-deployment-structure>
-
执行
buildWar
任务创建 WAR 包。
-
-
从
build\distributions\war
目录拷贝app-core.war
和app.war
到 WildFly 目录\wildfly\standalone\deployments
。 -
重启 WildFly 服务。
-
可以通过
http://localhost:8080/app
访问应用,日志文件会保存在应用程序主目录的C:\Users\UserName\app_home\logs
目录下。