【问题标题】:Application not loading data from hibernate应用程序未从休眠加载数据
【发布时间】:2016-02-29 12:29:23
【问题描述】:

我们的应用程序有 2 个服务器 A 和 B,请求由负载平衡器管理。 两个 weblogic 服务器中的代码相同,但是 当从一台服务器加载同一页面时,它会显示 但是从第二台服务器加载的同一页面给出了

错误 500--内部服务器错误

war 文件在两个 weblogic 服务器中是相同的,但是当我检查日志时,我可以看到观察到一些异常。

org.hibernate.HibernateException:尝试加载或访问 OracleTypes.CURSOR 值时出现问题 在 org.hibernate.dialect.Oracle8iDialect.registerResultSetOutParameter(Oracle8iDialect.java:399) 在 org.hibernate.loader.Loader.prepareQueryStatement(Loader.java:1586) 在 org.hibernate.loader.Loader.doQuery(Loader.java:696) 在 org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:259) 在 org.hibernate.loader.Loader.doList(Loader.java:2228) 在 org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2125) 在 org.hibernate.loader.Loader.list(Loader.java:2120) 在 org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:312) 在 org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1722) 在 org.hibernate.impl.AbstractSessionImpl.list(AbstractSessionImpl.java:165) 在 org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:175)

所以我直接浏览了hibernate-3.2.7.ga jar文件中Oracle8iDialect.java中的方言代码。

Hibernate 使用以下代码加载 ORACLE TYPES 类。

public int registerResultSetOutParameter(CallableStatement statement, int col) throws SQLException {
                                //            register the type of the out param - an Oracle specific type
                                statement.registerOutParameter( col, getOracleCursorTypeSqlType() );
                                col++;
                                return col;
                }

因此,Oracle8iDialect.java 中没有代码描述会引发上述异常“尝试加载或访问 OracleTypes.CURSOR 值时出现问题”,因此我调查了 z_easybeans 中还有一个同名的 Oracle8iDialect 类- uberjar-hibernate-1.1.0-M3-JONAS.jar 文件。我认为类加载器在两个 jar 文件之间存在相同的类冲突。因此,在运行时 Web 逻辑会在 z_easybeans-uberjar-hibernate-1.1.0-M3-JONAS.jar 中获取 oracle8idialect 类文件,而不是在 hibernate-3.2.7.ga jar 中获取正确的类。

z_easybeans-uberjar-hibernate-1.1.0-M3-JONAS.jar 中 Oracle8iDialect.java 中的方言代码。

public int registerResultSetOutParameter(java.sql.CallableStatement statement,int col) throws SQLException {
if(oracletypes_cursor_value==0) {
                                                try {
                                                                Class types = ReflectHelper.classForName("oracle.jdbc.driver.OracleTypes");
                                                                oracletypes_cursor_value = types.getField("CURSOR").getInt(types.newInstance());
                                                } catch (Exception se) {
                                                                throw new HibernateException("Problem while trying to load or access OracleTypes.CURSOR value",se);
                                                }
                                }
                                //            register the type of the out param - an Oracle specific type
                                statement.registerOutParameter(col, oracletypes_cursor_value);
                                col++;
                                return col;
                }

可能是这个jar中使用了不同版本的hibernate,导致第二个服务器发生冲突

任何人请为我们提供此问题的解决方案。

【问题讨论】:

    标签: spring hibernate jpa jar weblogic12c


    【解决方案1】:

    我在朋友的帮助下找到了答案。

    更改了 z_easybeans-uberjar-hibernate-1.1.0-M3-JONAS.jar 中 Oracle8iDialect.java 中的方言代码。

    public int registerResultSetOutParameter(java.sql.CallableStatement statement,int col) throws SQLException {
    if(oracletypes_cursor_value==0) {
                                                    try {
                                                                    Class types = ReflectHelper.classForName("**oracle.jdbc.OracleTypes**");
                                                                    oracletypes_cursor_value = types.getField("CURSOR").getInt(**null**);
                                                    } catch (Exception se) {
                                                                    throw new HibernateException("Problem while trying to load or access OracleTypes.CURSOR value",se);
                                                    }
                                    }
                                    //            register the type of the out param - an Oracle specific type
                                    statement.registerOutParameter(col, oracletypes_cursor_value);
                                    col++;
                                    return col;
                    }
    

    编译特定方言文件,删除旧类文件后将类文件添加到z_easybeans-uberjar-hibernate-1.1.0-M3-JONAS.jar

    然后进行战争并从 weblogic 中激活它。

    然后就正常了。

    【讨论】:

      猜你喜欢
      • 2014-08-05
      • 2023-04-04
      • 1970-01-01
      • 1970-01-01
      • 2010-12-25
      • 2011-05-09
      • 2014-03-03
      • 2011-04-02
      • 1970-01-01
      相关资源
      最近更新 更多