我们在 Oracle WebLogic Servers 中部署了一些 Web 服务,这些服务的主要职责是调用存储过程并将这些数据发送给客户端。服务的技术栈是:
- JAX-WS
- 春天框架
- MyBatis
服务从 WebLogic 提供的连接池中获取到数据库的连接。几个月来,服务运行良好,但今天我们遇到了以下问题:
SERVER: WLSDesa_ManagedServer1 [DEBUG] [15-05-2013 12:23:03.897] (JakartaCommonsLoggingImpl.java:46) - ooo Using Connection [weblogic.jdbc.wrapper.PoolConnection_oracle_jdbc_driver_T4CConnection@59bd]
SERVER: WLSDesa_ManagedServer1 [DEBUG] [15-05-2013 12:23:03.898] (JakartaCommonsLoggingImpl.java:46) - ==> Preparing: { call package.iOnlyDoASelect( ?, ?) }
a.package.from.project.CommonException: org.springframework.jdbc.UncategorizedSQLException:
### Error querying database. Cause: java.sql.SQLException: ORA-14552: cannot perform a DDL, commit or rollback inside a query or DML
### The error may exist in a/package/from/the/project/ImAMyBatisMap.xml
### The error may involve a.package.from.the.project.ImADaoClass.invokeProcedure-Inline
### The error occurred while setting parameters
### SQL: { call package.iOnlyDoASelect( ?, ?) }
### Cause: java.sql.SQLException: ORA-14552: cannot perform a DDL, commit or rollback inside a query or DML
; uncategorized SQLException for SQL []; SQL state [72000]; error code [14552]; ORA-14552: cannot perform a DDL, commit or rollback inside a query or DML
; nested exception is java.sql.SQLException: ORA-14552: cannot perform a DDL, commit or rollback inside a query or DML
该过程只有一个Select
到几个表,我们可以正常从另一个Java应用程序和数据库客户端调用它;在服务中,我们没有使用任何显式的事务管理代码。该问题偶尔发生并使服务无用。我们的解决方法是重新启动 WebLogic Server 或关闭自动提交,然后再打开。这种情况几乎每天发生 5 次。
有什么线索吗?WebLogic 是否相关,是数据库问题还是它的 Web 服务代码?