2011-10-18 44 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 

我看你使用的是不同的驅動程序從附加的圖像...

相關問題