我已经通过Glassfish成功连接到远程MySQL服务器,但是每次我更改代码或XHTML文件时,我都需要打开Glassfish的管理员面板并刷新连接池,否则我得到了我刷新页面时出现以下错误。有没有人经历过这个?如果需要,我可以发布代码或其他信息。
HTTP状态500 -
输入例外报告
消息
description服务器遇到阻止的内部错误() 它来自履行这一要求。
例外
javax.servlet.ServletException:WELD-000049无法调用[方法] @PostConstruct public com.myapp.QuestionController.initialize()on com.myapp.QuestionController@4635bd2a
根本原因
org.jboss.weld.exceptions.WeldException:WELD-000049无法调用 [方法] @PostConstruct public com.myapp.interfaces.QuestionController.initialize()on com.myapp.interfaces.QuestionController@4635bd2a
根本原因
java.lang.reflect.InvocationTargetException
根本原因
javax.ejb.EJBException异常
根本原因
javax.persistence.PersistenceException:Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.DatabaseException内部 例外:java.sql.SQLException:分配连接时出错。 原因:java.lang.RuntimeException:期间出现异常 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.start期间出现异常:
根本原因
javax.resource.spi.ResourceAllocationException:分配a时出错 连接。原因:java.lang.RuntimeException:期间出现异常 XAResource.start:
根本原因
com.sun.appserv.connectors.internal.api.PoolingException: java.lang.RuntimeException:在XAResource.start期间出现异常:
根本原因
com.sun.appserv.connectors.internal.api.PoolingException: java.lang.RuntimeException:在XAResource.start期间出现异常:
根本原因
java.lang.RuntimeException:在XAResource.start期间出现异常:
根本原因
javax.transaction.xa.XAException: com.sun.appserv.connectors.internal.api.PoolingException: javax.resource.spi.LocalTransactionException:通信链接 失败
从服务器成功收到的最后一个数据包是435 409 几毫秒之前。成功发送到服务器的最后一个数据包是 7毫秒之前。
持久性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连接池设置的“其他属性”中:servername,URL,user和password。
我已解决了这个问题
我制作了自己的双表,类似于Oracle中的表。
CREATE TABLE dual
(
x VARCHAR(1)
);
INSERT INTO dual(x) VALUES('y');
答案 0 :(得分: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"
。
有助于其他配置的文章:
来自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,创建一个单列表仅用于验证目的;通过插入一行数据来安全地播放表格。
答案 1 :(得分:1)
你应该使用这个驱动程序吗?
com.mysql.jdbc.jdbc2.optional.MysqlXADataSource
我发现您使用的是与附加图像不同的驱动程序...