При разработке Java-приложений очень практично иметь быструю обратную связь с «реальной» средой. В этой статье я расскажу, как запустить Java-приложение с Maven во встроенном контейнере, будь то Jetty или Tomcat. Я покажу, как я настроил их для разработки проекта podcastpedia при поддержке сайта Podcastpedia.org .
Предпосылки
У вас должен быть установлен Maven и хотя бы Java 7 . В идеале вы могли бы настроить проект podcastpedia самостоятельно, чтобы увидеть его в действии.
Jetty Maven Плагин
Конфигурация плагина
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
<plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>${jetty.version}</version> <configuration> <jettyConfig>${project.basedir}/src/main/resources/config/jetty9.xml</jettyConfig> <stopKey>STOP</stopKey> <stopPort>9999</stopPort> <scanIntervalSeconds>5</scanIntervalSeconds> <scanTargets> <scanTarget>${project.basedir}/src/main</scanTarget> <scanTarget>${project.basedir}/src/test</scanTarget> </scanTargets> <contextXml>${project.basedir}/src/test/resources/jetty-context.xml</contextXml> <webAppConfig> <contextPath>/</contextPath> </webAppConfig> </configuration> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.connector.java.version}</version> </dependency> <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>${java.mail.version}</version> </dependency> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-jdbc</artifactId> <version>${tomcat.jdbc.version}</version> </dependency> </dependencies></plugin> |
Заметки:
- jettyConfig указывает на файл конфигурации Jetty; см. следующий раздел для большего количества объяснений
- определенные папки ( scanTargets ), где Jetty ищет изменения каждые 5 секунд ( scanInterval )
- определены внешние зависимости для подключения к базе данных и отправки электронной почты
Конфигурационный файл Jetty.xml
Конфигурационный файл Jetty xml
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
<?xml version="1.0" encoding="UTF-8"?><Configure class="org.eclipse.jetty.webapp.WebAppContext"> <New id="pcmdbDS" class="org.eclipse.jetty.plus.jndi.Resource"> <Arg>jdbc/pcmDB</Arg> <Arg> <New class="com.mysql.jdbc.jdbc2.optional.MysqlConnectionPoolDataSource"> <Set name="Url">jdbc:mysql://localhost:3307/pcmDB?allowMultiQueries=true </Set> <Set name="User">pcm</Set> <Set name="Password">pcm_pw</Set> </New> </Arg> </New> <New id="mailSessionId" class="org.eclipse.jetty.plus.jndi.Resource"> <Arg>mail/Session</Arg> <Arg> <New class="org.eclipse.jetty.jndi.factories.MailSessionReference"> <Set name="user">test-dev@podcastpedia.org</Set> <Set name="password">test-dev</Set> <Set name="properties"> <New class="java.util.Properties"> <Put name="mail.host">mail.podcastpedia.org</Put> <Put name="mail.debug">true</Put> <Put name="mail.transport.protocol">smtp</Put> <Put name="mail.smtp.port">25</Put> <Put name="mail.smtp.auth">true</Put> </New> </Set> </New> </Arg> </New></Configure> |
В файле конфигурации Jetty (jetty.xml) настроено следующее:
- Класс сервера (или подкласс, если он расширен) и глобальные параметры.
- ThreadPool (минимальная и максимальная резьба).
- Разъемы (порты, тайм-ауты, размеры буфера, протокол).
- Структура обработчика (обработчики по умолчанию и / или contextHandlerCollections).
- Диспетчер развертывания, который сканирует и развертывает веб-приложения и контексты.
- Службы входа, которые обеспечивают проверку подлинности.
- Журнал запросов.
Плагин Apache Tomcat Maven
Конфигурация плагина Apache Tomcat Maven
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
<plugin> <groupId>org.apache.tomcat.maven</groupId> <artifactId>tomcat7-maven-plugin</artifactId> <version>2.2</version> <configuration> <!-- http port --> <port>8080</port> <!-- application path always starts with /--> <path>/</path> <!-- optional path to a context file --> <contextFile>context.xml</contextFile> <!-- optional system propoerties you want to add --> <systemProperties> <appserver.base>${project.build.directory}/appserver-base</appserver.base> <appserver.home>${project.build.directory}/appserver-home</appserver.home> <derby.system.home>${project.build.directory}/appserver-base/logs</derby.system.home> <java.io.tmpdir>${project.build.directory}</java.io.tmpdir> </systemProperties> <!-- if you want to use test dependencies rather than only runtime --> <useTestClasspath>false</useTestClasspath> <!-- optional if you want to add some extra directories into the classloader --> <additionalClasspathDirs> <additionalClasspathDir></additionalClasspathDir> </additionalClasspathDirs> </configuration> <!-- For any extra dependencies needed when running embedded Tomcat (not WAR dependencies) add them below --> <dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <version>${mysql.connector.java.version}</version> </dependency> <dependency> <groupId>javax.mail</groupId> <artifactId>mail</artifactId> <version>${java.mail.version}</version> </dependency> <dependency> <groupId>org.apache.tomcat</groupId> <artifactId>tomcat-jdbc</artifactId> <version>${tomcat.jdbc.version}</version> </dependency> </dependencies></plugin> |
Заметки
- указать порт, на котором работает Tomcat
- указать contextFile, где Tomcat ищет конфигурацию
- определены внешние зависимости для подключения к базе данных и отправки электронной почты
context.xml
|
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
|
<Context> <Resource name="jdbc/pcmDB" auth="Container" type="javax.sql.DataSource" factory="org.apache.tomcat.jdbc.pool.DataSourceFactory" initialSize="5" maxActive="55" maxIdle="21" minIdle="13" timeBetweenEvictionRunsMillis="34000" minEvictableIdleTimeMillis="55000" validationQuery="SELECT 1" validationInterval="34" testOnBorrow="true" removeAbandoned="true" removeAbandonedTimeout="233" username="pcm" password="pcm_pw" driverClassName="com.mysql.jdbc.Driver" url="jdbc:mysql://localhost:3307/pcmDB?allowMultiQueries=true" /> <Resource name="mail/Session" auth="Container" type="javax.mail.Session" username="test-dev@podcastpedia.org" password="test-dev" mail.smtp.host="mail.podcastpedia.org" mail.smtp.port="25" mail.smtp.user="test-dev@podcastpedia.org" mail.transport.protocol="smtp" mail.smtp.auth="true" /> </Context> |
В context.xml определены ресурсы базы данных и электронной почты.
Вот и все… Web-приложения Java на базе Spring Framework, использующие легкие контейнеры сервлетов, представляющие собой настоящую альтернативу серверам JAVA EE и все расходы, которые с ними связаны.
Замечания:
Это простые конфигурации, но их достаточно для текущей разработки. Мой совет — прочитать соответствующую документацию для более сложных опций и возможностей.
Ресурсы
| Ссылка: | Запустите java-веб-приложения во встроенных контейнерах с Maven, Jetty и Tomcat от нашего партнера по JCG Адриана Матея в блоге Codingpedia.org . |