Author: echatellier Date: 2010-09-24 11:29:36 +0200 (Fri, 24 Sep 2010) New Revision: 342 Url: http://nuiton.org/repositories/revision/wikitty/342 Log: Propagation des events dans un nouveau thread pour que les listeners ne soit pas dans le m?\195?\170me thread que celui qui ?\195?\160 lanc?\195?\169 l'event (JTA = une transaction par thread). Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceNotifier.java Modified: trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceNotifier.java =================================================================== --- trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceNotifier.java 2010-09-23 16:53:35 UTC (rev 341) +++ trunk/wikitty-api/src/main/java/org/nuiton/wikitty/WikittyServiceNotifier.java 2010-09-24 09:29:36 UTC (rev 342) @@ -554,20 +554,30 @@ * * @param event event to fire */ - protected void firePutWikitty(WikittyServiceEvent event) { - for (WikittyServiceListener l : allWikittyServiceListeners) { - l.putWikitty(event); - } - if (event.isRemote()) { - for (WikittyServiceListener l : localWikittyServiceListeners) { - l.putWikitty(event); + protected void firePutWikitty(final WikittyServiceEvent event) { + // ajout d'un thread, car si les listener doit + // ouvrir une transaction WikittyTransaction + // alors que celui qui lance l'event en a une ouverte + // cela cause une exception JTA + Thread eventThread = new Thread("wikitty-event-thread") { + @Override + public void run() { + for (WikittyServiceListener l : allWikittyServiceListeners) { + l.putWikitty(event); + } + if (event.isRemote()) { + for (WikittyServiceListener l : localWikittyServiceListeners) { + l.putWikitty(event); + } + } + else { + for (WikittyServiceListener l : remoteWikittyServiceListeners) { + l.putWikitty(event); + } + } } - } - else { - for (WikittyServiceListener l : remoteWikittyServiceListeners) { - l.putWikitty(event); - } - } + }; + eventThread.start(); } /** @@ -577,20 +587,30 @@ * * @param event event to fire */ - protected void fireRemoveWikitty(WikittyServiceEvent event) { - for (WikittyServiceListener l : allWikittyServiceListeners) { - l.removeWikitty(event); - } - if (event.isRemote()) { - for (WikittyServiceListener l : localWikittyServiceListeners) { - l.removeWikitty(event); + protected void fireRemoveWikitty(final WikittyServiceEvent event) { + // ajout d'un thread, car si les listener doit + // ouvrir une transaction WikittyTransaction + // alors que celui qui lance l'event en a une ouverte + // cela cause une exception JTA + Thread eventThread = new Thread("wikitty-event-thread") { + @Override + public void run() { + for (WikittyServiceListener l : allWikittyServiceListeners) { + l.removeWikitty(event); + } + if (event.isRemote()) { + for (WikittyServiceListener l : localWikittyServiceListeners) { + l.removeWikitty(event); + } + } + else { + for (WikittyServiceListener l : remoteWikittyServiceListeners) { + l.removeWikitty(event); + } + } } - } - else { - for (WikittyServiceListener l : remoteWikittyServiceListeners) { - l.removeWikitty(event); - } - } + }; + eventThread.start(); } /** @@ -600,20 +620,30 @@ * * @param event event to fire */ - protected void fireClearWikitty(WikittyServiceEvent event) { - for (WikittyServiceListener l : allWikittyServiceListeners) { - l.clearWikitty(event); - } - if (event.isRemote()) { - for (WikittyServiceListener l : localWikittyServiceListeners) { - l.clearWikitty(event); + protected void fireClearWikitty(final WikittyServiceEvent event) { + // ajout d'un thread, car si les listener doit + // ouvrir une transaction WikittyTransaction + // alors que celui qui lance l'event en a une ouverte + // cela cause une exception JTA + Thread eventThread = new Thread("wikitty-event-thread") { + @Override + public void run() { + for (WikittyServiceListener l : allWikittyServiceListeners) { + l.clearWikitty(event); + } + if (event.isRemote()) { + for (WikittyServiceListener l : localWikittyServiceListeners) { + l.clearWikitty(event); + } + } + else { + for (WikittyServiceListener l : remoteWikittyServiceListeners) { + l.clearWikitty(event); + } + } } - } - else { - for (WikittyServiceListener l : remoteWikittyServiceListeners) { - l.clearWikitty(event); - } - } + }; + eventThread.start(); } /** @@ -623,20 +653,30 @@ * * @param event event to fire */ - protected void firePutExtension(WikittyServiceEvent event) { - for (WikittyServiceListener l : allWikittyServiceListeners) { - l.putExtension(event); - } - if (event.isRemote()) { - for (WikittyServiceListener l : localWikittyServiceListeners) { - l.putExtension(event); + protected void firePutExtension(final WikittyServiceEvent event) { + // ajout d'un thread, car si les listener doit + // ouvrir une transaction WikittyTransaction + // alors que celui qui lance l'event en a une ouverte + // cela cause une exception JTA + Thread eventThread = new Thread("wikitty-event-thread") { + @Override + public void run() { + for (WikittyServiceListener l : allWikittyServiceListeners) { + l.putExtension(event); + } + if (event.isRemote()) { + for (WikittyServiceListener l : localWikittyServiceListeners) { + l.putExtension(event); + } + } + else { + for (WikittyServiceListener l : remoteWikittyServiceListeners) { + l.putExtension(event); + } + } } - } - else { - for (WikittyServiceListener l : remoteWikittyServiceListeners) { - l.putExtension(event); - } - } + }; + eventThread.start(); } /** @@ -646,20 +686,30 @@ * * @param event event to fire */ - protected void fireRemoveExtension(WikittyServiceEvent event) { - for (WikittyServiceListener l : allWikittyServiceListeners) { - l.removeExtension(event); - } - if (event.isRemote()) { - for (WikittyServiceListener l : localWikittyServiceListeners) { - l.removeExtension(event); + protected void fireRemoveExtension(final WikittyServiceEvent event) { + // ajout d'un thread, car si les listener doit + // ouvrir une transaction WikittyTransaction + // alors que celui qui lance l'event en a une ouverte + // cela cause une exception JTA + Thread eventThread = new Thread("wikitty-event-thread") { + @Override + public void run() { + for (WikittyServiceListener l : allWikittyServiceListeners) { + l.removeExtension(event); + } + if (event.isRemote()) { + for (WikittyServiceListener l : localWikittyServiceListeners) { + l.removeExtension(event); + } + } + else { + for (WikittyServiceListener l : remoteWikittyServiceListeners) { + l.removeExtension(event); + } + } } - } - else { - for (WikittyServiceListener l : remoteWikittyServiceListeners) { - l.removeExtension(event); - } - } + }; + eventThread.start(); } /** @@ -669,19 +719,29 @@ * * @param event event to fire */ - protected void fireClearExtension(WikittyServiceEvent event) { - for (WikittyServiceListener l : allWikittyServiceListeners) { - l.clearExtension(event); - } - if (event.isRemote()) { - for (WikittyServiceListener l : localWikittyServiceListeners) { - l.clearExtension(event); + protected void fireClearExtension(final WikittyServiceEvent event) { + // ajout d'un thread, car si les listener doit + // ouvrir une transaction WikittyTransaction + // alors que celui qui lance l'event en a une ouverte + // cela cause une exception JTA + Thread eventThread = new Thread("wikitty-event-thread") { + @Override + public void run() { + for (WikittyServiceListener l : allWikittyServiceListeners) { + l.clearExtension(event); + } + if (event.isRemote()) { + for (WikittyServiceListener l : localWikittyServiceListeners) { + l.clearExtension(event); + } + } + else { + for (WikittyServiceListener l : remoteWikittyServiceListeners) { + l.clearExtension(event); + } + } } - } - else { - for (WikittyServiceListener l : remoteWikittyServiceListeners) { - l.clearExtension(event); - } - } + }; + eventThread.start(); } }
participants (1)
-
echatellier@users.nuiton.org