JNDI数据源查找失败使用嵌入的Jetty

问题描述 投票:1回答:1

我使用的是嵌入式的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系统未初始化。

在此先感谢您的帮助。

java jetty embedded-jetty
1个回答
0
投票

请验证是否对ResourceRef_abtcCoreDatasource ID类条目。看来它是

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

© www.soinside.com 2019 - 2024. All rights reserved.