package com.acme.transaction; import javax.ejb.TransactionAttribute; import javax.enterprise.event.Observes; import javax.enterprise.inject.spi.AnnotatedMethod; import javax.enterprise.inject.spi.AnnotatedType; import javax.enterprise.inject.spi.Extension; import javax.enterprise.inject.spi.ProcessAnnotatedType; import org.jboss.seam.solder.reflection.annotated.AnnotatedTypeBuilder; public class TransactionExtension implements Extension { <X> void processAnnotatedType(@Observes ProcessAnnotatedType<X> e) { AnnotatedType<X> type = e.getAnnotatedType(); AnnotatedTypeBuilder<X> builder = null; boolean ejb = EjbApi.isEjb(type); if (type.isAnnotationPresent(TransactionAttribute.class) && !ejb) { builder = new AnnotatedTypeBuilder<X>() .readFromType(type).addToClass(TransactionalLiteral.INSTANCE); } for (AnnotatedMethod<? super X> m : type.getMethods()) { if (m.isAnnotationPresent(TransactionAttribute.class) && !ejb) { if (builder == null) { builder = new AnnotatedTypeBuilder<X>().readFromType(type); } builder.addToMethod(m, TransactionalLiteral.INSTANCE); } } if (builder != null) { e.setAnnotatedType(builder.create()); } } }