为什么每次重新部署时都需要刷新连接池?

我通过Glassfish成功连接到远程MySQL服务器,但是每次我更改代码或XHTML文件时,我都需要打开Glassfish的管理员面板并刷新连接池,否则我会收到以下错误我只是刷新页面。 有没有人经历过这个? 如果需要,我可以发布代码或其他信息。

HTTP状态500 –

类型exception报告

信息

description服务器遇到内部错误(),导致无法完成此请求。

例外

javax.servlet.ServletException:WELD-000049无法在com.myapp.QuestionController@4635bd2a上调用[方法] @PostConstruct public com.myapp.QuestionController.initialize()

根本原因

org.jboss.weld.exceptions.WeldException:WELD-000049无法在com.myapp.interfaces.QuestionController@4635bd2a上调用[方法] @PostConstruct public com.myapp.interfaces.QuestionController.initialize()

根本原因

java.lang.reflect.InvocationTargetException

根本原因

javax.ejb.EJBExceptionexception

根本原因

javax.persistence.PersistenceException:Exception [EclipseLink-4002](Eclipse Persistence Services – 2.3.0.v20110604-r9504):org.eclipse.persistence.exceptions.DatabaseException内部exception:java.sql.SQLException:分配连接时出错。 原因:java.lang.RuntimeException:在XAResource.start期间出现exception:错误代码:0

根本原因

exception[EclipseLink-4002](Eclipse Persistence Services – 2.3.0.v20110604-r9504):org.eclipse.persistence.exceptions.DatabaseException内部exception:java.sql.SQLException:分配连接时出错。 原因:java.lang.RuntimeException:在XAResource.start期间出现exception:错误代码:0

根本原因

java.sql.SQLException:分配连接时出错。 原因:java.lang.RuntimeException:在XAResource.start期间出现exception:

根本原因

javax.resource.spi.ResourceAllocationException:分配连接时出错。 原因:java.lang.RuntimeException:在XAResource.start期间出现exception:

根本原因

com.sun.appserv.connectors.internal.api.PoolingException:java.lang.RuntimeException:在XAResource.start期间出现exception:

根本原因

com.sun.appserv.connectors.internal.api.PoolingException:java.lang.RuntimeException:在XAResource.start期间出现exception:

根本原因

java.lang.RuntimeException:在XAResource.start期间出现exception:

根本原因

javax.transaction.xa.XAException:com.sun.appserv.connectors.internal.api.PoolingException:javax.resource.spi.LocalTransactionException:通信链接失败

从服务器成功收到的最后一个数据包是435 409毫秒前。 成功发送到服务器的最后一个数据包是7毫秒前。

配置的图像

持久性XML

   jdbc/sertifikatdb   

我刚刚配置的Glassfish连接池设置中的“其他属性”:servername,URL,user和password。


我已经解决了这个问题

在此处输入图像描述

我制作了自己的双表,类似于Oracle中的表。

 CREATE TABLE dual ( x VARCHAR(1) ); INSERT INTO dual(x) VALUES('y'); 

您的根本原因, PoolingException: javax.resource.spi.LocalTransactionException: Communications link failure与此Glassfish错误有关 ,它解释了(在底部的注释选项卡中)您可能需要刷新无效连接。

Jagadish的bug评论说要检查你的连接validation类型。 如果将其设置为“autocommit”(默认值),则JDBC驱动程序可以缓存先前的连接validation数据,并且在将来的连接validation期间不会发生实际的数据库交互。

要解决此问题,请设置connection-validation-method="table"validation-table-name="any_table_you_know_exists" (将any_table_you_know_exists替换为任何现有表的名称)。 这样做会强制连接与数据库而不是缓存进行通信; 如果连接无效,将删除并重新创建。 您可能还需要指定is-connection-validation-required="true"

有助于其他配置的文章:

  1. 本文还详细解释了该问题。
  2. Jagadish关于此主题的Oracle博客文章有更多信息。
  3. 文章详细解释了Glassfish JDBC连接validation。

来自Jagadish博客的文字:

 AS_INSTALL_ROOT/bin/asadmin set domain.resources.jdbc-connection-pool.DerbyPool.is-connection-validation-required=true domain.resources.jdbc-connection-pool.DerbyPool.is-connection-validation-required = true AS_INSTALL_ROOT/bin/asadmin set domain.resources.jdbc-connection-pool.DerbyPool.connection-validation-method=table domain.resources.jdbc-connection-pool.DerbyPool.connection-validation-method = table bin/asadmin set domain.resources.jdbc-connection-pool.DerbyPool.validation-table-name=sys.systables domain.resources.jdbc-connection-pool.DerbyPool.validation-table-name = sys.systables 

请注意,示例代码引用sys.systables ,它是一个保证存在的MS SQL表。 对于Oracle,请参阅保证表dual 。 对于MySQL,创建一个仅用于validation目的的1列表; 通过插入一行数据来安全地播放表格。

你应该使用这个驱动程序吗?

 com.mysql.jdbc.jdbc2.optional.MysqlXADataSource 

我看到你使用的是附加图像的不同驱动程序……