Commit 7bba9cf73eba0430f0c7adb124eba39cc123314c
1 parent
ce421cf2
Exists in
master
Lançando exceções intuitivas e internacionalizadas para o usuário do
framework.
Showing
2 changed files
with
38 additions
and
11 deletions
Show diff stats
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 "{0}" |
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}] | ... | ... |