2011-10-18 6 views
15

que han realizado con éxito una conexión a un servidor MySQL remoto a través de Glassfish, sin embargo, cada vez que hago un cambio en los archivos de código o XHTML, que necesito para abrir el panel de administrador de Glassfish y lave la agrupación de conexiones, de lo contrario me sale el siguiente error cuando acabo de actualizar la página. ¿Alguien ha experimentado esto? Puedo publicar el código u otra información si es necesario.¿Por qué necesito purgar el grupo de conexiones cada vez que vuelvo a implementar?

de estado HTTP 500 -

informe Tipo de excepción

mensaje

servidor DescriptionThe encontró un error interno() que impedía que de cumplir con esta solicitud.

excepción

javax.servlet.ServletException: Weld-000 049 No se puede invocar [método] @PostConstruct público com.myapp.QuestionController.initialize() en [email protected]

causa raíz

org.jboss.weld.exceptions.WeldException: Weld-000049 No es posible invocar [método] @PostConstruct pública com.myapp.interfaces.QuestionController.initialize() en [email protected]

causa raíz

java.lang.reflect.InvocationTargetException

causa raíz

javax.ejb.EJBException

causa raíz

javax.persistence.PersistenceException: Excepción [EclipseLink-4002] (Eclipse Persistencia Servicios - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.DatabaseException interna Excepción: java.sql.SQLException: error en la asignación de una conexión. Causa: java.lang.RuntimeException: Got excepción durante XAResource.start: Código de error: 0

causa raíz

Excepción [EclipseLink-4002] (Eclipse Persistencia Servicios - 2.3.0.v20110604-r9504): org.eclipse.persistence.exceptions.DatabaseException interna Excepción: java.sql.SQLException: error en la asignación de una conexión. Causa: Tienes una excepción durante XAResource.start:: java.lang.RuntimeException Código de error: 0

causa raíz

java.sql.SQLException: error en la asignación de una conexión. Causa: java.lang.RuntimeException: Obtuvo una excepción durante XAResource.empezar:

causa raíz

javax.resource.spi.ResourceAllocationException: error en la asignación de una conexión . Causa: java.lang.RuntimeException: Got excepción durante XAResource.start:

causa raíz

com.sun.appserv.connectors.internal.api.PoolingException: excepción conseguida durante: java.lang.RuntimeException XAResource.start:

causa raíz

com.sun.appserv.connectors.internal.api.PoolingException: java.lang.RuntimeException: Got excepción durante XAResource.start:

causa raíz

java.lang.RuntimeException: excepción recibió durante XAResource.start:

causa raíz

javax.transaction.xa.XAException: com.sun.appserv.connectors.internal. api.PoolingException: javax.resource.spi.LocalTransactionException: enlace de comunicaciones fracaso

el último paquete recibido correctamente desde el servidor era 435.409 milliseco Hace nds. El último paquete enviado correctamente al servidor fue hace 7 milisegundos.

Image of config

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

En las "Propiedades adicionales" en la configuración de agrupación de conexiones Glassfish acabo configurados: nombre del servidor, URL, usuario y contraseña.


que han resuelto este problema

enter image description here

hice mi propia mesa dual, similar a la de Oracle.

CREATE TABLE dual 
(
    x VARCHAR(1) 
); 

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

no transaccional conexiones, aislamiento de transacción :, Nivel de aislamiento: -> Se agrupan en transacciones, cualquiera de ellos? – LuckyLuke

+0

¿Cómo está obteniendo la conexión? Eso puede causar esta excepción. Además, ¿cuál es la configuración del conjunto de conexiones? – r0ast3d

+0

¿Hay alguna referencia a la conexión que se lleva a cabo en algún lugar? ¿Podría por favor agregar más información ... También en el servidor remoto, cuál es la configuración para la cantidad de clientes y conexiones? – r0ast3d

Respuesta

20

Su causa raíz, PoolingException: javax.resource.spi.LocalTransactionException: Communications link failure se relaciona con this Glassfish bug, lo que explica (en la pestaña de comentarios en la parte inferior) que puede que tenga que actualizar sus conexiones no válidas.

El comentario de error por Jagadish dice que compruebe su tipo de validación de conexión. Si está configurado en "autocommit" (el valor predeterminado), los controladores JDBC pueden almacenar en caché los datos de validación de la conexión anterior, y no se producirá ninguna interacción de la base de datos real durante las validaciones de conexión futuras.Para resolver el problema, configure connection-validation-method="table" y validation-table-name="any_table_you_know_exists" (reemplace any_table_you_know_exists con el nombre de cualquier tabla existente). Hacer esto fuerza las conexiones para hablar con la base de datos en lugar de la caché; si la conexión no es válida, se descartará y volverá a crear. Es posible que también deba especificar is-connection-validation-required="true".

artículos para ayudar con la configuración adicional:

  1. This article explica también el problema en detalle.
  2. Jagadish's Oracle Blog Article sobre este tema tiene más información.
  3. Article explicando Glassfish JDBC Connection Validation en detalle.

texto del blog de 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 

Tenga en cuenta que el código de ejemplo se refiere a sys.systables, que es una tabla de MS SQL que está garantizado para existir. Para Oracle, consulte la tabla garantizada dual. Para MySQL, cree una tabla de 1 columna únicamente con fines de validación; ir a lo seguro y rellenar previamente la tabla insertando una fila de datos.

+0

Gracias por su respuesta. Soy nuevo en esto, así que podría necesitar un poco de ayuda para saber dónde configurar esto. Fui a localhost: 4848 -> Grupos de conexión JDBC -> Seleccioné mi conexión -> luego pestaña avanzada. Encontré el método de conexión-validación del que hablabas y también seleccioné la conexión-validación-requerida. Pero no veo el nombre de tabla de validación. – LuckyLuke

+0

Además, consulte [este artículo] (http://blogs.oracle.com/JagadishPrasath/entry/connection_validation_in_glassfish_jdbc) CUANTO ANTES. Aparentemente, "también está escrito por el mismo Jagadish que mencioné anteriormente (¡su blog!) Y sugiere usar' fail-all-connections' para refrescar el error. [Aquí] (http://alexandru-ersenie.com/2011/03/01/glassfish-jdbc-connection-validation-explained/) es un segundo artículo que explica Glassfish JDBC Connection Validation en detalle. ¡Ambos son excelentes lecturas! – JoshDM

+0

En su 'domain.xml', ¿cómo se ve el código xml del conjunto de conexiones? Creo que es donde estableces las propiedades que he sugerido. – JoshDM

1

¿Debería utilizar este controlador?

com.mysql.jdbc.jdbc2.optional.MysqlXADataSource 

veo que está utilizando un controlador diferente de la imagen adjunta ...

Cuestiones relacionadas