当前位置: 首页 > 知识库问答 >
问题:

中的自定义数据源要连接到neo4j引发错误

顾永福
2023-03-14

我试图创建一个新的数据源,用于在WebSphere8.5传统中连接到neo4j。因为neo4j jdbc驱动程序只实现javax.sql.DataSource,而不实现connectionPoolDataSource接口。为了解决这个问题,我创建了一个新的JDBC提供程序,它指向一个自定义的Neo4jConnectionPoolDataSource类,并为此定义了完整的类路径。

在尝试从Websphere控制台测试datasource连接时,我得到了以下错误。

DSRA8200W:数据源配置:DSRA8020E:警告:数据源类com.test.ds.neo4JConnectionPoolDataSource上不存在属性“Database Name”。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不兼容

任何关于这一点的建议都将是非常有帮助的。

自定义类代码段:

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个答案

王高邈
2023-03-14

警告dsra8200w:DataSource配置:dsra8020e:warning:DataSource类com.test.ds.Neo4jConnectionPoolDataSource上不存在属性“database name”,因为您的Neo4jConnectionPoolDataSource类没有定义setter方法setdatabasename(String databaseName),并且可能在数据源上配置了databaseName属性,因此WebSphere Application Server不知道如何处理该值并记录警告。我希望该警告与您看到的另一个错误(ClassCastException)完全无关。

ClassCastException非常不寻常,因为它提到了一个html" target="_blank">动态代理实例,而我在发布的实现中没有看到任何动态代理。ClassCastException:com.sun.proxy.$proxy60与javax.sql.pooledConnection不兼容。如果您能找到异常的完整堆栈,这将更容易调试。在应用服务器的ffdc日志下搜索一个包含ClassCastException的日志,并将完整的堆栈发送到此问题,如果还不清楚错误所在的话。

 类似资料:
  • 我有一个与post中指定的相同的要求,即为了审计目的,将用户id作为客户端标识符传递。在syscontext/连接上通过Hibernate传递ClientInfo/ClientIdentifier以进行审核 我遵循了8.2中提到的相同方法。自定义数据源连接准备程序的配置http://docs.spring.io/spring-data/jdbc/docs/current/reference/htm

  • 我是Java新手,我试图连接到我的本地PSql数据库,但没有成功,下面是代码和错误的详细信息。 我有两个文件:dbcontract.java和testconnection.java,我正在使用Eclipse。 java TestConnection.java 错误:

  • 我们可以在SpringDataNeo4j中为节点实体定制迭代器吗 我有一个将CustomHashCollection作为iterable的现有代码。我想将该项目转换为使用Neo4j。我可以使用自定义迭代器,因为它是大多数NodeEntity类中的私有成员<提前谢谢。

  • 我尝试通过应用服务器Glassfish和JPA连接到mysql数据库。 我的persistence.xml如下所示: 有什么问题?

  • 问题内容: 我正在尝试通过向其传递自定义数据源来填充表。我创建了一个带有表的简单报告。它自己的报告从ms sql数据库获取数据。我已经编写了一个与本示例类似的java类。但是我在表中没有任何价值。在该示例中,没有脚本。我已经检查了 代码行。它从现场获取数据并可以在报告中显示。因此,我猜想bean数据源未填充。我在中调用fill Table方法。如何在Jasper中使用来自Java的数据收集?我也尝

  • 我正在尝试通过将自定义数据源传递给表来填充表。我创建了一个带有表格的简单报告。它自己从 ms sql 数据库中获取数据的报告。我编写了一个类似于此示例中的类的 java 类。但我在表中没有得到任何值。在示例中,没有脚本。我已经检查了 代码行。它从字段中获取数据,并可以在报告中显示。所以我想 bean 数据源没有填充。我在 中调用 fill Table 方法。如何在 jasper 中使用 java