2016-07-21 7 views
1

Mit Java 7 mit Jboss7 wurde der folgende Code verwendet.@Lock (LockType.READ) Singleton Ejb in Java 8

Jetzt bin ich zu Java 8 mit Wildfly migriert funktioniert nicht mehr. Wenn geraEIniciaOperacao noch läuft, kann ich nicht auf getOperacaoEmandamento zugreifen.

"javax.ejb.ConcurrentAccessTimeoutException: WFLYEJB0241: EJB 3.1 PFD2 4.8.5.5.1 gleichzeitiger Zugriff Timeout auf OperacaoServiceImpl - konnte nicht Sperre innerhalb 5000MILLISECONDS bei org.jboss.as.ejb3.concurrency.ContainerManagedConcurrencyInterceptor erhalten .processInvocation (ContainerManagedConcurrencyInterceptor.java:106) ...“

Antwort

1

ich konnte nicht verstehen, warum so etwas zu arbeiten, verwendet. Aber was ich gefunden habe, ist: Mit containergesteuerter Parallelität ist die Semantik "gleichzeitige Lesevorgänge sind erlaubt, solange kein Schreiben läuft". Was ich brauche, ist "gleichzeitige Lesezugriffe sind erlaubt, auch während das Schreiben weitergeht, aber nur ein Thread schreibt gleichzeitig". Um das zu erreichen, dass ich die Klasse zu

@Lock (LockType.READ)

@Singleton

public class geändert haben OperacaoServiceImpl implementiert OperacaoService {

und die Methode

public void geraEIniciaOperacao() löst CoreException aus {

zu

syncronized public void geraEIniciaOperacao() throws Coreexception {

Referenz: EJB 3.1 container managed concurrency vs. synchronized