【问题标题】:GlassFish 3.1.1 - getting jdbc connectionGlassFish 3.1.1 - 获取 jdbc 连接
【发布时间】:2011-09-26 13:50:44
【问题描述】:

我正在尝试通过以下方式从 glassfish 获取 OracleConnection:

EntityManager em = getEntityManager();
Connection c = em.unwrap(Connection.class);

但是,在调试器中,我看到 c 的实际类是 ConnectionHolder40 类。在哪里可以找到带有 ConnectionHolder40 定义的 jar?

【问题讨论】:

    标签: jpa jdbc glassfish


    【解决方案1】:

    您只能获取接口。如果您使用 Connection 接口,您将在层次结构中获得第一个实现 Connection 的包装器,因此 ConnectionHolder40 就是这种情况。 如果您想获得 OracleConnection - 我看到 here 它是一个接口,您应该要求它。

    但是您需要一个 JDBC4 驱动程序。使用 JDBC3 驱动程序可能会遇到问题(就像我使用 Informix 3.70 时一样),因为它们没有实现 unwrap 和 isWrapperFor 方法,而且 ConnectionHolder40、*StatementWrapper40 和 ResultSetWrapper40 也没有正确实现。 如果我想从持有人那里解开 IfmxConnection,我可以。但是我不能问持有人他是否是 IfmxConnection 的包装器 - 它会导致异常,因为它试图询问驱动程序实现:ConnectionHolder40。如果 StatementWrapper 和 ResultSetWrapper 不直接实现接口(确切地说,如果您不要求 java.sql.*Statement 和 java.sql.ResultSet),则这两种方法都会抛出异常。

    【讨论】:

      【解决方案2】:

      试试

      public OracleConnection getOracleConnection(Connection connection) throws SQLException {
          OracleConnection oconn = null;
          try {
              if (connection.isWrapperFor(oracle.jdbc.OracleConnection.class)) {
                  oconn = (OracleConnection) connection.unwrap(oracle.jdbc.OracleConnection.class)._getPC();
              }
          } catch (SQLException e) {
              throw e;
          }
          return oconn;
      }
      

      【讨论】:

        【解决方案3】:

        java.sql.Connection 是一个接口,ConnectionHolder40 只是 Glassfish 使用的连接包装器,它可能是一个生成的类,所以不会在任何 jar 文件中。

        您应该只使用 Connection API,因此不需要该类。

        如果您想获得真正的 JDBC 驱动程序连接,JDBC 还支持 unwrap API。

        【讨论】:

        • 我必须使用 db 中的 clob/blob 数据,据我所知,使用 clob/blob 字段的唯一方法是使用真实连接。我想做类似的事情:Connection c = em.unwrap(Connection.class); CLOB clob = CLOB.createTemporary(c,false, CLOB.DURATION_SESSION); clob.open(CLOB.MODE_READWRITE); Writer w = clob.getCharacterOutputStream(); w.append("asdfasdfasdf\n"); w.append("asdfasdfasdf\n"); w.append("asdfasdfasdf\n"); w.flush(); w.close(); clob.close();
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-12
        • 2013-07-13
        • 2014-08-15
        • 2010-12-27
        • 1970-01-01
        • 2012-07-27
        相关资源
        最近更新 更多