В частности, я получил исполняемую войну, содержащую все зависимости. Приложение запускается без источника данных jndi, хотя шарм запускает его с источником данных jndi. Я считаю, что в такой конфигурации нет места для jetty.xml, поэтому jetty-env.xml тоже не годится, поскольку по умолчанию jetty не читает его. Я попытался использовать jetty-web.xml для конфигурации источника данных jndi, но пристань не смогла развернуть приложение, возвращающее код ошибки 503. Я использую Jetty9-M4. Попытка объединения tomcat и BoneCP с тем же результатом.
Стартовый класс:
import java.net.URL;
import java.security.ProtectionDomain;
import org.eclipse.jetty.server.*;
import org.eclipse.jetty.webapp.WebAppContext;
public final class Loader {
public static void main(String[] args) throws Exception
{
String jetty_home = "..";
int appli_port = 8080;
Server server = new Server(appli_port);
ProtectionDomain protectionDomain = Loader.class.getProtectionDomain();
URL location = protectionDomain.getCodeSource().getLocation();
WebAppContext webapp = new WebAppContext();
webapp.setContextPath("/");
webapp.setWar(location.toExternalForm());
server.setHandler(webapp);
server.start();
server.join();
}
}
причал-web.xml:
<Configure class="org.eclipse.jetty.webapp.WebAppContext">
<New id="testDS" class="org.eclipse.jetty.plus.jndi.Resource">
<Arg></Arg>
<Arg>jdbc/testDS</Arg>
<Arg>
<New class="com.jolbox.bonecp.BoneCPDataSource">
<Set name="driverClass">org.postgresql.Driver</Set>
<Set name="jdbcUrl">jdbc:postgresql://localhost:5432/testDS</Set>
<Set name="username">name</Set>
<Set name="password">password</Set>
<Set name="minConnectionsPerPartition">5</Set>
<Set name="maxConnectionsPerPartition">50</Set>
<Set name="acquireIncrement">5</Set>
<Set name="idleConnectionTestPeriod">30</Set>
</New>
</Arg>
</New>
</Configure>
Я подозреваю, что либо слишком поздно для jndi на этапе jetty-web, либо конфигурация просто неверна.
Извините за плохой английский.
Забыл упомянуть, что я использую Hibernate в качестве ORM.
web.xml содержит:
<resource-ref>
<description>Postgres datasource</description>
<res-ref-name>jdbc/testDS</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
Hibernate.cfg.xml содержит
<property name="hibernate.connection.datasource">java:comp/env/jdbc/testDS</property>
попытка
<property name="hibernate.connection.datasource">jdbc/testDS</property>
тоже не работает.
Небольшое примечание jetty-web.xml
, помещенное в WEB-INF
вашей войны, подходит для конфигурации ресурсов JNDI и используется по умолчанию.