2011-10-18 18 views
15

Udało mi się nawiązać połączenie ze zdalnym serwerem MySQL przez Glassfish, jednak za każdym razem, gdy dokonuję zmiany w kodzie lub plikach XHTML, muszę otworzyć panel administratora Glassfish i opróżnić pulę połączeń, w przeciwnym razie otrzymam następujące błąd, gdy po prostu odświeżam stronę. Czy ktoś tego doświadczył? Mogę umieścić kod lub inne informacje, jeśli jest to potrzebne.Dlaczego muszę przepłukiwać pulę połączeń za każdym razem, gdy ponownie się rozmierzę?

HTTP status 500 -

typ raportu Wyjątek

wiadomość

DESCRIPTIONTHE Serwer napotkał błąd wewnętrzny(), która zapobiega ją od spełnienia tego żądania.

wyjątkiem

javax.servlet.ServletException: wspawania 000049 nie może powołać [Metoda] @PostConstruct publicznego com.myapp.QuestionController.initialize() na [email protected]

przyczyną

org.jboss.weld.exceptions.WeldException: wspawania 000049 nie może powołać się [metoda] @PostConstruct publicznego com.myapp.interfaces.QuestionController.initialize() na [email protected]

Przyczyną

java.lang.reflect.InvocationTargetException

Przyczyną

javax.ejb.EJBException

Przyczyną

javax.persistence.PersistenceException: Exception [EclipseLink-4002] (Eclipse Persistence Services - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.DatabaseException Internal Wyjątek: java.sql.SQLException: Błąd przy przydzielaniu połączenia. Przyczyna: java.lang.RuntimeException: wyszła wyjątku podczas XAResource.start: kod błędu: 0

podstawowych przyczyn

Wyjątek [EclipseLink-4002] (Eclipse Trwałość usługi - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.DatabaseException Internal Wyjątek: java.sql.SQLException: Błąd przy alokowaniu połączenia. Przyczyna: wyjątkiem wyszła podczas XAResource.start:: java.lang.RuntimeException kod błędu: 0

Przyczyną

java.sql.SQLException Błąd na przydzielenie połączenia. Przyczyna: java.lang.RuntimeException: Wystąpił wyjątek podczas XAResource.start:

korzeń przyczyna

javax.resource.spi.ResourceAllocationException: Błąd w alokowanie połączenia. Przyczyna: Got wyjątek podczas XAResource.start:: java.lang.RuntimeException

korzeń przyczyna

com.sun.appserv.connectors.internal.api.PoolingException: java.lang.RuntimeException: Got wyjątek podczas XAResource.start:

przyczyna

com.sun.appserv.connectors.internal.api.PoolingException: java.lang.RuntimeException: Got wyjątek podczas XAResource.start:

Przyczyną

java.lang.RuntimeException: wyjątkiem wyszła podczas XAResource.start:

Przyczyną

javax.transaction.xa.XAException: com.sun.appserv.connectors.internal. api.PoolingException: javax.resource.spi.LocalTransactionException: link Komunikacja awaria

ostatni pakiet odebrany z serwera było 435.409 milliseco nds temu. Ostatni pakiet wysłany z powodzeniem na serwer był 7 milisekund temu.

Image of config

Trwałość 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> 

W "Dodatkowe właściwości" w ustawieniach Bilard GlassFish właśnie skonfigurowane: nazwa_serwera, URL użytkownika i hasło.


Mam rozwiązać ten problem

enter image description here

zrobiłem mój własny podwójny stół, podobny do tego z Oracle.

CREATE TABLE dual 
(
    x VARCHAR(1) 
); 

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

Non transakcyjny Połączenia, Izolacja transakcja :, poziom izolacji: -> Są one zgrupowane w ramach transakcji, każdy z nich? – LuckyLuke

+0

Jak uzyskać połączenie? To może spowodować ten wyjątek. Co to jest konfiguracja puli połączeń. – r0ast3d

+0

Czy jest gdzieś odniesienie do połączenia? Czy mógłbyś dodać więcej informacji ... Również na zdalnym serwerze, jaka jest konfiguracja dla liczby klientów i połączeń? – r0ast3d

Odpowiedz

20

Twój przyczyną, PoolingException: javax.resource.spi.LocalTransactionException: Communications link failure jest związane this Glassfish bug, co tłumaczy (w zakładce komentarzach na dole), które mogą być potrzebne, aby odświeżyć swoje nieprawidłowych połączeń.

Komentarz błędu przez Jagadish mówi, aby sprawdzić typ sprawdzania poprawności połączenia. Jeśli jest ustawione na "automatyczne zatwierdzanie" (domyślne), sterowniki JDBC mogą buforować wcześniejsze dane sprawdzania poprawności połączenia i podczas przyszłych sprawdzeń poprawności połączeń nie nastąpi faktyczna interakcja z bazą danych.

Aby rozwiązać problem, ustaw connection-validation-method="table" i validation-table-name="any_table_you_know_exists" (zamień any_table_you_know_exists na nazwę dowolnej istniejącej tabeli). Wykonanie tego wymusza połączenia, aby rozmawiać z bazą danych zamiast z pamięcią podręczną; jeśli połączenie jest nieprawidłowe, zostanie ono usunięte i ponownie utworzone. Może być również konieczne podanie wartości is-connection-validation-required="true".

Artykuły do ​​pomocy dodatkowej konfiguracji:

  1. This article wyjaśnia również problem w szczegółach.
  2. Jagadish's Oracle Blog Article na ten temat zawiera więcej informacji.
  3. Article objaśnienie poprawności sprawdzania poprawności połączenia JDBC programu Glassfish.

tekst z bloga Jagadish za:

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 

Zauważ, że przykładowy kod odnosi się do sys.systables, który znajduje się tabela MS SQL, który jest gwarantowany istnieć. W przypadku Oracle sprawdź tabelę gwarantowaną dual. W przypadku MySQL utwórz tabelę 1-kolumnową wyłącznie do celów sprawdzania poprawności; zagraj w nią bezpiecznie i wstępnie wypełnij tabelę, wstawiając jeden wiersz danych.

+0

Dziękuję za odpowiedź. Jestem na to nowy, więc potrzebowałem tylko niewielkiej pomocy, aby to skonfigurować. Poszedłem do localhost: 4848 -> Pule połączeń JDBC -> wybrałem moje połączenie -> następnie kartę zaawansowaną. Znalazłem metodę sprawdzania połączenia, o której mówisz, a także wybrałeś wymaganą poprawność połączenia. Ale nie widzę nazwy tabeli sprawdzającej poprawność. – LuckyLuke

+0

Zobacz też [ten artykuł] (http://blogs.oracle.com/JagadishPrasath/entry/connection_validation_in_glassfish_jdbc) JAK NAJSZYBCIEJ. Wygląda na to, że "jest również napisany przez ten sam Jagadish, o którym wspominałem wcześniej (jego blog!) I sugeruje użycie' fail-all-connections' do odświeżenia po awarii. [Tutaj] (http://alexandru-ersenie.com/2011/03/01/glassfish-jdbc-connection-validation-explained/) jest drugim artykułem, który wyjaśnia szczegółowo weryfikację połączenia JDBC przez glassfish. Oba są doskonałymi lekturami! – JoshDM

+0

W swoim 'domenie.xml' jaki jest twój kod XML połączenia? Uważam, że właśnie tam ustawiłeś właściwości, które zasugerowałem. – JoshDM

1

Czy używasz tego sterownika?

com.mysql.jdbc.jdbc2.optional.MysqlXADataSource 

widzę, że używasz innego sterownika z załączonego obrazka ...

Powiązane problemy