jpa + multithreading

retn

Grünschnabel
Hallo zusammen,

ich benutze zur Zeit Eclipselink als JPA Implementierung und kein Hibernate oder dergleichen.

Meine Implementierung sieht wie folgt aus. Nix besonderes.
// Player Entity
Code:
@Entity
@Table(name="player")
public class Player implements Serializable {
	private static final long serialVersionUID = 1L;

	@Id
	@Column(name="id")
	private int id;

	@Column(name="date_lastlogin")
	private Timestamp dateLastlogin;
// generic Service class
Code:
public interface Service<T> {

	public void save (T t);
	public T find (int id);
	public List<T> findAll ();
	public List<T> findByRow (String row, Object value);
}
// PlayerService
Code:
// PlayerService
public class PlayerService implements Service<Player> 
{
	private EntityManager entityManager;
	
	public PlayerService (EntityManager entityManager) {
		this.entityManager = entityManager;
	}

	@Override
	public Player find(int id) {	
		return (Player)entityManager.find(Player.class, id);
	}

So. Transactions wie update, insert, delete etc. klappen einwandfrei.

Mein Problem ist die Nebenläufigkeit und wie ich es realisieren könnte.

Die Transaction laufen leider nicht in einem eigenen Thread und blockieren meine Anwendung für ein paar Millisekunden und das will ich nicht.
Ich könnte natürlich jetzt einen ThreadpoolExecutor zur Hilfe nehmen und alles Multithreaded machen.

Dazu folgendes Szenario:
Wenn ich ein Playerentity in die Datenbank über einen Thread abgleiche, könnten in meiner App. durch andere Aktionen, das Playerentity verändert werden.
Das hätte zur Folge, dass es evtl. möglich wäre, dass der Thread inkonsistente Datenwerte schreibt.
Als Beispiel eine X,Y,Z Position.
Der Thread schreibt gerade X, Y in die Datenbank und die Aktion im App verändert Z und dann ergibt sich der Salat.

Frage ist wie ich das synchonisieren könnte oder ob es ein Pattern gibt, das mit weiterhilft oder wie man generell mit JPA und Threads umgeht.
Bin da völlig überfordert.

Greetz retn
 
Zurück