Commit 926849526752f86e83df165d6b556b03dc5801d5

Authored by Dancovich
1 parent bab685f7
Exists in master

Refatoração de gerenciador de contextos

Showing 17 changed files with 570 additions and 322 deletions   Show diff stats
impl/core/src/main/java/br/gov/frameworkdemoiselle/context/CustomContext.java
  1 +/*
  2 + * Demoiselle Framework
  3 + * Copyright (C) 2010 SERPRO
  4 + * ----------------------------------------------------------------------------
  5 + * This file is part of Demoiselle Framework.
  6 + *
  7 + * Demoiselle Framework is free software; you can redistribute it and/or
  8 + * modify it under the terms of the GNU Lesser General Public License version 3
  9 + * as published by the Free Software Foundation.
  10 + *
  11 + * This program is distributed in the hope that it will be useful,
  12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14 + * GNU General Public License for more details.
  15 + *
  16 + * You should have received a copy of the GNU Lesser General Public License version 3
  17 + * along with this program; if not, see <http://www.gnu.org/licenses/>
  18 + * or write to the Free Software Foundation, Inc., 51 Franklin Street,
  19 + * Fifth Floor, Boston, MA 02110-1301, USA.
  20 + * ----------------------------------------------------------------------------
  21 + * Este arquivo é parte do Framework Demoiselle.
  22 + *
  23 + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
  24 + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
  25 + * do Software Livre (FSF).
  26 + *
  27 + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
  28 + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
  29 + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
  30 + * para maiores detalhes.
  31 + *
  32 + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
  33 + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
  34 + * ou escreva para a Fundação do Software Livre (FSF) Inc.,
  35 + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
  36 + */
1 package br.gov.frameworkdemoiselle.context; 37 package br.gov.frameworkdemoiselle.context;
2 38
3 import javax.enterprise.context.spi.Context; 39 import javax.enterprise.context.spi.Context;
@@ -23,5 +59,4 @@ public interface CustomContext extends Context { @@ -23,5 +59,4 @@ public interface CustomContext extends Context {
23 * Deactivates this context, it will clear all beans stored on this context. 59 * Deactivates this context, it will clear all beans stored on this context.
24 */ 60 */
25 void deactivate(); 61 void deactivate();
26 -  
27 } 62 }
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AbstractLifecycleBootstrap.java
@@ -51,9 +51,9 @@ import javax.enterprise.inject.spi.ProcessAnnotatedType; @@ -51,9 +51,9 @@ import javax.enterprise.inject.spi.ProcessAnnotatedType;
51 import org.slf4j.Logger; 51 import org.slf4j.Logger;
52 52
53 import br.gov.frameworkdemoiselle.DemoiselleException; 53 import br.gov.frameworkdemoiselle.DemoiselleException;
54 -import br.gov.frameworkdemoiselle.internal.context.RequestContextImpl;  
55 -import br.gov.frameworkdemoiselle.internal.context.SessionContextImpl;  
56 -import br.gov.frameworkdemoiselle.internal.context.ThreadLocalViewContextImpl; 54 +import br.gov.frameworkdemoiselle.context.RequestContext;
  55 +import br.gov.frameworkdemoiselle.context.SessionContext;
  56 +import br.gov.frameworkdemoiselle.context.ViewContext;
57 import br.gov.frameworkdemoiselle.internal.implementation.AnnotatedMethodProcessor; 57 import br.gov.frameworkdemoiselle.internal.implementation.AnnotatedMethodProcessor;
58 import br.gov.frameworkdemoiselle.util.Beans; 58 import br.gov.frameworkdemoiselle.util.Beans;
59 import br.gov.frameworkdemoiselle.util.NameQualifier; 59 import br.gov.frameworkdemoiselle.util.NameQualifier;
@@ -124,9 +124,9 @@ public abstract class AbstractLifecycleBootstrap&lt;A extends Annotation&gt; implement @@ -124,9 +124,9 @@ public abstract class AbstractLifecycleBootstrap&lt;A extends Annotation&gt; implement
124 Collections.sort(processors); 124 Collections.sort(processors);
125 Exception failure = null; 125 Exception failure = null;
126 126
127 - RequestContextImpl tempRequestContext = Beans.getReference(RequestContextImpl.class);  
128 - SessionContextImpl tempSessionContext = Beans.getReference(SessionContextImpl.class);  
129 - ThreadLocalViewContextImpl tempViewContext = Beans.getReference(ThreadLocalViewContextImpl.class); 127 + RequestContext tempRequestContext = Beans.getReference(RequestContext.class);
  128 + SessionContext tempSessionContext = Beans.getReference(SessionContext.class);
  129 + ViewContext tempViewContext = Beans.getReference(ViewContext.class);
130 130
131 if (!registered) { 131 if (!registered) {
132 tempRequestContext.activate(); 132 tempRequestContext.activate();
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/CoreBootstrap.java
@@ -79,15 +79,7 @@ public class CoreBootstrap implements Extension { @@ -79,15 +79,7 @@ public class CoreBootstrap implements Extension {
79 Beans.setBeanManager(beanManager); 79 Beans.setBeanManager(beanManager);
80 getLogger().info(getBundle().getString("setting-up-bean-manager", Beans.class.getCanonicalName())); 80 getLogger().info(getBundle().getString("setting-up-bean-manager", Beans.class.getCanonicalName()));
81 } 81 }
82 -  
83 - /*public void initializeCustomContexts(@Observes final AfterBeanDiscovery event) {  
84 - Beans.getReference(ContextManager2.class);  
85 - }*/  
86 -  
87 - /*public void terminateCustomContexts(@Observes final BeforeShutdown event) {  
88 - ContextManager.shutdown();  
89 - }*/  
90 - 82 +
91 public void takeOff(@Observes final AfterDeploymentValidation event) { 83 public void takeOff(@Observes final AfterDeploymentValidation event) {
92 getLogger().info(getBundle().getString("taking-off")); 84 getLogger().info(getBundle().getString("taking-off"));
93 } 85 }
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/CustomContextBootstrap.java 0 → 100644
@@ -0,0 +1,90 @@ @@ -0,0 +1,90 @@
  1 +package br.gov.frameworkdemoiselle.internal.bootstrap;
  2 +
  3 +import java.util.ArrayList;
  4 +import java.util.List;
  5 +
  6 +import javax.enterprise.event.Observes;
  7 +import javax.enterprise.inject.spi.AfterBeanDiscovery;
  8 +import javax.enterprise.inject.spi.AfterDeploymentValidation;
  9 +import javax.enterprise.inject.spi.Extension;
  10 +
  11 +import br.gov.frameworkdemoiselle.context.CustomContext;
  12 +import br.gov.frameworkdemoiselle.context.StaticContext;
  13 +import br.gov.frameworkdemoiselle.internal.context.CustomContextProducer;
  14 +import br.gov.frameworkdemoiselle.internal.context.RequestContextImpl;
  15 +import br.gov.frameworkdemoiselle.internal.context.SessionContextImpl;
  16 +import br.gov.frameworkdemoiselle.internal.context.StaticContextImpl;
  17 +import br.gov.frameworkdemoiselle.internal.context.ThreadLocalViewContextImpl;
  18 +import br.gov.frameworkdemoiselle.util.Beans;
  19 +
  20 +/**
  21 + * This portable extension registers and starts custom contexts used by
  22 + * the framework.
  23 + *
  24 + * @author serpro
  25 + *
  26 + */
  27 +public class CustomContextBootstrap implements Extension{
  28 +
  29 + private List<CustomContext> contexts;
  30 +
  31 + /*private Logger logger;
  32 +
  33 + private transient ResourceBundle bundle;
  34 +
  35 + private Logger getLogger() {
  36 + if (this.logger == null) {
  37 + this.logger = LoggerProducer.create(CoreBootstrap.class);
  38 + }
  39 +
  40 + return this.logger;
  41 + }
  42 +
  43 + private ResourceBundle getBundle() {
  44 + if (bundle == null) {
  45 + bundle = new ResourceBundle("demoiselle-core-bundle", Locale.getDefault());
  46 + }
  47 +
  48 + return bundle;
  49 + }*/
  50 +
  51 + public void initializeContexts(@Observes AfterBeanDiscovery event){
  52 + //Cadastra os contextos contidos no demoiselle-core
  53 + if (contexts==null || contexts.isEmpty()){
  54 + CustomContext ctx;
  55 +
  56 + contexts = new ArrayList<CustomContext>();
  57 +
  58 + ctx = new RequestContextImpl();
  59 + contexts.add(ctx);
  60 +
  61 + ctx = new SessionContextImpl();
  62 + contexts.add(ctx);
  63 +
  64 + ctx = new StaticContextImpl();
  65 + contexts.add(ctx);
  66 +
  67 + ctx = new ThreadLocalViewContextImpl();
  68 + contexts.add(ctx);
  69 +
  70 + for (CustomContext c : contexts){
  71 + event.addContext(c);
  72 + }
  73 + }
  74 +
  75 + //Ativa um contexto para gerenciar o StaticScope, um escopo criado para gerenciar classes de configuração.
  76 + for (CustomContext ctx : contexts){
  77 + if (ctx instanceof StaticContext){
  78 + StaticContext staticContext = (StaticContext)ctx;
  79 + staticContext.activate();
  80 + break;
  81 + }
  82 + }
  83 + }
  84 +
  85 + public void storeContexts(@Observes AfterDeploymentValidation event){
  86 + CustomContextProducer producer = Beans.getReference(CustomContextProducer.class);
  87 + producer.addRegisteredContexts(contexts);
  88 + }
  89 +
  90 +}
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/AbstractCustomContext.java
@@ -39,6 +39,7 @@ package br.gov.frameworkdemoiselle.internal.context; @@ -39,6 +39,7 @@ package br.gov.frameworkdemoiselle.internal.context;
39 import java.lang.annotation.Annotation; 39 import java.lang.annotation.Annotation;
40 import java.util.Collections; 40 import java.util.Collections;
41 import java.util.HashMap; 41 import java.util.HashMap;
  42 +import java.util.Locale;
42 import java.util.Map; 43 import java.util.Map;
43 44
44 import javax.enterprise.context.ContextNotActiveException; 45 import javax.enterprise.context.ContextNotActiveException;
@@ -51,8 +52,8 @@ import javax.enterprise.inject.spi.BeanManager; @@ -51,8 +52,8 @@ import javax.enterprise.inject.spi.BeanManager;
51 import org.slf4j.Logger; 52 import org.slf4j.Logger;
52 53
53 import br.gov.frameworkdemoiselle.context.CustomContext; 54 import br.gov.frameworkdemoiselle.context.CustomContext;
  55 +import br.gov.frameworkdemoiselle.internal.producer.LoggerProducer;
54 import br.gov.frameworkdemoiselle.util.Beans; 56 import br.gov.frameworkdemoiselle.util.Beans;
55 -import br.gov.frameworkdemoiselle.util.NameQualifier;  
56 import br.gov.frameworkdemoiselle.util.ResourceBundle; 57 import br.gov.frameworkdemoiselle.util.ResourceBundle;
57 58
58 public abstract class AbstractCustomContext implements CustomContext { 59 public abstract class AbstractCustomContext implements CustomContext {
@@ -60,6 +61,10 @@ public abstract class AbstractCustomContext implements CustomContext { @@ -60,6 +61,10 @@ public abstract class AbstractCustomContext implements CustomContext {
60 private boolean active; 61 private boolean active;
61 62
62 private final Class<? extends Annotation> scope; 63 private final Class<? extends Annotation> scope;
  64 +
  65 + private Logger logger;
  66 +
  67 + private transient ResourceBundle bundle;
63 68
64 AbstractCustomContext(final Class<? extends Annotation> scope) { 69 AbstractCustomContext(final Class<? extends Annotation> scope) {
65 this.scope = scope; 70 this.scope = scope;
@@ -109,25 +114,22 @@ public abstract class AbstractCustomContext implements CustomContext { @@ -109,25 +114,22 @@ public abstract class AbstractCustomContext implements CustomContext {
109 @Override 114 @Override
110 public boolean activate() { 115 public boolean activate() {
111 if (!this.active){ 116 if (!this.active){
112 - Logger logger = getLogger();  
113 - ResourceBundle bundle = getBundle();  
114 -  
115 BeanManager beanManager = Beans.getBeanManager(); 117 BeanManager beanManager = Beans.getBeanManager();
116 if (beanManager!=null){ 118 if (beanManager!=null){
117 try{ 119 try{
118 Context ctx = beanManager.getContext(this.getScope()); 120 Context ctx = beanManager.getContext(this.getScope());
119 if (ctx!=null){ 121 if (ctx!=null){
120 - logger.debug( bundle.getString("custom-context-already-activated" , this.getClass().getCanonicalName() , this.getScope().getSimpleName() , ctx.getClass().getCanonicalName() ) ); 122 + getLogger().debug( getBundle().getString("custom-context-already-activated" , this.getClass().getCanonicalName() , this.getScope().getSimpleName() , ctx.getClass().getCanonicalName() ) );
121 } 123 }
122 } 124 }
123 catch(ContextNotActiveException ce){ 125 catch(ContextNotActiveException ce){
124 this.active = true; 126 this.active = true;
125 - logger.debug( bundle.getString("custom-context-was-activated" , this.getClass().getCanonicalName() , this.getScope().getSimpleName() ) ); 127 + getLogger().debug( getBundle().getString("custom-context-was-activated" , this.getClass().getCanonicalName() , this.getScope().getSimpleName() ) );
126 } 128 }
127 } 129 }
128 else{ 130 else{
129 this.active = true; 131 this.active = true;
130 - logger.debug( bundle.getString("custom-context-was-activated" , this.getClass().getCanonicalName() , this.getScope().getSimpleName() ) ); 132 + getLogger().debug( getBundle().getString("custom-context-was-activated" , this.getClass().getCanonicalName() , this.getScope().getSimpleName() ) );
131 } 133 }
132 } 134 }
133 135
@@ -159,11 +161,19 @@ public abstract class AbstractCustomContext implements CustomContext { @@ -159,11 +161,19 @@ public abstract class AbstractCustomContext implements CustomContext {
159 } 161 }
160 162
161 private ResourceBundle getBundle(){ 163 private ResourceBundle getBundle(){
162 - return Beans.getReference(ResourceBundle.class , new NameQualifier("demoiselle-core-bundle")); 164 + if (bundle==null){
  165 + bundle = new ResourceBundle("demoiselle-core-bundle", Locale.getDefault());
  166 + }
  167 +
  168 + return bundle;
163 } 169 }
164 170
165 private Logger getLogger(){ 171 private Logger getLogger(){
166 - return Beans.getReference(Logger.class); 172 + if (logger==null){
  173 + logger = LoggerProducer.create(this.getClass());
  174 + }
  175 +
  176 + return logger;
167 } 177 }
168 178
169 static class Store { 179 static class Store {
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/AbstractStaticContext.java 0 → 100644
@@ -0,0 +1,79 @@ @@ -0,0 +1,79 @@
  1 +/*
  2 + * Demoiselle Framework
  3 + * Copyright (C) 2010 SERPRO
  4 + * ----------------------------------------------------------------------------
  5 + * This file is part of Demoiselle Framework.
  6 + *
  7 + * Demoiselle Framework is free software; you can redistribute it and/or
  8 + * modify it under the terms of the GNU Lesser General Public License version 3
  9 + * as published by the Free Software Foundation.
  10 + *
  11 + * This program is distributed in the hope that it will be useful,
  12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14 + * GNU General Public License for more details.
  15 + *
  16 + * You should have received a copy of the GNU Lesser General Public License version 3
  17 + * along with this program; if not, see <http://www.gnu.org/licenses/>
  18 + * or write to the Free Software Foundation, Inc., 51 Franklin Street,
  19 + * Fifth Floor, Boston, MA 02110-1301, USA.
  20 + * ----------------------------------------------------------------------------
  21 + * Este arquivo é parte do Framework Demoiselle.
  22 + *
  23 + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
  24 + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
  25 + * do Software Livre (FSF).
  26 + *
  27 + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
  28 + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
  29 + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
  30 + * para maiores detalhes.
  31 + *
  32 + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
  33 + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
  34 + * ou escreva para a Fundação do Software Livre (FSF) Inc.,
  35 + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
  36 + */
  37 +package br.gov.frameworkdemoiselle.internal.context;
  38 +
  39 +import java.lang.annotation.Annotation;
  40 +
  41 +import br.gov.frameworkdemoiselle.annotation.Priority;
  42 +import br.gov.frameworkdemoiselle.annotation.StaticScoped;
  43 +import br.gov.frameworkdemoiselle.configuration.Configuration;
  44 +
  45 +/**
  46 + *
  47 + * <p>This context has a unified static store that keeps all scoped beans available
  48 + * to all threads of an application. It is intended to keep beans avaliable to
  49 + * long lasting scopes (like the Session scope and Application scope) on environments
  50 + * that lack those scopes by default (like desktop Swing applications).</p>
  51 + *
  52 + * <p>This context also keeps beans of the custom {@link StaticScoped} scope, like the beans
  53 + * annotated with {@link Configuration}.</p>
  54 + *
  55 + * @author serpro
  56 + *
  57 + */
  58 +@Priority(Priority.MIN_PRIORITY)
  59 +public abstract class AbstractStaticContext extends AbstractCustomContext {
  60 +
  61 + private final static Store store = createStore();
  62 +
  63 + /**
  64 + * Constructs this context to control the provided scope
  65 + */
  66 + AbstractStaticContext(Class<? extends Annotation> scope) {
  67 + super(scope);
  68 + }
  69 +
  70 + @Override
  71 + protected Store getStore() {
  72 + return store;
  73 + }
  74 +
  75 + @Override
  76 + protected boolean isStoreInitialized() {
  77 + return store!=null;
  78 + }
  79 +}
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/ContextManager2.java
@@ -1,109 +0,0 @@ @@ -1,109 +0,0 @@
1 -package br.gov.frameworkdemoiselle.internal.context;  
2 -  
3 -import java.util.ArrayList;  
4 -import java.util.List;  
5 -  
6 -import javax.annotation.PostConstruct;  
7 -import javax.annotation.PreDestroy;  
8 -import javax.enterprise.context.ApplicationScoped;  
9 -import javax.enterprise.inject.Produces;  
10 -import javax.enterprise.inject.spi.InjectionPoint;  
11 -  
12 -import org.slf4j.Logger;  
13 -  
14 -import br.gov.frameworkdemoiselle.context.CustomContext;  
15 -import br.gov.frameworkdemoiselle.internal.implementation.StrategySelector;  
16 -import br.gov.frameworkdemoiselle.util.Beans;  
17 -import br.gov.frameworkdemoiselle.util.NameQualifier;  
18 -import br.gov.frameworkdemoiselle.util.ResourceBundle;  
19 -  
20 -@ApplicationScoped  
21 -public class ContextManager2 {  
22 -  
23 - private List<CustomContext> contexts;  
24 -  
25 - @PostConstruct  
26 - private void initialize(){  
27 - if (contexts==null || contexts.isEmpty()){  
28 - Logger logger = getLogger();  
29 - ResourceBundle bundle = getBundle();  
30 -  
31 - CustomContext ctx;  
32 -  
33 - contexts = new ArrayList<CustomContext>();  
34 -  
35 - ctx = new RequestContextImpl();  
36 - contexts.add(ctx);  
37 - logger.debug( bundle.getString("bootstrap-context-added", RequestContextImpl.class.getCanonicalName() , ctx.getScope().getSimpleName() ) );  
38 -  
39 - ctx = new SessionContextImpl();  
40 - contexts.add(ctx);  
41 - logger.debug( bundle.getString("bootstrap-context-added", SessionContextImpl.class.getCanonicalName() , ctx.getScope().getSimpleName() ) );  
42 -  
43 - ctx = new StaticContextImpl();  
44 - contexts.add(ctx);  
45 - logger.debug( bundle.getString("bootstrap-context-added", StaticContextImpl.class.getCanonicalName() , ctx.getScope().getSimpleName() ) );  
46 -  
47 - ctx = new ThreadLocalViewContextImpl();  
48 - contexts.add(ctx);  
49 - logger.debug( bundle.getString("bootstrap-context-added", ThreadLocalViewContextImpl.class.getCanonicalName() , ctx.getScope().getSimpleName() ) );  
50 - }  
51 - }  
52 -  
53 - @PreDestroy  
54 - private void closeContexts(){  
55 - for (CustomContext context : contexts){  
56 - context.deactivate();  
57 - }  
58 -  
59 - contexts.clear();  
60 - }  
61 -  
62 - public void addCustomContext(CustomContext context){  
63 - Logger logger = getLogger();  
64 - ResourceBundle bundle = getBundle();  
65 -  
66 - if (!contexts.contains(context)){  
67 - contexts.add(context);  
68 - logger.debug( bundle.getString("bootstrap-context-added", context.getClass().getCanonicalName() , context.getScope().getSimpleName() ) );  
69 - }  
70 - else{  
71 - logger.debug( bundle.getString("bootstrap-context-already-managed", context.getClass().getCanonicalName() , context.getScope().getSimpleName() ) );  
72 - }  
73 - }  
74 -  
75 - @Produces  
76 - public CustomContext getContext(InjectionPoint ip){  
77 - CustomContext producedContext = null;  
78 -  
79 - if (ip!=null){  
80 - Class<?> beanClass = ip.getBean().getBeanClass();  
81 - ArrayList<CustomContext> selectableContexts = new ArrayList<CustomContext>();  
82 -  
83 - for (CustomContext context : contexts){  
84 - if ( beanClass.isAssignableFrom( context.getClass() ) ){  
85 - if (context.isActive()){  
86 - producedContext = context;  
87 - break;  
88 - }  
89 - else{  
90 - selectableContexts.add(context);  
91 - }  
92 - }  
93 - }  
94 -  
95 - producedContext = StrategySelector.selectInstance(CustomContext.class, selectableContexts);  
96 - }  
97 -  
98 - return producedContext;  
99 - }  
100 -  
101 - private ResourceBundle getBundle(){  
102 - return Beans.getReference(ResourceBundle.class , new NameQualifier("demoiselle-core-bundle"));  
103 - }  
104 -  
105 - private Logger getLogger(){  
106 - return Beans.getReference(Logger.class);  
107 - }  
108 -  
109 -}  
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/CustomContext.java
@@ -1,62 +0,0 @@ @@ -1,62 +0,0 @@
1 -/*  
2 - * Demoiselle Framework  
3 - * Copyright (C) 2010 SERPRO  
4 - * ----------------------------------------------------------------------------  
5 - * This file is part of Demoiselle Framework.  
6 - *  
7 - * Demoiselle Framework is free software; you can redistribute it and/or  
8 - * modify it under the terms of the GNU Lesser General Public License version 3  
9 - * as published by the Free Software Foundation.  
10 - *  
11 - * This program is distributed in the hope that it will be useful,  
12 - * but WITHOUT ANY WARRANTY; without even the implied warranty of  
13 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the  
14 - * GNU General Public License for more details.  
15 - *  
16 - * You should have received a copy of the GNU Lesser General Public License version 3  
17 - * along with this program; if not, see <http://www.gnu.org/licenses/>  
18 - * or write to the Free Software Foundation, Inc., 51 Franklin Street,  
19 - * Fifth Floor, Boston, MA 02110-1301, USA.  
20 - * ----------------------------------------------------------------------------  
21 - * Este arquivo é parte do Framework Demoiselle.  
22 - *  
23 - * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou  
24 - * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação  
25 - * do Software Livre (FSF).  
26 - *  
27 - * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA  
28 - * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou  
29 - * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português  
30 - * para maiores detalhes.  
31 - *  
32 - * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título  
33 - * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>  
34 - * ou escreva para a Fundação do Software Livre (FSF) Inc.,  
35 - * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.  
36 - */  
37 -package br.gov.frameworkdemoiselle.internal.context;  
38 -  
39 -import javax.enterprise.context.spi.Context;  
40 -  
41 -/**  
42 - *  
43 - * Base interface for contexts managed by the framework.  
44 - *  
45 - * @author serpro  
46 - *  
47 - */  
48 -public interface CustomContext extends Context {  
49 -  
50 - /**  
51 - * Activates a custom context  
52 - *  
53 - * @return <code>true</code> if context was activated, <code>false</code> if there was already another active  
54 - * context for the same scope and the activation of this scope failed.  
55 - */  
56 - boolean activate();  
57 -  
58 - /**  
59 - * Deactivates this context, it will clear all beans stored on this context.  
60 - */  
61 - void deactivate();  
62 -}  
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/CustomContextProducer.java 0 → 100644
@@ -0,0 +1,160 @@ @@ -0,0 +1,160 @@
  1 +package br.gov.frameworkdemoiselle.internal.context;
  2 +
  3 +import java.util.ArrayList;
  4 +import java.util.Collection;
  5 +import java.util.List;
  6 +import java.util.Locale;
  7 +
  8 +import javax.annotation.PreDestroy;
  9 +import javax.enterprise.context.ApplicationScoped;
  10 +import javax.enterprise.inject.Produces;
  11 +import javax.enterprise.inject.spi.InjectionPoint;
  12 +
  13 +import org.slf4j.Logger;
  14 +
  15 +import br.gov.frameworkdemoiselle.context.CustomContext;
  16 +import br.gov.frameworkdemoiselle.context.RequestContext;
  17 +import br.gov.frameworkdemoiselle.context.SessionContext;
  18 +import br.gov.frameworkdemoiselle.context.StaticContext;
  19 +import br.gov.frameworkdemoiselle.context.ViewContext;
  20 +import br.gov.frameworkdemoiselle.internal.bootstrap.CustomContextBootstrap;
  21 +import br.gov.frameworkdemoiselle.internal.implementation.StrategySelector;
  22 +import br.gov.frameworkdemoiselle.internal.producer.LoggerProducer;
  23 +import br.gov.frameworkdemoiselle.util.ResourceBundle;
  24 +
  25 +/**
  26 + * Produces instances of {@link CustomContext} to control contexts not active
  27 + * by the container
  28 + *
  29 + * @author serpro
  30 + *
  31 + */
  32 +@ApplicationScoped
  33 +public class CustomContextProducer {
  34 +
  35 + private Logger logger;
  36 +
  37 + private transient ResourceBundle bundle;
  38 +
  39 + private List<CustomContext> contexts = new ArrayList<CustomContext>();
  40 +
  41 + /**
  42 + * Store a list of contexts into this producer. The contexts must have
  43 + * been registered into CDI by a portable extension, this method will not do this.
  44 + *
  45 + */
  46 + public void addRegisteredContexts(Collection<CustomContext> contexts){
  47 + for (CustomContext context : contexts){
  48 + addRegisteredContext(context);
  49 + }
  50 + }
  51 +
  52 + /**
  53 + * Store a context into this producer. The context must have
  54 + * been registered into CDI by a portable extension, this method will not do this.
  55 + *
  56 + */
  57 + public void addRegisteredContext(CustomContext context){
  58 + Logger logger = getLogger();
  59 + ResourceBundle bundle = getBundle();
  60 +
  61 + if (!contexts.contains(context)){
  62 + contexts.add(context);
  63 + logger.debug( bundle.getString("bootstrap-context-added", context.getClass().getCanonicalName() , context.getScope().getSimpleName() ) );
  64 + }
  65 + else{
  66 + logger.debug( bundle.getString("bootstrap-context-already-managed", context.getClass().getCanonicalName() , context.getScope().getSimpleName() ) );
  67 + }
  68 + }
  69 +
  70 + /**
  71 + * Deactivates all registered contexts and clear the context collection
  72 + */
  73 + @PreDestroy
  74 + public void closeContexts(){
  75 + //Desativa todos os contextos registrados.
  76 + for (CustomContext context : contexts){
  77 + context.deactivate();
  78 + }
  79 +
  80 + contexts.clear();
  81 + }
  82 +
  83 + @Produces
  84 + public RequestContext getRequestContext(InjectionPoint ip , CustomContextBootstrap extension){
  85 + return getContext(ip, extension);
  86 + }
  87 +
  88 + @Produces
  89 + public SessionContext getSessionContext(InjectionPoint ip , CustomContextBootstrap extension){
  90 + return getContext(ip, extension);
  91 + }
  92 +
  93 + @Produces
  94 + public ViewContext getViewContext(InjectionPoint ip , CustomContextBootstrap extension){
  95 + return getContext(ip, extension);
  96 + }
  97 +
  98 + @Produces
  99 + public StaticContext getStaticContext(InjectionPoint ip , CustomContextBootstrap extension){
  100 + return getContext(ip, extension);
  101 + }
  102 +
  103 +
  104 + @SuppressWarnings("unchecked")
  105 + private <T extends CustomContext> T getContext(InjectionPoint ip , CustomContextBootstrap extension){
  106 + T producedContext = null;
  107 +
  108 + if (ip!=null){
  109 + Class<T> beanClass = (Class<T>) ip.getType();
  110 + producedContext = (T) getContext(beanClass);
  111 + }
  112 +
  113 + if (producedContext!=null){
  114 + getLogger().debug( getBundle().getString("custom-context-selected" , producedContext.getClass().getCanonicalName()) );
  115 + }
  116 +
  117 + return producedContext;
  118 + }
  119 +
  120 + private CustomContext getContext(Class<? extends CustomContext> contextClass){
  121 + CustomContext producedContext = null;
  122 +
  123 + ArrayList<CustomContext> selectableContexts = new ArrayList<CustomContext>();
  124 +
  125 + for (CustomContext context : contexts){
  126 + if ( contextClass.isAssignableFrom( context.getClass() ) ){
  127 + if (context.isActive()){
  128 + producedContext = context;
  129 + break;
  130 + }
  131 + else{
  132 + selectableContexts.add(context);
  133 + }
  134 + }
  135 + }
  136 +
  137 + if (producedContext==null && !selectableContexts.isEmpty()){
  138 + producedContext = StrategySelector.selectInstance(CustomContext.class, selectableContexts);
  139 + }
  140 +
  141 + return producedContext;
  142 + }
  143 +
  144 + private Logger getLogger() {
  145 + if (this.logger == null) {
  146 + this.logger = LoggerProducer.create(this.getClass());
  147 + }
  148 +
  149 + return this.logger;
  150 + }
  151 +
  152 + private ResourceBundle getBundle() {
  153 + if (bundle == null) {
  154 + bundle = new ResourceBundle("demoiselle-core-bundle", Locale.getDefault());
  155 + }
  156 +
  157 + return bundle;
  158 + }
  159 +
  160 +}
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/RequestContextImpl.java
  1 +/*
  2 + * Demoiselle Framework
  3 + * Copyright (C) 2010 SERPRO
  4 + * ----------------------------------------------------------------------------
  5 + * This file is part of Demoiselle Framework.
  6 + *
  7 + * Demoiselle Framework is free software; you can redistribute it and/or
  8 + * modify it under the terms of the GNU Lesser General Public License version 3
  9 + * as published by the Free Software Foundation.
  10 + *
  11 + * This program is distributed in the hope that it will be useful,
  12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14 + * GNU General Public License for more details.
  15 + *
  16 + * You should have received a copy of the GNU Lesser General Public License version 3
  17 + * along with this program; if not, see <http://www.gnu.org/licenses/>
  18 + * or write to the Free Software Foundation, Inc., 51 Franklin Street,
  19 + * Fifth Floor, Boston, MA 02110-1301, USA.
  20 + * ----------------------------------------------------------------------------
  21 + * Este arquivo é parte do Framework Demoiselle.
  22 + *
  23 + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
  24 + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
  25 + * do Software Livre (FSF).
  26 + *
  27 + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
  28 + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
  29 + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
  30 + * para maiores detalhes.
  31 + *
  32 + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
  33 + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
  34 + * ou escreva para a Fundação do Software Livre (FSF) Inc.,
  35 + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
  36 + */
  37 +/*
  38 + * Demoiselle Framework Copyright (c) 2010 Serpro and other contributors as indicated by the @author tag. See the
  39 + * copyright.txt in the distribution for a full listing of contributors. Demoiselle Framework is an open source Java EE
  40 + * library designed to accelerate the development of transactional database Web applications. Demoiselle Framework is
  41 + * released under the terms of the LGPL license 3 http://www.gnu.org/licenses/lgpl.html LGPL License 3 This file is part
  42 + * of Demoiselle Framework. Demoiselle Framework is free software: you can redistribute it and/or modify it under the
  43 + * terms of the GNU Lesser General Public License 3 as published by the Free Software Foundation. Demoiselle Framework
  44 + * is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
  45 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You
  46 + * should have received a copy of the GNU Lesser General Public License along with Demoiselle Framework. If not, see
  47 + * <http://www.gnu.org/licenses/>.
  48 + */
1 package br.gov.frameworkdemoiselle.internal.context; 49 package br.gov.frameworkdemoiselle.internal.context;
2 50
3 import javax.enterprise.context.RequestScoped; 51 import javax.enterprise.context.RequestScoped;
  52 +import javax.enterprise.inject.Alternative;
4 53
5 import br.gov.frameworkdemoiselle.annotation.Priority; 54 import br.gov.frameworkdemoiselle.annotation.Priority;
6 import br.gov.frameworkdemoiselle.context.RequestContext; 55 import br.gov.frameworkdemoiselle.context.RequestContext;
@@ -12,9 +61,10 @@ import br.gov.frameworkdemoiselle.context.RequestContext; @@ -12,9 +61,10 @@ import br.gov.frameworkdemoiselle.context.RequestContext;
12 * 61 *
13 */ 62 */
14 @Priority(Priority.MIN_PRIORITY) 63 @Priority(Priority.MIN_PRIORITY)
  64 +@Alternative
15 public class RequestContextImpl extends AbstractThreadLocalContext implements RequestContext { 65 public class RequestContextImpl extends AbstractThreadLocalContext implements RequestContext {
16 66
17 - RequestContextImpl() { 67 + public RequestContextImpl() {
18 super(RequestScoped.class); 68 super(RequestScoped.class);
19 } 69 }
20 70
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/SessionContextImpl.java
  1 +/*
  2 + * Demoiselle Framework
  3 + * Copyright (C) 2010 SERPRO
  4 + * ----------------------------------------------------------------------------
  5 + * This file is part of Demoiselle Framework.
  6 + *
  7 + * Demoiselle Framework is free software; you can redistribute it and/or
  8 + * modify it under the terms of the GNU Lesser General Public License version 3
  9 + * as published by the Free Software Foundation.
  10 + *
  11 + * This program is distributed in the hope that it will be useful,
  12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14 + * GNU General Public License for more details.
  15 + *
  16 + * You should have received a copy of the GNU Lesser General Public License version 3
  17 + * along with this program; if not, see <http://www.gnu.org/licenses/>
  18 + * or write to the Free Software Foundation, Inc., 51 Franklin Street,
  19 + * Fifth Floor, Boston, MA 02110-1301, USA.
  20 + * ----------------------------------------------------------------------------
  21 + * Este arquivo é parte do Framework Demoiselle.
  22 + *
  23 + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
  24 + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
  25 + * do Software Livre (FSF).
  26 + *
  27 + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
  28 + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
  29 + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
  30 + * para maiores detalhes.
  31 + *
  32 + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
  33 + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
  34 + * ou escreva para a Fundação do Software Livre (FSF) Inc.,
  35 + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
  36 + */
  37 +/*
  38 + * Demoiselle Framework Copyright (c) 2010 Serpro and other contributors as indicated by the @author tag. See the
  39 + * copyright.txt in the distribution for a full listing of contributors. Demoiselle Framework is an open source Java EE
  40 + * library designed to accelerate the development of transactional database Web applications. Demoiselle Framework is
  41 + * released under the terms of the LGPL license 3 http://www.gnu.org/licenses/lgpl.html LGPL License 3 This file is part
  42 + * of Demoiselle Framework. Demoiselle Framework is free software: you can redistribute it and/or modify it under the
  43 + * terms of the GNU Lesser General Public License 3 as published by the Free Software Foundation. Demoiselle Framework
  44 + * is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
  45 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You
  46 + * should have received a copy of the GNU Lesser General Public License along with Demoiselle Framework. If not, see
  47 + * <http://www.gnu.org/licenses/>.
  48 + */
1 package br.gov.frameworkdemoiselle.internal.context; 49 package br.gov.frameworkdemoiselle.internal.context;
2 50
3 import javax.enterprise.context.SessionScoped; 51 import javax.enterprise.context.SessionScoped;
  52 +import javax.enterprise.inject.Alternative;
4 53
5 import br.gov.frameworkdemoiselle.annotation.Priority; 54 import br.gov.frameworkdemoiselle.annotation.Priority;
6 import br.gov.frameworkdemoiselle.context.SessionContext; 55 import br.gov.frameworkdemoiselle.context.SessionContext;
@@ -12,9 +61,10 @@ import br.gov.frameworkdemoiselle.context.SessionContext; @@ -12,9 +61,10 @@ import br.gov.frameworkdemoiselle.context.SessionContext;
12 * 61 *
13 */ 62 */
14 @Priority(Priority.MIN_PRIORITY) 63 @Priority(Priority.MIN_PRIORITY)
15 -public class SessionContextImpl extends StaticContextImpl implements SessionContext { 64 +@Alternative
  65 +public class SessionContextImpl extends AbstractStaticContext implements SessionContext {
16 66
17 - SessionContextImpl() { 67 + public SessionContextImpl() {
18 super(SessionScoped.class); 68 super(SessionScoped.class);
19 } 69 }
20 70
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/StaticContextImpl.java
@@ -34,53 +34,31 @@ @@ -34,53 +34,31 @@
34 * ou escreva para a Fundação do Software Livre (FSF) Inc., 34 * ou escreva para a Fundação do Software Livre (FSF) Inc.,
35 * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. 35 * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
36 */ 36 */
  37 +/*
  38 + * Demoiselle Framework Copyright (c) 2010 Serpro and other contributors as indicated by the @author tag. See the
  39 + * copyright.txt in the distribution for a full listing of contributors. Demoiselle Framework is an open source Java EE
  40 + * library designed to accelerate the development of transactional database Web applications. Demoiselle Framework is
  41 + * released under the terms of the LGPL license 3 http://www.gnu.org/licenses/lgpl.html LGPL License 3 This file is part
  42 + * of Demoiselle Framework. Demoiselle Framework is free software: you can redistribute it and/or modify it under the
  43 + * terms of the GNU Lesser General Public License 3 as published by the Free Software Foundation. Demoiselle Framework
  44 + * is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
  45 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You
  46 + * should have received a copy of the GNU Lesser General Public License along with Demoiselle Framework. If not, see
  47 + * <http://www.gnu.org/licenses/>.
  48 + */
37 package br.gov.frameworkdemoiselle.internal.context; 49 package br.gov.frameworkdemoiselle.internal.context;
38 50
39 -import java.lang.annotation.Annotation; 51 +import javax.enterprise.inject.Alternative;
40 52
41 import br.gov.frameworkdemoiselle.annotation.Priority; 53 import br.gov.frameworkdemoiselle.annotation.Priority;
42 import br.gov.frameworkdemoiselle.annotation.StaticScoped; 54 import br.gov.frameworkdemoiselle.annotation.StaticScoped;
43 -import br.gov.frameworkdemoiselle.configuration.Configuration; 55 +import br.gov.frameworkdemoiselle.context.StaticContext;
44 56
45 -/**  
46 - *  
47 - * <p>This context has a unified static store that keeps all scoped beans available  
48 - * to all threads of an application. It is intended to keep beans avaliable to  
49 - * long lasting scopes (like the Session scope and Application scope) on environments  
50 - * that lack those scopes by default (like desktop Swing applications).</p>  
51 - *  
52 - * <p>This context also keeps beans of the custom {@link StaticScoped} scope, like the beans  
53 - * annotated with {@link Configuration}.</p>  
54 - *  
55 - * @author serpro  
56 - *  
57 - */  
58 @Priority(Priority.MIN_PRIORITY) 57 @Priority(Priority.MIN_PRIORITY)
59 -public class StaticContextImpl extends AbstractCustomContext { 58 +@Alternative
  59 +public class StaticContextImpl extends AbstractStaticContext implements StaticContext {
60 60
61 - private final static Store store = createStore();  
62 -  
63 - /**  
64 - * Constructs this context to control the provided scope  
65 - */  
66 - StaticContextImpl(Class<? extends Annotation> scope) {  
67 - super(scope);  
68 - }  
69 -  
70 - /**  
71 - * Constructs this context to control {@link StaticScoped} beans  
72 - */  
73 - StaticContextImpl() { 61 + public StaticContextImpl() {
74 super(StaticScoped.class); 62 super(StaticScoped.class);
75 } 63 }
76 -  
77 - @Override  
78 - protected Store getStore() {  
79 - return store;  
80 - }  
81 -  
82 - @Override  
83 - protected boolean isStoreInitialized() {  
84 - return store!=null;  
85 - }  
86 } 64 }
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/ThreadLocalContext.java
@@ -1,79 +0,0 @@ @@ -1,79 +0,0 @@
1 -/*  
2 - * Demoiselle Framework  
3 - * Copyright (C) 2010 SERPRO  
4 - * ----------------------------------------------------------------------------  
5 - * This file is part of Demoiselle Framework.  
6 - *  
7 - * Demoiselle Framework is free software; you can redistribute it and/or  
8 - * modify it under the terms of the GNU Lesser General Public License version 3  
9 - * as published by the Free Software Foundation.  
10 - *  
11 - * This program is distributed in the hope that it will be useful,  
12 - * but WITHOUT ANY WARRANTY; without even the implied warranty of  
13 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the  
14 - * GNU General Public License for more details.  
15 - *  
16 - * You should have received a copy of the GNU Lesser General Public License version 3  
17 - * along with this program; if not, see <http://www.gnu.org/licenses/>  
18 - * or write to the Free Software Foundation, Inc., 51 Franklin Street,  
19 - * Fifth Floor, Boston, MA 02110-1301, USA.  
20 - * ----------------------------------------------------------------------------  
21 - * Este arquivo é parte do Framework Demoiselle.  
22 - *  
23 - * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou  
24 - * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação  
25 - * do Software Livre (FSF).  
26 - *  
27 - * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA  
28 - * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou  
29 - * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português  
30 - * para maiores detalhes.  
31 - *  
32 - * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título  
33 - * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>  
34 - * ou escreva para a Fundação do Software Livre (FSF) Inc.,  
35 - * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.  
36 - */  
37 -/*  
38 - * Demoiselle Framework Copyright (c) 2010 Serpro and other contributors as indicated by the @author tag. See the  
39 - * copyright.txt in the distribution for a full listing of contributors. Demoiselle Framework is an open source Java EE  
40 - * library designed to accelerate the development of transactional database Web applications. Demoiselle Framework is  
41 - * released under the terms of the LGPL license 3 http://www.gnu.org/licenses/lgpl.html LGPL License 3 This file is part  
42 - * of Demoiselle Framework. Demoiselle Framework is free software: you can redistribute it and/or modify it under the  
43 - * terms of the GNU Lesser General Public License 3 as published by the Free Software Foundation. Demoiselle Framework  
44 - * is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of  
45 - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You  
46 - * should have received a copy of the GNU Lesser General Public License along with Demoiselle Framework. If not, see  
47 - * <http://www.gnu.org/licenses/>.  
48 - */  
49 -package br.gov.frameworkdemoiselle.internal.context;  
50 -  
51 -import java.lang.annotation.Annotation;  
52 -  
53 -/**  
54 - * Base context that has a separated store for each thread  
55 - *  
56 - * @author SERPRO  
57 - */  
58 -public class ThreadLocalContext extends AbstractCustomContext {  
59 -  
60 - private final ThreadLocal<Store> threadLocal = new ThreadLocal<Store>();  
61 -  
62 - public ThreadLocalContext(final Class<? extends Annotation> scope) {  
63 - super(scope);  
64 - }  
65 -  
66 - @Override  
67 - protected boolean isStoreInitialized() {  
68 - return threadLocal.get()!=null;  
69 - }  
70 -  
71 - @Override  
72 - protected Store getStore() {  
73 - if (this.threadLocal.get() == null) {  
74 - this.threadLocal.set(createStore());  
75 - }  
76 -  
77 - return this.threadLocal.get();  
78 - }  
79 -}  
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/ThreadLocalViewContextImpl.java
  1 +/*
  2 + * Demoiselle Framework
  3 + * Copyright (C) 2010 SERPRO
  4 + * ----------------------------------------------------------------------------
  5 + * This file is part of Demoiselle Framework.
  6 + *
  7 + * Demoiselle Framework is free software; you can redistribute it and/or
  8 + * modify it under the terms of the GNU Lesser General Public License version 3
  9 + * as published by the Free Software Foundation.
  10 + *
  11 + * This program is distributed in the hope that it will be useful,
  12 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  14 + * GNU General Public License for more details.
  15 + *
  16 + * You should have received a copy of the GNU Lesser General Public License version 3
  17 + * along with this program; if not, see <http://www.gnu.org/licenses/>
  18 + * or write to the Free Software Foundation, Inc., 51 Franklin Street,
  19 + * Fifth Floor, Boston, MA 02110-1301, USA.
  20 + * ----------------------------------------------------------------------------
  21 + * Este arquivo é parte do Framework Demoiselle.
  22 + *
  23 + * O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou
  24 + * modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação
  25 + * do Software Livre (FSF).
  26 + *
  27 + * Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA
  28 + * GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou
  29 + * APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português
  30 + * para maiores detalhes.
  31 + *
  32 + * Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título
  33 + * "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/>
  34 + * ou escreva para a Fundação do Software Livre (FSF) Inc.,
  35 + * 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA.
  36 + */
  37 +/*
  38 + * Demoiselle Framework Copyright (c) 2010 Serpro and other contributors as indicated by the @author tag. See the
  39 + * copyright.txt in the distribution for a full listing of contributors. Demoiselle Framework is an open source Java EE
  40 + * library designed to accelerate the development of transactional database Web applications. Demoiselle Framework is
  41 + * released under the terms of the LGPL license 3 http://www.gnu.org/licenses/lgpl.html LGPL License 3 This file is part
  42 + * of Demoiselle Framework. Demoiselle Framework is free software: you can redistribute it and/or modify it under the
  43 + * terms of the GNU Lesser General Public License 3 as published by the Free Software Foundation. Demoiselle Framework
  44 + * is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of
  45 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You
  46 + * should have received a copy of the GNU Lesser General Public License along with Demoiselle Framework. If not, see
  47 + * <http://www.gnu.org/licenses/>.
  48 + */
1 package br.gov.frameworkdemoiselle.internal.context; 49 package br.gov.frameworkdemoiselle.internal.context;
2 50
  51 +import javax.enterprise.inject.Alternative;
  52 +
3 import br.gov.frameworkdemoiselle.annotation.Priority; 53 import br.gov.frameworkdemoiselle.annotation.Priority;
4 import br.gov.frameworkdemoiselle.annotation.ViewScoped; 54 import br.gov.frameworkdemoiselle.annotation.ViewScoped;
5 import br.gov.frameworkdemoiselle.context.ViewContext; 55 import br.gov.frameworkdemoiselle.context.ViewContext;
6 56
7 @Priority(Priority.MIN_PRIORITY) 57 @Priority(Priority.MIN_PRIORITY)
  58 +@Alternative
8 public class ThreadLocalViewContextImpl extends AbstractThreadLocalContext implements ViewContext { 59 public class ThreadLocalViewContextImpl extends AbstractThreadLocalContext implements ViewContext {
9 60
10 - ThreadLocalViewContextImpl() { 61 + public ThreadLocalViewContextImpl() {
11 super(ViewScoped.class); 62 super(ViewScoped.class);
12 } 63 }
13 64
impl/core/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension
1 br.gov.frameworkdemoiselle.internal.bootstrap.CoreBootstrap 1 br.gov.frameworkdemoiselle.internal.bootstrap.CoreBootstrap
  2 +br.gov.frameworkdemoiselle.internal.bootstrap.CustomContextBootstrap
2 br.gov.frameworkdemoiselle.internal.bootstrap.ConfigurationBootstrap 3 br.gov.frameworkdemoiselle.internal.bootstrap.ConfigurationBootstrap
3 br.gov.frameworkdemoiselle.internal.bootstrap.ManagementBootstrap 4 br.gov.frameworkdemoiselle.internal.bootstrap.ManagementBootstrap
4 br.gov.frameworkdemoiselle.internal.bootstrap.StartupBootstrap 5 br.gov.frameworkdemoiselle.internal.bootstrap.StartupBootstrap
impl/core/src/main/resources/demoiselle-core-bundle.properties
@@ -68,6 +68,7 @@ configuration-not-conversion=N\u00E3o \u00E9 poss\u00EDvel converter o valor {0} @@ -68,6 +68,7 @@ configuration-not-conversion=N\u00E3o \u00E9 poss\u00EDvel converter o valor {0}
68 68
69 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 69 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
70 executing-all=Executando todos os \: {0} 70 executing-all=Executando todos os \: {0}
  71 +custom-context-selected=Produzindo inst\u00E2ncia do contexto {0}
71 custom-context-was-activated=O contexto {0} foi ativado para o escopo {1} 72 custom-context-was-activated=O contexto {0} foi ativado para o escopo {1}
72 custom-context-was-deactivated=O contexto {0} foi desativado para o escopo {1} 73 custom-context-was-deactivated=O contexto {0} foi desativado para o escopo {1}
73 custom-context-already-activated=N\u00E3o foi poss\u00EDvel ativar o contexto {0}, o escopo {1} j\u00E1 est\u00E1 ativo no contexto {2} 74 custom-context-already-activated=N\u00E3o foi poss\u00EDvel ativar o contexto {0}, o escopo {1} j\u00E1 est\u00E1 ativo no contexto {2}
impl/core/src/test/java/management/validation/ValidationTest.java
1 package management.validation; 1 package management.validation;
2 2
  3 +import javax.validation.ConstraintViolationException;
  4 +
3 import management.testclasses.DummyManagedClass; 5 import management.testclasses.DummyManagedClass;
4 import management.testclasses.DummyManagementExtension; 6 import management.testclasses.DummyManagementExtension;
5 import management.testclasses.DummyValidator; 7 import management.testclasses.DummyValidator;
@@ -14,7 +16,6 @@ import org.junit.Test; @@ -14,7 +16,6 @@ import org.junit.Test;
14 import org.junit.runner.RunWith; 16 import org.junit.runner.RunWith;
15 17
16 import test.Tests; 18 import test.Tests;
17 -import br.gov.frameworkdemoiselle.DemoiselleException;  
18 import br.gov.frameworkdemoiselle.util.Beans; 19 import br.gov.frameworkdemoiselle.util.Beans;
19 20
20 @RunWith(Arquillian.class) 21 @RunWith(Arquillian.class)
@@ -52,8 +53,8 @@ public class ValidationTest { @@ -52,8 +53,8 @@ public class ValidationTest {
52 store.setProperty(DummyManagedClass.class, "id", (Integer) null); 53 store.setProperty(DummyManagedClass.class, "id", (Integer) null);
53 54
54 Assert.fail(); 55 Assert.fail();
55 - } catch (DemoiselleException de) {  
56 - // Classes de gerenciamento disparam Demoiselle Exception quando uma validação falha 56 + } catch (ConstraintViolationException ce) {
  57 + // Classes de gerenciamento disparam ConstraintViolationException quando uma validação falha
57 } 58 }
58 } 59 }
59 60
@@ -72,7 +73,7 @@ public class ValidationTest { @@ -72,7 +73,7 @@ public class ValidationTest {
72 store.setProperty(DummyManagedClass.class, "gender", "J"); 73 store.setProperty(DummyManagedClass.class, "gender", "J");
73 74
74 Assert.fail(); 75 Assert.fail();
75 - } catch (DemoiselleException e) { 76 + } catch (ConstraintViolationException e) {
76 Assert.assertTrue(e.getMessage().contains("Test Message")); 77 Assert.assertTrue(e.getMessage().contains("Test Message"));
77 } 78 }
78 79