Skip to content

Commit

Permalink
Support for ProcessProducer.set and ProcessInjectionTarget
Browse files Browse the repository at this point in the history
  • Loading branch information
pmuir committed Oct 9, 2009
1 parent 1fdd250 commit 503efb8
Show file tree
Hide file tree
Showing 19 changed files with 526 additions and 196 deletions.
Expand Up @@ -17,9 +17,9 @@

package javax.enterprise.inject.spi;

public interface ProcessSessionBean<X> extends ProcessBean<Object>
public interface ProcessSessionBean<X> extends ProcessManagedBean<Object>
{
public AnnotatedType<X> getAnnotatedBeanClass();
public AnnotatedType<X> getAnnotatedSessionBeanClass();

public String getEjbName();

Expand Down
2 changes: 1 addition & 1 deletion impl/src/main/java/org/jboss/weld/BeanManagerImpl.java
Expand Up @@ -1271,7 +1271,7 @@ public <T> InjectionTarget<T> createInjectionTarget(AnnotatedType<T> type)

public <T> InjectionTarget<T> createInjectionTarget(EjbDescriptor<T> descriptor)
{
return getBean(descriptor);
return getBean(descriptor).getInjectionTarget();
}

public <X> Bean<? extends X> getMostSpecializedBean(Bean<X> bean)
Expand Down
2 changes: 1 addition & 1 deletion impl/src/main/java/org/jboss/weld/bean/AbstractBean.java
Expand Up @@ -331,7 +331,7 @@ protected void specialize(BeanDeployerEnvironment environment)
*
* @return The annotated item
*/
protected abstract WeldAnnotated<T, E> getAnnotatedItem();
public abstract WeldAnnotated<T, E> getAnnotatedItem();

/**
* Gets the binding types
Expand Down
98 changes: 56 additions & 42 deletions impl/src/main/java/org/jboss/weld/bean/AbstractClassBean.java
Expand Up @@ -25,6 +25,9 @@
import java.util.List;
import java.util.Set;

import javassist.util.proxy.ProxyFactory;
import javassist.util.proxy.ProxyObject;

import javax.enterprise.context.Dependent;
import javax.enterprise.context.NormalScope;
import javax.enterprise.context.spi.CreationalContext;
Expand Down Expand Up @@ -53,9 +56,6 @@
import org.jboss.weld.util.Proxies;
import org.jboss.weld.util.Strings;

import javassist.util.proxy.ProxyFactory;
import javassist.util.proxy.ProxyObject;

/**
* An abstract bean representation common for class-based beans
*
Expand All @@ -64,7 +64,7 @@
* @param <T>
* @param <E>
*/
public abstract class AbstractClassBean<T> extends AbstractBean<T, Class<T>> implements InjectionTarget<T>
public abstract class AbstractClassBean<T> extends AbstractBean<T, Class<T>>
{
// Logger
private static final LogProvider log = Logging.getLogProvider(AbstractClassBean.class);
Expand All @@ -83,6 +83,8 @@ public abstract class AbstractClassBean<T> extends AbstractBean<T, Class<T>> imp
private final ThreadLocal<Integer> decoratorStackPosition;
private WeldMethod<?, ?> postConstruct;
private WeldMethod<?, ?> preDestroy;

private InjectionTarget<T> injectionTarget;

/**
* Constructor
Expand Down Expand Up @@ -209,12 +211,6 @@ public List<Decorator<?>> getDecorators()
{
return Collections.unmodifiableList(decorators);
}

public void dispose(T instance)
{
// No-op for class beans
}


/**
* Initializes the bean type
Expand Down Expand Up @@ -348,38 +344,6 @@ public Set<String> getSuperclasses()
return dependencies;
}

public void postConstruct(T instance)
{
WeldMethod<?, ?> postConstruct = getPostConstruct();
if (postConstruct != null)
{
try
{
postConstruct.invoke(instance);
}
catch (Exception e)
{
throw new RuntimeException("Unable to invoke " + postConstruct + " on " + instance, e);
}
}
}

public void preDestroy(T instance)
{
WeldMethod<?, ?> preDestroy = getPreDestroy();
if (preDestroy != null)
{
try
{
// note: RI supports injection into @PreDestroy
preDestroy.invoke(instance);
}
catch (Exception e)
{
throw new RuntimeException("Unable to invoke " + preDestroy + " on " + instance, e);
}
}
}

/**
* Initializes the post-construct method
Expand Down Expand Up @@ -466,4 +430,54 @@ protected void initInterceptors()
manager.getBoundInterceptorsRegistry().registerInterceptionModel(getType(), builder.build());
}
}

public void setInjectionTarget(InjectionTarget<T> injectionTarget)
{
this.injectionTarget = injectionTarget;
}

public InjectionTarget<T> getInjectionTarget()
{
return injectionTarget;
}

@Override
public Set<InjectionPoint> getInjectionPoints()
{
return getInjectionTarget().getInjectionPoints();
}

protected void defaultPreDestroy(T instance)
{
WeldMethod<?, ?> preDestroy = getPreDestroy();
if (preDestroy != null)
{
try
{
// note: RI supports injection into @PreDestroy
preDestroy.invoke(instance);
}
catch (Exception e)
{
throw new RuntimeException("Unable to invoke " + preDestroy + " on " + instance, e);
}
}
}

protected void defaultPostConstruct(T instance)
{
WeldMethod<?, ?> postConstruct = getPostConstruct();
if (postConstruct != null)
{
try
{
postConstruct.invoke(instance);
}
catch (Exception e)
{
throw new RuntimeException("Unable to invoke " + postConstruct + " on " + instance, e);
}
}
}

}
27 changes: 25 additions & 2 deletions impl/src/main/java/org/jboss/weld/bean/AbstractProducerBean.java
Expand Up @@ -56,9 +56,11 @@
* @param <T>
* @param <S>
*/
public abstract class AbstractProducerBean<X, T, S extends Member> extends AbstractReceiverBean<X, T, S> implements Producer<T>
public abstract class AbstractProducerBean<X, T, S extends Member> extends AbstractReceiverBean<X, T, S>
{
private static final LogProvider log = Logging.getLogProvider(AbstractProducerBean.class);

private Producer<T> producer;

/**
* Constructor
Expand Down Expand Up @@ -154,6 +156,12 @@ public void initialize(BeanDeployerEnvironment environment)
super.initialize(environment);
checkProducerReturnType();
}

@Override
public Set<InjectionPoint> getInjectionPoints()
{
return getProducer().getInjectionPoints();
}

/**
* Validates the return value
Expand Down Expand Up @@ -244,6 +252,21 @@ public boolean isSerializable()
{
return true;
}

/**
* This operation is *not* threadsafe, and should not be called outside bootstrap
*
* @param producer
*/
public void setProducer(Producer<T> producer)
{
this.producer = producer;
}

public Producer<T> getProducer()
{
return producer;
}

/**
* Creates an instance of the bean
Expand All @@ -254,7 +277,7 @@ public T create(final CreationalContext<T> creationalContext)
{
try
{
T instance = produce(creationalContext);
T instance = getProducer().produce(creationalContext);
checkReturnValue(instance);
return instance;
}
Expand Down
Expand Up @@ -119,6 +119,6 @@ else if (getMergedStereotypes().isPolicy())
}

@Override
protected abstract WeldMember<T, ?, S> getAnnotatedItem();
public abstract WeldMember<T, ?, S> getAnnotatedItem();

}
28 changes: 14 additions & 14 deletions impl/src/main/java/org/jboss/weld/bean/InterceptorImpl.java
Expand Up @@ -17,19 +17,18 @@

package org.jboss.weld.bean;

import org.jboss.interceptor.model.InterceptorClassMetadata;
import org.jboss.interceptor.registry.InterceptorClassMetadataRegistry;
import org.jboss.interceptor.proxy.DirectClassInterceptionHandler;
import org.jboss.weld.BeanManagerImpl;
import org.jboss.weld.introspector.WeldClass;
import org.jboss.weld.metadata.cache.MetaAnnotationStore;
import java.lang.annotation.Annotation;
import java.util.Set;

import javax.enterprise.inject.spi.InterceptionType;
import javax.enterprise.inject.spi.Interceptor;
import javax.interceptor.InvocationContext;
import java.lang.annotation.Annotation;
import java.util.HashSet;
import java.util.Set;

import org.jboss.interceptor.model.InterceptorClassMetadata;
import org.jboss.interceptor.proxy.DirectClassInterceptionHandler;
import org.jboss.interceptor.registry.InterceptorClassMetadataRegistry;
import org.jboss.weld.BeanManagerImpl;
import org.jboss.weld.introspector.WeldClass;

/**
* @author Marius Bogoevici
Expand Down Expand Up @@ -74,14 +73,15 @@ public boolean intercepts(InterceptionType type)
}

@Override
public void postConstruct(T instance)
protected void defaultPostConstruct(T instance)
{
// do nothing on PostConstruct
// Lifecycle callbacks not supported
}

@Override
public void preDestroy(T instance)
protected void defaultPreDestroy(T instance)
{
// do nothing on PreDestroy
// Lifecycle callbacks not supported
}

}

0 comments on commit 503efb8

Please sign in to comment.