Запуск веб-приложения в Jetty и Tomcat - PullRequest
9 голосов
/ 27 января 2011

У меня есть веб-приложение, которое я запускаю на Tomcat.Он использует коннектор MySQL, однако он не связан с war, скорее он включен в общий каталог lib Tomcat, так что я могу получить доступ к источнику данных через JNDI.

Я хотел бы сделать нечто подобноес Jetty (пока развивается), а точнее Jetty + Maven.Могу ли я включить jar-файл соединителя mysql в classpath при запуске Jetty через Maven (т.е. он не включен в файл war)?

Также следует отметить, что я использую Maven для своегопроцесс сборки и указание mysql-соединителя в качестве «предоставленной» области.

Ответы [ 4 ]

4 голосов
/ 27 января 2011

Дополнительно к предыдущему ответу: вы должны добавить к своему плагину в зависимости от конфигурации maven:

<plugin>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>jetty-maven-plugin</artifactId>
            <version>${jetty.version}</version>
            <configuration>
                <stopKey>blah-blah-blah</stopKey>
                <stopPort>9966</stopPort>
                <webAppConfig>
                    <contextPath>/</contextPath>
                </webAppConfig>
                <jettyEnvXml>${basedir}/src/jetty-env.xml</jettyEnvXml>
            </configuration>
            <dependencies>              
                <dependency>
                    <groupId>postgresql</groupId>
                    <artifactId>postgresql</artifactId>
                    <version>8.4-701.jdbc4</version>
                </dependency>
            </dependencies>
        </plugin>

И тогда вы можете использовать предоставленную область действия в зависимости основного проекта.Я сделал это прямо сейчас, и это работает.Спасибо за ваш вопрос (и Нишант тоже)

2 голосов
/ 27 января 2011

Непосредственно не отвечает на ваш вопрос, но так как я люблю переносимость в веб-приложениях, моя война будет содержать банку соединителя и пул соединений (например, super duper c3p0). Это означает, что контейнер больше не будет управлять соединением с базой данных для меня, и я не буду использовать JNDI для описания свойств соединения. Но теперь веб-приложение на 100% портативно и предсказуемо для tomcat, jetty, смолы, jboss и т. Д.

0 голосов
/ 28 января 2011

Возможно, вы могли бы попробовать использовать для этой цели Maven .war оверлеи , хотя я не знаю, работают ли они с другими зависимостями.

Так что в основном ваш проект будет

parent
|---- original-war
|---- new-war

Если ваш проект оригинальной войны имеет зависимость mysql как <scope>provided</scope>, но модуль new-war - это просто pom с <packaging>war</packaging>, в зависимости от исходной войны (для оверлея) зависимость mysql с область компиляции и запускает плагин Jetty (оставьте плагин Jetty вне модуля оригинальной войны). Если это сработает, вам придется столкнуться с незначительными неудобствами при разработке в одном модуле, но независимо от того, какое тестирование вы проводите в maven в другом модуле.

0 голосов
/ 27 января 2011
<Configure class="org.mortbay.jetty.webapp.WebAppContext">
<New class="org.mortbay.jetty.plus.naming.Resource">
    <Arg>hd-props</Arg>
    <Arg>
        <New class="java.util.Properties">
            <Call name="load">
                <Arg>
                    <New class="java.io.FileReader">
                        <Arg>cfg/dev-local.properties</Arg>
                    </New>
                </Arg>
            </Call>
        </New>
    </Arg>
</New>

Это файл jetty-env.xml, который указывает на файл .properties, который содержит все параметры подключения к БД.

    <bean id="jndi" class="org.springframework.jndi.JndiObjectFactoryBean">
        <property name="jndiName" value="java:comp/env/hd-props"/>
    </bean>
    <bean id="propertyConfigurer"
          class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="properties" ref="jndi"/>
    </bean>

Это конфигурация пружины (я тоже использую пружину)

А потом я вызываю mvn jetty: беги, и все отлично работает ...

...