hibernate - 设置查询超时抛出 ORA-12592 : TNS:bad packet

标签 hibernate oracle11g ejb weblogic-10.x

让我先弄清楚——我对 EJB 一无所知。

回到这个问题,我们在 oracle 中有一个函数,我们从我们的应用程序中调用它。

以下是调用电话的步骤:

- get the EnitityManager
- create a named query.
- set parameters on the query object
- query.executeUpdate()

我正在尝试为查询设置超时。我尝试了很多可能性:
- hibernateQuery.setTimeout(value);
- jpaQuery.setHint("javax.persistence.query.timeout", value);
- <sql-query .. timeout="30"  .. on the hbm file.
- javax.transaction.UserTransaction.setTransactionTimeout(timeout);

他们都没有超时,而是在规定的时间内运行,查询应该运行,最后抛出 ORA-12592: TNS:bad packet。

我搜索了 ORA-12592,大多数搜索表明防火墙/操作系统/网络存在连接问题。我不明白的是,如果我没有设置超时,为什么它不会抛出 ORA-12592。

更重要的是,如何设置超时?您认为这是oracle驱动程序的问题吗?

有关配置的更多详细信息
Persistence Provider Class: org.hibernate.ejb.HibernatePersistence
Driver Class: oracle.jdbc.xa.client.OracleXADataSource
Hibernate 4 [with JPA 2]
EJB 3

编辑:添加堆栈跟踪:
javax.persistence.PersistenceException: org.hibernate.exception.GenericJDBCException: could not execute query
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1387)
at org.hibernate.ejb.AbstractEntityManagerImpl.convert(AbstractEntityManagerImpl.java:1310)
at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:273)
at com.abc.star.jpa.service.BasePersistenceService.getResultList(BasePersistenceService.java:118)
at com.abc.star.jpa.service.StarPersistenceService$$EnhancerByGuice$$e3e37c96.CGLIB$getResultList$8(<generated>)
at com.abc.star.jpa.service.StarPersistenceService$$EnhancerByGuice$$e3e37c96$$FastClassByGuice$$f5d274d4.invoke(<generated>)
at com.google.inject.internal.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
at com.google.inject.InterceptorStackCallback$InterceptedMethodInvocation.proceed(InterceptorStackCallback.java:64)
at com.abc.star.common.TransactionalHandler.invoke(TransactionalHandler.java:29)
at com.google.inject.InterceptorStackCallback$InterceptedMethodInvocation.proceed(InterceptorStackCallback.java:64)
at com.google.inject.InterceptorStackCallback.intercept(InterceptorStackCallback.java:44)
at com.abc.star.jpa.service.StarPersistenceService$$EnhancerByGuice$$e3e37c96.getResultList(<generated>)
at com.abc.star.jpa.service.StarPersistenceService.getClearance(StarPersistenceService.java:25)
at com.abc.star.jpa.service.StarPersistenceService$$EnhancerByGuice$$e3e37c96.CGLIB$getClearance$0(<generated>)
at com.abc.star.jpa.service.StarPersistenceService$$EnhancerByGuice$$e3e37c96$$FastClassByGuice$$f5d274d4.invoke(<generated>)
at com.google.inject.internal.cglib.proxy.MethodProxy.invokeSuper(MethodProxy.java:228)
at com.google.inject.ProxyFactory$1.intercept(ProxyFactory.java:53)
at com.abc.star.jpa.service.StarPersistenceService$$EnhancerByGuice$$e3e37c96.getClearance(<generated>)
at com.abc.star.service.StarInfo.getCompositeStatus(StarInfo.java:69)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.jersey.server.impl.model.method.dispatch.AbstractResourceMethodDispatchProvider$TypeOutInvoker._dispatch(AbstractResourceMethodDispatchProvider.java:167)
at com.sun.jersey.server.impl.model.method.dispatch.ResourceJavaMethodDispatcher.dispatch(ResourceJavaMethodDispatcher.java:70)
at com.sun.jersey.server.impl.uri.rules.HttpMethodRule.accept(HttpMethodRule.java:279)
at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:136)
at com.sun.jersey.server.impl.uri.rules.ResourceClassRule.accept(ResourceClassRule.java:86)
at com.sun.jersey.server.impl.uri.rules.RightHandPathRule.accept(RightHandPathRule.java:136)
at com.sun.jersey.server.impl.uri.rules.RootResourceClassesRule.accept(RootResourceClassesRule.java:74)
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1350)
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequest(WebApplicationImpl.java:1282)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1232)
at com.sun.jersey.server.impl.application.WebApplicationImpl.handleRequest(WebApplicationImpl.java:1222)
at com.sun.jersey.spi.container.servlet.WebComponent.service(WebComponent.java:419)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:537)
at com.sun.jersey.spi.container.servlet.ServletContainer.service(ServletContainer.java:699)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at com.google.inject.servlet.ServletDefinition.doService(ServletDefinition.java:216)
at com.google.inject.servlet.ServletDefinition.service(ServletDefinition.java:141)
at com.google.inject.servlet.ManagedServletPipeline.service(ManagedServletPipeline.java:93)
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:63)
at com.google.inject.servlet.FilterDefinition.doFilter(FilterDefinition.java:134)
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:59)
at com.google.inject.servlet.FilterDefinition.doFilter(FilterDefinition.java:134)
at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:59)
at com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.java:122)
at com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:110)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at com.abc.star.common.web.PersistenceInterceptor.doFilter(PersistenceInterceptor.java:79)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at com.abc.star.common.web.GlobalsInterceptor.doFilter(GlobalsInterceptor.java:53)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at com.abc.mnm.filter.MnmAuthFilter.doFilter(MnmAuthFilter.java:112)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3715)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3681)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2277)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2183)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1454)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:207)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:176)

Caused by: org.hibernate.exception.GenericJDBCException: could not execute query
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:54)
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125)
at org.hibernate.loader.Loader.doList(Loader.java:2525)
at org.hibernate.loader.Loader.doList(Loader.java:2508)
at org.hibernate.loader.Loader.listIgnoreQueryCache(Loader.java:2338)
at org.hibernate.loader.Loader.list(Loader.java:2333)
at org.hibernate.loader.custom.CustomLoader.list(CustomLoader.java:338)
at org.hibernate.internal.SessionImpl.listCustomQuery(SessionImpl.java:1827)
at org.hibernate.internal.AbstractSessionImpl.list(AbstractSessionImpl.java:231)
at org.hibernate.internal.SQLQueryImpl.list(SQLQueryImpl.java:157)
at org.hibernate.ejb.QueryImpl.getResultList(QueryImpl.java:264)
... 61 more

Caused by: java.sql.SQLException: ORA-12592: TNS:bad packet

at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:440)
at oracle.jdbc.driver.T4CTTIoer.processError(T4CTTIoer.java:396)
at oracle.jdbc.driver.T4C8Oall.processError(T4C8Oall.java:837)
at oracle.jdbc.driver.T4CTTIfun.receive(T4CTTIfun.java:445)
at oracle.jdbc.driver.T4CTTIfun.doRPC(T4CTTIfun.java:191)
at oracle.jdbc.driver.T4C8Oall.doOALL(T4C8Oall.java:523)
at oracle.jdbc.driver.T4CStatement.doOall8(T4CStatement.java:193)
at oracle.jdbc.driver.T4CStatement.fetch(T4CStatement.java:1072)
at oracle.jdbc.driver.OracleResultSetImpl.close_or_fetch_from_next(OracleResultSetImpl.java:359)
at oracle.jdbc.driver.OracleResultSetImpl.next(OracleResultSetImpl.java:263)
at weblogic.jdbc.wrapper.ResultSet_oracle_jdbc_driver_OracleResultSetImpl.next(Unknown Source)
at org.hibernate.loader.Loader.processResultSet(Loader.java:939)
at org.hibernate.loader.Loader.doQuery(Loader.java:910)
at org.hibernate.loader.Loader.doQueryAndInitializeNonLazyCollections(Loader.java:341)
at org.hibernate.loader.Loader.doList(Loader.java:2522)

最佳答案

  • 将 JDBC 驱动程序至少升级到版本 12.2
  • 尝试设置 System.setProperty("oracle.net.disableOob", "true");"

  • 解释,Oracle 使用 TCP header 字段 OOB(out-of-bound-data),一些基于 SSL 的 VPN,如 OpenVPN 和 Cisco ANYConnect VPN 会丢弃这个 TCP 标志。结果 Oracle 服务器报告协议(protocol)冲突错误。

    关于hibernate - 设置查询超时抛出 ORA-12592 : TNS:bad packet,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20340278/

    相关文章:

    java - 为什么 EJB 需要实现可序列化接口(interface)?

    java - 删除一对一关系上的 jpa 实体

    java - Weblogic JMS 服务器的巨大存储空间

    java - 连接表中的复合 ID

    oracle - 更改 Apex 中帮助文本的字体大小

    oracle - 在对象的 Oracle 类型表中插入行

    Java EE : EJB Entity, Web 独立版

    java - ejb jar xml中常用配置

    java - hibernate 和锁定

    hibernate - 检索 Hibernate 查询结果作为结果集而不是列表