0
votes

I am trying to create a new datasource for connecting to neo4j in Websphere 8.5 traditional. As the neo4j jdbc driver only implements the javax.sql.datasource, but not the connectionPoolDataSource interface. To workaround that I have created a new JDBC provider which is pointing to a custom Neo4jConnectionPoolDataSource class, and complete classpath has been defined for the same.

I am getting the below error while trying to test the datasource connection from the Websphere console.

DSRA8200W: DataSource Configuration: DSRA8020E: Warning: The property 'databaseName' does not exist on the DataSource class com.test.ds.Neo4jConnectionPoolDataSource. DSRA8201W: DataSource Configuration: DSRA8040I: Failed to connect to the DataSource jdbc/neo4jtest. Encountered com.ibm.ws.rsadapter.exceptions.DataStoreAdapterException: DSRA8101E: DataSource class cannot be used as one-phase: ClassCastException: com.sun.proxy.$Proxy60 incompatible with javax.sql.PooledConnection. com.ibm.ws.exception.WsException: DSRA8101E: DataSource class cannot be used as one-phase: ClassCastException: com.sun.proxy.$Proxy60 incompatible with javax.sql.PooledConnection

Error stack from appserver logs [7/2/19 6:36:16:248 UTC] 000000ec DSConfigurati W DSRA8201W: DataSource Configuration: DSRA8040I: Failed to connect to the DataSource jdbc/neo4jtest. Encountered com.ibm.ws.rsadapter.exceptions.DataStoreAdapterException: DSRA8101E: DataSource class cannot be used as one-phase: ClassCastException: com.sun.proxy.$Proxy60 incompatible with javax.sql.PooledConnection. com.ibm.ws.exception.WsException: DSRA8101E: DataSource class cannot be used as one-phase: ClassCastException: com.sun.proxy.$Proxy60 incompatible with javax.sql.PooledConnection at com.ibm.ws.rsadapter.exceptions.DataStoreAdapterException.(DataStoreAdapterException.java:256) at com.ibm.ws.rsadapter.exceptions.DataStoreAdapterException.(DataStoreAdapterException.java:205) at com.ibm.ws.rsadapter.AdapterUtil.createDataStoreAdapterException(AdapterUtil.java:441) at com.ibm.ws.rsadapter.DSConfigHelper.getPooledConnection(DSConfigHelper.java:1340) at com.ibm.ws.rsadapter.DSConfigHelper.getPooledConnection(DSConfigHelper.java:1196) at com.ibm.ws.rsadapter.DSConfigurationHelper.getConnectionFromDSOrPooledDS(DSConfigurationHelper.java:2076) at com.ibm.ws.rsadapter.DSConfigurationHelper.getConnectionFromDSOrPooledDS(DSConfigurationHelper.java:1952) at com.ibm.ws.rsadapter.DSConfigurationHelper.testConnectionForGUI(DSConfigurationHelper.java:2820) at sun.reflect.GeneratedMethodAccessor548.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:56) at java.lang.reflect.Method.invoke(Method.java:620) at com.ibm.ws.management.DataSourceConfigHelperMBean.testConnectionToDataSource2(DataSourceConfigHelperMBean.java:556) at com.ibm.ws.management.DataSourceConfigHelperMBean.testConnection(DataSourceConfigHelperMBean.java:484) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:95) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:56) at java.lang.reflect.Method.invoke(Method.java:620) at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:88) at sun.reflect.GeneratedMethodAccessor41.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:56) at java.lang.reflect.Method.invoke(Method.java:620) at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:292) at javax.management.modelmbean.RequiredModelMBean$4.run(RequiredModelMBean.java:1261) at java.security.AccessController.doPrivileged(AccessController.java:426) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:92) at javax.management.modelmbean.RequiredModelMBean.invokeMethod(RequiredModelMBean.java:1255) at javax.management.modelmbean.RequiredModelMBean.invoke(RequiredModelMBean.java:1093) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:832) at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:814) at com.ibm.ws.management.AdminServiceImpl$1.run(AdminServiceImpl.java:1350) at com.ibm.ws.security.util.AccessController.doPrivileged(AccessController.java:118) at com.ibm.ws.management.AdminServiceImpl.invoke(AdminServiceImpl.java:1243) at com.ibm.ws.management.commands.AdminServiceCommands$InvokeCmd.execute(AdminServiceCommands.java:251) at com.ibm.ws.console.core.mbean.MBeanHelper.invoke(MBeanHelper.java:246) at com.ibm.ws.console.core.mbean.ResourceMBeanHelper.testNode(ResourceMBeanHelper.java:860) at com.ibm.ws.console.core.mbean.ResourceMBeanHelper.testConnection(ResourceMBeanHelper.java:292) at com.ibm.ws.console.resources.database.jdbc.WAS40DataSourceDetailAction.execute(WAS40DataSourceDetailAction.java:195) at org.apache.struts.action.RequestProcessor.processActionPerform(Unknown Source) at org.apache.struts.action.RequestProcessor.process(Unknown Source) at org.apache.struts.action.ActionServlet.process(Unknown Source) at org.apache.struts.action.ActionServlet.doPost(Unknown Source) at javax.servlet.http.HttpServlet.service(HttpServlet.java:595) at javax.servlet.http.HttpServlet.service(HttpServlet.java:668) at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1238) at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:782) at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:481) at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178) at com.ibm.ws.webcontainer.filter.WebAppFilterChain.invokeTarget(WebAppFilterChain.java:136) at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:79) at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:967) at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1107) at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:1389) at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:195) at org.apache.struts.action.RequestProcessor.doForward(Unknown Source) at org.apache.struts.tiles.TilesRequestProcessor.doForward(Unknown Source) at org.apache.struts.action.RequestProcessor.processForwardConfig(Unknown Source) at org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(Unknown Source) at org.apache.struts.action.RequestProcessor.process(Unknown Source) at org.apache.struts.action.ActionServlet.process(Unknown Source) at org.apache.struts.action.ActionServlet.doPost(Unknown Source) at javax.servlet.http.HttpServlet.service(HttpServlet.java:595) at javax.servlet.http.HttpServlet.service(HttpServlet.java:668) at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1238) at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:782) at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:481) at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178) at com.ibm.ws.webcontainer.filter.WebAppFilterChain.invokeTarget(WebAppFilterChain.java:136) at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:97) at com.ibm.ws.console.core.servlet.WSCUrlFilter.setUpCommandAssistance(WSCUrlFilter.java:967) at com.ibm.ws.console.core.servlet.WSCUrlFilter.continueStoringTaskState(WSCUrlFilter.java:514) at com.ibm.ws.console.core.servlet.WSCUrlFilter.doFilter(WSCUrlFilter.java:335) at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:195) at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:91) at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:967) at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1107) at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3980) at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:304) at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:1016) at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1817) at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:200) at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:463) at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:530) at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:316) at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:88) at com.ibm.ws.ssl.channel.impl.SSLReadServiceContext$SSLReadCompletedCallback.complete(SSLReadServiceContext.java:1820) at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:175) at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217) at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161) at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138) at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204) at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775) at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905) at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1892)

[7/2/19 6:36:16:273 UTC] 000000ec DataSourceCon E DSRA8040I: Failed to connect to the DataSource "". Encountered java.lang.Exception: DSRA8101E: DataSource class cannot be used as one-phase: ClassCastException: com.sun.proxy.$Proxy60 incompatible with javax.sql.PooledConnection at com.ibm.ws.rsadapter.AdapterUtil.createDataStoreAdapterException(AdapterUtil.java:441) at com.ibm.ws.rsadapter.DSConfigHelper.getPooledConnection(DSConfigHelper.java:1340) at com.ibm.ws.rsadapter.DSConfigHelper.getPooledConnection(DSConfigHelper.java:1196) at com.ibm.ws.rsadapter.DSConfigurationHelper.getConnectionFromDSOrPooledDS(DSConfigurationHelper.java:2076) at com.ibm.ws.rsadapter.DSConfigurationHelper.getConnectionFromDSOrPooledDS(DSConfigurationHelper.java:1952) at com.ibm.ws.rsadapter.DSConfigurationHelper.testConnectionForGUI(DSConfigurationHelper.java:2820) at sun.reflect.GeneratedMethodAccessor548.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:56) at java.lang.reflect.Method.invoke(Method.java:620) at com.ibm.ws.management.DataSourceConfigHelperMBean.testConnectionToDataSource2(DataSourceConfigHelperMBean.java:556) at com.ibm.ws.management.DataSourceConfigHelperMBean.testConnection(DataSourceConfigHelperMBean.java:484) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:95) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:56) at java.lang.reflect.Method.invoke(Method.java:620) at sun.reflect.misc.Trampoline.invoke(MethodUtil.java:88) at sun.reflect.GeneratedMethodAccessor41.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:56) at java.lang.reflect.Method.invoke(Method.java:620) at sun.reflect.misc.MethodUtil.invoke(MethodUtil.java:292) at javax.management.modelmbean.RequiredModelMBean$4.run(RequiredModelMBean.java:1261) at java.security.AccessController.doPrivileged(AccessController.java:426) at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:92) at javax.management.modelmbean.RequiredModelMBean.invokeMethod(RequiredModelMBean.java:1255) at javax.management.modelmbean.RequiredModelMBean.invoke(RequiredModelMBean.java:1093) at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:832) at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:814) at com.ibm.ws.management.AdminServiceImpl$1.run(AdminServiceImpl.java:1350) at com.ibm.ws.security.util.AccessController.doPrivileged(AccessController.java:118) at com.ibm.ws.management.AdminServiceImpl.invoke(AdminServiceImpl.java:1243) at com.ibm.ws.management.commands.AdminServiceCommands$InvokeCmd.execute(AdminServiceCommands.java:251) at com.ibm.ws.console.core.mbean.MBeanHelper.invoke(MBeanHelper.java:246) at com.ibm.ws.console.core.mbean.ResourceMBeanHelper.testNode(ResourceMBeanHelper.java:860) at com.ibm.ws.console.core.mbean.ResourceMBeanHelper.testConnection(ResourceMBeanHelper.java:292) at com.ibm.ws.console.resources.database.jdbc.WAS40DataSourceDetailAction.execute(WAS40DataSourceDetailAction.java:195) at org.apache.struts.action.RequestProcessor.processActionPerform(Unknown Source) at org.apache.struts.action.RequestProcessor.process(Unknown Source) at org.apache.struts.action.ActionServlet.process(Unknown Source) at org.apache.struts.action.ActionServlet.doPost(Unknown Source) at javax.servlet.http.HttpServlet.service(HttpServlet.java:595) at javax.servlet.http.HttpServlet.service(HttpServlet.java:668) at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1238) at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:782) at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:481) at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178) at com.ibm.ws.webcontainer.filter.WebAppFilterChain.invokeTarget(WebAppFilterChain.java:136) at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:79) at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:967) at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1107) at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.dispatch(WebAppRequestDispatcher.java:1389) at com.ibm.ws.webcontainer.webapp.WebAppRequestDispatcher.forward(WebAppRequestDispatcher.java:195) at org.apache.struts.action.RequestProcessor.doForward(Unknown Source) at org.apache.struts.tiles.TilesRequestProcessor.doForward(Unknown Source) at org.apache.struts.action.RequestProcessor.processForwardConfig(Unknown Source) at org.apache.struts.tiles.TilesRequestProcessor.processForwardConfig(Unknown Source) at org.apache.struts.action.RequestProcessor.process(Unknown Source) at org.apache.struts.action.ActionServlet.process(Unknown Source) at org.apache.struts.action.ActionServlet.doPost(Unknown Source) at javax.servlet.http.HttpServlet.service(HttpServlet.java:595) at javax.servlet.http.HttpServlet.service(HttpServlet.java:668) at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1238) at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:782) at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:481) at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178) at com.ibm.ws.webcontainer.filter.WebAppFilterChain.invokeTarget(WebAppFilterChain.java:136) at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:97) at com.ibm.ws.console.core.servlet.WSCUrlFilter.setUpCommandAssistance(WSCUrlFilter.java:967) at com.ibm.ws.console.core.servlet.WSCUrlFilter.continueStoringTaskState(WSCUrlFilter.java:514) at com.ibm.ws.console.core.servlet.WSCUrlFilter.doFilter(WSCUrlFilter.java:335) at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:195) at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:91) at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:967) at com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters(WebAppFilterManager.java:1107) at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3980) at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:304) at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:1016) at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1817) at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:200) at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:463) at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewRequest(HttpInboundLink.java:530) at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.processRequest(HttpInboundLink.java:316) at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:88) at com.ibm.ws.ssl.channel.impl.SSLReadServiceContext$SSLReadCompletedCallback.complete(SSLReadServiceContext.java:1820) at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:175) at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217) at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161) at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138) at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204) at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775) at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905) at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1892)

Any pointers on this would be really helpful.

Custom class snippet:

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

1 Answers

1
votes

The warning, DSRA8200W: DataSource Configuration: DSRA8020E: Warning: The property 'databaseName' does not exist on the DataSource class com.test.ds.Neo4jConnectionPoolDataSource occurs because your Neo4jConnectionPoolDataSource class doesn't define a setter method setDatabaseName(String databaseName) and a databaseName property is presumably configured on the data source, so WebSphere Application Server doesn't know what to do with that value and logs the warning. I expect the warning is completely unrelated to the other error (ClassCastException) that you are seeing.

The ClassCastException is very unusual because it mentions a dynamic proxy instance and I don't see any dynamic proxying within the implementation that you posted. ClassCastException: com.sun.proxy.$Proxy60 incompatible with javax.sql.PooledConnection. This would be easier to debug if you can find the full stack of the exception. Search under the application server's ffdc logs for one that contains the ClassCastException and post the full stack to this issue, if it isn't already clear from that where the error lies.