我目前正在使用Eclipselink 2.5.0,jdbc mysql连接器5.1.30和mysql 5.6。?
我使用eclipselink有几个不同的类,所有这些都在开发中测试得很好。但是,在生产中运行时,我会出现间歇性的通信错误。错误都是类似的,有些在读取查询期间发生,有些在持续期间发生。似乎没有模式,但大多数都有类似于:
的错误消息[EL Info]:2015-01-15 02:44:26.131 - ClientSession(362204393) - 尝试在数据库上创建事务时检测到通信失败。试图重试开始交易。错误是:异常[EclipseLink-4002](Eclipse Persistence Services - 2.5.0.v20130507-3faac2b):org.eclipse.persistence.exceptions.DatabaseException
内部异常:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链接失败
从服务器成功收到的最后一个数据包是1,430,108毫秒之前。成功发送到服务器的最后一个数据包是0毫秒之前。
错误代码:0。
OR执行读取时:
[EL警告]:2015-01-15 03:08:05.221 - UnitOfWork(645415294) - 例外[EclipseLink-4002](Eclipse Persistence Services - 2.5.0.v20130507-3faac2b):org.eclipse。 persistence.exceptions.DatabaseException 内部异常:com.mysql.jdbc.exceptions.jdbc4.CommunicationsException:通信链接失败
从服务器成功收到的最后一个数据包是337,026毫秒前。成功发送到服务器的最后一个数据包是0毫秒前。 错误代码:0
我是JPA的新手,并不确定最佳做法。我尝试了几种不同的代码解决方案,但没有任何运气。此时,我正在为每个事务创建一个新的实体管理器。我也尝试过系统单例和类单例解决方案,但是这些都产生了间歇性错误。实体管理器的最佳实践是什么,a)系统单例,b)查询类单例,或c)每个查询的新实例?
此外,我还在em.getTransaction()。begin()和em.getTransaction()。commit()中包装了所有事务,包括读取。最后一次尝试我为读取查询添加了begin()和commit(),即使在网上找不到任何示例。只是迫不及待地想要做这件事。是否需要在读取查询周围添加begin和commit?
提前感谢您提供的任何建议。