This content has been marked as final.
Show 6 replies
-
1. Re: Add extension result in Logger ambiguous dependencies
pmuir May 27, 2010 1:50 PM (in response to wuhaixing.wuhaixing.gmail.com)What was your extension class?
-
2. Re: Add extension result in Logger ambiguous dependencies
wuhaixing.wuhaixing.gmail.com May 27, 2010 2:20 PM (in response to wuhaixing.wuhaixing.gmail.com)just as seam-faces's FormValidationTypeOverrideExtension,named DAOTypeOverrideExtension.
-
3. Re: Add extension result in Logger ambiguous dependencies
wuhaixing.wuhaixing.gmail.com May 28, 2010 3:22 AM (in response to wuhaixing.wuhaixing.gmail.com)Qualifier DAO:
public @interface Dao { @Nonbinding Class<?> value() default Object.class; }
DAO producer:
public class DaoFactory { @PersistenceContext EntityManager em; @Produces @Dao public Object createDao(InjectionPoint injectionPoint) throws Exception { Class<?> entityType = injectionPoint.getAnnotated().getAnnotation(Dao.class).value(); Class<?> daoType = (Class)injectionPoint.getType(); logger.info("create dao {}",daoType.getName()); if (!daoType.isInterface()) { throw new UnsupportedOperationException("Only results of methods " + "which produce implementations of an interface can be replaced!"); } GenericDao genericDao = new GenericDaoImpl(em,entityType); Object result = Proxy.newProxyInstance( daoType.getClassLoader(), new Class[] { daoType }, new DaoInvocationHandler(genericDao)); return result; } }
DAO type override extension to replace WidgetDAO with Object:
@ApplicationScoped public class DaoTypeOverrideExtension implements Extension { private final Map<Class<?>, AnnotatedType<?>> typeOverrides = new HashMap<Class<?>, AnnotatedType<?>>(); public <T> void processAnnotatedType(@Observes final ProcessAnnotatedType<T> event) { AnnotatedTypeBuilder<T> builder = AnnotatedTypeBuilder.newInstance(event.getAnnotatedType()); builder.readAnnotationsFromUnderlyingType(); boolean modifiedType = false; for (AnnotatedField<?> f : event.getAnnotatedType().getFields()) { if (f.isAnnotationPresent(Dao.class)) { builder.overrideFieldType(f.getJavaMember(), Object.class); modifiedType = true; } } if (modifiedType) { AnnotatedType<T> replacement = builder.create(); typeOverrides.put(replacement.getJavaClass(), replacement); event.setAnnotatedType(replacement); } } public boolean hasOverriddenType(final Class<?> clazz) { return typeOverrides.containsKey(clazz); } public AnnotatedType<?> getOverriddenType(final Class<?> clazz) { return typeOverrides.get(clazz); } }
DAO interface:
public interface WidgetDao extends GenericDao<Widget,Long>{ @QuerySpecifiction("select w from Widget w order by w.name") public List<Widget> getWidgets(); }
usage :
private @Inject @Dao(Widget.class) WidgetDao widgetDao;
-
4. Re: Add extension result in Logger ambiguous dependencies
wuhaixing.wuhaixing.gmail.com May 30, 2010 9:37 PM (in response to wuhaixing.wuhaixing.gmail.com)I only found org.jboss.weld.extensions.log.LoggerProducer in the repository,where is org.jboss.weld.log.LoggerProducer?
-
5. Re: Add extension result in Logger ambiguous dependencies
wuhaixing.wuhaixing.gmail.com May 30, 2010 9:49 PM (in response to wuhaixing.wuhaixing.gmail.com)documentation about weld logger not suit for weld extension snapshot,remove the weld-logger dependency
<dependency> <groupId>org.jboss.weld</groupId> <artifactId>weld-logger</artifactId> <version>1.0.0-CR2</version> <exclusions> <exclusion> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> </exclusion> </exclusions> </dependency>