【问题标题】:JNDI datasource lookup failing using embedded Jetty使用嵌入式 Jetty 查找 JNDI 数据源失败
【发布时间】: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


    【解决方案1】:

    根据 ResourceRef_abtcCoreDatasource id 验证类条目。似乎是

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-19
      • 1970-01-01
      • 1970-01-01
      • 2013-06-29
      • 2018-09-18
      相关资源
      最近更新 更多