gpt4 book ai didi

java - 使用嵌入式 Jetty 进行 JNDI 数据源查找失败

转载 作者:太空宇宙 更新时间:2023-11-04 12:50:27 25 4
gpt4 key购买 nike

我正在使用嵌入式 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 (位于我的 war 的 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 for name javax.sql.DataSource/default

在 java:comp/env/abtcDS 处查找 abtcDS 将返回

Exception in thread "main" javax.naming.NameNotFoundException; remaining name 'comp/env/abtcDS'

如果我尝试查找 java:comp/env 我得到

javax.naming.NameNotFoundException; remaining name 'env'

所以看起来整个 JNDI 系统没有初始化。

预先感谢您的帮助。

最佳答案

根据 ResourceRef_abtcCoreDatasource id 验证类条目。看来是

hello.org.eclipse.jetty.plus.jndi.Resource ->org.eclipse.jetty.plus.jndi.Resource

关于java - 使用嵌入式 Jetty 进行 JNDI 数据源查找失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35883442/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com