Skip to content

Commit

Permalink
WELDX-109 make javassist optional
Browse files Browse the repository at this point in the history
  • Loading branch information
stuartwdouglas authored and pmuir committed Oct 5, 2010
1 parent 151d1b8 commit 575b789
Show file tree
Hide file tree
Showing 3 changed files with 85 additions and 14 deletions.
1 change: 1 addition & 0 deletions impl/pom.xml
Expand Up @@ -66,6 +66,7 @@
<groupId>org.javassist</groupId>
<artifactId>javassist</artifactId>
<scope>provided</scope>
<optional>true</optional>
</dependency>

<dependency>
Expand Down
Expand Up @@ -29,6 +29,9 @@
import javax.enterprise.inject.spi.ProcessAnnotatedType;

import org.jboss.weld.extensions.bean.BeanBuilder;
import org.jboss.weld.extensions.reflection.Reflections;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* This extension automatically implements interfaces and abstract classes.
Expand All @@ -38,25 +41,54 @@
*/
public class ServiceHandlerExtension implements Extension
{
Set<Bean<?>> beans = new HashSet<Bean<?>>();
private final Set<Bean<?>> beans = new HashSet<Bean<?>>();

private final static Logger log = LoggerFactory.getLogger(ServiceHandlerExtension.class);

private final boolean enabled;

private final Set<Throwable> problems = new HashSet<Throwable>();

public ServiceHandlerExtension()
{
boolean en = true;
try
{
Reflections.classForName("javassist.util.proxy.MethodHandler", ServiceHandlerExtension.class.getClassLoader());
}
catch (ClassNotFoundException e)
{
en = false;
log.debug("Javassist not preset, @ServiceHandler is disabled");
}
enabled = en;
}

<X> void processAnnotatedType(@Observes ProcessAnnotatedType<X> event, BeanManager beanManager)
{
ServiceHandler annotation = getMetaAnnotation(event.getAnnotatedType(), ServiceHandler.class);
if (annotation != null)
{
Class<?> handlerClass = annotation.value();
try
if (!enabled)
{
BeanBuilder<X> builder = new BeanBuilder<X>(beanManager);
builder.readFromType(event.getAnnotatedType());
builder.beanLifecycle(new ServiceHandlerBeanLifecycle(event.getAnnotatedType().getJavaClass(), handlerClass, beanManager));
builder.toString("Generated @ServiceHandler for [" + builder.getBeanClass() + "] with qualifiers [" + builder.getQualifiers() + "] handled by " + handlerClass);
beans.add(builder.create());
problems.add(new RuntimeException("Javassist not found on the class path, @ServiceHandler requires javassist to work. @ServiceHandler found on " + event.getAnnotatedType()));
}
catch (IllegalArgumentException e)
else
{
throw new RuntimeException(e);
Class<?> handlerClass = annotation.value();
try
{
BeanBuilder<X> builder = new BeanBuilder<X>(beanManager);
builder.readFromType(event.getAnnotatedType());
builder.beanLifecycle(new ServiceHandlerBeanLifecycle(event.getAnnotatedType().getJavaClass(), handlerClass, beanManager));
builder.toString("Generated @ServiceHandler for [" + builder.getBeanClass() + "] with qualifiers [" + builder.getQualifiers() + "] handled by " + handlerClass);
beans.add(builder.create());
log.debug("Adding @ServiceHandler bean for [" + builder.getBeanClass() + "] with qualifiers [" + builder.getQualifiers() + "] handled by " + handlerClass);
}
catch (IllegalArgumentException e)
{
throw new RuntimeException(e);
}
}
}
}
Expand All @@ -67,5 +99,10 @@ void afterBeanDiscovery(@Observes AfterBeanDiscovery event)
{
event.addBean(bean);
}
for (Throwable e : problems)
{
event.addDefinitionError(e);
}
beans.clear();
}
}
Expand Up @@ -27,6 +27,11 @@
import javax.enterprise.inject.spi.Extension;
import javax.enterprise.inject.spi.ProcessAnnotatedType;

import org.jboss.weld.extensions.reflection.Reflections;
import org.jboss.weld.extensions.servicehandler.ServiceHandlerExtension;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* An extension that allows the use of {@link Unwraps} methods
*
Expand All @@ -37,11 +42,28 @@
public class UnwrapsExtension implements Extension
{

final private Set<Bean<?>> beans;
private final Set<Bean<?>> beans;

private final static Logger log = LoggerFactory.getLogger(UnwrapsExtension.class);

private final boolean enabled;

private final Set<Throwable> problems = new HashSet<Throwable>();

public UnwrapsExtension()
{
this.beans = new HashSet<Bean<?>>();
boolean en = true;
try
{
Reflections.classForName("javassist.util.proxy.MethodHandler", ServiceHandlerExtension.class.getClassLoader());
}
catch (ClassNotFoundException e)
{
en = false;
log.debug("Javassist not preset, @Unwraps is disabled");
}
enabled = en;
}

void processAnnotatedType(@Observes ProcessAnnotatedType<?> type, BeanManager beanManager)
Expand All @@ -50,9 +72,16 @@ void processAnnotatedType(@Observes ProcessAnnotatedType<?> type, BeanManager be
{
if (method.isAnnotationPresent(Unwraps.class))
{
// we have a managed producer
// lets make a note of it and register it later
beans.add(createBean(method, beanManager));
if (!enabled)
{
problems.add(new RuntimeException("Javassist not found on the class path, @Unwraps requires javassist to work. @Unwraps found on " + type.getAnnotatedType().getJavaClass().getName() + "." + method.getJavaMember().getName()));
}
else
{
// we have a managed producer
// lets make a note of it and register it later
beans.add(createBean(method, beanManager));
}
}
}
}
Expand All @@ -68,6 +97,10 @@ void afterBeanDiscovery(@Observes AfterBeanDiscovery afterBean)
{
afterBean.addBean(b);
}
for (Throwable e : problems)
{
afterBean.addDefinitionError(e);
}
}

}

0 comments on commit 575b789

Please sign in to comment.