2011-10-18 34 views
15

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

HTTP状态500 -

类型异常报告

消息

descriptionThe服务器遇到内部错误(),从完成此请求防止 它。

例外

javax.servlet.ServletException:WELD-000049无法调用[方法] @PostConstruct公共 com.myapp.QuestionController.initialize()上 [email protected]

根源

org.jboss.weld.exceptions.WeldException:上WELD-000049无法调用 [方法] @PostConstruct公共 com.myapp.interfaces.QuestionController.initialize() [email protected]

根源

java.lang.reflect.InvocationTargetException

根源

javax.ejb.EJBException异常

根源

javax.persistence.PersistenceException:异常[EclipseLink-4002] (Eclipse持久性服务 - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.DatabaseException内部 异常:java.sql.SQLException:分配连接时出错。 原因:了java.lang.RuntimeException:GOT期间异常 XAResource.start:错误代码:0

根源

异常[的EclipseLink-4002](Eclipse持久服务 - 2.3.0.v20110604-r9504 ):org.eclipse.persistence.exceptions.DatabaseException内部 异常:java.sql.SQLException:分配连接时出错。 原因:了java.lang.RuntimeException:在 XAResource.start了异常:错误代码:0

根源

值java.sql.SQLException:在分配连接错误。原因: java.lang.RuntimeException:在XAResource期间出现异常。开始:

根源

javax.resource.spi.ResourceAllocationException:错误分配 连接。原因:了java.lang.RuntimeException:GOT例外期间 XAResource.start:

根源

com.sun.appserv.connectors.internal.api.PoolingException: 了java.lang.RuntimeException:GOT例外期间XAResource.start:

根源

com.sun.appserv.connectors.internal.api.PoolingException: 了java.lang.RuntimeException:GOT XAResource.start期间异常:

根源

了java.lang.RuntimeException:XAResource.start期间得到了异常:

根源

javax.transaction.xa.XAException: com.sun.appserv.connectors.internal。 api.PoolingException: javax.resource.spi.LocalTransactionException:通信链路 故障

的最后一个数据包成功地从服务器接收为435409 milliseco前一次。 7毫秒前成功发送到服务器的最后一个数据包是 。

Image of config

持久性XML

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd"> 
    <persistence-unit name="SertifikatPU" transaction-type="JTA"> 
     <jta-data-source>jdbc/sertifikatdb</jta-data-source> 
    </persistence-unit> 
</persistence> 

在Glassfish的连接池设置的 “其他属性” 我刚配置:服务器名称,网址,用户名和密码。


我解决了这个问题

enter image description here

我做我自己的DUAL表,类似于一个在Oracle中。

CREATE TABLE dual 
(
    x VARCHAR(1) 
); 

INSERT INTO dual(x) VALUES('y'); 
+0

非事务连接,事务隔离:,隔离级别: - >这些都包含在交易分组,其中任何一个? – LuckyLuke

+0

你是如何获得连接的?这可能会导致此异常。另外什么是连接池配置。 – r0ast3d

+0

是否有对某个地方的连接的引用?您可以添加更多的信息.​​..另外在远程服务器上,客户端和连接数量的配置是什么? – r0ast3d

回答

20

你根本原因,PoolingException: javax.resource.spi.LocalTransactionException: Communications link failure有关this Glassfish bug,这也解释了(在底部的评论标签),您可能需要刷新无效的连接。

该错误评论通过Jagadish说检查您的连接验证类型。如果它设置为“autocommit”(默认值),那么JDBC驱动程序可能会缓存先前的连接验证数据,并且在将来的连接验证期间不会发生实际的数据库交互。

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

文章,以帮助更多的配置:

  1. This article还详细解释了这个问题。
  2. Jagadish's Oracle Blog Article关于这个话题有更多的信息。
  3. Article详细解释Glassfish JDBC连接验证。从贾格迪什的博客

文字:

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,仅为验证目的创建1列表;播放它安全并通过插入一行数据预填充表格。

+0

感谢您的回复。我对此很陌生,所以我只需要一点帮助就可以在这里配置。我去了localhost:4848 - > JDBC连接池 - >选择我的连接 - >然后高级选项卡。我发现了你正在谈论的连接验证方法,并且还选择了连接验证。但是我没有看到验证表名。 – LuckyLuke

+0

另请参阅[本文](http://blogs.oracle.com/JagadishPrasath/entry/connection_validation_in_glassfish_jdbc)。显然'它也是由我之前提到的同一个Jagadish写的(他的博客!),并建议使用'fail-all-connections'在失败时刷新。 [Here](http://alexandru-ersenie.com/2011/03/01/glassfish-jdbc-connection-validation-explained/)是第二篇文章,详细解释了glassfish JDBC连接验证。两者都很棒! – JoshDM

+0

在你的'domain.xml'中你的连接池xml代码是什么样的?我相信那是你设置我建议的属性的地方。 – JoshDM

1

您是否应该使用此驱动程序?

com.mysql.jdbc.jdbc2.optional.MysqlXADataSource 

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

相关问题