【发布时间】:2016-06-23 08:19:22
【问题描述】:
我正在使用嵌入式 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);
这是我的 jetty-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: Nothing to bind name javax.sql.DataSource/default
并且在 java:comp/env/abtcDS 中查找 abtcDS 会返回
线程“main”中的异常 javax.naming.NameNotFoundException;剩余名称 'comp/env/abtcDS'
如果我尝试查找 java:comp/env 我得到 p>
javax.naming.NameNotFoundException;剩下的名字'env'
所以看起来整个 JNDI 系统没有初始化。
提前感谢您的帮助。
【问题讨论】:
标签: java jetty embedded-jetty