Commit 0b5ebd8c699b35134441140f057a229f760c79a0

Authored by Luciano Borges
2 parents 4b6c112d 26c10066
Exists in master

Merge remote branch 'origin/2.4.0' into 2.4.0

Conflicts:
	impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/ManagementBootstrap.java
	impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/implementation/Management.java
	impl/extension/jmx/src/main/java/br/gov/frameworkdemoiselle/internal/DynamicMBeanProxy.java
	impl/extension/jmx/src/main/java/br/gov/frameworkdemoiselle/internal/JMXManagementExtension.java
	impl/extension/jmx/src/main/java/br/gov/frameworkdemoiselle/internal/NotificationEventListener.java
	impl/extension/jsf/src/test/java/test/Tests.java
Showing 47 changed files with 1237 additions and 836 deletions   Show diff stats
impl/core/src/main/java/br/gov/frameworkdemoiselle/context/CustomContext.java 0 → 100644
@@ -0,0 +1,62 @@ @@ -0,0 +1,62 @@
  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.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/context/RequestContext.java 0 → 100644
@@ -0,0 +1,5 @@ @@ -0,0 +1,5 @@
  1 +package br.gov.frameworkdemoiselle.context;
  2 +
  3 +
  4 +public interface RequestContext extends CustomContext {
  5 +}
impl/core/src/main/java/br/gov/frameworkdemoiselle/context/SessionContext.java 0 → 100644
@@ -0,0 +1,6 @@ @@ -0,0 +1,6 @@
  1 +package br.gov.frameworkdemoiselle.context;
  2 +
  3 +
  4 +
  5 +public interface SessionContext extends CustomContext {
  6 +}
0 \ No newline at end of file 7 \ No newline at end of file
impl/core/src/main/java/br/gov/frameworkdemoiselle/context/StaticContext.java 0 → 100644
@@ -0,0 +1,6 @@ @@ -0,0 +1,6 @@
  1 +package br.gov.frameworkdemoiselle.context;
  2 +
  3 +
  4 +
  5 +public interface StaticContext extends CustomContext {
  6 +}
impl/core/src/main/java/br/gov/frameworkdemoiselle/context/ViewContext.java 0 → 100644
@@ -0,0 +1,6 @@ @@ -0,0 +1,6 @@
  1 +package br.gov.frameworkdemoiselle.context;
  2 +
  3 +
  4 +
  5 +public interface ViewContext extends CustomContext {
  6 +}
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/AbstractLifecycleBootstrap.java
@@ -42,11 +42,7 @@ import java.util.Collections; @@ -42,11 +42,7 @@ import java.util.Collections;
42 import java.util.Iterator; 42 import java.util.Iterator;
43 import java.util.List; 43 import java.util.List;
44 44
45 -import javax.enterprise.context.ConversationScoped;  
46 -import javax.enterprise.context.RequestScoped;  
47 -import javax.enterprise.context.SessionScoped;  
48 import javax.enterprise.event.Observes; 45 import javax.enterprise.event.Observes;
49 -import javax.enterprise.inject.spi.AfterBeanDiscovery;  
50 import javax.enterprise.inject.spi.AnnotatedMethod; 46 import javax.enterprise.inject.spi.AnnotatedMethod;
51 import javax.enterprise.inject.spi.AnnotatedType; 47 import javax.enterprise.inject.spi.AnnotatedType;
52 import javax.enterprise.inject.spi.Extension; 48 import javax.enterprise.inject.spi.Extension;
@@ -55,9 +51,9 @@ import javax.enterprise.inject.spi.ProcessAnnotatedType; @@ -55,9 +51,9 @@ import javax.enterprise.inject.spi.ProcessAnnotatedType;
55 import org.slf4j.Logger; 51 import org.slf4j.Logger;
56 52
57 import br.gov.frameworkdemoiselle.DemoiselleException; 53 import br.gov.frameworkdemoiselle.DemoiselleException;
58 -import br.gov.frameworkdemoiselle.annotation.ViewScoped;  
59 -import br.gov.frameworkdemoiselle.internal.context.ContextManager;  
60 -import br.gov.frameworkdemoiselle.internal.context.ThreadLocalContext; 54 +import br.gov.frameworkdemoiselle.context.RequestContext;
  55 +import br.gov.frameworkdemoiselle.context.SessionContext;
  56 +import br.gov.frameworkdemoiselle.context.ViewContext;
61 import br.gov.frameworkdemoiselle.internal.implementation.AnnotatedMethodProcessor; 57 import br.gov.frameworkdemoiselle.internal.implementation.AnnotatedMethodProcessor;
62 import br.gov.frameworkdemoiselle.util.Beans; 58 import br.gov.frameworkdemoiselle.util.Beans;
63 import br.gov.frameworkdemoiselle.util.NameQualifier; 59 import br.gov.frameworkdemoiselle.util.NameQualifier;
@@ -109,7 +105,7 @@ public abstract class AbstractLifecycleBootstrap&lt;A extends Annotation&gt; implement @@ -109,7 +105,7 @@ public abstract class AbstractLifecycleBootstrap&lt;A extends Annotation&gt; implement
109 } 105 }
110 } 106 }
111 107
112 - public void loadTempContexts(@Observes final AfterBeanDiscovery event) { 108 + /*public void loadTempContexts(@Observes final AfterBeanDiscovery event) {
113 // Caso este bootstrap rode antes do CoreBootstrap. Não há problemas em chamar este método várias vezes, ele 109 // Caso este bootstrap rode antes do CoreBootstrap. Não há problemas em chamar este método várias vezes, ele
114 // ignora chamadas adicionais. 110 // ignora chamadas adicionais.
115 ContextManager.initialize(event); 111 ContextManager.initialize(event);
@@ -119,7 +115,7 @@ public abstract class AbstractLifecycleBootstrap&lt;A extends Annotation&gt; implement @@ -119,7 +115,7 @@ public abstract class AbstractLifecycleBootstrap&lt;A extends Annotation&gt; implement
119 ContextManager.add(new ThreadLocalContext(SessionScoped.class), event); 115 ContextManager.add(new ThreadLocalContext(SessionScoped.class), event);
120 ContextManager.add(new ThreadLocalContext(ConversationScoped.class), event); 116 ContextManager.add(new ThreadLocalContext(ConversationScoped.class), event);
121 ContextManager.add(new ThreadLocalContext(RequestScoped.class), event); 117 ContextManager.add(new ThreadLocalContext(RequestScoped.class), event);
122 - } 118 + }*/
123 119
124 @SuppressWarnings({ "unchecked", "rawtypes" }) 120 @SuppressWarnings({ "unchecked", "rawtypes" })
125 protected synchronized void proccessEvent() { 121 protected synchronized void proccessEvent() {
@@ -127,12 +123,15 @@ public abstract class AbstractLifecycleBootstrap&lt;A extends Annotation&gt; implement @@ -127,12 +123,15 @@ public abstract class AbstractLifecycleBootstrap&lt;A extends Annotation&gt; implement
127 123
128 Collections.sort(processors); 124 Collections.sort(processors);
129 Exception failure = null; 125 Exception failure = null;
  126 +
  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 - ContextManager.activate(ThreadLocalContext.class, ViewScoped.class);  
133 - ContextManager.activate(ThreadLocalContext.class, SessionScoped.class);  
134 - ContextManager.activate(ThreadLocalContext.class, ConversationScoped.class);  
135 - ContextManager.activate(ThreadLocalContext.class, RequestScoped.class); 132 + tempRequestContext.activate();
  133 + tempSessionContext.activate();
  134 + tempViewContext.activate();
136 135
137 registered = true; 136 registered = true;
138 } 137 }
@@ -155,10 +154,9 @@ public abstract class AbstractLifecycleBootstrap&lt;A extends Annotation&gt; implement @@ -155,10 +154,9 @@ public abstract class AbstractLifecycleBootstrap&lt;A extends Annotation&gt; implement
155 } 154 }
156 155
157 if (processors.isEmpty()) { 156 if (processors.isEmpty()) {
158 - ContextManager.deactivate(ThreadLocalContext.class, ViewScoped.class);  
159 - ContextManager.deactivate(ThreadLocalContext.class, SessionScoped.class);  
160 - ContextManager.deactivate(ThreadLocalContext.class, ConversationScoped.class);  
161 - ContextManager.deactivate(ThreadLocalContext.class, RequestScoped.class); 157 + tempRequestContext.deactivate();
  158 + tempSessionContext.deactivate();
  159 + tempViewContext.deactivate();
162 } 160 }
163 161
164 if (failure != null) { 162 if (failure != null) {
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/CoreBootstrap.java
@@ -39,7 +39,6 @@ package br.gov.frameworkdemoiselle.internal.bootstrap; @@ -39,7 +39,6 @@ package br.gov.frameworkdemoiselle.internal.bootstrap;
39 import java.util.Locale; 39 import java.util.Locale;
40 40
41 import javax.enterprise.event.Observes; 41 import javax.enterprise.event.Observes;
42 -import javax.enterprise.inject.spi.AfterBeanDiscovery;  
43 import javax.enterprise.inject.spi.AfterDeploymentValidation; 42 import javax.enterprise.inject.spi.AfterDeploymentValidation;
44 import javax.enterprise.inject.spi.BeanManager; 43 import javax.enterprise.inject.spi.BeanManager;
45 import javax.enterprise.inject.spi.BeforeBeanDiscovery; 44 import javax.enterprise.inject.spi.BeforeBeanDiscovery;
@@ -48,9 +47,6 @@ import javax.enterprise.inject.spi.Extension; @@ -48,9 +47,6 @@ import javax.enterprise.inject.spi.Extension;
48 47
49 import org.slf4j.Logger; 48 import org.slf4j.Logger;
50 49
51 -import br.gov.frameworkdemoiselle.annotation.StaticScoped;  
52 -import br.gov.frameworkdemoiselle.internal.context.ContextManager;  
53 -import br.gov.frameworkdemoiselle.internal.context.StaticContext;  
54 import br.gov.frameworkdemoiselle.internal.producer.LoggerProducer; 50 import br.gov.frameworkdemoiselle.internal.producer.LoggerProducer;
55 import br.gov.frameworkdemoiselle.util.Beans; 51 import br.gov.frameworkdemoiselle.util.Beans;
56 import br.gov.frameworkdemoiselle.util.ResourceBundle; 52 import br.gov.frameworkdemoiselle.util.ResourceBundle;
@@ -60,7 +56,7 @@ public class CoreBootstrap implements Extension { @@ -60,7 +56,7 @@ public class CoreBootstrap implements Extension {
60 private Logger logger; 56 private Logger logger;
61 57
62 private transient ResourceBundle bundle; 58 private transient ResourceBundle bundle;
63 - 59 +
64 private Logger getLogger() { 60 private Logger getLogger() {
65 if (this.logger == null) { 61 if (this.logger == null) {
66 this.logger = LoggerProducer.create(CoreBootstrap.class); 62 this.logger = LoggerProducer.create(CoreBootstrap.class);
@@ -83,18 +79,7 @@ public class CoreBootstrap implements Extension { @@ -83,18 +79,7 @@ public class CoreBootstrap implements Extension {
83 Beans.setBeanManager(beanManager); 79 Beans.setBeanManager(beanManager);
84 getLogger().info(getBundle().getString("setting-up-bean-manager", Beans.class.getCanonicalName())); 80 getLogger().info(getBundle().getString("setting-up-bean-manager", Beans.class.getCanonicalName()));
85 } 81 }
86 -  
87 - public void initializeCustomContexts(@Observes final AfterBeanDiscovery event) {  
88 - // StaticContext já é criado e gerenciado por esta chamada  
89 - ContextManager.initialize(event);  
90 -  
91 - ContextManager.activate(StaticContext.class, StaticScoped.class);  
92 - }  
93 -  
94 - public void terminateCustomContexts(@Observes final BeforeShutdown event) {  
95 - ContextManager.shutdown();  
96 - }  
97 - 82 +
98 public void takeOff(@Observes final AfterDeploymentValidation event) { 83 public void takeOff(@Observes final AfterDeploymentValidation event) {
99 getLogger().info(getBundle().getString("taking-off")); 84 getLogger().info(getBundle().getString("taking-off"));
100 } 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/bootstrap/ManagementBootstrap.java
@@ -44,7 +44,6 @@ import java.util.Locale; @@ -44,7 +44,6 @@ import java.util.Locale;
44 import java.util.Set; 44 import java.util.Set;
45 45
46 import javax.enterprise.event.Observes; 46 import javax.enterprise.event.Observes;
47 -import javax.enterprise.inject.spi.AfterBeanDiscovery;  
48 import javax.enterprise.inject.spi.AfterDeploymentValidation; 47 import javax.enterprise.inject.spi.AfterDeploymentValidation;
49 import javax.enterprise.inject.spi.AnnotatedType; 48 import javax.enterprise.inject.spi.AnnotatedType;
50 import javax.enterprise.inject.spi.Bean; 49 import javax.enterprise.inject.spi.Bean;
@@ -53,8 +52,6 @@ import javax.enterprise.inject.spi.Extension; @@ -53,8 +52,6 @@ import javax.enterprise.inject.spi.Extension;
53 import javax.enterprise.inject.spi.ProcessAnnotatedType; 52 import javax.enterprise.inject.spi.ProcessAnnotatedType;
54 53
55 import br.gov.frameworkdemoiselle.DemoiselleException; 54 import br.gov.frameworkdemoiselle.DemoiselleException;
56 -import br.gov.frameworkdemoiselle.internal.context.ContextManager;  
57 -import br.gov.frameworkdemoiselle.internal.context.ManagedContext;  
58 import br.gov.frameworkdemoiselle.internal.implementation.ManagedType; 55 import br.gov.frameworkdemoiselle.internal.implementation.ManagedType;
59 import br.gov.frameworkdemoiselle.internal.implementation.Management; 56 import br.gov.frameworkdemoiselle.internal.implementation.Management;
60 import br.gov.frameworkdemoiselle.lifecycle.AfterShutdownProccess; 57 import br.gov.frameworkdemoiselle.lifecycle.AfterShutdownProccess;
@@ -76,10 +73,10 @@ public class ManagementBootstrap implements Extension { @@ -76,10 +73,10 @@ public class ManagementBootstrap implements Extension {
76 } 73 }
77 } 74 }
78 75
79 - public void activateContexts(@Observes final AfterBeanDiscovery event) { 76 + /*public void activateContexts(@Observes final AfterBeanDiscovery event) {
80 ContextManager.initialize(event); 77 ContextManager.initialize(event);
81 ContextManager.add(new ManagedContext(), event); 78 ContextManager.add(new ManagedContext(), event);
82 - } 79 + }*/
83 80
84 @SuppressWarnings("unchecked") 81 @SuppressWarnings("unchecked")
85 public void registerAvailableManagedTypes(@Observes final AfterDeploymentValidation event, BeanManager beanManager) { 82 public void registerAvailableManagedTypes(@Observes final AfterDeploymentValidation event, BeanManager beanManager) {
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/AbstractCustomContext.java
@@ -39,20 +39,34 @@ package br.gov.frameworkdemoiselle.internal.context; @@ -39,20 +39,34 @@ 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;
  46 +import javax.enterprise.context.spi.Context;
45 import javax.enterprise.context.spi.Contextual; 47 import javax.enterprise.context.spi.Contextual;
46 import javax.enterprise.context.spi.CreationalContext; 48 import javax.enterprise.context.spi.CreationalContext;
47 import javax.enterprise.inject.spi.Bean; 49 import javax.enterprise.inject.spi.Bean;
  50 +import javax.enterprise.inject.spi.BeanManager;
  51 +
  52 +import org.slf4j.Logger;
  53 +
  54 +import br.gov.frameworkdemoiselle.context.CustomContext;
  55 +import br.gov.frameworkdemoiselle.internal.producer.LoggerProducer;
  56 +import br.gov.frameworkdemoiselle.util.Beans;
  57 +import br.gov.frameworkdemoiselle.util.ResourceBundle;
48 58
49 public abstract class AbstractCustomContext implements CustomContext { 59 public abstract class AbstractCustomContext implements CustomContext {
50 60
51 private boolean active; 61 private boolean active;
52 62
53 private final Class<? extends Annotation> scope; 63 private final Class<? extends Annotation> scope;
  64 +
  65 + private Logger logger;
  66 +
  67 + private transient ResourceBundle bundle;
54 68
55 - public AbstractCustomContext(final Class<? extends Annotation> scope) { 69 + AbstractCustomContext(final Class<? extends Annotation> scope) {
56 this.scope = scope; 70 this.scope = scope;
57 this.active = false; 71 this.active = false;
58 } 72 }
@@ -97,14 +111,44 @@ public abstract class AbstractCustomContext implements CustomContext { @@ -97,14 +111,44 @@ public abstract class AbstractCustomContext implements CustomContext {
97 return this.active; 111 return this.active;
98 } 112 }
99 113
100 - public void setActive(boolean active) {  
101 - if (!active && this.active) {  
102 - // Limpando contexto 114 + @Override
  115 + public boolean activate() {
  116 + if (!this.active){
  117 + BeanManager beanManager = Beans.getBeanManager();
  118 + if (beanManager!=null){
  119 + try{
  120 + Context ctx = beanManager.getContext(this.getScope());
  121 + if (ctx!=null){
  122 + getLogger().debug( getBundle().getString("custom-context-already-activated" , this.getClass().getCanonicalName() , this.getScope().getSimpleName() , ctx.getClass().getCanonicalName() ) );
  123 + }
  124 + }
  125 + catch(ContextNotActiveException ce){
  126 + this.active = true;
  127 + getLogger().debug( getBundle().getString("custom-context-was-activated" , this.getClass().getCanonicalName() , this.getScope().getSimpleName() ) );
  128 + }
  129 + }
  130 + else{
  131 + this.active = true;
  132 + getLogger().debug( getBundle().getString("custom-context-was-activated" , this.getClass().getCanonicalName() , this.getScope().getSimpleName() ) );
  133 + }
  134 + }
  135 +
  136 + return this.active;
  137 + }
  138 +
  139 + @Override
  140 + public void deactivate(){
  141 + if (this.active){
103 if (isStoreInitialized()){ 142 if (isStoreInitialized()){
104 getStore().clear(); 143 getStore().clear();
105 } 144 }
  145 +
  146 + this.active = false;
  147 +
  148 + Logger logger = getLogger();
  149 + ResourceBundle bundle = getBundle();
  150 + logger.debug( bundle.getString("custom-context-was-deactivated" , this.getClass().getCanonicalName() , this.getScope().getSimpleName() ) );
106 } 151 }
107 - this.active = active;  
108 } 152 }
109 153
110 @Override 154 @Override
@@ -115,6 +159,22 @@ public abstract class AbstractCustomContext implements CustomContext { @@ -115,6 +159,22 @@ public abstract class AbstractCustomContext implements CustomContext {
115 protected static Store createStore() { 159 protected static Store createStore() {
116 return new Store(); 160 return new Store();
117 } 161 }
  162 +
  163 + private ResourceBundle getBundle(){
  164 + if (bundle==null){
  165 + bundle = new ResourceBundle("demoiselle-core-bundle", Locale.getDefault());
  166 + }
  167 +
  168 + return bundle;
  169 + }
  170 +
  171 + private Logger getLogger(){
  172 + if (logger==null){
  173 + logger = LoggerProducer.create(this.getClass());
  174 + }
  175 +
  176 + return logger;
  177 + }
118 178
119 static class Store { 179 static class Store {
120 180
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/AbstractThreadLocalContext.java 0 → 100644
@@ -0,0 +1,81 @@ @@ -0,0 +1,81 @@
  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 + * This context keeps a separated store for beans for each running thread. It is intended
  55 + * to keep beans of short lived scopes like the Request scope, on environments that lack
  56 + * those scopes by default.
  57 + *
  58 + * @author serpro
  59 + */
  60 +public abstract class AbstractThreadLocalContext extends AbstractCustomContext {
  61 +
  62 + private final ThreadLocal<Store> threadLocal = new ThreadLocal<Store>();
  63 +
  64 + AbstractThreadLocalContext(final Class<? extends Annotation> scope) {
  65 + super(scope);
  66 + }
  67 +
  68 + @Override
  69 + protected boolean isStoreInitialized() {
  70 + return threadLocal.get()!=null;
  71 + }
  72 +
  73 + @Override
  74 + protected Store getStore() {
  75 + if (this.threadLocal.get() == null) {
  76 + this.threadLocal.set(createStore());
  77 + }
  78 +
  79 + return this.threadLocal.get();
  80 + }
  81 +}
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/ContextManager.java
@@ -1,360 +0,0 @@ @@ -1,360 +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 java.lang.annotation.Annotation;  
40 -import java.util.ArrayList;  
41 -import java.util.Collections;  
42 -import java.util.HashMap;  
43 -import java.util.List;  
44 -import java.util.Locale;  
45 -import java.util.Map;  
46 -  
47 -import javax.enterprise.context.ContextNotActiveException;  
48 -import javax.enterprise.context.spi.Context;  
49 -import javax.enterprise.inject.spi.AfterBeanDiscovery;  
50 -import javax.enterprise.inject.spi.BeanManager;  
51 -  
52 -import org.slf4j.Logger;  
53 -  
54 -import br.gov.frameworkdemoiselle.DemoiselleException;  
55 -import br.gov.frameworkdemoiselle.annotation.StaticScoped;  
56 -import br.gov.frameworkdemoiselle.internal.producer.LoggerProducer;  
57 -import br.gov.frameworkdemoiselle.util.Beans;  
58 -import br.gov.frameworkdemoiselle.util.ResourceBundle;  
59 -  
60 -/**  
61 - * <p>  
62 - * Manage custom contexts relevant to Demoiselle operations.  
63 - * </p>  
64 - * <p>  
65 - * When starting, the ContextManager must be initialized by calling {@link #initialize(AfterBeanDiscovery event)} inside  
66 - * any methods observing the {@link AfterBeanDiscovery} event. Upon initialization a {@link StaticContext} will be  
67 - * created to handle {@link StaticScoped} beans (but not activated, you must call  
68 - * {@link #activate(Class customContextClass, Class scope)} to activate this context).  
69 - * </p>  
70 - * <p>  
71 - * If an extension wants to manage another custom context, it must first call  
72 - * {@link #add(CustomContext context, AfterBeanDiscovery event)} to add it's context to the list of managed contexts and  
73 - * then call {@link #activate(Class customContextClass, Class scope)} whenever it wants to activate this added context  
74 - * (contexts added through the {@link #add(CustomContext context, AfterBeanDiscovery event)} method are also not  
75 - * activated upon adding).  
76 - * </p>  
77 - *  
78 - * @author SERPRO  
79 - */  
80 -public final class ContextManager {  
81 -  
82 - private static final Map<ClassLoader, List<CustomContextCounter>> contextsCache = Collections  
83 - .synchronizedMap(new HashMap<ClassLoader, List<CustomContextCounter>>());  
84 -  
85 - private static final Map<ClassLoader, Boolean> initializedCache = Collections  
86 - .synchronizedMap(new HashMap<ClassLoader, Boolean>());  
87 -  
88 - private ContextManager() {  
89 - }  
90 -  
91 - private synchronized static List<CustomContextCounter> getContexts() {  
92 - List<CustomContextCounter> contexts = contextsCache.get(getCurrentClassLoader());  
93 -  
94 - if (contexts == null) {  
95 - contexts = Collections.synchronizedList(new ArrayList<CustomContextCounter>());  
96 - contextsCache.put(getCurrentClassLoader(), contexts);  
97 - }  
98 -  
99 - return contexts;  
100 - }  
101 -  
102 - private synchronized static boolean isInitialized() {  
103 - Boolean initialized = initializedCache.get(getCurrentClassLoader());  
104 -  
105 - if (initialized == null) {  
106 - initialized = false;  
107 - initializedCache.put(getCurrentClassLoader(), initialized);  
108 - }  
109 -  
110 - return initialized;  
111 - }  
112 -  
113 - private static void setInitialized(boolean initialized) {  
114 - initializedCache.put(getCurrentClassLoader(), initialized);  
115 - }  
116 -  
117 - private static ClassLoader getCurrentClassLoader() {  
118 - return Thread.currentThread().getContextClassLoader();  
119 - }  
120 -  
121 - /**  
122 - * <p>  
123 - * Initializes this manager and adds the {@link StaticContext} context to the list of managed contexts. Other  
124 - * contexts must be added before they can be activated.  
125 - * </p>  
126 - * <p>  
127 - * It's OK to call this method multiple times, it will be initialized only once.  
128 - * </p>  
129 - *  
130 - * @param event  
131 - * The CDI event indicating all beans have been discovered.  
132 - */  
133 - public static void initialize(AfterBeanDiscovery event) {  
134 - if (isInitialized()) {  
135 - return;  
136 - }  
137 -  
138 - add(new StaticContext(), event);  
139 - setInitialized(true);  
140 - }  
141 -  
142 - /**  
143 - * <p>  
144 - * Adds a context to the list of managed contexts.  
145 - * </p>  
146 - * <p>  
147 - * A context added through this method will be deactivated before management can start. Only after calling  
148 - * {@link #activate(Class customContextClass, Class scope)} the context will be activated.  
149 - * </p>  
150 - * <p>  
151 - * Trying to add a context already managed will result in this method call being ignored.  
152 - * </p>  
153 - *  
154 - * @param context  
155 - * The context to be added  
156 - * @param event  
157 - * The CDI event indicating all beans have been discovered.  
158 - */  
159 - public static void add(CustomContext context, AfterBeanDiscovery event) {  
160 - for (CustomContextCounter contextCounter : getContexts()) {  
161 - if (contextCounter.isSame(context.getClass(), context.getScope())) {  
162 -  
163 - ContextManager.getLogger().trace(  
164 - ContextManager.getBundle().getString("bootstrap-context-already-managed",  
165 - context.getClass().getCanonicalName(), context.getScope().getCanonicalName()));  
166 -  
167 - return;  
168 - }  
169 - }  
170 -  
171 - ContextManager.getLogger().trace(  
172 - ContextManager.getBundle().getString("bootstrap-context-added", context.getClass().getCanonicalName(),  
173 - context.getScope().getCanonicalName()));  
174 -  
175 - context.setActive(false);  
176 - event.addContext(context);  
177 - getContexts().add(new CustomContextCounter(context));  
178 - }  
179 -  
180 - /**  
181 - * <p>  
182 - * Activates a managed context.  
183 - * </p>  
184 - * <p>  
185 - * To be activated, a context must fulfill the following requisites:  
186 - * <ul>  
187 - * <li>Must be managed by this class (be of type {@link StaticScoped} or be added with  
188 - * {@link #add(CustomContext context, AfterBeanDiscovery event)})</li>  
189 - * <li>Must be of a scope not already attached to another active context</li>  
190 - * </ul>  
191 - * </p>  
192 - *  
193 - * @param customContextClass  
194 - * Type of context to activate  
195 - * @param scope  
196 - * The scope to activate this context for  
197 - * @return <code>true</code> if there is a managed context of the provided type and scope and no other context is  
198 - * active for the provided scope, <code>false</code> if there is a managed context of the provided type and  
199 - * scope but another context is active for the provided scope.  
200 - * @throws DemoiselleException  
201 - * if there is no managed context of the provided type and scope.  
202 - */  
203 - public static synchronized void activate(Class<? extends CustomContext> customContextClass,  
204 - Class<? extends Annotation> scope) {  
205 - if (!isInitialized()) {  
206 - throw new DemoiselleException(getBundle().getString("custom-context-manager-not-initialized"));  
207 - }  
208 -  
209 - for (CustomContextCounter context : getContexts()) {  
210 - if (context.isSame(customContextClass, scope)) {  
211 - context.activate();  
212 - return;  
213 - }  
214 - }  
215 -  
216 - throw new DemoiselleException(getBundle().getString("custom-context-not-found",  
217 - customContextClass.getCanonicalName(), scope.getSimpleName()));  
218 - }  
219 -  
220 - /**  
221 - * <p>  
222 - * Deactivates a managed context.  
223 - * </p>  
224 - * <p>  
225 - * To be deactivated, a context must fulfill the following requisites:  
226 - * <ul>  
227 - * <li>Must be managed by this class (be of type {@link StaticScoped} or be added with  
228 - * {@link #add(CustomContext context, AfterBeanDiscovery event)})</li>  
229 - * <li>Must have been activated by a previous call to {@link #activate(Class customContextClass, Class scope)}</li>  
230 - * <li>This previous call must have returned <code>true</code>.  
231 - * </ul>  
232 - * </p>  
233 - *  
234 - * @param customContextClass  
235 - * Type of context to deactivate  
236 - * @param scope  
237 - * The scope the context controled when it was active  
238 - * @return <code>true</code> if there was an active context of this type and scope and it was activated by a  
239 - * previous call to {@link #activate(Class customContextClass, Class scope)}  
240 - * @throws DemoiselleException  
241 - * if there is no managed context of the provided type and scope.  
242 - */  
243 - public static synchronized void deactivate(Class<? extends CustomContext> customContextClass,  
244 - Class<? extends Annotation> scope) {  
245 - if (!isInitialized()) {  
246 - throw new DemoiselleException(getBundle().getString("custom-context-manager-not-initialized"));  
247 - }  
248 -  
249 - for (CustomContextCounter context : getContexts()) {  
250 - if (context.isSame(customContextClass, scope)) {  
251 - context.deactivate();  
252 - return;  
253 - }  
254 - }  
255 -  
256 - throw new DemoiselleException(getBundle().getString("custom-context-not-found",  
257 - customContextClass.getCanonicalName(), scope.getSimpleName()));  
258 - }  
259 -  
260 - /**  
261 - * <p>  
262 - * This method should be called when the application is shutting down.  
263 - * </p>  
264 - */  
265 - public static synchronized void shutdown() {  
266 - for (CustomContextCounter context : getContexts()) {  
267 - context.shutdown();  
268 - }  
269 -  
270 - getContexts().clear();  
271 - setInitialized(false);  
272 - }  
273 -  
274 - static Logger getLogger() {  
275 - return LoggerProducer.create(ContextManager.class);  
276 - }  
277 -  
278 - static ResourceBundle getBundle() {  
279 - return new ResourceBundle("demoiselle-core-bundle", Locale.getDefault());  
280 - }  
281 -}  
282 -  
283 -/**  
284 - * Class that counts how many attemps to activate and deactivate this context received, avoiding cases where one client  
285 - * activates given context and another one deactivates it, leaving the first client with no active context before  
286 - * completion.  
287 - *  
288 - * @author serpro  
289 - */  
290 -class CustomContextCounter {  
291 -  
292 - private CustomContext context;  
293 -  
294 - private int activationCounter = 0;  
295 -  
296 - public CustomContextCounter(CustomContext customContext) {  
297 - this.context = customContext;  
298 - }  
299 -  
300 - public boolean isSame(Class<? extends CustomContext> customContextClass, Class<? extends Annotation> scope) {  
301 - if (context.getClass().getCanonicalName().equals(customContextClass.getCanonicalName())  
302 - && context.getScope().equals(scope)) {  
303 - return true;  
304 - }  
305 -  
306 - return false;  
307 - }  
308 -  
309 - public CustomContext getInternalContext() {  
310 - return this.context;  
311 - }  
312 -  
313 - public void setInternalContext(CustomContext context) {  
314 - this.context = context;  
315 - }  
316 -  
317 - public synchronized void activate() {  
318 - try {  
319 - BeanManager beanManager = Beans.getReference(BeanManager.class);  
320 - Context c = beanManager.getContext(context.getScope());  
321 -  
322 - if (c == context) {  
323 - activationCounter++;  
324 - } else {  
325 - ContextManager.getLogger().trace(  
326 - ContextManager.getBundle().getString("custom-context-already-activated",  
327 - context.getClass().getCanonicalName(), c.getScope().getCanonicalName(),  
328 - c.getClass().getCanonicalName()));  
329 - }  
330 - } catch (ContextNotActiveException ce) {  
331 - context.setActive(true);  
332 - activationCounter++;  
333 - ContextManager.getLogger().trace(  
334 - ContextManager.getBundle().getString("custom-context-was-activated",  
335 - context.getClass().getCanonicalName(), context.getScope().getCanonicalName()));  
336 - }  
337 - }  
338 -  
339 - public synchronized void deactivate() {  
340 - try {  
341 - Context c = Beans.getBeanManager().getContext(context.getScope());  
342 - if (c == context) {  
343 - activationCounter--;  
344 - if (activationCounter == 0) {  
345 - context.setActive(false);  
346 - ContextManager.getLogger().trace(  
347 - ContextManager.getBundle().getString("custom-context-was-deactivated",  
348 - context.getClass().getCanonicalName(), context.getScope().getCanonicalName()));  
349 - }  
350 - }  
351 - } catch (ContextNotActiveException ce) {  
352 - }  
353 - }  
354 -  
355 - public synchronized void shutdown() {  
356 - context.setActive(false);  
357 - context = null;  
358 - activationCounter = 0;  
359 - }  
360 -}  
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/CustomContext.java
@@ -1,45 +0,0 @@ @@ -1,45 +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 -public interface CustomContext extends Context {  
42 -  
43 - void setActive(boolean active);  
44 -  
45 -}  
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/ManagedContext.java
@@ -1,58 +0,0 @@ @@ -1,58 +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.RequestScoped;  
40 -  
41 -import br.gov.frameworkdemoiselle.stereotype.ManagementController;  
42 -  
43 -/**  
44 - * Context that stores {@link RequestScoped} beans during client calls to {@link ManagementController} classes. This  
45 - * context is only activated when no other context is active for {@link RequestScoped}.  
46 - *  
47 - * @author SERPRO  
48 - */  
49 -public class ManagedContext extends ThreadLocalContext {  
50 -  
51 - /**  
52 - * Constructs a new context.  
53 - */  
54 - public ManagedContext() {  
55 - super(RequestScoped.class);  
56 - }  
57 -  
58 -}  
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/RequestContextImpl.java 0 → 100644
@@ -0,0 +1,71 @@ @@ -0,0 +1,71 @@
  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 javax.enterprise.context.RequestScoped;
  52 +import javax.enterprise.inject.Alternative;
  53 +
  54 +import br.gov.frameworkdemoiselle.annotation.Priority;
  55 +import br.gov.frameworkdemoiselle.context.RequestContext;
  56 +
  57 +/**
  58 + * Custom request context that stores beans in a thread local store.
  59 + *
  60 + * @author serpro
  61 + *
  62 + */
  63 +@Priority(Priority.MIN_PRIORITY)
  64 +@Alternative
  65 +public class RequestContextImpl extends AbstractThreadLocalContext implements RequestContext {
  66 +
  67 + public RequestContextImpl() {
  68 + super(RequestScoped.class);
  69 + }
  70 +
  71 +}
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/SessionContextImpl.java 0 → 100644
@@ -0,0 +1,71 @@ @@ -0,0 +1,71 @@
  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 javax.enterprise.context.SessionScoped;
  52 +import javax.enterprise.inject.Alternative;
  53 +
  54 +import br.gov.frameworkdemoiselle.annotation.Priority;
  55 +import br.gov.frameworkdemoiselle.context.SessionContext;
  56 +
  57 +
  58 +/**
  59 + *
  60 + * @author serpro
  61 + *
  62 + */
  63 +@Priority(Priority.MIN_PRIORITY)
  64 +@Alternative
  65 +public class SessionContextImpl extends AbstractStaticContext implements SessionContext {
  66 +
  67 + public SessionContextImpl() {
  68 + super(SessionScoped.class);
  69 + }
  70 +
  71 +}
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/StaticContext.java
@@ -1,58 +0,0 @@ @@ -1,58 +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 br.gov.frameworkdemoiselle.annotation.StaticScoped;  
40 -  
41 -public class StaticContext extends AbstractCustomContext {  
42 -  
43 - private final static Store store = createStore();  
44 -  
45 - public StaticContext() {  
46 - super(StaticScoped.class);  
47 - }  
48 -  
49 - @Override  
50 - protected Store getStore() {  
51 - return store;  
52 - }  
53 -  
54 - @Override  
55 - protected boolean isStoreInitialized() {  
56 - return store!=null;  
57 - }  
58 -}  
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/context/StaticContextImpl.java 0 → 100644
@@ -0,0 +1,64 @@ @@ -0,0 +1,64 @@
  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 javax.enterprise.inject.Alternative;
  52 +
  53 +import br.gov.frameworkdemoiselle.annotation.Priority;
  54 +import br.gov.frameworkdemoiselle.annotation.StaticScoped;
  55 +import br.gov.frameworkdemoiselle.context.StaticContext;
  56 +
  57 +@Priority(Priority.MIN_PRIORITY)
  58 +@Alternative
  59 +public class StaticContextImpl extends AbstractStaticContext implements StaticContext {
  60 +
  61 + public StaticContextImpl() {
  62 + super(StaticScoped.class);
  63 + }
  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 0 → 100644
@@ -0,0 +1,65 @@ @@ -0,0 +1,65 @@
  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 javax.enterprise.inject.Alternative;
  52 +
  53 +import br.gov.frameworkdemoiselle.annotation.Priority;
  54 +import br.gov.frameworkdemoiselle.annotation.ViewScoped;
  55 +import br.gov.frameworkdemoiselle.context.ViewContext;
  56 +
  57 +@Priority(Priority.MIN_PRIORITY)
  58 +@Alternative
  59 +public class ThreadLocalViewContextImpl extends AbstractThreadLocalContext implements ViewContext {
  60 +
  61 + public ThreadLocalViewContextImpl() {
  62 + super(ViewScoped.class);
  63 + }
  64 +
  65 +}
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/implementation/Management.java
@@ -44,7 +44,6 @@ import java.util.List; @@ -44,7 +44,6 @@ import java.util.List;
44 import java.util.Set; 44 import java.util.Set;
45 45
46 import javax.enterprise.context.ApplicationScoped; 46 import javax.enterprise.context.ApplicationScoped;
47 -import javax.enterprise.context.RequestScoped;  
48 import javax.inject.Inject; 47 import javax.inject.Inject;
49 import javax.validation.ConstraintViolation; 48 import javax.validation.ConstraintViolation;
50 import javax.validation.ConstraintViolationException; 49 import javax.validation.ConstraintViolationException;
@@ -56,8 +55,10 @@ import org.slf4j.Logger; @@ -56,8 +55,10 @@ import org.slf4j.Logger;
56 55
57 import br.gov.frameworkdemoiselle.annotation.ManagedProperty; 56 import br.gov.frameworkdemoiselle.annotation.ManagedProperty;
58 import br.gov.frameworkdemoiselle.annotation.Name; 57 import br.gov.frameworkdemoiselle.annotation.Name;
59 -import br.gov.frameworkdemoiselle.internal.context.ContextManager;  
60 -import br.gov.frameworkdemoiselle.internal.context.ManagedContext; 58 +import br.gov.frameworkdemoiselle.context.RequestContext;
  59 +import br.gov.frameworkdemoiselle.context.SessionContext;
  60 +import br.gov.frameworkdemoiselle.context.ViewContext;
  61 +import br.gov.frameworkdemoiselle.internal.implementation.ManagedType;
61 import br.gov.frameworkdemoiselle.internal.implementation.ManagedType.MethodDetail; 62 import br.gov.frameworkdemoiselle.internal.implementation.ManagedType.MethodDetail;
62 import br.gov.frameworkdemoiselle.management.AttributeChangeNotification; 63 import br.gov.frameworkdemoiselle.management.AttributeChangeNotification;
63 import br.gov.frameworkdemoiselle.management.ManagedAttributeNotFoundException; 64 import br.gov.frameworkdemoiselle.management.ManagedAttributeNotFoundException;
@@ -301,36 +302,72 @@ public class Management implements Serializable { @@ -301,36 +302,72 @@ public class Management implements Serializable {
301 } 302 }
302 303
303 private void activateContexts(Class<?> managedType) { 304 private void activateContexts(Class<?> managedType) {
304 - logger.debug(bundle.getString("management-debug-starting-custom-context",  
305 - ManagedContext.class.getCanonicalName(), managedType.getCanonicalName())); 305 +
  306 + RequestContext requestContext = Beans.getReference(RequestContext.class);
  307 + ViewContext viewContext = Beans.getReference(ViewContext.class);
  308 + SessionContext sessionContext = Beans.getReference(SessionContext.class);
  309 +
  310 + if (!requestContext.isActive()){
  311 + logger.debug(bundle.getString("management-debug-starting-custom-context",
  312 + requestContext.getClass().getCanonicalName(), managedType.getCanonicalName()));
  313 +
  314 + requestContext.activate();
  315 + }
  316 +
  317 + if (!viewContext.isActive()){
  318 + logger.debug(bundle.getString("management-debug-starting-custom-context",
  319 + viewContext.getClass().getCanonicalName(), managedType.getCanonicalName()));
  320 +
  321 + viewContext.activate();
  322 + }
306 323
307 - ContextManager.activate(ManagedContext.class, RequestScoped.class); 324 + if (!sessionContext.isActive()){
  325 + logger.debug(bundle.getString("management-debug-starting-custom-context",
  326 + sessionContext.getClass().getCanonicalName(), managedType.getCanonicalName()));
  327 +
  328 + sessionContext.activate();
  329 + }
308 } 330 }
309 331
310 private void deactivateContexts(Class<?> managedType) { 332 private void deactivateContexts(Class<?> managedType) {
311 - logger.debug(bundle.getString("management-debug-stoping-custom-context",  
312 - ManagedContext.class.getCanonicalName(), managedType.getCanonicalName())); 333 + RequestContext requestContext = Beans.getReference(RequestContext.class);
  334 + ViewContext viewContext = Beans.getReference(ViewContext.class);
  335 + SessionContext sessionContext = Beans.getReference(SessionContext.class);
  336 +
  337 + if (requestContext.isActive()){
  338 + logger.debug(bundle.getString("management-debug-stoping-custom-context",
  339 + requestContext.getClass().getCanonicalName(), managedType.getCanonicalName()));
  340 +
  341 + requestContext.deactivate();
  342 + }
  343 +
  344 + if (!viewContext.isActive()){
  345 + logger.debug(bundle.getString("management-debug-stoping-custom-context",
  346 + viewContext.getClass().getCanonicalName(), managedType.getCanonicalName()));
  347 +
  348 + viewContext.deactivate();
  349 + }
313 350
314 - ContextManager.deactivate(ManagedContext.class, RequestScoped.class); 351 + if (!sessionContext.isActive()){
  352 + logger.debug(bundle.getString("management-debug-stoping-custom-context",
  353 + sessionContext.getClass().getCanonicalName(), managedType.getCanonicalName()));
  354 +
  355 + sessionContext.deactivate();
  356 + }
315 } 357 }
316 358
317 public void shutdown(Collection<Class<? extends ManagementExtension>> monitoringExtensions) { 359 public void shutdown(Collection<Class<? extends ManagementExtension>> monitoringExtensions) {
318 -  
319 for (Class<? extends ManagementExtension> monitoringExtensionClass : monitoringExtensions) { 360 for (Class<? extends ManagementExtension> monitoringExtensionClass : monitoringExtensions) {
320 361
321 ManagementExtension monitoringExtension = Beans.getReference(monitoringExtensionClass); 362 ManagementExtension monitoringExtension = Beans.getReference(monitoringExtensionClass);
322 -  
323 monitoringExtension.shutdown(this.getManagedTypes()); 363 monitoringExtension.shutdown(this.getManagedTypes());
324 -  
325 logger.debug(bundle.getString("management-debug-removing-management-extension", monitoringExtension 364 logger.debug(bundle.getString("management-debug-removing-management-extension", monitoringExtension
326 .getClass().getCanonicalName())); 365 .getClass().getCanonicalName()));
327 366
328 } 367 }
329 -  
330 } 368 }
331 369
332 public void initialize(Collection<Class<? extends ManagementExtension>> monitoringExtensions) { 370 public void initialize(Collection<Class<? extends ManagementExtension>> monitoringExtensions) {
333 -  
334 for (Class<? extends ManagementExtension> monitoringExtensionClass : monitoringExtensions) { 371 for (Class<? extends ManagementExtension> monitoringExtensionClass : monitoringExtensions) {
335 ManagementExtension monitoringExtension = Beans.getReference(monitoringExtensionClass); 372 ManagementExtension monitoringExtension = Beans.getReference(monitoringExtensionClass);
336 373
@@ -339,7 +376,6 @@ public class Management implements Serializable { @@ -339,7 +376,6 @@ public class Management implements Serializable {
339 376
340 monitoringExtension.initialize(this.getManagedTypes()); 377 monitoringExtension.initialize(this.getManagedTypes());
341 } 378 }
342 -  
343 } 379 }
344 380
345 private Validator getDefaultValidator() { 381 private Validator getDefaultValidator() {
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,8 +68,7 @@ configuration-not-conversion=N\u00E3o \u00E9 poss\u00EDvel converter o valor {0} @@ -68,8 +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-was-registered=O contexto {0} foi registrado  
72 -custom-context-was-unregistered=O contexto {0} foi removido 71 +custom-context-selected=Produzindo inst\u00E2ncia do contexto {0}
73 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}
74 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}
75 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
impl/core/src/test/java/message/MessageContextTest.java
@@ -39,7 +39,6 @@ package message; @@ -39,7 +39,6 @@ package message;
39 import static junit.framework.Assert.assertEquals; 39 import static junit.framework.Assert.assertEquals;
40 import static junit.framework.Assert.assertTrue; 40 import static junit.framework.Assert.assertTrue;
41 41
42 -import javax.enterprise.context.RequestScoped;  
43 import javax.inject.Inject; 42 import javax.inject.Inject;
44 43
45 import junit.framework.Assert; 44 import junit.framework.Assert;
@@ -51,8 +50,7 @@ import org.junit.Test; @@ -51,8 +50,7 @@ import org.junit.Test;
51 import org.junit.runner.RunWith; 50 import org.junit.runner.RunWith;
52 51
53 import test.Tests; 52 import test.Tests;
54 -import br.gov.frameworkdemoiselle.internal.context.ContextManager;  
55 -import br.gov.frameworkdemoiselle.internal.context.ManagedContext; 53 +import br.gov.frameworkdemoiselle.context.RequestContext;
56 import br.gov.frameworkdemoiselle.message.DefaultMessage; 54 import br.gov.frameworkdemoiselle.message.DefaultMessage;
57 import br.gov.frameworkdemoiselle.message.Message; 55 import br.gov.frameworkdemoiselle.message.Message;
58 import br.gov.frameworkdemoiselle.message.MessageContext; 56 import br.gov.frameworkdemoiselle.message.MessageContext;
@@ -80,78 +78,92 @@ public class MessageContextTest { @@ -80,78 +78,92 @@ public class MessageContextTest {
80 78
81 @Test 79 @Test
82 public void testAddMessageWithoutParams() { 80 public void testAddMessageWithoutParams() {
83 - ContextManager.activate(ManagedContext.class, RequestScoped.class); 81 + RequestContext context = Beans.getReference(RequestContext.class);
  82 +
  83 + context.activate();
84 Message message = new DefaultMessage("Menssage without param"); 84 Message message = new DefaultMessage("Menssage without param");
85 DummyMessageAppender appender = Beans.getReference(DummyMessageAppender.class); 85 DummyMessageAppender appender = Beans.getReference(DummyMessageAppender.class);
86 86
87 messageContext.add(message); 87 messageContext.add(message);
88 assertEquals(appender.getMessages().size(), 1); 88 assertEquals(appender.getMessages().size(), 1);
89 - ContextManager.deactivate(ManagedContext.class, RequestScoped.class); 89 + context.deactivate();
90 } 90 }
91 91
92 @Test 92 @Test
93 public void testAddMessageWithoutParamsIfSeverityIsInfo() { 93 public void testAddMessageWithoutParamsIfSeverityIsInfo() {
94 - ContextManager.activate(ManagedContext.class, RequestScoped.class); 94 + RequestContext context = Beans.getReference(RequestContext.class);
  95 +
  96 + context.activate();
95 Message message = new DefaultMessage("Menssage without param"); 97 Message message = new DefaultMessage("Menssage without param");
96 DummyMessageAppender appender = Beans.getReference(DummyMessageAppender.class); 98 DummyMessageAppender appender = Beans.getReference(DummyMessageAppender.class);
97 99
98 messageContext.add(message); 100 messageContext.add(message);
99 assertEquals(appender.getMessages().get(0).getSeverity(), SeverityType.INFO); 101 assertEquals(appender.getMessages().get(0).getSeverity(), SeverityType.INFO);
100 - ContextManager.deactivate(ManagedContext.class, RequestScoped.class); 102 + context.deactivate();
101 } 103 }
102 104
103 @Test 105 @Test
104 public void testAddMessageWitSeverityInfo() { 106 public void testAddMessageWitSeverityInfo() {
105 - ContextManager.activate(ManagedContext.class, RequestScoped.class); 107 + RequestContext context = Beans.getReference(RequestContext.class);
  108 +
  109 + context.activate();
106 Message message = new DefaultMessage("Menssage without param", SeverityType.INFO); 110 Message message = new DefaultMessage("Menssage without param", SeverityType.INFO);
107 DummyMessageAppender appender = Beans.getReference(DummyMessageAppender.class); 111 DummyMessageAppender appender = Beans.getReference(DummyMessageAppender.class);
108 112
109 messageContext.add(message); 113 messageContext.add(message);
110 assertEquals(appender.getMessages().get(0).getSeverity(), SeverityType.INFO); 114 assertEquals(appender.getMessages().get(0).getSeverity(), SeverityType.INFO);
111 - ContextManager.deactivate(ManagedContext.class, RequestScoped.class); 115 + context.deactivate();
112 } 116 }
113 117
114 @Test 118 @Test
115 public void testAddMessageWitSeverityWarn() { 119 public void testAddMessageWitSeverityWarn() {
116 - ContextManager.activate(ManagedContext.class, RequestScoped.class); 120 + RequestContext context = Beans.getReference(RequestContext.class);
  121 +
  122 + context.activate();
117 Message message = new DefaultMessage("Menssage without param", SeverityType.WARN); 123 Message message = new DefaultMessage("Menssage without param", SeverityType.WARN);
118 DummyMessageAppender appender = Beans.getReference(DummyMessageAppender.class); 124 DummyMessageAppender appender = Beans.getReference(DummyMessageAppender.class);
119 125
120 messageContext.add(message); 126 messageContext.add(message);
121 assertEquals(appender.getMessages().get(0).getSeverity(), SeverityType.WARN); 127 assertEquals(appender.getMessages().get(0).getSeverity(), SeverityType.WARN);
122 - ContextManager.deactivate(ManagedContext.class, RequestScoped.class); 128 + context.deactivate();
123 } 129 }
124 130
125 @Test 131 @Test
126 public void testAddMessageWitSeverityErro() { 132 public void testAddMessageWitSeverityErro() {
127 - ContextManager.activate(ManagedContext.class, RequestScoped.class); 133 + RequestContext context = Beans.getReference(RequestContext.class);
  134 +
  135 + context.activate();
128 Message message = new DefaultMessage("Menssage without param", SeverityType.ERROR); 136 Message message = new DefaultMessage("Menssage without param", SeverityType.ERROR);
129 DummyMessageAppender appender = Beans.getReference(DummyMessageAppender.class); 137 DummyMessageAppender appender = Beans.getReference(DummyMessageAppender.class);
130 138
131 messageContext.add(message); 139 messageContext.add(message);
132 assertEquals(appender.getMessages().get(0).getSeverity(), SeverityType.ERROR); 140 assertEquals(appender.getMessages().get(0).getSeverity(), SeverityType.ERROR);
133 - ContextManager.deactivate(ManagedContext.class, RequestScoped.class); 141 + context.deactivate();
134 } 142 }
135 143
136 @Test 144 @Test
137 public void testRecoverStringMessageWithParams() { 145 public void testRecoverStringMessageWithParams() {
138 - ContextManager.activate(ManagedContext.class, RequestScoped.class); 146 + RequestContext context = Beans.getReference(RequestContext.class);
  147 +
  148 + context.activate();
139 DummyMessageAppender appender = Beans.getReference(DummyMessageAppender.class); 149 DummyMessageAppender appender = Beans.getReference(DummyMessageAppender.class);
140 150
141 messageContext.add("Message with {0} param", 1); 151 messageContext.add("Message with {0} param", 1);
142 assertTrue(appender.getMessages().get(0).getText().equals("Message with 1 param")); 152 assertTrue(appender.getMessages().get(0).getText().equals("Message with 1 param"));
143 - ContextManager.deactivate(ManagedContext.class, RequestScoped.class); 153 + context.deactivate();
144 } 154 }
145 155
146 @Test 156 @Test
147 public void testRecoverMessageWithParams() { 157 public void testRecoverMessageWithParams() {
148 - ContextManager.activate(ManagedContext.class, RequestScoped.class); 158 + RequestContext context = Beans.getReference(RequestContext.class);
  159 +
  160 + context.activate();
149 Message message = new DefaultMessage("Message with {0} param"); 161 Message message = new DefaultMessage("Message with {0} param");
150 DummyMessageAppender appender = Beans.getReference(DummyMessageAppender.class); 162 DummyMessageAppender appender = Beans.getReference(DummyMessageAppender.class);
151 163
152 messageContext.add(message, 1); 164 messageContext.add(message, 1);
153 assertTrue(appender.getMessages().get(0).getText().equals("Message with 1 param")); 165 assertTrue(appender.getMessages().get(0).getText().equals("Message with 1 param"));
154 - ContextManager.deactivate(ManagedContext.class, RequestScoped.class); 166 + context.deactivate();
155 } 167 }
156 168
157 @Test 169 @Test
@@ -164,21 +176,25 @@ public class MessageContextTest { @@ -164,21 +176,25 @@ public class MessageContextTest {
164 176
165 @Test 177 @Test
166 public void testMessageParsedText() { 178 public void testMessageParsedText() {
167 - ContextManager.activate(ManagedContext.class, RequestScoped.class); 179 + RequestContext context = Beans.getReference(RequestContext.class);
  180 +
  181 + context.activate();
168 Message MESSAGE_PARSED = new DefaultMessage("{MESSAGE_PARSED}"); 182 Message MESSAGE_PARSED = new DefaultMessage("{MESSAGE_PARSED}");
169 String expected = "Message parsed"; 183 String expected = "Message parsed";
170 String value = MESSAGE_PARSED.getText(); 184 String value = MESSAGE_PARSED.getText();
171 Assert.assertEquals(expected, value); 185 Assert.assertEquals(expected, value);
172 - ContextManager.deactivate(ManagedContext.class, RequestScoped.class); 186 + context.deactivate();
173 } 187 }
174 188
175 @Test 189 @Test
176 public void testMessageIsNull() { 190 public void testMessageIsNull() {
177 - ContextManager.activate(ManagedContext.class, RequestScoped.class); 191 + RequestContext context = Beans.getReference(RequestContext.class);
  192 +
  193 + context.activate();
178 Message NULL_MESSAGE = new DefaultMessage(null); 194 Message NULL_MESSAGE = new DefaultMessage(null);
179 String expected = null; 195 String expected = null;
180 String value = NULL_MESSAGE.getText(); 196 String value = NULL_MESSAGE.getText();
181 Assert.assertEquals(expected, value); 197 Assert.assertEquals(expected, value);
182 - ContextManager.deactivate(ManagedContext.class, RequestScoped.class); 198 + context.deactivate();
183 } 199 }
184 } 200 }
impl/core/src/test/java/pagination/PaginationContextBasicTest.java
@@ -38,7 +38,6 @@ package pagination; @@ -38,7 +38,6 @@ package pagination;
38 38
39 import static junit.framework.Assert.assertEquals; 39 import static junit.framework.Assert.assertEquals;
40 40
41 -import javax.enterprise.context.SessionScoped;  
42 import javax.inject.Inject; 41 import javax.inject.Inject;
43 42
44 import org.jboss.arquillian.container.test.api.Deployment; 43 import org.jboss.arquillian.container.test.api.Deployment;
@@ -51,11 +50,11 @@ import org.junit.runner.RunWith; @@ -51,11 +50,11 @@ import org.junit.runner.RunWith;
51 50
52 import test.Tests; 51 import test.Tests;
53 import transaction.defaultstrategy.TransactionDefaultTest; 52 import transaction.defaultstrategy.TransactionDefaultTest;
  53 +import br.gov.frameworkdemoiselle.context.SessionContext;
54 import br.gov.frameworkdemoiselle.internal.configuration.PaginationConfig; 54 import br.gov.frameworkdemoiselle.internal.configuration.PaginationConfig;
55 -import br.gov.frameworkdemoiselle.internal.context.ContextManager;  
56 -import br.gov.frameworkdemoiselle.internal.context.ThreadLocalContext;  
57 import br.gov.frameworkdemoiselle.pagination.Pagination; 55 import br.gov.frameworkdemoiselle.pagination.Pagination;
58 import br.gov.frameworkdemoiselle.pagination.PaginationContext; 56 import br.gov.frameworkdemoiselle.pagination.PaginationContext;
  57 +import br.gov.frameworkdemoiselle.util.Beans;
59 58
60 @RunWith(Arquillian.class) 59 @RunWith(Arquillian.class)
61 public class PaginationContextBasicTest { 60 public class PaginationContextBasicTest {
@@ -96,13 +95,15 @@ public class PaginationContextBasicTest { @@ -96,13 +95,15 @@ public class PaginationContextBasicTest {
96 95
97 @Before 96 @Before
98 public void activeContext() { 97 public void activeContext() {
99 - ContextManager.activate(ThreadLocalContext.class, SessionScoped.class); 98 + SessionContext context = Beans.getReference(SessionContext.class);
  99 + context.activate();
100 pagination = paginationContext.getPagination(DummyEntity.class, true); 100 pagination = paginationContext.getPagination(DummyEntity.class, true);
101 } 101 }
102 102
103 @After 103 @After
104 public void deactiveContext() { 104 public void deactiveContext() {
105 - ContextManager.deactivate(ThreadLocalContext.class, SessionScoped.class); 105 + SessionContext context = Beans.getReference(SessionContext.class);
  106 + context.deactivate();
106 } 107 }
107 108
108 @Test 109 @Test
impl/core/src/test/java/pagination/PaginationContextCache.java
@@ -38,7 +38,6 @@ package pagination; @@ -38,7 +38,6 @@ package pagination;
38 38
39 import static org.junit.Assert.assertEquals; 39 import static org.junit.Assert.assertEquals;
40 40
41 -import javax.enterprise.context.SessionScoped;  
42 import javax.inject.Inject; 41 import javax.inject.Inject;
43 42
44 import org.jboss.arquillian.container.test.api.Deployment; 43 import org.jboss.arquillian.container.test.api.Deployment;
@@ -51,10 +50,10 @@ import org.junit.runner.RunWith; @@ -51,10 +50,10 @@ import org.junit.runner.RunWith;
51 50
52 import test.Tests; 51 import test.Tests;
53 import transaction.defaultstrategy.TransactionDefaultTest; 52 import transaction.defaultstrategy.TransactionDefaultTest;
54 -import br.gov.frameworkdemoiselle.internal.context.ContextManager;  
55 -import br.gov.frameworkdemoiselle.internal.context.ThreadLocalContext; 53 +import br.gov.frameworkdemoiselle.context.SessionContext;
56 import br.gov.frameworkdemoiselle.pagination.Pagination; 54 import br.gov.frameworkdemoiselle.pagination.Pagination;
57 import br.gov.frameworkdemoiselle.pagination.PaginationContext; 55 import br.gov.frameworkdemoiselle.pagination.PaginationContext;
  56 +import br.gov.frameworkdemoiselle.util.Beans;
58 57
59 @RunWith(Arquillian.class) 58 @RunWith(Arquillian.class)
60 public class PaginationContextCache { 59 public class PaginationContextCache {
@@ -74,12 +73,14 @@ public class PaginationContextCache { @@ -74,12 +73,14 @@ public class PaginationContextCache {
74 73
75 @Before 74 @Before
76 public void activeContext() { 75 public void activeContext() {
77 - ContextManager.activate(ThreadLocalContext.class, SessionScoped.class); 76 + SessionContext context = Beans.getReference(SessionContext.class);
  77 + context.activate();
78 } 78 }
79 79
80 @After 80 @After
81 public void deactiveContext() { 81 public void deactiveContext() {
82 - ContextManager.deactivate(ThreadLocalContext.class, SessionScoped.class); 82 + SessionContext context = Beans.getReference(SessionContext.class);
  83 + context.deactivate();
83 } 84 }
84 85
85 @Test 86 @Test
impl/core/src/test/java/pagination/PaginationContextNullTest.java
@@ -38,7 +38,6 @@ package pagination; @@ -38,7 +38,6 @@ package pagination;
38 38
39 import static org.junit.Assert.assertNull; 39 import static org.junit.Assert.assertNull;
40 40
41 -import javax.enterprise.context.SessionScoped;  
42 import javax.inject.Inject; 41 import javax.inject.Inject;
43 42
44 import org.jboss.arquillian.container.test.api.Deployment; 43 import org.jboss.arquillian.container.test.api.Deployment;
@@ -51,10 +50,10 @@ import org.junit.runner.RunWith; @@ -51,10 +50,10 @@ import org.junit.runner.RunWith;
51 50
52 import test.Tests; 51 import test.Tests;
53 import transaction.defaultstrategy.TransactionDefaultTest; 52 import transaction.defaultstrategy.TransactionDefaultTest;
54 -import br.gov.frameworkdemoiselle.internal.context.ContextManager;  
55 -import br.gov.frameworkdemoiselle.internal.context.ThreadLocalContext; 53 +import br.gov.frameworkdemoiselle.context.SessionContext;
56 import br.gov.frameworkdemoiselle.pagination.Pagination; 54 import br.gov.frameworkdemoiselle.pagination.Pagination;
57 import br.gov.frameworkdemoiselle.pagination.PaginationContext; 55 import br.gov.frameworkdemoiselle.pagination.PaginationContext;
  56 +import br.gov.frameworkdemoiselle.util.Beans;
58 57
59 @RunWith(Arquillian.class) 58 @RunWith(Arquillian.class)
60 public class PaginationContextNullTest { 59 public class PaginationContextNullTest {
@@ -72,12 +71,14 @@ public class PaginationContextNullTest { @@ -72,12 +71,14 @@ public class PaginationContextNullTest {
72 71
73 @Before 72 @Before
74 public void activeContext() { 73 public void activeContext() {
75 - ContextManager.activate(ThreadLocalContext.class, SessionScoped.class); 74 + SessionContext context = Beans.getReference(SessionContext.class);
  75 + context.activate();
76 } 76 }
77 77
78 @After 78 @After
79 public void deactiveContext() { 79 public void deactiveContext() {
80 - ContextManager.deactivate(ThreadLocalContext.class, SessionScoped.class); 80 + SessionContext context = Beans.getReference(SessionContext.class);
  81 + context.deactivate();
81 } 82 }
82 83
83 @Test 84 @Test
impl/core/src/test/java/security/athentication/credentials/AcceptOrDenyCredentialsTest.java
@@ -36,7 +36,6 @@ @@ -36,7 +36,6 @@
36 */ 36 */
37 package security.athentication.credentials; 37 package security.athentication.credentials;
38 38
39 -import javax.enterprise.context.RequestScoped;  
40 import javax.inject.Inject; 39 import javax.inject.Inject;
41 40
42 import junit.framework.Assert; 41 import junit.framework.Assert;
@@ -48,8 +47,7 @@ import org.junit.Test; @@ -48,8 +47,7 @@ import org.junit.Test;
48 import org.junit.runner.RunWith; 47 import org.junit.runner.RunWith;
49 48
50 import test.Tests; 49 import test.Tests;
51 -import br.gov.frameworkdemoiselle.internal.context.ContextManager;  
52 -import br.gov.frameworkdemoiselle.internal.context.ThreadLocalContext; 50 +import br.gov.frameworkdemoiselle.context.RequestContext;
53 import br.gov.frameworkdemoiselle.security.AuthenticationException; 51 import br.gov.frameworkdemoiselle.security.AuthenticationException;
54 import br.gov.frameworkdemoiselle.security.SecurityContext; 52 import br.gov.frameworkdemoiselle.security.SecurityContext;
55 import br.gov.frameworkdemoiselle.util.Beans; 53 import br.gov.frameworkdemoiselle.util.Beans;
@@ -71,7 +69,8 @@ public class AcceptOrDenyCredentialsTest { @@ -71,7 +69,8 @@ public class AcceptOrDenyCredentialsTest {
71 69
72 @Test 70 @Test
73 public void denyWrongCredentials() { 71 public void denyWrongCredentials() {
74 - ContextManager.activate(ThreadLocalContext.class, RequestScoped.class); 72 + RequestContext ctx = Beans.getReference(RequestContext.class);
  73 + ctx.activate();
75 74
76 Credentials credentials = Beans.getReference(Credentials.class); 75 Credentials credentials = Beans.getReference(Credentials.class);
77 credentials.setLogin("wronglogin"); 76 credentials.setLogin("wronglogin");
@@ -84,14 +83,15 @@ public class AcceptOrDenyCredentialsTest { @@ -84,14 +83,15 @@ public class AcceptOrDenyCredentialsTest {
84 //Erro esperado 83 //Erro esperado
85 } 84 }
86 finally{ 85 finally{
87 - ContextManager.deactivate(ThreadLocalContext.class, RequestScoped.class); 86 + ctx.deactivate();
88 } 87 }
89 88
90 } 89 }
91 90
92 @Test 91 @Test
93 public void acceptRightCredentials() { 92 public void acceptRightCredentials() {
94 - ContextManager.activate(ThreadLocalContext.class, RequestScoped.class); 93 + RequestContext ctx = Beans.getReference(RequestContext.class);
  94 + ctx.activate();
95 95
96 Credentials credentials = Beans.getReference(Credentials.class); 96 Credentials credentials = Beans.getReference(Credentials.class);
97 credentials.setLogin("demoiselle"); 97 credentials.setLogin("demoiselle");
@@ -103,7 +103,7 @@ public class AcceptOrDenyCredentialsTest { @@ -103,7 +103,7 @@ public class AcceptOrDenyCredentialsTest {
103 Assert.fail("Authenticator negou credenciais corretas"); 103 Assert.fail("Authenticator negou credenciais corretas");
104 } 104 }
105 finally{ 105 finally{
106 - ContextManager.deactivate(ThreadLocalContext.class, RequestScoped.class); 106 + ctx.deactivate();
107 } 107 }
108 108
109 } 109 }
impl/core/src/test/java/security/athentication/custom/CustomAuthenticatorTest.java
@@ -42,7 +42,6 @@ import static org.junit.Assert.assertNotNull; @@ -42,7 +42,6 @@ import static org.junit.Assert.assertNotNull;
42 import static org.junit.Assert.assertNull; 42 import static org.junit.Assert.assertNull;
43 import static org.junit.Assert.assertTrue; 43 import static org.junit.Assert.assertTrue;
44 44
45 -import javax.enterprise.context.RequestScoped;  
46 import javax.inject.Inject; 45 import javax.inject.Inject;
47 46
48 import org.jboss.arquillian.container.test.api.Deployment; 47 import org.jboss.arquillian.container.test.api.Deployment;
@@ -52,9 +51,9 @@ import org.junit.Test; @@ -52,9 +51,9 @@ import org.junit.Test;
52 import org.junit.runner.RunWith; 51 import org.junit.runner.RunWith;
53 52
54 import test.Tests; 53 import test.Tests;
55 -import br.gov.frameworkdemoiselle.internal.context.ContextManager;  
56 -import br.gov.frameworkdemoiselle.internal.context.ThreadLocalContext; 54 +import br.gov.frameworkdemoiselle.context.RequestContext;
57 import br.gov.frameworkdemoiselle.security.SecurityContext; 55 import br.gov.frameworkdemoiselle.security.SecurityContext;
  56 +import br.gov.frameworkdemoiselle.util.Beans;
58 import configuration.resource.ConfigurationResourceTest; 57 import configuration.resource.ConfigurationResourceTest;
59 58
60 @RunWith(Arquillian.class) 59 @RunWith(Arquillian.class)
@@ -82,25 +81,27 @@ public class CustomAuthenticatorTest { @@ -82,25 +81,27 @@ public class CustomAuthenticatorTest {
82 81
83 @Test 82 @Test
84 public void loginProcess() { 83 public void loginProcess() {
85 - ContextManager.activate(ThreadLocalContext.class, RequestScoped.class); 84 + RequestContext ctx = Beans.getReference(RequestContext.class);
  85 + ctx.activate();
86 86
87 context.login(); 87 context.login();
88 assertTrue(context.isLoggedIn()); 88 assertTrue(context.isLoggedIn());
89 assertNotNull(observer.getEvent()); 89 assertNotNull(observer.getEvent());
90 assertEquals("demoiselle", context.getUser().getId()); 90 assertEquals("demoiselle", context.getUser().getId());
91 91
92 - ContextManager.deactivate(ThreadLocalContext.class, RequestScoped.class); 92 + ctx.deactivate();
93 } 93 }
94 94
95 @Test 95 @Test
96 public void logoutProcess() { 96 public void logoutProcess() {
97 - ContextManager.activate(ThreadLocalContext.class, RequestScoped.class); 97 + RequestContext ctx = Beans.getReference(RequestContext.class);
  98 + ctx.activate();
98 99
99 context.login(); 100 context.login();
100 context.logout(); 101 context.logout();
101 assertFalse(context.isLoggedIn()); 102 assertFalse(context.isLoggedIn());
102 assertNull(context.getUser()); 103 assertNull(context.getUser());
103 104
104 - ContextManager.deactivate(ThreadLocalContext.class, RequestScoped.class); 105 + ctx.deactivate();
105 } 106 }
106 } 107 }
impl/core/src/test/java/template/TemplateTest.java
@@ -43,7 +43,6 @@ import static junit.framework.Assert.assertNull; @@ -43,7 +43,6 @@ import static junit.framework.Assert.assertNull;
43 43
44 import java.util.List; 44 import java.util.List;
45 45
46 -import javax.enterprise.context.RequestScoped;  
47 import javax.inject.Inject; 46 import javax.inject.Inject;
48 47
49 import org.jboss.arquillian.container.test.api.Deployment; 48 import org.jboss.arquillian.container.test.api.Deployment;
@@ -55,8 +54,8 @@ import org.junit.Test; @@ -55,8 +54,8 @@ import org.junit.Test;
55 import org.junit.runner.RunWith; 54 import org.junit.runner.RunWith;
56 55
57 import test.Tests; 56 import test.Tests;
58 -import br.gov.frameworkdemoiselle.internal.context.ContextManager;  
59 -import br.gov.frameworkdemoiselle.internal.context.ManagedContext; 57 +import br.gov.frameworkdemoiselle.context.RequestContext;
  58 +import br.gov.frameworkdemoiselle.util.Beans;
60 59
61 @RunWith(Arquillian.class) 60 @RunWith(Arquillian.class)
62 public class TemplateTest { 61 public class TemplateTest {
@@ -83,7 +82,8 @@ public class TemplateTest { @@ -83,7 +82,8 @@ public class TemplateTest {
83 @Before 82 @Before
84 public void initialize() { 83 public void initialize() {
85 84
86 - ContextManager.activate(ManagedContext.class, RequestScoped.class); 85 + RequestContext ctx = Beans.getReference(RequestContext.class);
  86 + ctx.activate();
87 87
88 this.crudImpl.resetEntities(); 88 this.crudImpl.resetEntities();
89 89
@@ -91,9 +91,8 @@ public class TemplateTest { @@ -91,9 +91,8 @@ public class TemplateTest {
91 91
92 @After 92 @After
93 public void finalize() { 93 public void finalize() {
94 -  
95 - ContextManager.deactivate(ManagedContext.class, RequestScoped.class);  
96 - 94 + RequestContext ctx = Beans.getReference(RequestContext.class);
  95 + ctx.deactivate();
97 } 96 }
98 97
99 @Test 98 @Test
impl/core/src/test/java/transaction/rollback/TransactionRollbackTest.java
@@ -40,7 +40,6 @@ import static junit.framework.Assert.assertFalse; @@ -40,7 +40,6 @@ import static junit.framework.Assert.assertFalse;
40 import static junit.framework.Assert.assertTrue; 40 import static junit.framework.Assert.assertTrue;
41 import static org.junit.Assert.fail; 41 import static org.junit.Assert.fail;
42 42
43 -import javax.enterprise.context.RequestScoped;  
44 import javax.inject.Inject; 43 import javax.inject.Inject;
45 44
46 import org.jboss.arquillian.container.test.api.Deployment; 45 import org.jboss.arquillian.container.test.api.Deployment;
@@ -52,9 +51,8 @@ import org.junit.Test; @@ -52,9 +51,8 @@ import org.junit.Test;
52 import org.junit.runner.RunWith; 51 import org.junit.runner.RunWith;
53 52
54 import test.Tests; 53 import test.Tests;
55 -  
56 -import br.gov.frameworkdemoiselle.internal.context.ContextManager;  
57 -import br.gov.frameworkdemoiselle.internal.context.ManagedContext; 54 +import br.gov.frameworkdemoiselle.context.RequestContext;
  55 +import br.gov.frameworkdemoiselle.util.Beans;
58 56
59 @RunWith(Arquillian.class) 57 @RunWith(Arquillian.class)
60 public class TransactionRollbackTest { 58 public class TransactionRollbackTest {
@@ -76,12 +74,14 @@ public class TransactionRollbackTest { @@ -76,12 +74,14 @@ public class TransactionRollbackTest {
76 74
77 @Before 75 @Before
78 public void activeContext() { 76 public void activeContext() {
79 - ContextManager.activate(ManagedContext.class, RequestScoped.class); 77 + RequestContext ctx = Beans.getReference(RequestContext.class);
  78 + ctx.activate();
80 } 79 }
81 80
82 @After 81 @After
83 public void deactiveContext() { 82 public void deactiveContext() {
84 - ContextManager.deactivate(ManagedContext.class, RequestScoped.class); 83 + RequestContext ctx = Beans.getReference(RequestContext.class);
  84 + ctx.deactivate();
85 } 85 }
86 86
87 @Test 87 @Test
impl/extension/jmx/src/main/resources/META-INF/beans.xml
1 -<?xml version="1.0" encoding="UTF-8"?> 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 +-->
2 <beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 37 <beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
3 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd"> 38 xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
4 -</beans>  
5 \ No newline at end of file 39 \ No newline at end of file
  40 +
  41 +</beans>
impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/annotation/PersistenceScoped.java 0 → 100644
@@ -0,0 +1,56 @@ @@ -0,0 +1,56 @@
  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.annotation;
  38 +
  39 +import static java.lang.annotation.ElementType.FIELD;
  40 +import static java.lang.annotation.ElementType.METHOD;
  41 +import static java.lang.annotation.ElementType.TYPE;
  42 +import static java.lang.annotation.RetentionPolicy.RUNTIME;
  43 +
  44 +import java.lang.annotation.Inherited;
  45 +import java.lang.annotation.Retention;
  46 +import java.lang.annotation.Target;
  47 +
  48 +import javax.enterprise.context.NormalScope;
  49 +
  50 +@Inherited
  51 +@Target({ METHOD, TYPE, FIELD })
  52 +@Retention(RUNTIME)
  53 +@NormalScope
  54 +public @interface PersistenceScoped {
  55 +
  56 +}
impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/internal/configuration/EntityManagerConfig.java
@@ -52,7 +52,7 @@ import br.gov.frameworkdemoiselle.util.Strings; @@ -52,7 +52,7 @@ import br.gov.frameworkdemoiselle.util.Strings;
52 public class EntityManagerConfig implements Serializable { 52 public class EntityManagerConfig implements Serializable {
53 53
54 private static final long serialVersionUID = 1L; 54 private static final long serialVersionUID = 1L;
55 - 55 +
56 /** 56 /**
57 * @deprecated 57 * @deprecated
58 */ 58 */
@@ -62,6 +62,9 @@ public class EntityManagerConfig implements Serializable { @@ -62,6 +62,9 @@ public class EntityManagerConfig implements Serializable {
62 62
63 @Name("default.unit.name") 63 @Name("default.unit.name")
64 private String defaultPersistenceUnitName; 64 private String defaultPersistenceUnitName;
  65 +
  66 + @Name("entitymanager.scope")
  67 + private String entityManagerScope = "request";
65 68
66 /** 69 /**
67 * Getter for persistence unit name. 70 * Getter for persistence unit name.
@@ -92,4 +95,16 @@ public class EntityManagerConfig implements Serializable { @@ -92,4 +95,16 @@ public class EntityManagerConfig implements Serializable {
92 95
93 return defaultPersistenceUnitName; 96 return defaultPersistenceUnitName;
94 } 97 }
  98 +
  99 +
  100 + public String getEntityManagerScope() {
  101 + return entityManagerScope;
  102 + }
  103 +
  104 +
  105 + public void setEntityManagerScope(String entityManagerScope) {
  106 + this.entityManagerScope = entityManagerScope;
  107 + }
  108 +
  109 +
95 } 110 }
impl/extension/jpa/src/main/java/br/gov/frameworkdemoiselle/internal/context/PersistenceContext.java 0 → 100644
@@ -0,0 +1,12 @@ @@ -0,0 +1,12 @@
  1 +package br.gov.frameworkdemoiselle.internal.context;
  2 +
  3 +import java.lang.annotation.Annotation;
  4 +
  5 +
  6 +public class PersistenceContext extends AbstractThreadLocalContext {
  7 +
  8 + public PersistenceContext(Class<? extends Annotation> scope) {
  9 + super(scope);
  10 + }
  11 +
  12 +}
impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/JsfBootstrap.java
@@ -41,30 +41,37 @@ import javax.enterprise.inject.spi.AfterBeanDiscovery; @@ -41,30 +41,37 @@ import javax.enterprise.inject.spi.AfterBeanDiscovery;
41 import javax.enterprise.inject.spi.AfterDeploymentValidation; 41 import javax.enterprise.inject.spi.AfterDeploymentValidation;
42 import javax.enterprise.inject.spi.Extension; 42 import javax.enterprise.inject.spi.Extension;
43 43
44 -import br.gov.frameworkdemoiselle.annotation.ViewScoped;  
45 -import br.gov.frameworkdemoiselle.internal.context.ContextManager;  
46 -import br.gov.frameworkdemoiselle.internal.context.ViewContext; 44 +import br.gov.frameworkdemoiselle.context.ViewContext;
  45 +import br.gov.frameworkdemoiselle.internal.context.CustomContextProducer;
  46 +import br.gov.frameworkdemoiselle.internal.context.FacesViewContextImpl;
47 import br.gov.frameworkdemoiselle.lifecycle.AfterShutdownProccess; 47 import br.gov.frameworkdemoiselle.lifecycle.AfterShutdownProccess;
  48 +import br.gov.frameworkdemoiselle.util.Beans;
48 49
49 public class JsfBootstrap implements Extension { 50 public class JsfBootstrap implements Extension {
50 51
51 //private List<CustomContext> customContexts = new ArrayList<CustomContext>(); 52 //private List<CustomContext> customContexts = new ArrayList<CustomContext>();
52 53
53 //private AfterBeanDiscovery afterBeanDiscoveryEvent; 54 //private AfterBeanDiscovery afterBeanDiscoveryEvent;
54 -  
55 - public void storeContexts(@Observes final AfterBeanDiscovery event) {  
56 - //Registra o ViewContext para controlar o escopo ViewScoped.  
57 - ContextManager.initialize(event);  
58 - ContextManager.add(new ViewContext(), event); 55 +
  56 + private FacesViewContextImpl context;
  57 +
  58 + public void createCustomContext(@Observes AfterBeanDiscovery event){
  59 + context = new FacesViewContextImpl();
  60 + event.addContext(context);
59 } 61 }
60 62
61 public void addContexts(@Observes final AfterDeploymentValidation event) { 63 public void addContexts(@Observes final AfterDeploymentValidation event) {
  64 + CustomContextProducer producer = Beans.getReference(CustomContextProducer.class);
  65 + producer.addRegisteredContext(context);
  66 +
62 //Ativa o ViewContext 67 //Ativa o ViewContext
63 - ContextManager.activate(ViewContext.class, ViewScoped.class); 68 + ViewContext ctx = Beans.getReference(FacesViewContextImpl.class);
  69 + ctx.activate();
64 } 70 }
65 71
66 public void removeContexts(@Observes AfterShutdownProccess event) { 72 public void removeContexts(@Observes AfterShutdownProccess event) {
67 //Desativa o ViewContext 73 //Desativa o ViewContext
68 - ContextManager.deactivate(ViewContext.class, ViewScoped.class); 74 + ViewContext ctx = Beans.getReference(FacesViewContextImpl.class);
  75 + ctx.deactivate();
69 } 76 }
70 } 77 }
impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/internal/context/FacesViewContextImpl.java 0 → 100644
@@ -0,0 +1,81 @@ @@ -0,0 +1,81 @@
  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.util.Map;
  40 +
  41 +import javax.faces.component.UIViewRoot;
  42 +import javax.faces.context.FacesContext;
  43 +
  44 +import br.gov.frameworkdemoiselle.annotation.Priority;
  45 +import br.gov.frameworkdemoiselle.annotation.ViewScoped;
  46 +import br.gov.frameworkdemoiselle.context.ViewContext;
  47 +import br.gov.frameworkdemoiselle.util.Faces;
  48 +
  49 +/**
  50 + *
  51 + * This {@link ViewContext} implementation uses a map provided
  52 + * by {@link UIViewRoot#getViewMap()} as a store. Any beans stored on
  53 + * this store are kept as long as the view is still active.
  54 + *
  55 + * @author serpro
  56 + *
  57 + */
  58 +@Priority(Priority.L2_PRIORITY)
  59 +public class FacesViewContextImpl extends AbstractCustomContext implements ViewContext {
  60 +
  61 + public FacesViewContextImpl() {
  62 + super(ViewScoped.class);
  63 + }
  64 +
  65 + @Override
  66 + protected boolean isStoreInitialized() {
  67 + return FacesContext.getCurrentInstance()!=null;
  68 + }
  69 +
  70 + @Override
  71 + protected Store getStore() {
  72 + Map<String, Object> viewMap = Faces.getViewMap();
  73 + String key = Store.class.getName();
  74 +
  75 + if (!viewMap.containsKey(key)) {
  76 + viewMap.put(key, createStore());
  77 + }
  78 +
  79 + return (Store) viewMap.get(key);
  80 + }
  81 +}
impl/extension/jsf/src/main/java/br/gov/frameworkdemoiselle/internal/context/ViewContext.java
@@ -1,68 +0,0 @@ @@ -1,68 +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 java.util.Map;  
40 -  
41 -import javax.faces.context.FacesContext;  
42 -  
43 -import br.gov.frameworkdemoiselle.annotation.ViewScoped;  
44 -import br.gov.frameworkdemoiselle.util.Faces;  
45 -  
46 -public class ViewContext extends AbstractCustomContext {  
47 -  
48 - public ViewContext() {  
49 - super(ViewScoped.class);  
50 - }  
51 -  
52 - @Override  
53 - protected boolean isStoreInitialized() {  
54 - return FacesContext.getCurrentInstance()!=null;  
55 - }  
56 -  
57 - @Override  
58 - protected Store getStore() {  
59 - Map<String, Object> viewMap = Faces.getViewMap();  
60 - String key = Store.class.getName();  
61 -  
62 - if (!viewMap.containsKey(key)) {  
63 - viewMap.put(key, createStore());  
64 - }  
65 -  
66 - return (Store) viewMap.get(key);  
67 - }  
68 -}  
impl/extension/jsf/src/test/java/test/Tests.java
@@ -50,7 +50,7 @@ import br.gov.frameworkdemoiselle.annotation.Redirect; @@ -50,7 +50,7 @@ import br.gov.frameworkdemoiselle.annotation.Redirect;
50 import br.gov.frameworkdemoiselle.internal.bootstrap.JsfBootstrap; 50 import br.gov.frameworkdemoiselle.internal.bootstrap.JsfBootstrap;
51 import br.gov.frameworkdemoiselle.internal.configuration.ExceptionHandlerConfig; 51 import br.gov.frameworkdemoiselle.internal.configuration.ExceptionHandlerConfig;
52 import br.gov.frameworkdemoiselle.internal.configuration.JsfSecurityConfig; 52 import br.gov.frameworkdemoiselle.internal.configuration.JsfSecurityConfig;
53 -import br.gov.frameworkdemoiselle.internal.context.ViewContext; 53 +import br.gov.frameworkdemoiselle.internal.context.FacesViewContextImpl;
54 import br.gov.frameworkdemoiselle.internal.implementation.AbstractExceptionHandler; 54 import br.gov.frameworkdemoiselle.internal.implementation.AbstractExceptionHandler;
55 import br.gov.frameworkdemoiselle.internal.implementation.ApplicationExceptionHandler; 55 import br.gov.frameworkdemoiselle.internal.implementation.ApplicationExceptionHandler;
56 import br.gov.frameworkdemoiselle.internal.implementation.ApplicationExceptionHandlerFactory; 56 import br.gov.frameworkdemoiselle.internal.implementation.ApplicationExceptionHandlerFactory;
@@ -103,7 +103,7 @@ public final class Tests { @@ -103,7 +103,7 @@ public final class Tests {
103 .addClass(FileRenderer.class) 103 .addClass(FileRenderer.class)
104 .addClass(JsfSecurityConfig.class) 104 .addClass(JsfSecurityConfig.class)
105 .addClass(ExceptionHandlerConfig.class) 105 .addClass(ExceptionHandlerConfig.class)
106 - .addClass(ViewContext.class) 106 + .addClass(FacesViewContextImpl.class)
107 .addClass(AuthorizationExceptionHandlerFactory.class) 107 .addClass(AuthorizationExceptionHandlerFactory.class)
108 .addClass(ApplicationExceptionHandler.class) 108 .addClass(ApplicationExceptionHandler.class)
109 .addClass(FileRendererImpl.class) 109 .addClass(FileRendererImpl.class)
impl/extension/jta/pom.xml
@@ -71,6 +71,12 @@ @@ -71,6 +71,12 @@
71 <groupId>javax.transaction</groupId> 71 <groupId>javax.transaction</groupId>
72 <artifactId>jta</artifactId> 72 <artifactId>jta</artifactId>
73 </dependency> 73 </dependency>
  74 +
  75 + <dependency>
  76 + <groupId>org.hibernate</groupId>
  77 + <artifactId>hibernate-entitymanager</artifactId>
  78 + <scope>test</scope>
  79 + </dependency>
74 </dependencies> 80 </dependencies>
75 81
76 <repositories> 82 <repositories>
impl/extension/jta/src/test/java/jtatransaction/interceptor/InterceptorJTATransactionTest.java
@@ -6,7 +6,7 @@ import static junit.framework.Assert.assertNull; @@ -6,7 +6,7 @@ import static junit.framework.Assert.assertNull;
6 6
7 import javax.persistence.EntityManager; 7 import javax.persistence.EntityManager;
8 import javax.persistence.PersistenceContext; 8 import javax.persistence.PersistenceContext;
9 -import javax.persistence.TransactionRequiredException; 9 +import javax.transaction.TransactionRequiredException;
10 10
11 import org.jboss.arquillian.container.test.api.Deployment; 11 import org.jboss.arquillian.container.test.api.Deployment;
12 import org.jboss.arquillian.junit.Arquillian; 12 import org.jboss.arquillian.junit.Arquillian;
impl/extension/jta/src/test/resources/.arquillian-glassfish-embedded.profile 0 → 100644
impl/extension/jta/src/test/resources/.glassfish.profile
impl/extension/se/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/SeBootstrap.java
@@ -36,41 +36,35 @@ @@ -36,41 +36,35 @@
36 */ 36 */
37 package br.gov.frameworkdemoiselle.internal.bootstrap; 37 package br.gov.frameworkdemoiselle.internal.bootstrap;
38 38
39 -import javax.enterprise.context.ConversationScoped;  
40 -import javax.enterprise.context.RequestScoped;  
41 -import javax.enterprise.context.SessionScoped;  
42 import javax.enterprise.event.Observes; 39 import javax.enterprise.event.Observes;
43 -import javax.enterprise.inject.spi.AfterBeanDiscovery;  
44 import javax.enterprise.inject.spi.AfterDeploymentValidation; 40 import javax.enterprise.inject.spi.AfterDeploymentValidation;
45 import javax.enterprise.inject.spi.Extension; 41 import javax.enterprise.inject.spi.Extension;
46 42
47 -import br.gov.frameworkdemoiselle.annotation.ViewScoped;  
48 -import br.gov.frameworkdemoiselle.internal.context.ContextManager;  
49 -import br.gov.frameworkdemoiselle.internal.context.ThreadLocalContext; 43 +import br.gov.frameworkdemoiselle.context.RequestContext;
  44 +import br.gov.frameworkdemoiselle.context.SessionContext;
  45 +import br.gov.frameworkdemoiselle.context.ViewContext;
50 import br.gov.frameworkdemoiselle.lifecycle.AfterShutdownProccess; 46 import br.gov.frameworkdemoiselle.lifecycle.AfterShutdownProccess;
  47 +import br.gov.frameworkdemoiselle.util.Beans;
51 48
52 public class SeBootstrap implements Extension { 49 public class SeBootstrap implements Extension {
53 50
54 - public void storeContexts(@Observes final AfterBeanDiscovery event) {  
55 - ContextManager.initialize(event);  
56 -  
57 - ContextManager.add(new ThreadLocalContext(ViewScoped.class), event);  
58 - ContextManager.add(new ThreadLocalContext(SessionScoped.class), event);  
59 - ContextManager.add(new ThreadLocalContext(ConversationScoped.class), event);  
60 - ContextManager.add(new ThreadLocalContext(RequestScoped.class), event);  
61 - }  
62 -  
63 public void addContexts(@Observes final AfterDeploymentValidation event) { 51 public void addContexts(@Observes final AfterDeploymentValidation event) {
64 - ContextManager.activate(ThreadLocalContext.class, ViewScoped.class);  
65 - ContextManager.activate(ThreadLocalContext.class, SessionScoped.class);  
66 - ContextManager.activate(ThreadLocalContext.class, ConversationScoped.class);  
67 - ContextManager.activate(ThreadLocalContext.class, RequestScoped.class); 52 + RequestContext requestContext = Beans.getReference(RequestContext.class);
  53 + SessionContext sessionContext = Beans.getReference(SessionContext.class);
  54 + ViewContext viewContext = Beans.getReference(ViewContext.class);
  55 +
  56 + requestContext.activate();
  57 + sessionContext.activate();
  58 + viewContext.activate();
68 } 59 }
69 60
70 public void removeContexts(@Observes AfterShutdownProccess event) { 61 public void removeContexts(@Observes AfterShutdownProccess event) {
71 - ContextManager.deactivate(ThreadLocalContext.class, ViewScoped.class);  
72 - ContextManager.deactivate(ThreadLocalContext.class, SessionScoped.class);  
73 - ContextManager.deactivate(ThreadLocalContext.class, ConversationScoped.class);  
74 - ContextManager.deactivate(ThreadLocalContext.class, RequestScoped.class); 62 + RequestContext requestContext = Beans.getReference(RequestContext.class);
  63 + SessionContext sessionContext = Beans.getReference(SessionContext.class);
  64 + ViewContext viewContext = Beans.getReference(ViewContext.class);
  65 +
  66 + requestContext.deactivate();
  67 + sessionContext.deactivate();
  68 + viewContext.deactivate();
75 } 69 }
76 } 70 }