Skip to content

Commit

Permalink
WELD-484
Browse files Browse the repository at this point in the history
  • Loading branch information
pmuir committed Aug 17, 2010
1 parent a9c92bd commit eaf5172
Showing 1 changed file with 35 additions and 36 deletions.
71 changes: 35 additions & 36 deletions impl/src/main/java/org/jboss/weld/event/ObserverMethodImpl.java
Expand Up @@ -16,7 +16,6 @@
*/
package org.jboss.weld.event;

import static javax.enterprise.event.Reception.ALWAYS;
import static org.jboss.weld.logging.messages.EventMessage.INVALID_DISPOSES_PARAMETER;
import static org.jboss.weld.logging.messages.EventMessage.INVALID_INITIALIZER;
import static org.jboss.weld.logging.messages.EventMessage.INVALID_PRODUCER;
Expand Down Expand Up @@ -230,65 +229,65 @@ public void notify(final T event)
*/
protected void sendEvent(final T event)
{

CreationalContext<?> creationalContext = createCreationalContext();
try
if (observerMethod.isStatic())
{
sendEvent(event, null, beanManager.createCreationalContext(declaringBean));
}
else if (reception.equals(Reception.IF_EXISTS))
{
Object instance = getReceiver(creationalContext);
Object receiver = getReceiverIfExists();
// The observer is conditional, and there is no existing bean
if (instance == null)
if (receiver == null)
{
return;
}
else
{
// As we are working with the contextual instance, we may not have the
// actual object, but a container proxy (e.g. EJB)
observerMethod.invokeOnInstanceWithSpecialValue(instance, Observes.class, event, beanManager, creationalContext, ObserverException.class);
sendEvent(event, receiver, null);
}
}
finally
else
{
if (creationalContext != null && Dependent.class.equals(declaringBean.getScope()))
{
creationalContext.release();
}
CreationalContext<?> creationalContext = beanManager.createCreationalContext(declaringBean);
Object receiver = beanManager.getReference(declaringBean, creationalContext, false);
sendEvent(event, receiver, creationalContext);
}

}

/**
* Creates the creational context if the observer method is not conditional
*
* @return
*/
private CreationalContext<?> createCreationalContext()
private void sendEvent(T event, Object receiver, CreationalContext<?> creationalContext)
{
if (reception.equals(ALWAYS))
try
{
return beanManager.createCreationalContext(declaringBean);
if (receiver == null)
{
observerMethod.invokeWithSpecialValue(receiver, Observes.class, event, beanManager, creationalContext, ObserverException.class);
}
else
{
// As we are working with the contextual instance, we may not have the
// actual object, but a container proxy (e.g. EJB)
observerMethod.invokeOnInstanceWithSpecialValue(receiver, Observes.class, event, beanManager, creationalContext, ObserverException.class);
}
}
else
finally
{
return null;
if (creationalContext != null && Dependent.class.equals(declaringBean.getScope()))
{
creationalContext.release();
}
}
}

private Object getReceiver(CreationalContext<?> creationalContext)
private Object getReceiverIfExists()
{
if (reception.equals(ALWAYS))
try
{
return beanManager.getReference(declaringBean, creationalContext, false);
return beanManager.getReference(declaringBean, null, false);
}
else
catch (ContextNotActiveException e)
{
try
{
return beanManager.getReference(declaringBean, creationalContext, false);
}
catch (ContextNotActiveException e)
{
return null;
}
return null;
}
}

Expand Down

0 comments on commit eaf5172

Please sign in to comment.