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 应用程序主目录

    1. 使用 Studio 中的 CUBA project tree > Project > Deployment > WAR Settings 对话框或者手动在build.gradle 末尾添加 buildWar 任务:

      1. task buildWar(type: CubaWarBuilding) {
      2. appProperties = ['cuba.automaticDatabaseUpdate': 'true']
      3. singleWar = false
      4. }

      需要注意的是,这里给 Middleware 和 web 客户端构建了单独的两个 WAR 文件。

    2. 从命令行启动 buildWar 任务(假设已经预先创建了 Gradle wrapper):

      1. gradlew buildWar

      如果成功的话,会在项目的 build\distributions\war 目录创建 app-core.warapp.war

    3. 创建一个应用程序主目录目录,比如,c:\work\app_home

    4. 从开发环境的 Tomcat(deploy/tomcat/conf 项目子目录)复制 logback.xml 到应用程序主目录,并编辑文件中的 logDir 属性:

      1. <property name="logDir" value="${app.home}/logs"/>
    5. 下载并安装 Jetty 到本地目录,比如 c:\work\jetty-home。本示例使用 jetty-distribution-9.4.22.v20191022.zip 测试通过。

    6. 创建 c:\work\jetty-base 目录,并且在这个目录打开命令行窗口执行以下命令:

      1. java -jar c:\work\jetty-home\start.jar --add-to-start=http,jndi,deploy,plus,ext,resources
    7. 创建 c:\work\jetty-base\app-jetty.xml 文件,定义数据库连接池。对于 PostgreSQL 数据库的该文件内容应当基于以下模板:

      1. <?xml version="1.0"?>
      2. <!DOCTYPE Configure PUBLIC "-" "http://www.eclipse.org/jetty/configure_9_0.dtd">
      3. <Configure id="wac" class="org.eclipse.jetty.webapp.WebAppContext">
      4. <New id="CubaDS" class="org.eclipse.jetty.plus.jndi.Resource">
      5. <Arg/>
      6. <Arg>jdbc/CubaDS</Arg>
      7. <Arg>
      8. <New class="org.apache.commons.dbcp2.BasicDataSource">
      9. <Set name="driverClassName">org.postgresql.Driver</Set>
      10. <Set name="url">jdbc:postgresql://localhost/db_name</Set>
      11. <Set name="username">username</Set>
      12. <Set name="password">password</Set>
      13. <Set name="maxIdle">2</Set>
      14. <Set name="maxTotal">20</Set>
      15. <Set name="maxWaitMillis">5000</Set>
      16. </New>
      17. </Arg>
      18. </New>
      19. </Configure>

      MS SQL 数据库的 app-jetty.xml 文件需要使用下面这个模板:

      1. <?xml version="1.0"?>
      2. <!DOCTYPE Configure PUBLIC "-" "http://www.eclipse.org/jetty/configure_9_0.dtd">
      3. <Configure id="wac" class="org.eclipse.jetty.webapp.WebAppContext">
      4. <New id="CubaDS" class="org.eclipse.jetty.plus.jndi.Resource">
      5. <Arg/>
      6. <Arg>jdbc/CubaDS</Arg>
      7. <Arg>
      8. <New class="org.apache.commons.dbcp2.BasicDataSource">
      9. <Set name="driverClassName">com.microsoft.sqlserver.jdbc.SQLServerDriver</Set>
      10. <Set name="url">jdbc:sqlserver://server_name;databaseName=db_name</Set>
      11. <Set name="username">username</Set>
      12. <Set name="password">password</Set>
      13. <Set name="maxIdle">2</Set>
      14. <Set name="maxTotal">20</Set>
      15. <Set name="maxWaitMillis">5000</Set>
      16. </New>
      17. </Arg>
      18. </New>
      19. </Configure>
    8. 数据库连接池需要下载以下这些 JAR 并且添加到 c:\work\jetty-base\lib\ext 目录。其中有两个文件可以在 deploy\tomcat\shared\lib 项目子目录中找到:

      1. commons-pool2-2.6.2.jar
      2. commons-dbcp2-2.7.0.jar
      3. commons-logging-1.2.jar
    9. 从 Jetty 安装目录复制 start.ini 文件至 c:\work\jetty-base 目录。在 c:\work\jetty-base\start.ini 文件开始处添加下列内容:

      1. --exec
      2. -Xdebug
      3. -agentlib:jdwp=transport=dt_socket,address=8787,server=y,suspend=n
      4. -Dapp.home=c:\work\app_home
      5. -Dlogback.configurationFile=c:\work\app_home\logback.xml
      6. app-jetty.xml
    10. 复制数据库的 JDBC 驱动到 c:\work\jetty-base\lib\ext 目录。可以从项目的 deploy\tomcat\lib 目录复制驱动。比如对于 PostgreSQL,驱动文件是 postgresql-42.2.5.jar

    11. 复制 WAR 文件到 c:\work\jetty-base\webapps 目录。

    12. c:\work\jetty-base 目录打开命令行窗口并且执行:

      1. java -jar c:\work\jetty-home\start.jar
    13. 在浏览器打开 http://localhost:8080/app