Я пытаюсь создать новый источник данных для подключения к 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();}
}
}
}