Foros del Web » Programación para mayores de 30 ;) » Java »

Duda con transaction manager

Estas en el tema de Duda con transaction manager en el foro de Java en Foros del Web. Hola, sigo en mi proceso de aprendizaje para crear una aplicación java y otra android que se conecten al mismo web service y vuelvo a ...
  #1 (permalink)  
Antiguo 20/06/2013, 16:41
 
Fecha de Ingreso: noviembre-2008
Mensajes: 47
Antigüedad: 15 años, 4 meses
Puntos: 0
Duda con transaction manager

Hola,

sigo en mi proceso de aprendizaje para crear una aplicación java y otra android que se conecten al mismo web service y vuelvo a necesitar vuestra ayuda.

Esta vez la duda es por el lado del servidor.

Tengo un proyecto en eclipse de tipo dinamyc web project, que tiene un servicio web y el modelo de datos. Las tablas de la base de datos son de tipo InnoDB.

El problema está en que cuando dos clientes se conectan al servidor e intentan modificar datos de una misma tabla (no el mismo dato, sino filas distintas) me da una excepción "PersistentException", he estado mirando y parece que es porque tengo dos transacciones abiertas. Como hago para permitir varias transacciones?
Si no puedo mantener varias conexiones abiertas, como hago para encolarlas y que no salte la excepción?

Pongo el código de el método que edita una fila de la tabla Clientes:
Código:
@WebMethod(operationName = "editarCliente")
    public boolean editarCliente(@WebParam(name = "clienteOld") String clienteOld, @WebParam(name = "clienteNuevo") String clienteNuevo) {
        Gson gson = new Gson();
        Cliente clienteEdit = gson.fromJson(clienteOld, Cliente.class);
        em.getTransaction().begin();
        em.merge(clienteEdit);
        em.getTransaction().commit();
        if (em.getTransaction().isActive()) {
        	em.getTransaction().rollback();
        }
        return false;
    }
Con el código del método anterior, al editar desde dos instancias de la aplicación de escritorio me salta la excepción.

Y este es el código del persistence.xml
Código:
<?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="GestionServidorDefinitivo">
		<class>model.Cliente</class>
		.
                .
                .
                .
		<properties>
		    <property name="openjpa.RuntimeUnenhancedClasses" value="supported"/>
		    <property name="openjpa.ConnectionDriverName" value="com.mysql.jdbc.Driver"/>
		    <property name="openjpa.ConnectionURL" value="jdbc:mysql://127.0.0.1:3306/gestiondefinitivo"/>
		    <property name="openjpa.ConnectionUserName" value="root"/>
		    <property name="openjpa.ConnectionPassword" value="1234"/>
		</properties>
	</persistence-unit>
</persistence>
Como puedo solucionarlo?

Gracias!

Etiquetas: concurrencia, jpa, manager, persistencia, webservice
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 18:15.