记weblogic JDBC 'No operations allowed after statement closed' 缘由

在系统集成测试中,开发人员遇到由于数据库连接关闭导致的测试失败问题。尽管配置了连接池检查,但长时间未使用的连接在第二天测试时失效。原因可能是大量长时间无访问的连接在周期性检查时无法全部测试到,导致连接无效。此问题主要出现在测试环境中,解决方案未给出。

平台应用开发人员向我们平台报了一个issue,说在测试他们应用的时候遇到一个奇怪的问题,系统报了undefinedexception(开发人员自定义的exception,捕捉了jpa exception之后发现无法处理的情况下就抛出未定义异常),他们贴出了weblogic里面报出的异常栈信息:

<Sep 17, 2014 7:56:45 AM SAST> <Error> <org.hibernate.transaction.JDBCTransaction> <BEA-000000> <Could not toggle autocommit
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet successfully received from the server was 33,177,390 milliseconds ago.  The last packet sent successfully to the server was 4 milliseconds ago.
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
	at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
	at com.mysql.jdbc.Util.handleNewInstance(Util.java:395)
	Truncated. see log file for complete stacktrace

Caused By: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.
	at com.mysql.jdbc.MysqlIO.readFully(MysqlIO.java:3052)
	at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3503)
	at com.mysql.jdbc.MysqlIO.reuseAndReadPacket(MysqlIO.java:3492)
	at com.mysql.jdbc.MysqlIO.checkError
代码 `Set intersect = setOperations.intersect` 通常用于执行集合的交集操作。在编程中,集合(Set)是一种不包含重复元素的数据结构,而交集操作是指找出两个或多个集合中共同拥有的元素。 从代码来看,`setOperations` 应该是一个提供集合操作方法的对象,`intersect` 是该对象的一个方法,用于计算交集。`Set intersect` 表示将执行交集操作后得到的结果存储在一个名为 `intersect` 的集合变量中。 以下是一个 Java 示例代码,展示了如何使用类似的集合交集操作: ```java import java.util.HashSet; import java.util.Set; class SetOperations { public <T> Set<T> intersect(Set<T> set1, Set<T> set2) { Set<T> result = new HashSet<>(set1); result.retainAll(set2); return result; } } public class Main { public static void main(String[] args) { Set<Integer> set1 = new HashSet<>(); set1.add(1); set1.add(2); set1.add(3); Set<Integer> set2 = new HashSet<>(); set2.add(2); set2.add(3); set2.add(4); SetOperations setOperations = new SetOperations(); Set<Integer> intersect = setOperations.intersect(set1, set2); System.out.println("交集结果: " + intersect); } } ``` 在这个示例中,`SetOperations` 类的 `intersect` 方法接受两个集合作为参数,并返回它们的交集。在 `main` 方法中,创建了两个集合 `set1` 和 `set2`,然后使用 `setOperations.intersect` 方法计算它们的交集,并将结果存储在 `intersect` 集合中,最后打印出交集结果。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值