应用程序未从休眠加载数据
Application not loading data from hibernate
我们的应用程序有 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(自定义Loader.java:312)
在 org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1722)
在 org.hibernate.impl.AbstractSessionImpl.list(摘要SessionImpl.java:165)
在 org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:175)
所以我直接在hibernate-3.2.7.ga jar 文件中Oracle8iDialect.java 中查看方言代码。
Hibernate 使用以下代码加载 ORACLE TYPES class.
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 值时出现问题”,所以我调查了还有一个 class 在 z_easybeans-uberjar-hibernate-1.1.0-M3-JONAS.jar 文件中使用同名 Oracle8iDialect。我认为 class 加载程序在两个 jar 文件之间存在相同的 class 冲突。所以在运行时 web 逻辑在 z_easybeans-uberjar-hibernate-1.1.0-M3-JONAS.jar 中选择 oracle8idialect class 文件而不是在 hibernate-3.2.7.ga jar 中正确的 class .
方言代码在Oracle8iDialect.java里面z_easybeans-uberjar-hibernate-1.1.0-M3-JONAS.jar.
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,这会导致第二台服务器发生冲突
任何人请为我们提供解决此问题的方法。
我在朋友的帮助下找到了答案。
更改了 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;
}
并编译了特定的方言文件,并在删除旧的 class 文件
后将 class 文件添加到 z_easybeans-uberjar-hibernate-1.1.0-M3-JONAS.jar
然后制作 war 并从 weblogic 激活它。
然后就正常了
我们的应用程序有 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(自定义Loader.java:312) 在 org.hibernate.impl.SessionImpl.listCustomQuery(SessionImpl.java:1722) 在 org.hibernate.impl.AbstractSessionImpl.list(摘要SessionImpl.java:165) 在 org.hibernate.impl.SQLQueryImpl.list(SQLQueryImpl.java:175)
所以我直接在hibernate-3.2.7.ga jar 文件中Oracle8iDialect.java 中查看方言代码。
Hibernate 使用以下代码加载 ORACLE TYPES class.
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 值时出现问题”,所以我调查了还有一个 class 在 z_easybeans-uberjar-hibernate-1.1.0-M3-JONAS.jar 文件中使用同名 Oracle8iDialect。我认为 class 加载程序在两个 jar 文件之间存在相同的 class 冲突。所以在运行时 web 逻辑在 z_easybeans-uberjar-hibernate-1.1.0-M3-JONAS.jar 中选择 oracle8idialect class 文件而不是在 hibernate-3.2.7.ga jar 中正确的 class .
方言代码在Oracle8iDialect.java里面z_easybeans-uberjar-hibernate-1.1.0-M3-JONAS.jar.
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,这会导致第二台服务器发生冲突
任何人请为我们提供解决此问题的方法。
我在朋友的帮助下找到了答案。
更改了 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;
}
并编译了特定的方言文件,并在删除旧的 class 文件
后将 class 文件添加到 z_easybeans-uberjar-hibernate-1.1.0-M3-JONAS.jar然后制作 war 并从 weblogic 激活它。
然后就正常了