[jboss-cvs] jboss-seam/src/main/org/jboss/seam/core ...
Gavin King
gavin.king at jboss.com
Wed Jun 20 17:44:41 EDT 2007
User: gavin
Date: 07/06/20 17:44:41
Modified: src/main/org/jboss/seam/core Events.java
LocalTransactionListener.java
TransactionListener.java
Added: src/main/org/jboss/seam/core
AbstractTransactionListener.java
EjbTransactionListener.java
Log:
workaround problem on WAS
Revision Changes Path
1.32 +2 -2 jboss-seam/src/main/org/jboss/seam/core/Events.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: Events.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/core/Events.java,v
retrieving revision 1.31
retrieving revision 1.32
diff -u -b -r1.31 -r1.32
--- Events.java 20 Jun 2007 20:42:21 -0000 1.31
+++ Events.java 20 Jun 2007 21:44:41 -0000 1.32
@@ -123,9 +123,9 @@
getTransactionListener().scheduleEvent(type, parameters);
}
- private LocalTransactionListener getTransactionListener()
+ private TransactionListener getTransactionListener()
{
- LocalTransactionListener transactionListener = TransactionListener.instance();
+ TransactionListener transactionListener = AbstractTransactionListener.instance();
if (transactionListener==null)
{
throw new IllegalStateException("org.jboss.seam.core.transactionListener is not installed");
1.5 +2 -4 jboss-seam/src/main/org/jboss/seam/core/LocalTransactionListener.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: LocalTransactionListener.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/core/LocalTransactionListener.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- LocalTransactionListener.java 18 Jun 2007 03:21:33 -0000 1.4
+++ LocalTransactionListener.java 20 Jun 2007 21:44:41 -0000 1.5
@@ -1,12 +1,10 @@
package org.jboss.seam.core;
import javax.ejb.Local;
-import javax.transaction.Synchronization;
+
@Local
-public interface LocalTransactionListener
+public interface LocalTransactionListener extends TransactionListener
{
- public void scheduleEvent(String type, Object... parameters);
- public void registerSynchronization(Synchronization sync);
public void destroy();
}
1.10 +3 -127 jboss-seam/src/main/org/jboss/seam/core/TransactionListener.java
(In the diff below, changes in quantity of whitespace are not shown.)
Index: TransactionListener.java
===================================================================
RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/core/TransactionListener.java,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -b -r1.9 -r1.10
--- TransactionListener.java 20 Jun 2007 20:42:21 -0000 1.9
+++ TransactionListener.java 20 Jun 2007 21:44:41 -0000 1.10
@@ -1,133 +1,9 @@
package org.jboss.seam.core;
-import static org.jboss.seam.annotations.Install.BUILT_IN;
-
-import java.io.Serializable;
-import java.rmi.RemoteException;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.ejb.EJBException;
-import javax.ejb.Remove;
-import javax.ejb.SessionSynchronization;
-import javax.ejb.Stateful;
-import javax.transaction.Status;
import javax.transaction.Synchronization;
-import org.jboss.seam.Component;
-import org.jboss.seam.ScopeType;
-import org.jboss.seam.annotations.Install;
-import org.jboss.seam.annotations.Logger;
-import org.jboss.seam.annotations.Name;
-import org.jboss.seam.annotations.Scope;
-import org.jboss.seam.contexts.Contexts;
-import org.jboss.seam.log.Log;
-
-/**
- * Temporary solution for getting JTA transaction lifecycle
- * callbacks. Once all appservers support the new EE5 APIs,
- * this will be removed.
- *
- * @author Gavin King
- *
- */
- at Stateful
- at Scope(ScopeType.EVENT)
- at Name("org.jboss.seam.core.transactionListener")
- at Install(value=false, precedence=BUILT_IN)
-public class TransactionListener implements LocalTransactionListener, SessionSynchronization
+public interface TransactionListener
{
- private static @Logger Log log;
-
- static class Event implements Serializable
- {
- private String type;
- private Object[] parameters;
-
- public Event(String type, Object[] parameters)
- {
- this.type = type;
- this.parameters = parameters;
- }
- public void call()
- {
- Events.instance().raiseEvent(type, parameters);
- }
- }
-
- private List<Event> events = new ArrayList<Event>();
- private List<Synchronization> synchronizations = new ArrayList<Synchronization>();
-
- public static LocalTransactionListener instance()
- {
- if ( !Contexts.isEventContextActive() )
- {
- throw new IllegalStateException("no event context active");
- }
- return (LocalTransactionListener) Component.getInstance(TransactionListener.class, ScopeType.EVENT);
- }
-
- public void afterBegin() throws EJBException, RemoteException {}
-
- public void scheduleEvent(String type, Object... parameters)
- {
- events.add( new Event(type, parameters) );
- }
-
- public void registerSynchronization(Synchronization sync)
- {
- synchronizations.add(sync);
- }
-
- public void afterCompletion(boolean success) throws EJBException, RemoteException
- {
- Events.instance().raiseEvent("org.jboss.seam.afterTransactionCompletion", success);
- for (Synchronization sync: synchronizations)
- {
- try
- {
- sync.afterCompletion(success ? Status.STATUS_COMMITTED : Status.STATUS_ROLLEDBACK);
- }
- catch (Exception e)
- {
- log.error("Exception processing transaction Synchronization after completion", e);
- }
- }
- synchronizations.clear();
- if (success)
- {
- for (Event event: events)
- {
- try
- {
- event.call();
- }
- catch (Exception e)
- {
- log.error("Exception processing transaction success event", e);
- }
- }
- events.clear();
- }
- }
-
- public void beforeCompletion() throws EJBException, RemoteException
- {
- Events.instance().raiseEvent("org.jboss.seam.beforeTransactionCompletion");
- for (Synchronization sync: synchronizations)
- {
- try
- {
- sync.beforeCompletion();
- }
- catch (Exception e)
- {
- log.error("Exception processing transaction Synchronization before completion", e);
- }
- }
- }
-
- @Remove
- public void destroy() {}
-
+ public void scheduleEvent(String type, Object... parameters);
+ public void registerSynchronization(Synchronization sync);
}
1.1 date: 2007/06/20 21:44:41; author: gavin; state: Exp;jboss-seam/src/main/org/jboss/seam/core/AbstractTransactionListener.java
Index: AbstractTransactionListener.java
===================================================================
package org.jboss.seam.core;
import static org.jboss.seam.annotations.Install.BUILT_IN;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import javax.transaction.Status;
import javax.transaction.Synchronization;
import org.jboss.seam.Component;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Install;
import org.jboss.seam.annotations.Logger;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
import org.jboss.seam.contexts.Contexts;
import org.jboss.seam.log.Log;
/**
* Temporary solution for getting JTA transaction lifecycle
* callbacks. Once all appservers support the new EE5 APIs,
* this will be removed.
*
* @author Gavin King
*
*/
@Scope(ScopeType.EVENT)
@Name("org.jboss.seam.core.transactionListener")
@Install(value=false, precedence=BUILT_IN)
public class AbstractTransactionListener implements TransactionListener
{
private static @Logger Log log;
private List<Event> events = new ArrayList<Event>();
private List<Synchronization> synchronizations = new ArrayList<Synchronization>();
private static class Event implements Serializable
{
private String type;
private Object[] parameters;
public Event(String type, Object[] parameters)
{
this.type = type;
this.parameters = parameters;
}
public void call()
{
Events.instance().raiseEvent(type, parameters);
}
}
public static TransactionListener instance()
{
if ( !Contexts.isEventContextActive() )
{
throw new IllegalStateException("no event context active");
}
return (TransactionListener) Component.getInstance(AbstractTransactionListener.class, ScopeType.EVENT);
}
public void scheduleEvent(String type, Object... parameters)
{
events.add( new Event(type, parameters) );
}
public void registerSynchronization(Synchronization sync)
{
synchronizations.add(sync);
}
protected void afterTransactionCompletion(boolean success)
{
Events.instance().raiseEvent("org.jboss.seam.afterTransactionCompletion", success);
for (Synchronization sync: synchronizations)
{
try
{
sync.afterCompletion(success ? Status.STATUS_COMMITTED : Status.STATUS_ROLLEDBACK);
}
catch (Exception e)
{
log.error("Exception processing transaction Synchronization after completion", e);
}
}
synchronizations.clear();
if (success)
{
for (Event event: events)
{
try
{
event.call();
}
catch (Exception e)
{
log.error("Exception processing transaction success event", e);
}
}
events.clear();
}
}
protected void beforeTransactionCompletion()
{
Events.instance().raiseEvent("org.jboss.seam.beforeTransactionCompletion");
for (Synchronization sync: synchronizations)
{
try
{
sync.beforeCompletion();
}
catch (Exception e)
{
log.error("Exception processing transaction Synchronization before completion", e);
}
}
}
}
1.1 date: 2007/06/20 21:44:41; author: gavin; state: Exp;jboss-seam/src/main/org/jboss/seam/core/EjbTransactionListener.java
Index: EjbTransactionListener.java
===================================================================
package org.jboss.seam.core;
import static org.jboss.seam.annotations.Install.FRAMEWORK;
import java.rmi.RemoteException;
import javax.ejb.EJBException;
import javax.ejb.Remove;
import javax.ejb.SessionSynchronization;
import javax.ejb.Stateful;
import org.jboss.seam.ScopeType;
import org.jboss.seam.annotations.Install;
import org.jboss.seam.annotations.Name;
import org.jboss.seam.annotations.Scope;
/**
* Temporary solution for getting JTA transaction lifecycle
* callbacks. Once all appservers support the new EE5 APIs,
* this will be removed.
*
* @author Gavin King
*
*/
@Stateful
@Scope(ScopeType.EVENT)
@Name("org.jboss.seam.core.transactionListener")
@Install(precedence=FRAMEWORK, value=false)
public class EjbTransactionListener extends AbstractTransactionListener
implements LocalTransactionListener, SessionSynchronization
{
public void afterCompletion(boolean success) throws EJBException, RemoteException
{
super.afterTransactionCompletion(success);
}
public void beforeCompletion() throws EJBException, RemoteException
{
super.beforeTransactionCompletion();
}
public void afterBegin() throws EJBException, RemoteException {}
@Remove
public void destroy() {}
}
More information about the jboss-cvs-commits
mailing list