5.3.2. Развертывание WAR в Jetty

Рассмотрим пример сборки WAR-файлов и их развертывания на сервере Jetty. Предполагается, что приложение использует СУБД PostgreSQL.

  1. Используйте окно Deployment > WAR Settings в Studio или вручную добавьте в конец build.gradle задачу сборки buildWar:

    task buildWar(type: CubaWarBuilding) {
        appHome = '${app.home}'
        appProperties = ['cuba.automaticDatabaseUpdate': 'true']
        singleWar = false
    }

    В данном случае собирается два WAR-файла, отдельно для блоков Middleware и Web Client.

  2. Запустите сборку, выбрав buildWar через командную строку (подразумевается что Gradle wrapper создан заранее):

    gradlew buildWar

    В результате в подкаталоге build\distributions\war проекта будут созданы файлы app-core.war и app.war.

  3. Создайте домашний каталог приложения на сервере, например, c:\work\app_home.

  4. Загрузите и установите сервер Jetty, например в каталог c:\work\jetty-home. Данный пример тестировался на версии jetty-distribution-9.3.6.v20151106.zip.

  5. Создайте каталог c:\work\jetty-base, откройте в нем командную строку и выполните:

    java -jar c:\work\jetty-home\start.jar --add-to-start=http,jndi,deploy,plus,ext,resources
  6. Создайте файл c:\work\jetty-base\app-jetty.xml следующего содержания (для БД PostgreSQL с именем test):

    <?xml version="1.0"?>
    <!DOCTYPE Configure PUBLIC "-" "http://www.eclipse.org/jetty/configure_9_0.dtd">
    <Configure id="Server" class="org.eclipse.jetty.server.Server">
        <New id="CubaDS" class="org.eclipse.jetty.plus.jndi.Resource">
            <Arg></Arg>
            <Arg>jdbc/CubaDS</Arg>
            <Arg>
                <New class="org.postgresql.ds.PGSimpleDataSource">
                    <Set name="ServerName">localhost</Set>
                    <Set name="PortNumber">5432</Set>
                    <Set name="DatabaseName">test</Set>
                    <Set name="User">cuba</Set>
                    <Set name="Password">cuba</Set>
                </New>
            </Arg>
        </New>
    </Configure>

    Файл app-jetty.xml для MS SQL должен соответствовать следующему шаблону:

    <?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>
  7. Дополнительно (в частности, для MS SQL) может потребоваться скачать следующие JAR-файлы и добавить их в папку c:\work\jetty-base\lib\ext:

    commons-pool2-2.4.2.jar
    commons-dbcp2-2.1.1.jar
    commons-logging-1.2.jar
  8. Добавьте следующий текст в начало файла 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
  9. Скопируйте JDBC-драйвер используемой базы данных в каталог c:\work\jetty-base\lib\ext. Файл драйвера можно взять из каталога lib CUBA Studio, либо из каталога build\tomcat\lib проекта. В случае PostgreSQL это файл postgresql-9.1-901.jdbc4.jar.

  10. Скопируйте файлы WAR в каталог c:\work\jetty-base\webapps.

  11. Откройте командную строку в каталоге c:\work\jetty-base и выполните:

    java -jar c:\work\jetty-home\start.jar
  12. Откройте http://localhost:8080/app в веб-браузере.