Skip to content

Commit

Permalink
WELD-463
Browse files Browse the repository at this point in the history
  • Loading branch information
nickarls committed Mar 10, 2010
1 parent 745c310 commit 8890228
Show file tree
Hide file tree
Showing 6 changed files with 64 additions and 9 deletions.
Expand Up @@ -1025,11 +1025,16 @@ public <T> InjectionTarget<T> createInjectionTarget(AnnotatedType<T> type)
return new SimpleInjectionTarget<T>(getServices().get(ClassTransformer.class).loadClass(type), this);
}

private <T> InjectionTarget<T> createMessageDrivenInjectionTarget(AnnotatedType<T> type)
{
return new MessageDrivenInjectionTarget<T>(getServices().get(ClassTransformer.class).loadClass(type), this);
}

public <T> InjectionTarget<T> createInjectionTarget(EjbDescriptor<T> descriptor)
{
if (descriptor.isMessageDriven())
{
return createInjectionTarget(createAnnotatedType(descriptor.getBeanClass()));
return createMessageDrivenInjectionTarget(createAnnotatedType(descriptor.getBeanClass()));
}
else
{
Expand Down
@@ -0,0 +1,29 @@
package org.jboss.weld.manager;

import javax.enterprise.context.spi.CreationalContext;

import org.jboss.weld.injection.InjectionContextImpl;
import org.jboss.weld.introspector.WeldClass;
import org.jboss.weld.util.Beans;

public class MessageDrivenInjectionTarget<T> extends SimpleInjectionTarget<T>
{

public MessageDrivenInjectionTarget(WeldClass<T> type, BeanManagerImpl beanManager)
{
super(type, beanManager);
}

public void inject(final T instance, final CreationalContext<T> ctx)
{
new InjectionContextImpl<T>(beanManager, this, instance)
{
public void proceed()
{
Beans.injectFieldsAndInitializers(instance, ctx, beanManager, injectableFields, initializerMethods);
}
}.run();

}

}
Expand Up @@ -47,18 +47,18 @@
public class SimpleInjectionTarget<T> implements InjectionTarget<T>
{

private final BeanManagerImpl beanManager;
protected final BeanManagerImpl beanManager;
private final WeldClass<T> type;
private final ConstructorInjectionPoint<T> constructor;
private final List<Set<FieldInjectionPoint<?, ?>>> injectableFields;
private final List<Set<MethodInjectionPoint<?, ?>>> initializerMethods;
protected final List<Set<FieldInjectionPoint<?, ?>>> injectableFields;
protected final List<Set<MethodInjectionPoint<?, ?>>> initializerMethods;
private final List<WeldMethod<?, ? super T>> postConstructMethods;
private final List<WeldMethod<?, ? super T>> preDestroyMethods;
private final Set<InjectionPoint> injectionPoints;
private final Set<WeldInjectionPoint<?, ?>> ejbInjectionPoints;
private final Set<WeldInjectionPoint<?, ?>> persistenceContextInjectionPoints;
private final Set<WeldInjectionPoint<?, ?>> persistenceUnitInjectionPoints;
private final Set<WeldInjectionPoint<?, ?>> resourceInjectionPoints;
protected final Set<WeldInjectionPoint<?, ?>> ejbInjectionPoints;
protected final Set<WeldInjectionPoint<?, ?>> persistenceContextInjectionPoints;
protected final Set<WeldInjectionPoint<?, ?>> persistenceUnitInjectionPoints;
protected final Set<WeldInjectionPoint<?, ?>> resourceInjectionPoints;

public SimpleInjectionTarget(WeldClass<T> type, BeanManagerImpl beanManager)
{
Expand Down
16 changes: 15 additions & 1 deletion tests/src/test/java/org/jboss/weld/tests/ejb/mdb/Control.java
@@ -1,12 +1,13 @@
package org.jboss.weld.tests.ejb.mdb;

import javax.ejb.MessageDrivenContext;
import javax.enterprise.context.ApplicationScoped;

@ApplicationScoped
public class Control
{

private volatile boolean messageDelivered;
private volatile boolean contextSet;

public boolean isMessageDelivered()
{
Expand All @@ -18,4 +19,17 @@ public void setMessageDelivered(boolean messageDelivered)
this.messageDelivered = messageDelivered;
}

public void setContext(MessageDrivenContext context)
{
if (context != null)
{
contextSet = true;
}
}

public boolean isContextSet()
{
return contextSet;
}

}
Expand Up @@ -52,6 +52,7 @@ public void testMdbUsable() throws Exception
sender.send(session.createTextMessage(MESSAGE));
Thread.sleep(1000);
assert getReference(Control.class).isMessageDelivered();
assert getReference(Control.class).isContextSet();
}

}
6 changes: 6 additions & 0 deletions tests/src/test/java/org/jboss/weld/tests/ejb/mdb/MilkMan.java
Expand Up @@ -16,8 +16,10 @@
*/
package org.jboss.weld.tests.ejb.mdb;

import javax.annotation.Resource;
import javax.ejb.ActivationConfigProperty;
import javax.ejb.MessageDriven;
import javax.ejb.MessageDrivenContext;
import javax.inject.Inject;
import javax.jms.JMSException;
import javax.jms.Message;
Expand All @@ -32,11 +34,15 @@ public class MilkMan implements MessageListener
{

@Inject Control control;

@Resource
private MessageDrivenContext context;

public void onMessage(Message message)
{
try
{
control.setContext(context);
control.setMessageDelivered(((TextMessage) message).getText().equals(EJBTest.MESSAGE));
}
catch (JMSException e)
Expand Down

0 comments on commit 8890228

Please sign in to comment.