更具体地说,我得到了包含所有依赖项的可执行文件。 应用程序启动没有jndi数据源,就像使用jndi数据源运行它的魅力失败了。 我相信在这样的配置中没有jetty.xml的地方所以jetty-env.xml也没有去,因为jetty默认不会读它。我尝试使用jetty-web.xml进行jndi数据源配置,但是jetty无法部署应用程序返回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迟到是错误的。
抱歉英文不好。
忘记提及我使用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>
也不工作。
作为JNDI资源配置的jetty-web.xml
放置在WEB-INF
中,可以使用它,默认情况下会使用它。
答案 0 :(得分:0)
jetty-env.xml
文件应自动从WEB-INF / jetty-env.xml中获取,请参见此处:http://www.eclipse.org/jetty/documentation/current/jetty-env-xml.html。我建议使用jetty-env.xml
而不是jetty-web.xml
。
您是否还可以展示如何在应用程序中执行JNDI查找?也许正确初始化JNDI数据源但JNDI名称不正确?
这里有一些jetty JNDI示例:http://www.eclipse.org/jetty/documentation/current/jndi-datasource-examples.html
<强>更新强>: 看起来像Jetty在运行嵌入式时不会自动拾取它。试试这个:
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());
// setup JNDI
EnvConfiguration envConfiguration = new EnvConfiguration();
URL url = new File("path to jetty-env.xml").toURI().toURL();
envConfiguration.setJettyEnvXml(url);
webapp.setConfigurations(new Configuration[] {new WebInfConfiguration(), envConfiguration, new WebXmlConfiguration()});
server.setHandler(webapp);
server.start();
server.join();
}
(见http://blog.armhold.com/2011/12/27/how-to-get-jndi-working-with-wicket-1-5-and-jetty-7-5/)