Commit 7bba9cf73eba0430f0c7adb124eba39cc123314c

Authored by Cleverson Sacramento
1 parent ce421cf2
Exists in master

Lançando exceções intuitivas e internacionalizadas para o usuário do

framework.
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/TransactionBootstrap.java
... ... @@ -40,24 +40,51 @@ import javax.enterprise.event.Observes;
40 40 import javax.enterprise.inject.spi.ProcessAnnotatedType;
41 41  
42 42 import org.apache.commons.configuration.Configuration;
43   -import org.apache.commons.configuration.ConfigurationException;
44 43 import org.apache.commons.configuration.PropertiesConfiguration;
45 44  
  45 +import br.gov.frameworkdemoiselle.configuration.ConfigurationException;
46 46 import br.gov.frameworkdemoiselle.internal.implementation.DefaultTransaction;
47 47 import br.gov.frameworkdemoiselle.transaction.Transaction;
48 48  
49 49 public class TransactionBootstrap extends AbstractBootstrap {
50 50  
51   - public <T> void processAnnotatedType(@Observes final ProcessAnnotatedType<T> event) throws ConfigurationException {
  51 + private static Class<Transaction> selected;
52 52  
53   - Configuration config = new PropertiesConfiguration("demoiselle.properties");
54   - String selected = config.getString("frameworkdemoiselle.transaction.class",
55   - DefaultTransaction.class.getCanonicalName());
  53 + public <T> void processAnnotatedType(@Observes final ProcessAnnotatedType<T> event) {
  54 + Class<?> annotated = event.getAnnotatedType().getJavaClass();
56 55  
57   - Class<?> type = event.getAnnotatedType().getJavaClass();
58   - if (Transaction.class.isAssignableFrom(type) && type != Transaction.class
59   - && !type.getCanonicalName().equals(selected)) {
  56 + if (Transaction.class.isAssignableFrom(annotated) && annotated != Transaction.class
  57 + && !annotated.equals(getSelected())) {
60 58 event.veto();
61 59 }
62 60 }
  61 +
  62 + @SuppressWarnings("unchecked")
  63 + private synchronized static Class<Transaction> getSelected() {
  64 + if (selected == null) {
  65 + String canonicalName = null;
  66 +
  67 + try {
  68 + Configuration config = new PropertiesConfiguration("demoiselle.properties");
  69 + canonicalName = config.getString("frameworkdemoiselle.transaction.class",
  70 + DefaultTransaction.class.getCanonicalName());
  71 +
  72 + ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
  73 + selected = (Class<Transaction>) Class.forName(canonicalName, false, classLoader);
  74 + selected.asSubclass(Transaction.class);
  75 +
  76 + } catch (org.apache.commons.configuration.ConfigurationException cause) {
  77 + throw new ConfigurationException(getBundle().getString("file-not-found", "demoiselle.properties"));
  78 +
  79 + } catch (ClassNotFoundException cause) {
  80 + throw new ConfigurationException(getBundle().getString("transaction-class-not-found", canonicalName));
  81 +
  82 + } catch (ClassCastException cause) {
  83 + throw new ConfigurationException(getBundle().getString("transaction-class-must-be-of-type",
  84 + canonicalName, Transaction.class.getCanonicalName()));
  85 + }
  86 + }
  87 +
  88 + return selected;
  89 + }
63 90 }
... ...
impl/core/src/main/resources/demoiselle-core-bundle.properties
... ... @@ -58,7 +58,7 @@ configuration-attribute-is-mandatory=A configura\u00E7\u00E3o {0} \u00E9 obrigat
58 58 configuration-name-attribute-cant-be-empty=A nota\u00E7\u00E3o Name n\u00E3o pode estar em branco
59 59 configuration-key-not-found=Chave de configura\u00E7\u00E3o "{0}" n\u00E3o encontrada. Conven\u00E7\u00F5es verificadas\: "{1}"
60 60  
61   -transaction-not-defined=Nenhuma transa\u00E7\u00E3o foi definida. Para utilizar @{0} \u00E9 preciso definir a estrat\u00E9gia de transa\u00E7\u00E3o desejada no arquivo beans.xml
  61 +transaction-not-defined=Nenhuma transa\u00E7\u00E3o foi definida. Para utilizar @{0} \u00E9 preciso definir a propriedade "frameworkdemoiselle.transaction.class" com a estrat\u00E9gia de transa\u00E7\u00E3o desejada no arquivo demoiselle.properties
62 62 executing-all=Executando todos os \: {0}
63 63 custom-context-was-registered=O contexto {0} foi registrado
64 64 custom-context-was-unregistered=O contexto {0} foi removido
... ... @@ -70,8 +70,8 @@ error-creating-new-instance-for=Error creating a new instance for &quot;{0}&quot;
70 70 executed-successfully=\ {0} execultado com sucesso
71 71 must-declare-one-single-parameter=Voc\u00EA deve declarar um par\u00E2metro \u00FAnico em {0}
72 72 loading-default-transaction-manager=Carregando o gerenciador de transa\u00E7\u00E3o padr\u00E3o {0}
73   -transaction-class-not-found=A classe de transa\u00E7\u00E3o "{0}" informada n\u00E3o foi encontrada.
74   -transaction-class-must-be-of-type=A classe de transa\u00E7\u00E3o "{0}" informada deve ser do tipo {1}
  73 +transaction-class-not-found=A classe de transa\u00E7\u00E3o "{0}" informada no demoiselle.properties n\u00E3o foi encontrada no classpath.
  74 +transaction-class-must-be-of-type=A classe de transa\u00E7\u00E3o "{0}" informada no demoiselle.properties deve ser do tipo "{1}"
75 75 results-count-greater-page-size=Quantidade de resultados {0} \u00E9 maior que o tamanho da p\u00E1gina {1}
76 76 page-result=Resultado paginado [p\u00E1gina\={0}, total de resultados\={1}]
77 77 page=P\u00E1gina [n\u00FAmero\={0}, tamanho\={1}]
... ...