我使用的是嵌入式的Jetty 9.2,我试图建立需要通过JNDI来访问一个Oracle数据源。我相信我已经正确设置它,但它不是,尽管每天花费在网上搜索的最好的部分工作。任何人都可以帮忙吗?
这里是我的启动代码:
final String webdocs = "../abtc_core_war/src/main/webapp";
WebAppContext webapp = new WebAppContext(webdocs, "/");
webapp.setBaseResource(new ResourceCollection(Resource.newResource(webdocs)));
final HandlerCollection handlers = new HandlerCollection();
handlers.addHandler(webapp);
Server server = new Server();
ServerConnector connector=new ServerConnector(server);
connector.setPort(8080);
server.addConnector(connector);
server.setHandler(handlers);
//Enable parsing of jndi-related parts of web.xml and jetty-env.xml
org.eclipse.jetty.webapp.Configuration.ClassList classlist = org.eclipse.jetty.webapp.Configuration.ClassList.setServerDefault(server);
classlist.addAfter(
"org.eclipse.jetty.webapp.FragmentConfiguration",
"org.eclipse.jetty.plus.webapp.EnvConfiguration",
"org.eclipse.jetty.plus.webapp.PlusConfiguration");
try
{
server.start();
}
catch (Exception e)
{
server = null;
throw e;
}
InitialContext ic = new InitialContext();
DataSource ds = (DataSource)ic.lookup("java:comp/env/abtcDS");
String url = "http://localhost:" + connector.getLocalPort() + "/app";
System.out.println("URL ==> " + url);
这里是我的码头-env.xml(这是我在战争的WEB-INF目录下):
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure_9_0.dtd">
<Configure id="wac" class="org.eclipse.jetty.webapp.WebAppContext">
<New id="ResourceRef_abtcCoreDatasource" class="hello.org.eclipse.jetty.plus.jndi.Resource">
<Arg></Arg>
<Arg>abtcDS</Arg>
<Arg>
<New class="oracle.jdbc.OracleDriver">
<Set name="DriverType">thin</Set>
<Set name="URL">jdbc:oracle:thin:@nonprodcluster:1521/e1abtc_app</Set>
<Set name="User">user</Set>
<Set name="Password">pass</Set>
</New>
</Arg>
</New>
<New class="org.eclipse.jetty.plus.jndi.EnvEntry">
<Arg><Ref refid="wac"/></Arg>
<Arg>Test</Arg>
<Arg type="java.lang.String">Value</Arg>
</New>
</Configure>
这里是我的web.xml资源参考:
<resource-ref id="ResourceRef_abtcCoreDatasource">
<res-ref-name>abtcDS</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
<res-sharing-scope>Shareable</res-sharing-scope>
</resource-ref>
我得到两个错误。当我开始我得到的服务器
java.lang.IllegalStateException:没有绑定的名称为javax.sql.DataSource /默认
而在Java中的abtcDS的查找:comp / env的/ abtcDS回报
异常线程“main” javax.naming.NameNotFoundException;剩余名称 'comp / env的/ abtcDS'
如果我试图查找的java:comp / env的我得到
javax.naming.NameNotFoundException;剩余名称“ENV”
所以它看起来像整个JNDI系统未初始化。
在此先感谢您的帮助。
请验证是否对ResourceRef_abtcCoreDatasource ID类条目。看来它是
hello.org.eclipse.jetty.plus.jndi.Resource - > org.eclipse.jetty.plus.jndi.Resource