diff --git a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AbstractStrategyBootstrap.java b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AbstractStrategyBootstrap.java index 7d886ec..b1585df 100644 --- a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AbstractStrategyBootstrap.java +++ b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AbstractStrategyBootstrap.java @@ -54,7 +54,7 @@ import br.gov.frameworkdemoiselle.util.Strings; public abstract class AbstractStrategyBootstrap extends AbstractBootstrap { private Class type; - + private Class defaultClass; private Class selected; @@ -63,15 +63,15 @@ public abstract class AbstractStrategyBootstrap extends Abstract if (this.type == null) { this.type = Reflections.getGenericTypeArgument(this.getClass(), 0); } - + return this.type; } - + private Class getDefaultClass() { if (this.defaultClass == null) { this.defaultClass = Reflections.getGenericTypeArgument(this.getClass(), 1); } - + return this.defaultClass; } @@ -99,7 +99,15 @@ public abstract class AbstractStrategyBootstrap extends Abstract Configuration config = new PropertiesConfiguration(url); canonicalName = config.getString(getConfigKey(), getDefaultClass().getCanonicalName()); - ClassLoader classLoader = ConfigurationLoader.getClassLoaderForResource(canonicalName.replaceAll("\\.", "/") + ".class"); + ClassLoader classLoader; + + try { + classLoader = ConfigurationLoader.getClassLoaderForResource(canonicalName.replaceAll("\\.", + "/") + ".class"); + } catch (FileNotFoundException e) { + classLoader = Thread.currentThread().getContextClassLoader(); + } + result = (Class) Class.forName(canonicalName, false, classLoader); result.asSubclass(getType()); @@ -113,14 +121,14 @@ public abstract class AbstractStrategyBootstrap extends Abstract } catch (ClassCastException cause) { key = Strings.getString("{0}-class-must-be-of-type", typeName); throw new ConfigurationException(getBundle().getString(key, canonicalName, getType())); - + } catch (FileNotFoundException e) { throw new ConfigurationException(getBundle().getString("file-not-found", "demoiselle.properties")); } return result; } - + public abstract String getConfigKey(); } diff --git a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/TransactionBootstrap.java b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/TransactionBootstrap.java index 4c2401e..e9021e3 100644 --- a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/TransactionBootstrap.java +++ b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/TransactionBootstrap.java @@ -36,13 +36,20 @@ */ package br.gov.frameworkdemoiselle.internal.bootstrap; -import br.gov.frameworkdemoiselle.internal.implementation.DefaultTransaction; +import javax.enterprise.event.Observes; +import javax.enterprise.inject.spi.Extension; +import javax.enterprise.inject.spi.ProcessAnnotatedType; + import br.gov.frameworkdemoiselle.transaction.Transaction; +import br.gov.frameworkdemoiselle.util.Reflections; -public class TransactionBootstrap extends AbstractStrategyBootstrap { +public class TransactionBootstrap implements Extension { - public String getConfigKey() { - return "frameworkdemoiselle.transaction.class"; - } + public void processAnnotatedType(@Observes final ProcessAnnotatedType event) { + Class annotated = event.getAnnotatedType().getJavaClass(); + if (Reflections.isOfType(annotated, Transaction.class)) { + event.veto(); + } + } } diff --git a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/implementation/DefaultTransaction.java b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/implementation/DefaultTransaction.java index 6002cbb..90e23c6 100644 --- a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/implementation/DefaultTransaction.java +++ b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/implementation/DefaultTransaction.java @@ -36,9 +36,6 @@ */ package br.gov.frameworkdemoiselle.internal.implementation; -import javax.enterprise.context.RequestScoped; -import javax.enterprise.inject.Any; - import br.gov.frameworkdemoiselle.DemoiselleException; import br.gov.frameworkdemoiselle.transaction.Transaction; import br.gov.frameworkdemoiselle.transaction.Transactional; @@ -49,8 +46,6 @@ import br.gov.frameworkdemoiselle.transaction.Transactional; * @author SERPRO * @see Transaction */ -@Any -@RequestScoped public class DefaultTransaction implements Transaction { private static final long serialVersionUID = 1L; diff --git a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/producer/AbstractStrategyProducer.java b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/producer/AbstractStrategyProducer.java index b6efcf4..da40caf 100644 --- a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/producer/AbstractStrategyProducer.java +++ b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/producer/AbstractStrategyProducer.java @@ -45,6 +45,7 @@ import javax.inject.Inject; import org.apache.commons.configuration.Configuration; import org.apache.commons.configuration.PropertiesConfiguration; +import br.gov.frameworkdemoiselle.annotation.Name; import br.gov.frameworkdemoiselle.configuration.ConfigurationException; import br.gov.frameworkdemoiselle.internal.configuration.ConfigurationLoader; import br.gov.frameworkdemoiselle.util.Reflections; @@ -62,6 +63,7 @@ public abstract class AbstractStrategyProducer implements Serial private Class selected; @Inject + @Name("demoiselle-core-bundle") private ResourceBundle bundle; protected Class getSelected() { @@ -119,8 +121,15 @@ public abstract class AbstractStrategyProducer implements Serial Configuration config = new PropertiesConfiguration(url); canonicalName = config.getString(getConfigKey(), getDefaultClass().getCanonicalName()); - ClassLoader classLoader = ConfigurationLoader.getClassLoaderForResource(canonicalName - .replaceAll("\\.", "/") + ".class"); + ClassLoader classLoader; + + try { + classLoader = ConfigurationLoader.getClassLoaderForResource(canonicalName.replaceAll("\\.", "/") + + ".class"); + } catch (FileNotFoundException e) { + classLoader = Thread.currentThread().getContextClassLoader(); + } + result = (Class) Class.forName(canonicalName, false, classLoader); result.asSubclass(getType()); diff --git a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/producer/TransactionProducer.java b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/producer/TransactionProducer.java index 522cd99..ebc59f4 100644 --- a/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/producer/TransactionProducer.java +++ b/impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/producer/TransactionProducer.java @@ -48,15 +48,11 @@ */ package br.gov.frameworkdemoiselle.internal.producer; -import java.lang.annotation.Annotation; - -import javax.enterprise.inject.Any; import javax.enterprise.inject.Default; import javax.enterprise.inject.Produces; import br.gov.frameworkdemoiselle.internal.implementation.DefaultTransaction; import br.gov.frameworkdemoiselle.transaction.Transaction; -import br.gov.frameworkdemoiselle.util.Beans; public class TransactionProducer extends AbstractStrategyProducer { @@ -64,15 +60,8 @@ public class TransactionProducer extends AbstractStrategyProducer annotationType() { - return Any.class; - - } - }); + public Transaction create() throws InstantiationException, IllegalAccessException { + return getSelected().newInstance(); } @Override diff --git a/impl/core/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension b/impl/core/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension index eca66fb..30fadc4 100644 --- a/impl/core/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension +++ b/impl/core/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension @@ -1,5 +1,6 @@ br.gov.frameworkdemoiselle.internal.bootstrap.CoreBootstrap -br.gov.frameworkdemoiselle.internal.bootstrap.AuthenticatorBootstrap -br.gov.frameworkdemoiselle.internal.bootstrap.AuthorizerBootstrap +br.gov.frameworkdemoiselle.internal.bootstrap.TransactionBootstrap +#br.gov.frameworkdemoiselle.internal.bootstrap.AuthenticatorBootstrap +#br.gov.frameworkdemoiselle.internal.bootstrap.AuthorizerBootstrap br.gov.frameworkdemoiselle.internal.bootstrap.StartupBootstrap br.gov.frameworkdemoiselle.internal.bootstrap.ShutdownBootstrap diff --git a/impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/template/JPACrud.java b/impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/template/JPACrud.java index 8ea7361..181c2c1 100644 --- a/impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/template/JPACrud.java +++ b/impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/template/JPACrud.java @@ -46,6 +46,7 @@ import javax.persistence.Basic; import javax.persistence.Column; import javax.persistence.EntityManager; import javax.persistence.Enumerated; +import javax.persistence.PersistenceContext; import javax.persistence.Query; import javax.persistence.TransactionRequiredException; import javax.persistence.criteria.CriteriaBuilder; @@ -77,6 +78,7 @@ public class JPACrud implements Crud { private static final long serialVersionUID = 1L; +// @PersistenceContext private EntityManager entityManager; @Inject diff --git a/impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/transaction/JPATransaction.java b/impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/transaction/JPATransaction.java index 233a4f2..5d83f08 100644 --- a/impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/transaction/JPATransaction.java +++ b/impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/transaction/JPATransaction.java @@ -38,13 +38,11 @@ package br.gov.frameworkdemoiselle.transaction; import java.util.Collection; -import javax.enterprise.context.RequestScoped; -import javax.enterprise.inject.Any; -import javax.inject.Inject; import javax.persistence.EntityManager; import javax.persistence.EntityTransaction; import br.gov.frameworkdemoiselle.internal.producer.EntityManagerProducer; +import br.gov.frameworkdemoiselle.util.Beans; /** * Represents the strategy destinated to manage JPA transactions. @@ -52,17 +50,22 @@ import br.gov.frameworkdemoiselle.internal.producer.EntityManagerProducer; * @author SERPRO * @see Transaction */ -@Any -@RequestScoped public class JPATransaction implements Transaction { private static final long serialVersionUID = 1L; - @Inject private EntityManagerProducer producer; + private EntityManagerProducer getProducer() { + if (producer == null) { + producer = Beans.getReference(EntityManagerProducer.class); + } + + return producer; + } + public Collection getDelegate() { - return producer.getCache().values(); + return getProducer().getCache().values(); } @Override diff --git a/impl/extension/jta/src/main/java/br/gov/frameworkdemoiselle/transaction/JTATransaction.java b/impl/extension/jta/src/main/java/br/gov/frameworkdemoiselle/transaction/JTATransaction.java index 54b623e..f1455b0 100644 --- a/impl/extension/jta/src/main/java/br/gov/frameworkdemoiselle/transaction/JTATransaction.java +++ b/impl/extension/jta/src/main/java/br/gov/frameworkdemoiselle/transaction/JTATransaction.java @@ -36,16 +36,12 @@ */ package br.gov.frameworkdemoiselle.transaction; -import javax.enterprise.context.RequestScoped; -import javax.enterprise.inject.Any; import javax.transaction.Status; import javax.transaction.SystemException; import javax.transaction.UserTransaction; import br.gov.frameworkdemoiselle.util.Beans; -@Any -@RequestScoped public class JTATransaction implements Transaction { private static final long serialVersionUID = 1L; -- libgit2 0.21.2