我有一个Jetty 8.1.16的webapp,它使用JNDI来读取数据库连接信息。该应用程序使用maven构建,可以使用maven jetty插件在开发机器上成功运行。
但是,在部署到远程服务器时,jetty无法找到JDNI数据源:
SEVERE: [application] DataSource JNDI name not found.
javax.naming.NameNotFoundException; remaining name 'env/jdbc/Foo'
尝试以编程方式获取时:
DataSource datasource = (DataSource)ctx.lookup( "java:comp/env/jdbc/" + datasourceName);
使用jetty-env.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Configure PUBLIC "-//Mort Bay Consulting//DTD Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
<Configure id='wac' class="org.eclipse.jetty.webapp.WebAppContext">
<New id="Foo" class="org.eclipse.jetty.plus.jndi.Resource">
<Arg></Arg>
<Arg>jdbc/Foo</Arg>
<Arg>
<New class="com.microsoft.sqlserver.jdbc.SQLServerXADataSource">
<Set name="URL">Connection String</Set>
</New>
</Arg>
</New>
</Configure>
和web.xml中的资源定义:
<resource-ref>
<description>Foo DataSource Reference</description>
<res-ref-name>jdbc/Foo</res-ref-name>
<res-type>javax.sql.XADataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
start.ini
Options=Server,jsp,jmx,resource,websocket,ext,plus,annotations
etc/jetty.xml
etc/jetty-deploy.xml
etc/jetty-webapps.xml
etc/jetty-contexts.xml
etc/jetty-testrealm.xml
etc/jetty-plus.xml
etc/jetty-annotations.xml
此时我完全被击败了。
Using the fully qualifying name in jetty-env.xml doesn't work. Having the code only call the partial name doesn't work 将jetty plus添加到选项中并不起作用。