Buenas,
Pero como es posible. El cliente maneja directamente alguna conexion con la BBDD?
Todas las transacciones de base de datos deben tratarse de forma atomica en el servidor. El cliente solo debe enviar operation y parametros al WS y recibir de este una respuesta:
Un saludo
Buenos días.
El cliente solo envía los parámetros y espera una respuesta, como comentas. Eso es lo que más me extraña de todo.
Solo realiza la invocación al servicio web. El servicio es el encargado de persistir en base de datos... Por eso sospechaba que podría ser tema de JBoss... o JTA esta haciendo algo raro con las transacciones.
Es super raro. Y lo más raro es eso, que un cliente normal usando wsimport se ejecute sin problemas...
Un saludo.
Buenas,
Pues por lo que comentas, y teniendo en cuenta lo de que a veces va y otras no, yo comprobaria, monitorizaria y depuraria bien la parte servidora, en concreto la comunicacion con la BBDD desde el EJB. Apostaria por un problema de red/firewall
Un saludo y suerte
Buenos días.
He abierto un hilo parecido en la sección de Android, pero tal vez procede más abrirlo en este subforo.
He implementado un servicio web usando EJB 3.0 + JAX-WS, y lo he desplegado sobre un JBoss 7.1.1.
Al servicio web se le inyecta un servicio EJB que se encarga de persistir (a través de JPA) la información que recibe del servicio web (una foto en formato byte[]).
He creado un cliente (en un método Main) usando wsimport. Invoco al cliente desde el propio IDE (Eclipse) y funciona correctamente.
El problema es que el servicio debe ser invocado desde un móvil (con SO Android), que es el encargado de hacer la foto.
Se ha implementado el cliente usando ksoap2-android (usamos SOAP). Al invocar al sevicio desde el emulador de Android, todo va correctamente.
Pero al invocarlo desde el propio terminal móvil... se produce un error. Parece que JBoss corta la conexión al intentar persistir en la base de datos o algo...
Solo falla desde el cliente en el terminal móvil, y no tenemos ni idea de porqué.
Adjunto el log del error:
Caused by: org.hibernate.exception.JDBCConnectionException: Could not send query: Connection reset by peer: socket write error
at org.hibernate.exception.internal.SQLExceptionTypeDelegate.convert(SQLExceptionTypeDelegate.java:67) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.exception.internal.StandardSQLExceptionConverter.convert(StandardSQLExceptionConverter.java:47) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:125) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.engine.jdbc.spi.SqlExceptionHelper.convert(SqlExceptionHelper.java:110) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:129) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.engine.jdbc.internal.proxy.AbstractProxyHandler.invoke(AbstractProxyHandler.java:81) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at $Proxy67.executeUpdate(Unknown Source) at org.hibernate.id.IdentityGenerator$GetGeneratedKeysDelegate.executeAndExtract(IdentityGenerator.java:96) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.id.insert.AbstractReturningDelegate.performInsert(AbstractReturningDelegate.java:55) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:2757) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.persister.entity.AbstractEntityPersister.insert(AbstractEntityPersister.java:3268) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.action.internal.EntityIdentityInsertAction.execute(EntityIdentityInsertAction.java:78) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.engine.spi.ActionQueue.execute(ActionQueue.java:272) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.event.internal.AbstractSaveEventListener.performSaveOrReplicate(AbstractSaveEventListener.java:304) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.event.internal.AbstractSaveEventListener.performSave(AbstractSaveEventListener.java:195) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.event.internal.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:128) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.ejb.event.EJB3PersistEventListener.saveWithGeneratedId(EJB3PersistEventListener.java:78) [hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.event.internal.DefaultPersistEventListener.entityIsTransient(DefaultPersistEventListener.java:208) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:151) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.event.internal.DefaultPersistEventListener.onPersist(DefaultPersistEventListener.java:78) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.internal.SessionImpl.firePersist(SessionImpl.java:725) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:701) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.internal.SessionImpl.persist(SessionImpl.java:705) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
at org.hibernate.ejb.AbstractEntityManagerImpl.persist(AbstractEntityManagerImpl.java:853) [hibernate-entitymanager-4.0.1.Final.jar:4.0.1.Final]
... 147 more
Caused by: java.sql.SQLNonTransientConnectionException: Could not send query: Connection reset by peer: socket write error
at org.mariadb.jdbc.internal.SQLExceptionMapper.get(SQLExceptionMapper.java:136)
at org.mariadb.jdbc.internal.SQLExceptionMapper.throwException(SQLExceptionMapper.java:106)
at org.mariadb.jdbc.MySQLStatement.executeQueryEpilog(MySQLStatement.java:276)
at org.mariadb.jdbc.MySQLStatement.execute(MySQLStatement.java:299)
at org.mariadb.jdbc.MySQLStatement.executeUpdate(MySQLStatement.java:327)
at org.mariadb.jdbc.MySQLPreparedStatement.executeUpdate(MySQLPreparedStatement.java:150)
at org.jboss.jca.adapters.jdbc.WrappedPreparedStatement.executeUpdate(WrappedPreparedStatement.java:493)
at sun.reflect.GeneratedMethodAccessor68.invoke(Unknown Source) [:1.6.0_30]
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) [rt.jar:1.6.0_30]
at java.lang.reflect.Method.invoke(Unknown Source) [rt.jar:1.6.0_30]
at org.hibernate.engine.jdbc.internal.proxy.AbstractStatementProxyHandler.continueInvocation(AbstractStatementProxyHandler.java:122) [hibernate-core-4.0.1.Final.jar:4.0.1.Final]
Hemos probado a persistir usando directamente JDBC en el servicio web (invocando al datasource que tiene JBoss configurado para la aplicación) y ocurre exactamente el mismo error.
Además, lo más raro de todo... ¡es que no siempre falla!. Algunas veces se ejecuta correctamente, lo cual nos mosquea aún más.
¿Se os ocurre que puede estar ocurriendo?.
Un saludo, y muchas gracias de antemano.