Ver Mensaje Individual
  #1 (permalink)  
Antiguo 20/06/2013, 16:41
Link_OOT
 
Fecha de Ingreso: noviembre-2008
Mensajes: 47
Antigüedad: 15 años, 5 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!