5.3.2. 部署 WAR 至 Jetty
以下是一个部署 WAR 包到 Jetty web 服务器的示例。
我们将使用下面的文件目录结构:
C:\work\jetty-home\
- Jetty 安装目录C:\work\jetty-base\
- Jetty 配置目录,用来保存 Jetty 的配置文件,额外的库以及 web 应用程序。C:\work\app_home\
- CUBA 应用程序主目录使用 Studio 中的 CUBA project tree > Project > Deployment > WAR Settings 对话框或者手动在build.gradle 末尾添加 buildWar 任务:
task buildWar(type: CubaWarBuilding) {
appProperties = ['cuba.automaticDatabaseUpdate': 'true']
singleWar = false
}
需要注意的是,这里给 Middleware 和 web 客户端构建了单独的两个 WAR 文件。
从命令行启动
buildWar
任务(假设已经预先创建了 Gradle wrapper):gradlew buildWar
如果成功的话,会在项目的
build\distributions\war
目录创建app-core.war
和app.war
。创建一个应用程序主目录目录,比如,
c:\work\app_home
。从开发环境的 Tomcat(
deploy/tomcat/conf
项目子目录)复制logback.xml
到应用程序主目录,并编辑文件中的logDir
属性:<property name="logDir" value="${app.home}/logs"/>
下载并安装 Jetty 到本地目录,比如
c:\work\jetty-home
。本示例使用jetty-distribution-9.4.22.v20191022.zip
测试通过。创建
c:\work\jetty-base
目录,并且在这个目录打开命令行窗口执行以下命令:java -jar c:\work\jetty-home\start.jar --add-to-start=http,jndi,deploy,plus,ext,resources
创建
c:\work\jetty-base\app-jetty.xml
文件,定义数据库连接池。对于 PostgreSQL 数据库的该文件内容应当基于以下模板:<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-" "http://www.eclipse.org/jetty/configure_9_0.dtd">
<Configure id="wac" class="org.eclipse.jetty.webapp.WebAppContext">
<New id="CubaDS" class="org.eclipse.jetty.plus.jndi.Resource">
<Arg/>
<Arg>jdbc/CubaDS</Arg>
<Arg>
<New class="org.apache.commons.dbcp2.BasicDataSource">
<Set name="driverClassName">org.postgresql.Driver</Set>
<Set name="url">jdbc:postgresql://localhost/db_name</Set>
<Set name="username">username</Set>
<Set name="password">password</Set>
<Set name="maxIdle">2</Set>
<Set name="maxTotal">20</Set>
<Set name="maxWaitMillis">5000</Set>
</New>
</Arg>
</New>
</Configure>
MS SQL 数据库的
app-jetty.xml
文件需要使用下面这个模板:<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-" "http://www.eclipse.org/jetty/configure_9_0.dtd">
<Configure id="wac" class="org.eclipse.jetty.webapp.WebAppContext">
<New id="CubaDS" class="org.eclipse.jetty.plus.jndi.Resource">
<Arg/>
<Arg>jdbc/CubaDS</Arg>
<Arg>
<New class="org.apache.commons.dbcp2.BasicDataSource">
<Set name="driverClassName">com.microsoft.sqlserver.jdbc.SQLServerDriver</Set>
<Set name="url">jdbc:sqlserver://server_name;databaseName=db_name</Set>
<Set name="username">username</Set>
<Set name="password">password</Set>
<Set name="maxIdle">2</Set>
<Set name="maxTotal">20</Set>
<Set name="maxWaitMillis">5000</Set>
</New>
</Arg>
</New>
</Configure>
数据库连接池需要下载以下这些 JAR 并且添加到
c:\work\jetty-base\lib\ext
目录。其中有两个文件可以在deploy\tomcat\shared\lib
项目子目录中找到:commons-pool2-2.6.2.jar
commons-dbcp2-2.7.0.jar
commons-logging-1.2.jar
从 Jetty 安装目录复制
start.ini
文件至c:\work\jetty-base
目录。在c:\work\jetty-base\start.ini
文件开始处添加下列内容:--exec
-Xdebug
-agentlib:jdwp=transport=dt_socket,address=8787,server=y,suspend=n
-Dapp.home=c:\work\app_home
-Dlogback.configurationFile=c:\work\app_home\logback.xml
app-jetty.xml
复制数据库的 JDBC 驱动到
c:\work\jetty-base\lib\ext
目录。可以从项目的deploy\tomcat\lib
目录复制驱动。比如对于 PostgreSQL,驱动文件是postgresql-42.2.5.jar
。复制 WAR 文件到
c:\work\jetty-base\webapps
目录。在
c:\work\jetty-base
目录打开命令行窗口并且执行:java -jar c:\work\jetty-home\start.jar
在浏览器打开
http://localhost:8080/app
。