[webbeans-commits] Webbeans SVN: r2947 - in ri/trunk: impl/src/main/java/org/jboss/webbeans/event and 2 other directories.
webbeans-commits at lists.jboss.org
webbeans-commits at lists.jboss.org
Wed Jul 1 15:43:15 EDT 2009
Author: dallen6
Date: 2009-07-01 15:43:15 -0400 (Wed, 01 Jul 2009)
New Revision: 2947
Removed:
ri/trunk/api/src/main/java/javax/enterprise/event/AfterTransactionCompletion.java
ri/trunk/api/src/main/java/javax/enterprise/event/AfterTransactionFailure.java
ri/trunk/api/src/main/java/javax/enterprise/event/AfterTransactionSuccess.java
ri/trunk/api/src/main/java/javax/enterprise/event/BeforeTransactionCompletion.java
Modified:
ri/trunk/api/src/main/java/javax/enterprise/event/Notify.java
ri/trunk/api/src/main/java/javax/enterprise/event/Observes.java
ri/trunk/impl/src/main/java/org/jboss/webbeans/event/EventObserver.java
ri/trunk/impl/src/main/java/org/jboss/webbeans/event/ObserverFactory.java
ri/trunk/impl/src/main/java/org/jboss/webbeans/event/ObserverImpl.java
ri/trunk/impl/src/main/java/org/jboss/webbeans/event/TransactionalObserverImpl.java
ri/trunk/impl/src/main/java/org/jboss/webbeans/introspector/WBMethod.java
ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/implementation/event/SimpleEventTest.java
Log:
Upgraded observer methods to latest specification and added the @Current binding back to all observers
Deleted: ri/trunk/api/src/main/java/javax/enterprise/event/AfterTransactionCompletion.java
===================================================================
--- ri/trunk/api/src/main/java/javax/enterprise/event/AfterTransactionCompletion.java 2009-07-01 18:24:03 UTC (rev 2946)
+++ ri/trunk/api/src/main/java/javax/enterprise/event/AfterTransactionCompletion.java 2009-07-01 19:43:15 UTC (rev 2947)
@@ -1,37 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2008, Red Hat Middleware LLC, and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * http://www.apache.org/licenses/LICENSE-2.0
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package javax.enterprise.event;
-
-import static java.lang.annotation.ElementType.PARAMETER;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-/**
- * Specifies that an observer method is an after transaction completion observer.
- *
- * @author Gavin King
- *
- */
- at Retention(RUNTIME)
- at Target(PARAMETER)
- at Deprecated
-public @interface AfterTransactionCompletion
-{
-}
Deleted: ri/trunk/api/src/main/java/javax/enterprise/event/AfterTransactionFailure.java
===================================================================
--- ri/trunk/api/src/main/java/javax/enterprise/event/AfterTransactionFailure.java 2009-07-01 18:24:03 UTC (rev 2946)
+++ ri/trunk/api/src/main/java/javax/enterprise/event/AfterTransactionFailure.java 2009-07-01 19:43:15 UTC (rev 2947)
@@ -1,37 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2008, Red Hat Middleware LLC, and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * http://www.apache.org/licenses/LICENSE-2.0
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package javax.enterprise.event;
-
-import static java.lang.annotation.ElementType.PARAMETER;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-/**
- * Specifies that an observer method is an after transaction failure observer.
- *
- * @author Gavin King
- *
- */
- at Retention(RUNTIME)
- at Target(PARAMETER)
- at Deprecated
-public @interface AfterTransactionFailure
-{
-}
Deleted: ri/trunk/api/src/main/java/javax/enterprise/event/AfterTransactionSuccess.java
===================================================================
--- ri/trunk/api/src/main/java/javax/enterprise/event/AfterTransactionSuccess.java 2009-07-01 18:24:03 UTC (rev 2946)
+++ ri/trunk/api/src/main/java/javax/enterprise/event/AfterTransactionSuccess.java 2009-07-01 19:43:15 UTC (rev 2947)
@@ -1,37 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2008, Red Hat Middleware LLC, and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * http://www.apache.org/licenses/LICENSE-2.0
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package javax.enterprise.event;
-
-import static java.lang.annotation.ElementType.PARAMETER;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-/**
- * Specifies that an observer method is an transaction failure observer.
- *
- * @author Gavin King
- *
- */
- at Retention(RUNTIME)
- at Target(PARAMETER)
- at Deprecated
-public @interface AfterTransactionSuccess
-{
-}
Deleted: ri/trunk/api/src/main/java/javax/enterprise/event/BeforeTransactionCompletion.java
===================================================================
--- ri/trunk/api/src/main/java/javax/enterprise/event/BeforeTransactionCompletion.java 2009-07-01 18:24:03 UTC (rev 2946)
+++ ri/trunk/api/src/main/java/javax/enterprise/event/BeforeTransactionCompletion.java 2009-07-01 19:43:15 UTC (rev 2947)
@@ -1,38 +0,0 @@
-/*
- * JBoss, Home of Professional Open Source
- * Copyright 2008, Red Hat Middleware LLC, and individual contributors
- * by the @authors tag. See the copyright.txt in the distribution for a
- * full listing of individual contributors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- * http://www.apache.org/licenses/LICENSE-2.0
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package javax.enterprise.event;
-
-import static java.lang.annotation.ElementType.PARAMETER;
-import static java.lang.annotation.RetentionPolicy.RUNTIME;
-
-import java.lang.annotation.Retention;
-import java.lang.annotation.Target;
-
-/**
- * Specifies that an observer method is an after transaction completion
- * observer.
- *
- * @author Gavin King
- *
- */
- at Retention(RUNTIME)
- at Target(PARAMETER)
- at Deprecated
-public @interface BeforeTransactionCompletion
-{
-}
Modified: ri/trunk/api/src/main/java/javax/enterprise/event/Notify.java
===================================================================
--- ri/trunk/api/src/main/java/javax/enterprise/event/Notify.java 2009-07-01 18:24:03 UTC (rev 2946)
+++ ri/trunk/api/src/main/java/javax/enterprise/event/Notify.java 2009-07-01 19:43:15 UTC (rev 2947)
@@ -23,6 +23,7 @@
*
* @author Gavin King
* @author Dan Allen
+ * @author David Allen
*/
public enum Notify
{
@@ -33,13 +34,7 @@
IF_EXISTS,
/**
- * Specifies that an observer method is called synchronously.
+ * Specifies that an observer method always receives the event notifications.
*/
- SYNCHRONOUSLY,
-
- /**
- * Specifies that an observer method receives the event notifications
- * asynchronously.
- */
- ASYNCHRONOUSLY
+ ALWAYS
}
\ No newline at end of file
Modified: ri/trunk/api/src/main/java/javax/enterprise/event/Observes.java
===================================================================
--- ri/trunk/api/src/main/java/javax/enterprise/event/Observes.java 2009-07-01 18:24:03 UTC (rev 2946)
+++ ri/trunk/api/src/main/java/javax/enterprise/event/Observes.java 2009-07-01 19:43:15 UTC (rev 2947)
@@ -31,6 +31,7 @@
*
* @author Gavin King
* @author Pete Muir
+ * @author David Allen
*/
@Target(PARAMETER)
@@ -38,5 +39,19 @@
@Documented
public @interface Observes
{
- public Notify notifyObserver() default Notify.SYNCHRONOUSLY;
+ /**
+ * Specifies when an observer method should be notified of an event.
+ * Defaults to ALWAYS meaning that if a bean instance with the observer
+ * method does not already exist, one will be created to receive the
+ * event.
+ */
+ public Notify notifyObserver() default Notify.ALWAYS;
+
+ /**
+ * Specifies whether or not the notification should occur as part of
+ * an ongoing transaction, and if so, in which phase of the transaction
+ * the notification should occur. The default is IN_PROGRESS meaning
+ * the notification is not transactional.
+ */
+ public TransactionPhase during() default TransactionPhase.IN_PROGRESS;
}
Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/event/EventObserver.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/event/EventObserver.java 2009-07-01 18:24:03 UTC (rev 2946)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/event/EventObserver.java 2009-07-01 19:43:15 UTC (rev 2947)
@@ -91,10 +91,7 @@
{
throw new IllegalArgumentException(annotation + " is already present in the bindings list for " + this);
}
- if (!annotation.annotationType().equals(Current.class))
- {
- eventBindings.add(annotation);
- }
+ eventBindings.add(annotation);
}
}
Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/event/ObserverFactory.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/event/ObserverFactory.java 2009-07-01 18:24:03 UTC (rev 2946)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/event/ObserverFactory.java 2009-07-01 19:43:15 UTC (rev 2947)
@@ -16,6 +16,8 @@
*/
package org.jboss.webbeans.event;
+import javax.enterprise.event.TransactionPhase;
+
import org.jboss.webbeans.BeanManagerImpl;
import org.jboss.webbeans.bean.RIBean;
import org.jboss.webbeans.introspector.WBMethod;
@@ -40,9 +42,10 @@
public static <T> ObserverImpl<T> create(WBMethod<?> method, RIBean<?> declaringBean, BeanManagerImpl manager)
{
ObserverImpl<T> result = null;
- if (manager.getServices().contains(TransactionServices.class) && TransactionalObserverImpl.isObserverMethodTransactional(method))
+ TransactionPhase transactionPhase = TransactionalObserverImpl.getTransactionalPhase(method);
+ if (manager.getServices().contains(TransactionServices.class) && !transactionPhase.equals(TransactionPhase.IN_PROGRESS))
{
- result = new TransactionalObserverImpl<T>(method, declaringBean, manager);
+ result = new TransactionalObserverImpl<T>(method, declaringBean, transactionPhase, manager);
}
else
{
Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/event/ObserverImpl.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/event/ObserverImpl.java 2009-07-01 18:24:03 UTC (rev 2946)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/event/ObserverImpl.java 2009-07-01 19:43:15 UTC (rev 2947)
@@ -56,7 +56,6 @@
protected final RIBean<?> observerBean;
protected final MethodInjectionPoint<?> observerMethod;
private final boolean conditional;
- private final boolean asynchronous;
protected BeanManagerImpl manager;
private final Type eventType;
private final Annotation[] bindings;
@@ -79,7 +78,6 @@
this.bindings = observerMethod.getAnnotatedParameters(Observes.class).get(0).getBindingsAsArray();
Observes observesAnnotation = observerMethod.getAnnotatedParameters(Observes.class).get(0).getAnnotation(Observes.class);
this.conditional = observesAnnotation.notifyObserver().equals(Notify.IF_EXISTS);
- this.asynchronous = observesAnnotation.notifyObserver().equals(Notify.ASYNCHRONOUSLY);
}
/**
@@ -140,23 +138,11 @@
throw new DefinitionException(this + " cannot be annotated with @Initializer");
}
- // We cannot allow asynchronously invoked conditional observers either
- if (this.asynchronous && this.conditional)
- {
- throw new DefinitionException(this + " cannot be annotated with both @Asynchronously and @IfExists");
- }
}
public boolean notify(final T event)
{
- if (this.asynchronous)
- {
- sendEventAsynchronously(event);
- }
- else
- {
- sendEvent(event);
- }
+ sendEvent(event);
return false;
}
Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/event/TransactionalObserverImpl.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/event/TransactionalObserverImpl.java 2009-07-01 18:24:03 UTC (rev 2946)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/event/TransactionalObserverImpl.java 2009-07-01 19:43:15 UTC (rev 2947)
@@ -16,21 +16,14 @@
*/
package org.jboss.webbeans.event;
-import java.util.ArrayList;
-import java.util.List;
-
-import javax.enterprise.event.AfterTransactionCompletion;
-import javax.enterprise.event.AfterTransactionFailure;
-import javax.enterprise.event.AfterTransactionSuccess;
-import javax.enterprise.event.BeforeTransactionCompletion;
-import javax.enterprise.event.Notify;
import javax.enterprise.event.Observes;
+import javax.enterprise.event.TransactionPhase;
import javax.transaction.Synchronization;
import org.jboss.webbeans.BeanManagerImpl;
-import org.jboss.webbeans.DefinitionException;
import org.jboss.webbeans.bean.RIBean;
import org.jboss.webbeans.introspector.WBMethod;
+import org.jboss.webbeans.introspector.WBParameter;
import org.jboss.webbeans.transaction.spi.TransactionServices;
/**
@@ -39,31 +32,18 @@
*/
class TransactionalObserverImpl<T> extends ObserverImpl<T>
{
- /**
- * The known transactional phases a transactional event observer can be
- * interested in
- */
- protected enum TransactionObservationPhase
- {
- BEFORE_COMPLETION, AFTER_COMPLETION, AFTER_FAILURE, AFTER_SUCCESS
- }
+ private TransactionPhase transactionPhase;
- private TransactionObservationPhase transactionObservationPhase;
-
/**
* Tests an observer method to see if it is transactional.
*
* @param observer The observer method
* @return true if the observer method is annotated as transactional
*/
- public static boolean isObserverMethodTransactional(WBMethod<?> observer)
+ public static TransactionPhase getTransactionalPhase(WBMethod<?> observer)
{
- boolean transactional = true;
- if ((observer.getAnnotatedParameters(BeforeTransactionCompletion.class).isEmpty()) && (observer.getAnnotatedParameters(AfterTransactionCompletion.class).isEmpty()) && (observer.getAnnotatedParameters(AfterTransactionSuccess.class).isEmpty()) && (observer.getAnnotatedParameters(AfterTransactionFailure.class).isEmpty()))
- {
- transactional = false;
- }
- return transactional;
+ WBParameter<?> parameter = observer.getAnnotatedParameters(Observes.class).iterator().next();
+ return parameter.getAnnotationStore().getAnnotation(Observes.class).during();
}
/**
@@ -73,16 +53,16 @@
* @param observerBean The bean declaring the observer method
* @param manager The JCDI manager in use
*/
- protected TransactionalObserverImpl(WBMethod<?> observer, RIBean<?> observerBean, BeanManagerImpl manager)
+ protected TransactionalObserverImpl(WBMethod<?> observer, RIBean<?> observerBean, TransactionPhase transactionPhase, BeanManagerImpl manager)
{
super(observer, observerBean, manager);
+ this.transactionPhase = transactionPhase;
}
@Override
public void initialize()
{
super.initialize();
- initTransactionObservationPhase();
}
@Override
@@ -99,43 +79,6 @@
return false;
}
- private void initTransactionObservationPhase()
- {
- List<TransactionObservationPhase> observationPhases = new ArrayList<TransactionObservationPhase>();
- if (!observerMethod.getAnnotatedParameters(BeforeTransactionCompletion.class).isEmpty())
- {
- observationPhases.add(TransactionObservationPhase.BEFORE_COMPLETION);
- if (observerMethod.getAnnotatedParameters(Observes.class).get(0).getAnnotation(Observes.class).notifyObserver().equals(Notify.ASYNCHRONOUSLY))
- {
- throw new DefinitionException("@BeforeTransactionCompletion cannot be used on an asynchronous observer on " + observerMethod);
- }
- }
- if (!observerMethod.getAnnotatedParameters(AfterTransactionCompletion.class).isEmpty())
- {
- observationPhases.add(TransactionObservationPhase.AFTER_COMPLETION);
- }
- if (!observerMethod.getAnnotatedParameters(AfterTransactionFailure.class).isEmpty())
- {
- observationPhases.add(TransactionObservationPhase.AFTER_FAILURE);
- }
- if (!observerMethod.getAnnotatedParameters(AfterTransactionSuccess.class).isEmpty())
- {
- observationPhases.add(TransactionObservationPhase.AFTER_SUCCESS);
- }
- if (observationPhases.size() > 1)
- {
- throw new DefinitionException("Transactional observers can only observe on a single phase: " + observerMethod);
- }
- else if (observationPhases.size() == 1)
- {
- transactionObservationPhase = observationPhases.iterator().next();
- }
- else
- {
- throw new IllegalStateException("This observer method is not transactional: " + observerMethod);
- }
- }
-
/**
* Defers an event for processing in a later phase of the current
* transaction.
@@ -144,30 +87,22 @@
*/
private void deferEvent(T event)
{
- DeferredEventNotification<T> deferredEvent = null;
- if (this.observerMethod.getAnnotatedParameters(Observes.class).get(0).getAnnotation(Observes.class).notifyObserver().equals(Notify.ASYNCHRONOUSLY))
- {
- deferredEvent = new DeferredEventNotification<T>(event, this);
- }
- else
- {
- deferredEvent = new AsynchronousTransactionalEventNotification<T>(event, this);
- }
+ DeferredEventNotification<T> deferredEvent = new DeferredEventNotification<T>(event, this);;
Synchronization synchronization = null;
- if (transactionObservationPhase.equals(TransactionObservationPhase.BEFORE_COMPLETION))
+ if (transactionPhase.equals(transactionPhase.BEFORE_COMPLETION))
{
synchronization = new TransactionSynchronizedRunnable(deferredEvent, true);
}
- else if (transactionObservationPhase.equals(TransactionObservationPhase.AFTER_COMPLETION))
+ else if (transactionPhase.equals(transactionPhase.AFTER_COMPLETION))
{
synchronization = new TransactionSynchronizedRunnable(deferredEvent, false);
}
- else if (transactionObservationPhase.equals(TransactionObservationPhase.AFTER_SUCCESS))
+ else if (transactionPhase.equals(transactionPhase.AFTER_SUCCESS))
{
synchronization = new TransactionSynchronizedRunnable(deferredEvent, TransactionServices.Status.SUCCESS);
}
- else if (transactionObservationPhase.equals(TransactionObservationPhase.AFTER_FAILURE))
+ else if (transactionPhase.equals(transactionPhase.AFTER_FAILURE))
{
synchronization = new TransactionSynchronizedRunnable(deferredEvent, TransactionServices.Status.FAILURE);
}
Modified: ri/trunk/impl/src/main/java/org/jboss/webbeans/introspector/WBMethod.java
===================================================================
--- ri/trunk/impl/src/main/java/org/jboss/webbeans/introspector/WBMethod.java 2009-07-01 18:24:03 UTC (rev 2946)
+++ ri/trunk/impl/src/main/java/org/jboss/webbeans/introspector/WBMethod.java 2009-07-01 19:43:15 UTC (rev 2947)
@@ -24,10 +24,6 @@
import java.util.List;
import java.util.Set;
-import javax.enterprise.event.AfterTransactionCompletion;
-import javax.enterprise.event.AfterTransactionFailure;
-import javax.enterprise.event.AfterTransactionSuccess;
-import javax.enterprise.event.BeforeTransactionCompletion;
import javax.enterprise.event.Observes;
import javax.enterprise.inject.Disposes;
@@ -41,7 +37,7 @@
public interface WBMethod<T> extends WBMember<T, Method>
{
@SuppressWarnings("unchecked")
- public static final Set<Class<? extends Annotation>> MAPPED_PARAMETER_ANNOTATIONS = new HashSet<Class<? extends Annotation>>(Arrays.asList(Disposes.class, Observes.class, BeforeTransactionCompletion.class, AfterTransactionCompletion.class, AfterTransactionFailure.class, AfterTransactionSuccess.class, Disposes.class));
+ public static final Set<Class<? extends Annotation>> MAPPED_PARAMETER_ANNOTATIONS = new HashSet<Class<? extends Annotation>>(Arrays.asList(Disposes.class, Observes.class, Disposes.class));
/**
* Gets the abstracted parameters of the method
Modified: ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/implementation/event/SimpleEventTest.java
===================================================================
--- ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/implementation/event/SimpleEventTest.java 2009-07-01 18:24:03 UTC (rev 2946)
+++ ri/trunk/tests/src/test/java/org/jboss/webbeans/test/unit/implementation/event/SimpleEventTest.java 2009-07-01 19:43:15 UTC (rev 2947)
@@ -4,12 +4,11 @@
import javax.enterprise.event.Observes;
import javax.enterprise.inject.AnnotationLiteral;
import javax.enterprise.inject.Any;
+import javax.enterprise.inject.Current;
import org.jboss.testharness.impl.packaging.Artifact;
import org.jboss.webbeans.BeanManagerImpl;
import org.jboss.webbeans.test.AbstractWebBeansTest;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeMethod;
import org.testng.annotations.Test;
@Artifact
@@ -23,22 +22,6 @@
called_flag_for_NonBindingType = false;
}
- @Override
- @BeforeMethod
- public void before() throws Exception
- {
- initCalledFlag();
- super.before();
- }
-
- @Override
- @AfterMethod
- public void after() throws Exception
- {
- initCalledFlag();
- super.after();
- }
-
@Test
public void testEventUsingManager()
{
@@ -94,7 +77,7 @@
@Any
Event<String> event1;
- @Updated @Any
+ @Updated
Event<String> event2;
@Any
More information about the weld-commits
mailing list