2011-10-18 20 views
15

Glassfish aracılığıyla uzak bir MySQL sunucusuna başarılı bir şekilde bağlandım, ancak kod veya XHTML dosyalarında her değişiklik yaptığımda, Glassfish yönetici panelini açıp bağlantı havuzunu temizlemem gerekiyor, aksi halde sayfayı yenilediğimde hata oluştu. Bunu kimse yaşadı mı? Gerekirse kodu veya diğer bilgileri gönderebilirim.Yeniden bağlandığım her seferinde neden bağlantı havuzunu temizlemem gerekiyor?

HTTP durum 500 -

bu isteği yerine getirmesini engelledi tip İstisna rapor

mesajı

DESCRIPTIONTHE sunucunun dahili bir hatayla karşılaştı().

durum

javax.servlet.ServletException: KAYNAK 000.049 [yöntem] @PostConstruct halka com.myapp.QuestionController.initialize() [email protected] üzerinde

çağırmak edilemiyor

kök neden

org.jboss.weld.exceptions.WeldException: KAYNAK 000.049 yapamaz çağırmak için [yöntem] ortak com.myapp.interfaces.QuestionController.initialize @PostConstruct() ile [email protected]

kök neden

java.lang.reflect.InvocationTargetException

kök neden

javax.ejb.EJBException

kök neden

javax.persistence.PersistenceException: İstisna [EclipseLink-4002] (Eclipse Persistence Services - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.DatabaseException Dahili İstisna: java.sql.SQLException: Bir bağlantı ayırmada hata. Neden: java.lang.RuntimeException: Got istisna XAResource.start sırasında: Hata Kodu: 0

kök neden

İstisna [EclipseLink-4002] (Eclipse Sebat Hizmetleri - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.DatabaseException Dahili İstisna: java.sql.SQLException: Bir bağlantı ayırmada hata. Neden: java.lang.RuntimeException: XAResource.start sırasında Got istisna: Hata Kodu: 0

kök neden

java.sql.SQLException: Bir bağlantı tahsis hatası. Neden: java.lang.RuntimeException: XAResource sırasında istisna var.başlangıç:

kök neden

javax.resource.spi.ResourceAllocationException: Hata bir bağlantı tahsisinde. Neden: java.lang.RuntimeException: Got istisna XAResource.start sırasında:

kök neden

com.sun.appserv.connectors.internal.api.PoolingException: java.lang.RuntimeException: Got istisna sırasında XAResource.start:

kök neden

com.sun.appserv.connectors.internal.api.PoolingException: java.lang.RuntimeException: XAResource.start sırasında Got istisna:

kök neden

java.lang.RuntimeException: XAResource.start sırasında Got istisna: com.sun.appserv.connectors.internal:

javax.transaction.xa.XAException

kök neden. api.PoolingException: javax.resource.spi.LocalTransactionException: Haberleşme bağlantısı başarısızlık geçen paket başarıyla sunucusundan alınan

435.409 milliseco oldu nds önce. Sunucuya başarıyla gönderilen son paket, 7 milisaniye önce idi.

Image of config

Sebat XML Sadece yapılandırmış GlassFish bağlantı havuzu ayarlarında "Ek özellikler" in

<?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> 

: servername URL, kullanıcı ve şifre.


Ben Oracle içinde benzer kendi ikili tablo, yapılan bu sorunu

enter image description here

çözdük.

CREATE TABLE dual 
(
    x VARCHAR(1) 
); 

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

Olmayan İşlem Bağlantıları, İşlem İzolasyon :, İzolasyon Seviye: -> Bu İşlemler altında gruplandırılmış, bunlardan herhangi? – LuckyLuke

+0

Bağlantıyı nasıl ediniyorsunuz? Bu istisnaya neden olabilir. Ayrıca bağlantı havuzu yapılandırması nedir. – r0ast3d

+0

Bağlantı bir yerde tutulduğunda bir referans var mı? Daha fazla bilgi ekleyebilir misiniz ... Ayrıca uzak sunucuda, istemci ve bağlantı sayısı için yapılandırma nedir? – r0ast3d

cevap

20

Eğer geçersiz bağlantıları yenilemeniz gerekebilir (altındaki yorumlar sekmesinde) açıklıyor PoolingException: javax.resource.spi.LocalTransactionException: Communications link failurethis Glassfish bug ilişkilidir Kök nedeni.

Jagadish tarafından yapılan hata açıklaması, bağlantı doğrulama türünüzü kontrol etmenizi söyler. "Autocommit" (varsayılan) olarak ayarlanmışsa, JDBC sürücüleri önceki bağlantı doğrulama verilerini önbelleğe alabilir ve gelecekteki bağlantı doğrulamaları sırasında gerçek bir veritabanı etkileşimi olmayacaktır.

Sorunu çözmek için, connection-validation-method="table" ve validation-table-name="any_table_you_know_exists"'u ayarlayın (any_table_you_know_exists'u mevcut herhangi bir tablonun adıyla değiştirin). Bunu yapmak, bağlantıları önbellek yerine veritabanına konuşmaya zorlar; Bağlantı geçersizse, bırakılır ve yeniden oluşturulur. Ayrıca is-connection-validation-required="true" belirtmeniz gerekebilir.

Makaleler ek yapılandırma ile yardımcı olmak için:

  1. This article da ayrıntılı olarak sorunu açıklar. Bu konu hakkında daha fazla bilgi için
  2. Jagadish's Oracle Blog Article. Glassfish JDBC Bağlantı Doğrulama'yı ayrıntılı olarak açıklayan
  3. Article. Jagadish blog gelen

Metin: örnek kod var olduğu garanti edilir MS SQL tablosu olan sys.systables ifade ettiğini

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 

Not. Oracle için, garanti edilen tabloya dual bakın. MySQL için, yalnızca doğrulama amacıyla 1 sütunluk bir tablo oluşturun; güvenli oynayın ve bir satır veri ekleyerek tabloyu önceden doldurun.

+0

Cevabınız için teşekkür ederiz. Bu konuda yeniyim, bu yüzden nerede yapılandırılacağı konusunda biraz yardıma ihtiyacım olabilir. Yerel ağa gittim: 4848 -> JDBC bağlantı havuzları -> bağlantımı seçtim -> sonra da gelişmiş sekme. Bahsettiğiniz bağlantı doğrulama yöntemini buldum ve ayrıca bağlantı doğrulama işlemini gerekli kıldım. Ancak doğrulama tablosu adını göremiyorum. – LuckyLuke

+0

Ayrıca, bkz. [Bu makale] (http://blogs.oracle.com/JagadishPrasath/entry/connection_validation_in_glassfish_jdbc) ASAP. Görünüşe göre, aynı zamanda daha önce bahsettiğim aynı Jagadish tarafından yazılıyor (onun blogu!) Ve başarısızlıkla ilgili yenilemek için 'fail-all-connections' kullanılmasını önerir. [Burada] (http://alexandru-ersenie.com/2011/03/01/glassfish-jdbc-connection-validation-explained/) glassfish JDBC Bağlantı Validasyonunu ayrıntılı olarak açıklayan ikinci bir makaledir. Her ikisi de mükemmel okumalar! – JoshDM

+0

"Domain.xml" inizde, bağlantı havuzu xml kodunuz nasıl görünüyor? Önerdiğim özellikleri belirlediğinize inanıyorum. – JoshDM

1

Bu sürücüyü kullanıyor musunuz?

com.mysql.jdbc.jdbc2.optional.MysqlXADataSource 

Ben ekli görüntüden farklı bir sürücüyü kullanan görüyoruz ...

İlgili konular