Skip to content

Commit

Permalink
Integrate with jboss-interceptor 2.0
Browse files Browse the repository at this point in the history
  • Loading branch information
mbogoevici committed Oct 12, 2010
1 parent 2c0cc62 commit 8276ed8
Show file tree
Hide file tree
Showing 35 changed files with 563 additions and 818 deletions.
10 changes: 8 additions & 2 deletions bom/pom.xml
Expand Up @@ -39,7 +39,7 @@
<cdi.tck.version>1.0.2.CR2</cdi.tck.version>
<javassist.version>3.13.0-GA</javassist.version>
<atinject.tck.version>1.0.0-PFD-3</atinject.tck.version>
<jboss.interceptor.version>1.0.0-CR11</jboss.interceptor.version>
<jboss.interceptor.version>2.0.0.Alpha1</jboss.interceptor.version>
<slf4j.version>1.5.10</slf4j.version>
<cal10n.version>0.7.2</cal10n.version>
</properties>
Expand Down Expand Up @@ -131,7 +131,13 @@

<dependency>
<groupId>org.jboss.interceptor</groupId>
<artifactId>jboss-interceptor</artifactId>
<artifactId>jboss-interceptor-spi</artifactId>
<version>${jboss.interceptor.version}</version>
</dependency>

<dependency>
<groupId>org.jboss.interceptor</groupId>
<artifactId>jboss-interceptor-core</artifactId>
<version>${jboss.interceptor.version}</version>
</dependency>

Expand Down
7 changes: 6 additions & 1 deletion bundles/osgi/pom.xml
Expand Up @@ -186,7 +186,12 @@

<dependency>
<groupId>org.jboss.interceptor</groupId>
<artifactId>jboss-interceptor</artifactId>
<artifactId>jboss-interceptor-spi</artifactId>
</dependency>

<dependency>
<groupId>org.jboss.interceptor</groupId>
<artifactId>jboss-interceptor-core</artifactId>
</dependency>

<!-- We bundle jdk binding inside this OSGi bundle -->
Expand Down
14 changes: 13 additions & 1 deletion impl/pom.xml
Expand Up @@ -112,7 +112,19 @@

<dependency>
<groupId>org.jboss.interceptor</groupId>
<artifactId>jboss-interceptor</artifactId>
<artifactId>jboss-interceptor-spi</artifactId>
<exclusions>
<!-- Exclude the old groupId for Javassist -->
<exclusion>
<groupId>javassist</groupId>
<artifactId>javassist</artifactId>
</exclusion>
</exclusions>
</dependency>

<dependency>
<groupId>org.jboss.interceptor</groupId>
<artifactId>jboss-interceptor-core</artifactId>
<exclusions>
<!-- Exclude the old groupId for Javassist -->
<exclusion>
Expand Down
341 changes: 156 additions & 185 deletions impl/src/main/java/org/jboss/weld/bean/AbstractClassBean.java

Large diffs are not rendered by default.

31 changes: 20 additions & 11 deletions impl/src/main/java/org/jboss/weld/bean/InterceptorImpl.java
Expand Up @@ -21,17 +21,17 @@
import static org.jboss.weld.logging.messages.BeanMessage.MISSING_BINDING_ON_INTERCEPTOR;

import java.lang.annotation.Annotation;
import java.util.HashSet;
import java.util.Set;
import java.util.*;

import javax.enterprise.inject.spi.InterceptionType;
import javax.enterprise.inject.spi.Interceptor;
import javax.interceptor.InvocationContext;

import org.jboss.interceptor.model.InterceptorMetadata;
import org.jboss.interceptor.proxy.DirectClassInterceptionHandler;
import org.jboss.weld.bean.interceptor.InterceptionMetadataService;
import org.jboss.weld.bean.interceptor.WeldClassReference;
import org.jboss.interceptor.proxy.InterceptorInvocation;
import org.jboss.interceptor.proxy.SimpleInterceptionChain;
import org.jboss.interceptor.reader.ClassMetadataInterceptorReference;
import org.jboss.interceptor.spi.metadata.InterceptorMetadata;
import org.jboss.weld.bean.interceptor.WeldInterceptorClassMetadata;
import org.jboss.weld.exceptions.DeploymentException;
import org.jboss.weld.exceptions.WeldException;
import org.jboss.weld.introspector.WeldClass;
Expand All @@ -45,7 +45,7 @@
public class InterceptorImpl<T> extends ManagedBean<T> implements Interceptor<T>
{

private final InterceptorMetadata interceptorClassMetadata;
private final InterceptorMetadata<?> interceptorMetadata;

private final Set<Annotation> interceptorBindingTypes;

Expand All @@ -59,7 +59,7 @@ public static <T> InterceptorImpl<T> of(WeldClass<T> type, BeanManagerImpl beanM
protected InterceptorImpl(WeldClass<T> type, BeanManagerImpl beanManager)
{
super(type, new StringBuilder().append(Interceptor.class.getSimpleName()).append(BEAN_ID_SEPARATOR).append(type.getName()).toString(), beanManager);
this.interceptorClassMetadata = beanManager.getServices().get(InterceptionMetadataService.class).getInterceptorMetadataRegistry().getInterceptorClassMetadata(WeldClassReference.of(type));
this.interceptorMetadata = beanManager.getInterceptorMetadataReader().getInterceptorMetadata(ClassMetadataInterceptorReference.of(WeldInterceptorClassMetadata.of(type)));
this.serializable = type.isSerializable();
this.interceptorBindingTypes = new HashSet<Annotation>();
interceptorBindingTypes.addAll(flattenInterceptorBindings(beanManager, getWeldAnnotated().getAnnotations()));
Expand All @@ -82,20 +82,29 @@ public Set<Annotation> getInterceptorBindings()
return interceptorBindingTypes;
}

public InterceptorMetadata<?> getInterceptorMetadata()
{
return interceptorMetadata;
}

public Object intercept(InterceptionType type, T instance, InvocationContext ctx)
{
try
{
return new DirectClassInterceptionHandler<T>(instance, interceptorClassMetadata).invoke(ctx.getTarget(), org.jboss.interceptor.model.InterceptionType.valueOf(type.name()), ctx);
} catch (Exception e)
org.jboss.interceptor.spi.model.InterceptionType interceptionType = org.jboss.interceptor.spi.model.InterceptionType.valueOf(type.name());
Set<InterceptorInvocation<Object>> invocationSet = Collections.singleton(new InterceptorInvocation<Object>(instance, interceptorMetadata, interceptionType));
Collection<InterceptorInvocation<?>> invocations = new ArrayList<InterceptorInvocation<?>>();
invocations.add(new InterceptorInvocation(instance, interceptorMetadata, interceptionType));
return new SimpleInterceptionChain( invocations, interceptionType, instance, ctx.getMethod()).invokeNextInterceptor(ctx);
} catch (Throwable e)
{
throw new WeldException(e);
}
}

public boolean intercepts(InterceptionType type)
{
return interceptorClassMetadata.getInterceptorMethods(org.jboss.interceptor.model.InterceptionType.valueOf(type.name())).size() > 0;
return interceptorMetadata.getInterceptorMethods(org.jboss.interceptor.spi.model.InterceptionType.valueOf(type.name())).size() > 0;
}

public boolean isSerializable()
Expand Down
57 changes: 13 additions & 44 deletions impl/src/main/java/org/jboss/weld/bean/ManagedBean.java
Expand Up @@ -29,8 +29,6 @@
import static org.jboss.weld.logging.messages.BeanMessage.SIMPLE_BEAN_AS_NON_STATIC_INNER_CLASS_NOT_ALLOWED;
import static org.jboss.weld.logging.messages.BeanMessage.SPECIALIZING_BEAN_MUST_EXTEND_A_BEAN;

import java.util.ArrayList;
import java.util.List;
import java.util.Set;

import javassist.util.proxy.MethodHandler;
Expand All @@ -40,18 +38,15 @@
import javax.enterprise.inject.spi.Decorator;
import javax.enterprise.inject.spi.InjectionPoint;
import javax.enterprise.inject.spi.InjectionTarget;
import javax.enterprise.inject.spi.Interceptor;
import javax.enterprise.inject.spi.PassivationCapable;

import org.jboss.interceptor.proxy.InterceptionHandlerFactory;
import org.jboss.interceptor.proxy.DefaultInvocationContextFactory;
import org.jboss.interceptor.proxy.InterceptorProxyCreatorImpl;
import org.jboss.interceptor.registry.InterceptorRegistry;
import org.jboss.interceptor.spi.metadata.InterceptorMetadata;
import org.jboss.interceptor.util.InterceptionUtils;
import org.jboss.weld.Container;
import org.jboss.weld.bean.interceptor.CdiInterceptorHandlerFactory;
import org.jboss.weld.bean.interceptor.ClassInterceptionHandlerFactory;
import org.jboss.weld.bean.interceptor.InterceptionMetadataService;
import org.jboss.weld.bean.interceptor.WeldClassReference;
import org.jboss.weld.bean.interceptor.WeldInterceptorClassMetadata;
import org.jboss.weld.bean.interceptor.WeldInterceptorInstantiator;
import org.jboss.weld.bean.proxy.ProxyFactory;
import org.jboss.weld.bean.proxy.TargetBeanInstance;
import org.jboss.weld.bootstrap.BeanDeployerEnvironment;
Expand All @@ -66,7 +61,6 @@
import org.jboss.weld.introspector.WeldMethod;
import org.jboss.weld.manager.BeanManagerImpl;
import org.jboss.weld.metadata.cache.MetaAnnotationStore;
import org.jboss.weld.serialization.spi.helpers.SerializableContextual;
import org.jboss.weld.util.AnnotatedTypes;
import org.jboss.weld.util.Beans;
import org.jboss.weld.util.reflection.Formats;
Expand Down Expand Up @@ -397,22 +391,11 @@ public void initializeAfterBeanDiscovery()
}
}
}
if (this.passivationCapableBean && hasCdiBoundInterceptors())
if (this.passivationCapableBean && hasInterceptors())
{
for (SerializableContextual<Interceptor<?>, ?> interceptor : getBeanManager().getCdiInterceptorsRegistry().getInterceptionModel(getType()).getAllInterceptors())
for (InterceptorMetadata<?> interceptorMetadata : getBeanManager().getInterceptorModelRegistry().get(getType()).getAllInterceptors())
{
if (!(PassivationCapable.class.isAssignableFrom(interceptor.get().getClass())) || !((InterceptorImpl<?>) interceptor.get()).isSerializable())
{
this.passivationCapableBean = false;
break;
}
}
}
if (this.passivationCapableBean && hasDirectlyDefinedInterceptors())
{
for (Class<?> interceptorClass : getBeanManager().getClassDeclaredInterceptorsRegistry().getInterceptionModel(getType()).getAllInterceptors())
{
if (!Reflections.isSerializable(interceptorClass))
if (!Reflections.isSerializable(interceptorMetadata.getInterceptorClass().getJavaClass()))
{
this.passivationCapableBean = false;
break;
Expand Down Expand Up @@ -573,26 +556,12 @@ protected T applyInterceptors(T instance, final CreationalContext<T> creationalC
{
try
{
List<InterceptorRegistry<Class<?>, ?>> interceptionRegistries = new ArrayList<InterceptorRegistry<Class<?>, ?>>();
List<InterceptionHandlerFactory<?>> interceptionHandlerFactories = new ArrayList<InterceptionHandlerFactory<?>>();
if (hasDirectlyDefinedInterceptors())
{
interceptionRegistries.add(beanManager.getClassDeclaredInterceptorsRegistry());
interceptionHandlerFactories.add(new ClassInterceptionHandlerFactory(creationalContext, getBeanManager()));
}
if (hasCdiBoundInterceptors())
{
interceptionRegistries.add(beanManager.getCdiInterceptorsRegistry());
interceptionHandlerFactories.add(new CdiInterceptorHandlerFactory<T>(creationalContext, beanManager));
}
if (interceptionRegistries.size() > 0)
{
InterceptorProxyCreatorImpl interceptorProxyCreator = new InterceptorProxyCreatorImpl(interceptionRegistries, interceptionHandlerFactories);
MethodHandler methodHandler = interceptorProxyCreator.createMethodHandler(instance, getType(), getBeanManager().getServices().get(InterceptionMetadataService.class).getInterceptorMetadataRegistry().getInterceptorClassMetadata(WeldClassReference.of(getWeldAnnotated()), true));
TargetBeanInstance targetInstance = new TargetBeanInstance(this, instance);
targetInstance.setInterceptorsHandler(methodHandler);
instance = new ProxyFactory<T>(getType(), getTypes(), this).create(targetInstance);
}
WeldInterceptorInstantiator<T> interceptorInstantiator = new WeldInterceptorInstantiator<T>(beanManager, creationalContext);
InterceptorProxyCreatorImpl interceptorProxyCreator = new InterceptorProxyCreatorImpl(interceptorInstantiator, new DefaultInvocationContextFactory(), beanManager.getInterceptorModelRegistry().get(getType()));
MethodHandler methodHandler = interceptorProxyCreator.createMethodHandler(instance, WeldInterceptorClassMetadata.of(getWeldAnnotated()));
TargetBeanInstance targetInstance = new TargetBeanInstance(this, instance);
targetInstance.setInterceptorsHandler(methodHandler);
instance = new ProxyFactory<T>(getType(), getTypes(), this).create(targetInstance);

}
catch (Exception e)
Expand Down
8 changes: 7 additions & 1 deletion impl/src/main/java/org/jboss/weld/bean/ProducerField.java
Expand Up @@ -30,6 +30,7 @@
import javax.inject.Inject;

import org.jboss.interceptor.util.InterceptionUtils;
import org.jboss.interceptor.util.proxy.TargetInstanceProxy;
import org.jboss.weld.bootstrap.BeanDeployerEnvironment;
import org.jboss.weld.exceptions.DefinitionException;
import org.jboss.weld.introspector.WeldField;
Expand Down Expand Up @@ -129,7 +130,12 @@ public Set<InjectionPoint> getInjectionPoints()
public T produce(CreationalContext<T> creationalContext)
{
// unwrap if we have a proxy
return field.get(InterceptionUtils.getRawInstance(getReceiver(creationalContext)));
Object receiver = getReceiver(creationalContext);
if (receiver instanceof TargetInstanceProxy)
{
receiver = ((TargetInstanceProxy)receiver).getTargetInstance();
}
return field.get(receiver);
}

@Override
Expand Down
5 changes: 3 additions & 2 deletions impl/src/main/java/org/jboss/weld/bean/SessionBean.java
Expand Up @@ -50,7 +50,8 @@
import javax.enterprise.inject.spi.InjectionTarget;
import javax.interceptor.Interceptor;

import org.jboss.interceptor.model.InterceptionModel;
import org.jboss.interceptor.spi.metadata.ClassMetadata;
import org.jboss.interceptor.spi.model.InterceptionModel;
import org.jboss.weld.bean.interceptor.InterceptorBindingsAdapter;
import org.jboss.weld.bean.proxy.EnterpriseBeanInstance;
import org.jboss.weld.bean.proxy.EnterpriseBeanProxyMethodHandler;
Expand Down Expand Up @@ -464,7 +465,7 @@ protected boolean isInterceptionCandidate()

protected void registerInterceptors()
{
InterceptionModel<Class<?>, SerializableContextual<javax.enterprise.inject.spi.Interceptor<?>, ?>> model = beanManager.getCdiInterceptorsRegistry().getInterceptionModel(ejbDescriptor.getBeanClass());
InterceptionModel<ClassMetadata<?>,?> model = beanManager.getInterceptorModelRegistry().get(ejbDescriptor.getBeanClass());
if (model != null)
{
getBeanManager().getServices().get(EjbServices.class).registerInterceptors(getEjbDescriptor().delegate(), new InterceptorBindingsAdapter(model));
Expand Down

This file was deleted.

This file was deleted.

0 comments on commit 8276ed8

Please sign in to comment.