Java NoSuchMethodException:ManagedDataSource.getDriverClass()用于查看DB2数据源

Java NoSuchMethodException:ManagedDataSource.getDriverClass()用于查看DB2数据源,java,datasource,ibm-midrange,apache-tomee,Java,Datasource,Ibm Midrange,Apache Tomee,我尝试访问tomee.xml中定义的数据源(使用初始上下文)。我的TomEE+1.7.2在我的计算机上本地运行 /conf/tomee.xml中的数据源定义 <Resource id="as400-ds" type="DataSource"> JdbcDriver com.ibm.as400.access.AS400JDBCDriver JdbcUrl jdbc:as400://192.168.3.15;errors=full UserName

我尝试访问tomee.xml中定义的数据源(使用初始上下文)。我的TomEE+1.7.2在我的计算机上本地运行

/conf/tomee.xml中的数据源定义

<Resource id="as400-ds" type="DataSource">
    JdbcDriver  com.ibm.as400.access.AS400JDBCDriver
    JdbcUrl     jdbc:as400://192.168.3.15;errors=full
    UserName    test
    Password    1337
</Resource>
NoSuchMethodException StackTrace:(在查找方法中抛出):

但是,当我尝试在无状态容器中使用依赖项注入(@Resource)访问它时,它可以正常工作

先谢谢你


另外,最初的异常是一次性的。事实上无法转换为java.lang.Error,但这似乎是一个错误,因此我对其进行了调试以获得NoSuchMethodException。

好吧。。。看看这个:->实际上没有getDriverClass()。那为什么叫它?嗯……这是有效的XML,您看到的是“资源”节点的文本值。只有当您有一些有用的内容可以添加到问题中时,才请发表评论。tomee.xml中声明的资源有另一种语法,因此tomee.xml中的配置是好的(因为@Resource injection可以工作),所以问题仅限于initialcontext查找,对吗?那么问题一定是传递到
InitialContext(properties)
构造函数中的属性。你试过默认的ctor吗<代码>新建InitialContext().lookup(“java:comp/env/as400 ds”)@aguibert我需要向InitialContext传递一个参数,因为它是远程上下文。否则我会得到一个NoInitialContextException。我必须为java.naming.factory.initial设置一个值。
    public static void main(String[] args) {

    Properties contextConfig = new Properties();
    contextConfig.setProperty("java.naming.factory.initial",
            "org.apache.openejb.client.RemoteInitialContextFactory");
    contextConfig.setProperty("java.naming.provider.url", "http://127.0.0.1:8080/tomee/ejb");

    try {
        InitialContext context = new InitialContext(contextConfig);
        DataSource as400ds = (DataSource) context.lookup("as400-ds");
    } catch (NamingException e) {
        e.printStackTrace();
    }
java.lang.NoSuchMethodException: org.apache.openejb.resource.jdbc.managed.local.ManagedDataSource.getDriverClass()
at java.lang.Class.getMethod(Class.java:1773)
at org.apache.openejb.server.ejbd.JndiRequestHandler$DbcpDataSource.getDriverClassName(JndiRequestHandler.java:593)
at org.apache.openejb.server.ejbd.JndiRequestHandler.doLookup(JndiRequestHandler.java:276)
at org.apache.openejb.server.ejbd.JndiRequestHandler.processResponse(JndiRequestHandler.java:174)
at org.apache.openejb.server.ejbd.EjbDaemon.processJndiResponse(EjbDaemon.java:360)
at org.apache.openejb.server.ejbd.EjbDaemon.service(EjbDaemon.java:272)
at org.apache.openejb.server.ejbd.EjbServer.service(EjbServer.java:86)
at org.apache.openejb.server.httpd.ServerServlet.service(ServerServlet.java:58)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.tomee.catalina.OpenEJBValve.invoke(OpenEJBValve.java:44)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:957)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:620)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Thread.java:745)