Пользовательский источник данных в WAS для подключения к ошибке neo4j - PullRequest
0 голосов
/ 27 июня 2019

Я пытаюсь создать новый источник данных для подключения к neo4j в Websphere 8.5 традиционных. Поскольку драйвер neo4j jdbc реализует только javax.sql.datasource, но не интерфейс connectionPoolDataSource. Чтобы обойти это, я создал нового провайдера JDBC, который указывает на пользовательский класс Neo4jConnectionPoolDataSource, и для него был определен полный путь к классу.

Я получаю приведенную ниже ошибку при попытке проверить соединение с источником данных с консоли Websphere.

DSRA8200W: Конфигурация источника данных: DSRA8020E: Предупреждение. Свойство databaseName не существует в классе данных источника com.test.ds.Neo4jConnectionPoolDataSource. DSRA8201W: Конфигурация источника данных: DSRA8040I: Не удалось подключиться к источнику данных jdbc / neo4jtest. Обнаружено com.ibm.ws.rsadapter.exceptions.DataStoreAdapterException: DSRA8101E: Класс DataSource нельзя использовать как однофазный: ClassCastException: com.sun.proxy. $ Proxy60 несовместим с javax.sql.PooledConnection. com.ibm.ws.exception.WsException: DSRA8101E: Класс DataSource нельзя использовать как однофазный: ClassCastException: com.sun.proxy. $ Proxy60 несовместим с javax.sql.PooledConnection

Стек ошибок из журналов сервера приложений [07/2/19 6: 36: 16: 248 UTC] 000000ec DSConfigurati W DSRA8201W: Конфигурация источника данных: DSRA8040I: Не удалось подключиться к источнику данных jdbc / neo4jtest. Обнаружено com.ibm.ws.rsadapter.exceptions.DataStoreAdapterException: DSRA8101E: Класс DataSource нельзя использовать как однофазный: ClassCastException: com.sun.proxy. $ Proxy60 несовместим с javax.sql.PooledConnection. com.ibm.ws.exception.WsException: DSRA8101E: Класс DataSource нельзя использовать как однофазный: ClassCastException: com.sun.proxy. $ Proxy60 несовместим с javax.sql.PooledConnection в com.ibm.ws.rsadapter.exceptions.DataStoreAdapterException. (DataStoreAdapterException.java:256) в com.ibm.ws.rsadapter.exceptions.DataStoreAdapterException. (DataStoreAdapterException.java:205) в com.ibm.ws.rsadapter.AdapterUtil.createDataStoreAdapterException (AdapterUtil.java:441) на com.ibm.ws.rsadapter.DSConfigHelper.getPooledConnection (DSConfigHelper.java:1340) на com.ibm.ws.rsadapter.DSConfigHelper.getPooledConnection (DSConfigHelper.java:1196) на com.ibm.ws.rsadapter.DSConfigurationHelper.getConnectionFromDSOrPooledDS (DSConfigurationHelper.java:2076) на com.ibm.ws.rsadapter.DSConfigurationHelper.getConnectionFromDSOrPooledDS (DSConfigurationHelper.java:1952) на com.ibm.ws.rsadapter.DSConfigurationHelper.testConnectionForGUI (DSConfigurationHelper.java:2820) at sun.reflect.GeneratedMethodAccessor548.invoke (неизвестный источник) at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:56) в java.lang.reflect.Method.invoke (Method.java:620) в com.ibm.ws.management.DataSourceConfigHelperMBean.testConnectionToDataSource2 (DataSourceConfigHelperMBean.java:556) на com.ibm.ws.management.DataSourceConfigHelperMBean.testConnection (DataSourceConfigHelperMBean.java:484) at sun.reflect.NativeMethodAccessorImpl.invoke0 (собственный метод) at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:95) at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:56) в java.lang.reflect.Method.invoke (Method.java:620) at sun.reflect.misc.Trampoline.invoke (MethodUtil.java:88) at sun.reflect.GeneratedMethodAccessor41.invoke (неизвестный источник) at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:56) в java.lang.reflect.Method.invoke (Method.java:620) at sun.reflect.misc.MethodUtil.invoke (MethodUtil.java:292) в javax.management.modelmbean.RequiredModelMBean $ 4.run (RequiredModelMBean.java:1261) в java.security.AccessController.doPrivileged (AccessController.java:426)по адресу java.security.ProtectionDomain $ 1.doIntersectionPrivilege (ProtectionDomain.java:92) по адресу javax.management.modelmbean.RequiredModelMBean.invokeMethod (RequiredModelMBean.java:1255) по адресу javax.management.moquBMeMeMeMeBeMeMeBeMв com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke (DefaultMBeanServerInterceptor.java:832) в com.sun.jmx.mbeanserver.JmxMBeanServer.invoke (JmxMBeanServer.jmin.Imp.Im.выполнить (AdminServiceImpl.java:1350) в com.ibm.ws.security.util.AccessController.doPrivileged (AccessController.java:118) в com.ibm.ws.management.AdminServiceImpl.invoke (AdminServiceImpl.java:1243) в com.ibm.ws.management.commands.AdminServiceCommands $ InvokeCmd.execute (AdminServiceCommands.java:251) в com.ibm.ws.console.core.mbean.MBeanHelper.invoke (MBeanHelper.java:246) в com.ibm.ws.console.core.mbean.ResourceMBeanHelper.testNode (ResourceMBeanHelper.java:860) в com.ibm.ws.console.core.mbean.ResourceMBeanHelper.testConnection (ResourceMBeanHelper.java:292) в com.ibm.ws.console.resources.database.jdbc.WAS40DataSourceDetailAction.execute (WAS40DataSourceDetailAction.java:195) в org.apache.struts.cess.propro.javax.servlet.http.HttpServlet.service (HttpServlet.java:595) в javax.servlet.http.HttpServlet.service (HttpServlet.java:668) в com.ibm.ws.webcontainer.servlet.ServletWerlet.Java: 1238) на com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest (ServletWrapper.java:782) на com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest (ServletWrapper.java:48m) на com.ws.webcontainer.servlet.get (WebAppFilterChain.java:136) по адресу com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter (WebAppFilterChain.java:79) по адресу com.ibm.ws.webcontainer.filter.WebAppFilterManager )FilterManager.FFна com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters (WebAppFilterManager.java:1107) на com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch (WebAppRequwava.tain.13)..webapp.WebAppRequestDispatcher.forward (WebAppRequestDispatcher.java:195) в org.apache.struts.action.RequestProcessor.doForward (неизвестный источник) в org.apache.struts.tiles.TilesRequestProcessor.doForward (неизвестный источник) в org илиstruts.action.RequestProcessor.processForwardConfig (Неизвестный источник) в org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig (Неизвестный источник) в org.apache.struts.action.RequestProcessor.process (Неизвестный источник) в org.apache.struts.action.ActionServlet.process (Неизвестный источник) в org.apache.struts.action.ActionServlet.doPost (Неизвестный источник) на javax.servlet.http.HttpServlet.service (HttpServlet.java:595) на javax.servlet.http.HttpServlet.service (HttpServlet.java:668) на com.ibm.ws.wecontainservlet.ServletWrapper.service (ServletWrapper.java:1238) на com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest (ServletWrapper.java:782) на com.ibm.ws.webcontainer.servest.ServletWrapper.ServletWrapper.Java: 481) по адресу com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest (ServletWrapperImpl.java:178) по адресу com.ibm.ws.webcontainer.filter.WebAppFilterChain.invokeTarget (WebAbF): comAppF..ws.webcontainer.filter.WebAppFilterChain.doFilter (WebAppFilterChain.java:97) в com.ibm.ws.console.core.servlet.WSCUrlFilter.setUpCommandAssistance (WSCUrlFilter.java:967)в com.ibm.ws.console.core.servlet.WSCUrlFilter.continueStoringTaskState (WSCUrlFilter.java:514) в com.ibm.ws.console.core.servlet.WSCUrlFilter.doFilter (WSCUrlFilter.java:ibm в com).ws.webcontainer.filter.FilterInstanceWrapper..doFilter (WebAppFilterManager.java:967) при com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters (WebAppFilterManager.java:1107) при com.ibm.ws.webcontainer.webapp.WebApp.handleRequest (WebApp.java:3980) на com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest (WebGroup.java:304) на com.ibm.ws.webcontainer.WebContainer.handleRequest (WebContainer.java:1016) на com.ibm.ws.webcontainer.WSWebContainer.handleRequest (WSWebContainer.java:1817) в com.ibm.ws.webcontainer.channel.WCChannelLink.ready (WCChannelLink.java:200) в com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination (HttpInboundLink.java:463) в com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest (HttpInboundLink.java:530) в com.ibm.ws.http.channel.inbound.implinkInIn.processRequest (HttpInboundLink.java:316) по адресу com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete (HttpICLReadCallback.java:88) по адресу com.ibm.ws.ssl.channel.impl.SSLReadSallpleCom.завершено (SSLReadServiceContext.java:1820) по адресу com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted (AioReadCompletionListener.java:175) по адресу com.ibm.io.async.AbstractAsyncFuture.java):на com.ibm.io.async.AsyncChannelFuture.fireCompletionActions (AsyncChannelFuture.java:161) на com.ibm.io.async.AsyncFuture.completed (AsyncFuture.java:138) на com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204) в com.ibm.io.async.ResultHandler.runEventProcessingLoop (ResultHandler.java:775) в com.ibm.io.async.ResultHandler $ 2.run (РезультатHandler.java:905) at com.ibm.ws.util.ThreadPool $ Worker.run (ThreadPool.java:1892)

[02.07.19 6: 36: 16: 273 UTC] 000000ec DataSourceConE DSRA8040I: Не удалось подключиться к источнику данных "".Обнаружено java.lang.Exception: DSRA8101E: класс DataSource нельзя использовать как однофазный: ClassCastException: com.sun.proxy. $ Proxy60 несовместим с javax.sql.PooledConnection на com.ibm.ws.rsadapter.AdapterUtil.createDataStoreAdaptilException (.java: 441) по адресу com.ibm.ws.rsadapter.DSConfigHelper.getPooledConnection (DSConfigHelper.java:1340) по адресу com.ibm.ws.rsadapter.DSConfigHelper.getPooledConnection (DSConfigHelper.java:ibw. comw.ws. com).rsadapter.DSConfigurationHelper.getConnectionFromDSOrPooledDS (DSConfigurationHelper.java:2076) по адресу com.ibm.ws.rsadapter.DSConfigurationHelper.getConnectionFromDSOrPooledDS (DSConfigurationHelper.jperf.javaat sun.reflect.GeneratedMethodAccessor548.invoke (неизвестный источник) в sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:56) в java.lang.reflect.Method.invoke (Method.java: 6.management.DataSourceConfigHelperMBean.testConnectionToDataSource2 (DataSourceConfigHelperMBean.java:556) по адресу com.ibm.ws.management.DataSourceConfigHelperMBean.testConnection (DataSourceConfigHelperMBean.java:Not)NativeMethodAccessorImpl.java:95) в sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:56) в java.lang.reflect.Method.invoke (Method.java:620) в sun.rempoline.in.java: 88) at sun.reflect.GeneratedMethodAccessor41.invoke (неизвестный источник)at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:56) в java.lang.reflect.Method.invoke (Method.java:620) at sun.reflect.misc.MethodUtil.invoke (MethodUtil.java:292) в javax.management.modelmbean.RequiredModelMBean $ 4.run (RequiredModelMBean.java:1261) в java.security.AccessController.doPrivileged (AccessController.java:426) в java.security.ProtectionDomain $ 1.doIntersectionPrivilege (ProtectionDomain.java:92) в javax.management.modelmbean.RequiredModelMBean.invokeMethod (RequiredModelMBean.java:1255) в javax.management.modelmbean.RequiredModelMBean.invoke (RequiredModelMBean.java:1093) в com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke (DefaultMBeanServerInterceptor.java:832) в com.sun.jmx.mbeanserver.JmxMBeanServer.invoke (JmxMBeanServer.java:814) на com.ibm.ws.management.AdminServiceImpl $ 1.run (AdminServiceImpl.java:1350) в com.ibm.ws.security.util.AccessController.doPrivileged (AccessController.java:118) на com.ibm.ws.management.AdminServiceImpl.invoke (AdminServiceImpl.java:1243) на com.ibm.ws.management.commands.AdminServiceCommands $ InvokeCmd.execute (AdminServiceCommands.java:251) на com.ibm.ws.console.core.mbean.MBeanHelper.invoke (MBeanHelper.java:246) в com.ibm.ws.console.core.mbean.ResourceMBeanHelper.testNode (ResourceMBeanHelper.java:860) в com.ibm.ws.console.core.mbean.ResourceMBeanHelper.testConnection (ResourceMBeanHelper.java:292) в com.ibm.ws.console.resources.database.jdbc.WAS40DataSourceDetailAction.execute (WAS40DataSourceDetailAction.java:195) в org.apache.struts.action.RequestProcessor.processActionPerform (Неизвестный источник) в org.apache.struts.action.RequestProcessor.process (неизвестный источник) в org.apache.struts.action.ActionServlet.process (неизвестный источник) в org.apache.struts.action.ActionServlet.doPost (неизвестный источник) на javax.servlet.http.HttpServlet.service (HttpServlet.java:595) на javax.servlet.http.HttpServlet.service (HttpServlet.java:668) на com.ibm.ws.webcontainer.servlet.ServletWrapper.service (ServletWrapper.java:1238) на com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest (ServletWrapper.java:782) на com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest (ServletWrapper.java:481) в com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest (ServletWrapperImpl.java:178) на com.ibm.ws.webcontainer.filter.WebAppFilterChain.invokeTarget (WebAppFilterChain.java:136) на com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter (WebAppFilterChain.java:79) на com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter (WebAppFilterManager.java:967) на com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters (WebAppFilterManager.java:1107) на com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch (WebAppRequestDispatcher.java:1389) на com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward (WebAppRequestDispatcher.java:195) в org.apache.struts.action.RequestProcessor.doForward (неизвестный источник) в org.apache.struts.tiles.TilesRequestProcessor.doForward (неизвестный источник) в org.apache.struts.action.RequestProcessor.processForwardConfig (неизвестный источник) в org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig (неизвестный источник) в org.apache.struts.action.RequestProcessor.process (неизвестный источник) в org.apache.struts.action.ActionServlet.process (неизвестный источник) в org.apache.struts.action.ActionServlet.doPost (неизвестный источник) на javax.servlet.http.HttpServlet.service (HttpServlet.java:595) на javax.servlet.http.HttpServlet.service (HttpServlet.java:668) на com.ibm.ws.webcontainer.servlet.ServletWrapper.service (ServletWrapper.java:1238) на com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest (ServletWrapper.java:782) на com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest (ServletWrapper.java:481)по адресу com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest (ServletWrapperImpl.java:178) по адресу com.ibm.ws.webcontainer.filter.WebAppFilterChain.invokeTarget (WebAppFilterCiber.web.web.web.web).filter.WebAppFilterChain.doFilter (WebAppFilterChain.java:97) при com.ibm.ws.console.core.servlet.WSCUrlFilter.setUpCommandAssistance (WSCUrlFilter.java:967) при com.ibm.ws.console.core.servlet.WSCUrlFilter.continueStoringTaskState (WSCUrlFilter.java:514) при com.ibm.ws.console.core.servlet.WSCUrlFilter.doFilter (WSCUrlFilter.java:335) в com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter (FilterInstanceWrapper.java: 195) на com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter (WebAppFilterChain.java:91) на com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter (WebAppFilterMib67.java) jws.webcontainer.filter.WebAppFilterManager.invokeFilters (WebAppFilterManager.java:1107) в com.ibm.ws.webcontainer.webapp.WebApp.handleRequest (WebApp.java:3980) вcom.ibm.ws.webcontainer.webapp.WebGroup.handleRequest (WebGroup.java:304) в com.ibm.ws.webcontainer.WebContainer.handleRequest (WebContainer.java:1016) в com.ibm.ws.webcontainer.WSWebContainer.handleRequest (WSWebContainer.java:1817) по адресу com.ibm.ws.webcontainer.channel.WCChannelLink.ready (WCChannelLink.java:200) по адресу com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscriminationLink. HttpIn.Java: 463) в com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest (HttpInboundLink.java:530) в com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest (HttpInJava: 316) на com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete (HttpICLReadCallback.java:88) на com.ibm.ws.ssl.channel.impl.SSLReadServiceContext $ SSLReadCompletedContete.Java: 1820) на com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted (AioReadCompletionListener.java:175) на com.ibm.io.async.AbstractAsyncFuture.invokeCallback (AbstractAsyncFuture.java:217) на com.ibm.io.async.AsyncChannelFuture.fireCompletionActions (AsyncChannelFuture.java:161) на com.ibm.io.async.AsyncFuture.completed (AsyncFuture.java:138) на com.ibm.io.async.ResultHandler.complete (ResultHandler.java:204) на com.ibm.io.async.ResultHandler.runEventProcessingLoop (ResultHandler.java:775) на com.ibm.io.async.ResultHandler $ 2.run (ResultHandler.java: ResultHandler.j:905) at com.ibm.ws.util.ThreadPool $ Worker.run (ThreadPool.java:1892)

Любые указатели на это будут очень полезны.

Фрагмент пользовательского класса:

public class Neo4jConnectionPoolDataSource extends org.neo4j.jdbc.Neo4jDataSource implements javax.sql.ConnectionPoolDataSource {
    private PrintWriter pw;
    PooledConnection p1;

        public Connection getConnection() throws SQLException {
      return DriverManager.getConnection("jdbc:neo4j:bolt://localhost:port");
                 }

       public Connection getConnection(String username, String password) throws SQLException {
       return DriverManager.getConnection("jdbc:neo4j:bolt://localhost:port");
    }

    @Override
    public PrintWriter getLogWriter() throws SQLException {
        return pw;
    }

    @Override
    public void setLogWriter(PrintWriter out) throws SQLException {
        pw = out;
    }

    @Override
    public void setLoginTimeout(int seconds) throws SQLException {
    }

    @Override
    public int getLoginTimeout() throws SQLException {
        return 0;
    }
    @Override
    public <T> T unwrap(Class<T> iface) throws SQLException {
         return ConnectionPoolDataSource.class.equals(iface) ? (T) this : super.unwrap(iface);
    }

    @Override
    public boolean isWrapperFor(Class<?> iface) throws SQLException {
        return ConnectionPoolDataSource.class.equals(iface) || super.isWrapperFor(iface);
    }   

    @Override
    public PooledConnection getPooledConnection() throws SQLException {
        System.out.println("Inside getPooledConnection with args + Neo4jConnectionPoolDataSource");
        return new Neo4jPooledConnection(null,null);
            }
    @Override
    public PooledConnection getPooledConnection(String paramString1,
            String paramString2) throws SQLException {

        return new Neo4jPooledConnection("username","password");
    }
    public class Neo4jPooledConnection implements PooledConnection {

           private Connection con;
           private  String user;
           private  String password;

           public Neo4jPooledConnection(String user, String password)
           {
               this.con = con;
               this.user = user;
               this.password = password;


          }


      public void addConnectionEventListener(ConnectionEventListener connectionEventListener)
     {     }

      public void removeConnectionEventListener(ConnectionEventListener connectionEventListener)
      {  }


       public void close()
        throws SQLException
     {
           if (con != null) {
               con.close();
               con = null;
           }
            }


      public Connection getConnection() throws SQLException {

            if (con == null || con.isClosed()) {
                con = ((user == null)
                        ? Neo4jConnectionPoolDataSource.this.getConnection()
                        : Neo4jConnectionPoolDataSource.this.getConnection(user, password));
                return con;
            } else
            { throw new IllegalStateException();}
        }
     }
}

1 Ответ

0 голосов
/ 27 июня 2019

предупреждение, DSRA8200W: DataSource Configuration: DSRA8020E: Warning: The property 'databaseName' does not exist on the DataSource class com.test.ds.Neo4jConnectionPoolDataSource происходит потому, что ваш класс Neo4jConnectionPoolDataSource не определяет метод установки setDatabaseName(String databaseName), а свойство databaseName предположительно сконфигурировано для источника данных, поэтому WebSphere Application Server не знает, что делать с этим значением, и регистрирует предупреждение. Я ожидаю, что предупреждение совершенно не связано с другой ошибкой (ClassCastException), которую вы видите.

ClassCastException очень необычен, поскольку в нем упоминается динамический прокси-экземпляр, и я не вижу динамического прокси в реализации, которую вы опубликовали. ClassCastException: com.sun.proxy.$Proxy60 incompatible with javax.sql.PooledConnection. Это было бы легче отладить, если бы вы могли найти полный стек исключения. Найдите в журналах ffdc сервера приложений тот, который содержит ClassCastException, и отправьте полный стек для этой проблемы, если это еще не ясно из той, где лежит ошибка.

...