Commit 22125b4a8862e37b82df4bf307a2ff9dbcb958ac
1 parent
ed9b77f1
Exists in
master
Ajustes no Startup e Shutdown
Showing
4 changed files
with
45 additions
and
54 deletions
Show diff stats
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/ShutdownBootstrap.java
... | ... | @@ -39,6 +39,7 @@ package br.gov.frameworkdemoiselle.internal.bootstrap; |
39 | 39 | import java.lang.annotation.Annotation; |
40 | 40 | import java.util.ArrayList; |
41 | 41 | import java.util.Collections; |
42 | +import java.util.Iterator; | |
42 | 43 | import java.util.List; |
43 | 44 | |
44 | 45 | import javax.enterprise.context.ConversationScoped; |
... | ... | @@ -51,6 +52,7 @@ import javax.enterprise.inject.spi.AnnotatedType; |
51 | 52 | import javax.enterprise.inject.spi.BeanManager; |
52 | 53 | import javax.enterprise.inject.spi.ProcessAnnotatedType; |
53 | 54 | |
55 | +import br.gov.frameworkdemoiselle.DemoiselleException; | |
54 | 56 | import br.gov.frameworkdemoiselle.annotation.Shutdown; |
55 | 57 | import br.gov.frameworkdemoiselle.annotation.ViewScoped; |
56 | 58 | import br.gov.frameworkdemoiselle.internal.context.CustomContext; |
... | ... | @@ -66,11 +68,8 @@ public class ShutdownBootstrap extends AbstractBootstrap { |
66 | 68 | |
67 | 69 | private static final List<CustomContext> tempContexts = new ArrayList<CustomContext>(); |
68 | 70 | |
69 | - @SuppressWarnings("rawtypes") | |
70 | - private static final List<ShutdownProcessor> processors = Collections | |
71 | - .synchronizedList(new ArrayList<ShutdownProcessor>()); | |
72 | - | |
73 | - private static AfterBeanDiscovery event; | |
71 | + private static final List<ShutdownProcessor<?>> processors = Collections | |
72 | + .synchronizedList(new ArrayList<ShutdownProcessor<?>>()); | |
74 | 73 | |
75 | 74 | /** |
76 | 75 | * Observes all methods annotated with @Shutdown and create an instance of ShutdownProcessor for them |
... | ... | @@ -90,10 +89,6 @@ public class ShutdownBootstrap extends AbstractBootstrap { |
90 | 89 | } |
91 | 90 | } |
92 | 91 | |
93 | - public void saveEvent(@Observes final AfterBeanDiscovery event) { | |
94 | - ShutdownBootstrap.event = event; | |
95 | - } | |
96 | - | |
97 | 92 | public static void loadTempContexts(final AfterBeanDiscovery event) { |
98 | 93 | // Não registrar o contexto de aplicação pq ele já é registrado pela |
99 | 94 | // implementação do CDI |
... | ... | @@ -109,24 +104,31 @@ public class ShutdownBootstrap extends AbstractBootstrap { |
109 | 104 | |
110 | 105 | /** |
111 | 106 | * Before Shutdown it execute the methods annotateds with @Shutdown considering the priority order; |
112 | - * | |
113 | - * @param event | |
114 | - * @throws Exception | |
115 | 107 | */ |
116 | - @SuppressWarnings("unchecked") | |
117 | - public static void shutdown() throws Throwable { | |
118 | - loadTempContexts(ShutdownBootstrap.event); | |
119 | - | |
108 | + public synchronized static void shutdown() { | |
120 | 109 | getLogger().debug( |
121 | 110 | getBundle("demoiselle-core-bundle").getString("executing-all", annotationClass.getSimpleName())); |
111 | + | |
122 | 112 | Collections.sort(processors); |
113 | + Throwable failure = null; | |
114 | + | |
115 | + for (Iterator<ShutdownProcessor<?>> iter = processors.iterator(); iter.hasNext();) { | |
116 | + ShutdownProcessor<?> processor = iter.next(); | |
117 | + | |
118 | + try { | |
119 | + processor.process(); | |
120 | + processors.remove(processor); | |
123 | 121 | |
124 | - for (ShutdownProcessor<?> processor : processors) { | |
125 | - processor.process(); | |
122 | + } catch (Throwable cause) { | |
123 | + failure = cause; | |
124 | + } | |
126 | 125 | } |
127 | 126 | |
128 | - processors.clear(); | |
129 | 127 | unloadTempContexts(); |
128 | + | |
129 | + if (failure != null) { | |
130 | + throw new DemoiselleException(failure); | |
131 | + } | |
130 | 132 | } |
131 | 133 | |
132 | 134 | private static void unloadTempContexts() { | ... | ... |
impl/core/src/main/java/br/gov/frameworkdemoiselle/internal/bootstrap/StartupBootstrap.java
... | ... | @@ -39,6 +39,7 @@ package br.gov.frameworkdemoiselle.internal.bootstrap; |
39 | 39 | import java.lang.annotation.Annotation; |
40 | 40 | import java.util.ArrayList; |
41 | 41 | import java.util.Collections; |
42 | +import java.util.Iterator; | |
42 | 43 | import java.util.List; |
43 | 44 | |
44 | 45 | import javax.enterprise.context.ConversationScoped; |
... | ... | @@ -51,6 +52,7 @@ import javax.enterprise.inject.spi.AnnotatedType; |
51 | 52 | import javax.enterprise.inject.spi.BeanManager; |
52 | 53 | import javax.enterprise.inject.spi.ProcessAnnotatedType; |
53 | 54 | |
55 | +import br.gov.frameworkdemoiselle.DemoiselleException; | |
54 | 56 | import br.gov.frameworkdemoiselle.annotation.Startup; |
55 | 57 | import br.gov.frameworkdemoiselle.annotation.ViewScoped; |
56 | 58 | import br.gov.frameworkdemoiselle.internal.context.ThreadLocalContext; |
... | ... | @@ -65,9 +67,8 @@ public class StartupBootstrap extends AbstractBootstrap { |
65 | 67 | |
66 | 68 | private static final List<ThreadLocalContext> tempContexts = new ArrayList<ThreadLocalContext>(); |
67 | 69 | |
68 | - @SuppressWarnings("rawtypes") | |
69 | - private static final List<StartupProcessor> processors = Collections | |
70 | - .synchronizedList(new ArrayList<StartupProcessor>()); | |
70 | + private static final List<StartupProcessor<?>> processors = Collections | |
71 | + .synchronizedList(new ArrayList<StartupProcessor<?>>()); | |
71 | 72 | |
72 | 73 | /** |
73 | 74 | * Observes all methods annotated with @Startup and create an instance of StartupAction for them |
... | ... | @@ -101,23 +102,31 @@ public class StartupBootstrap extends AbstractBootstrap { |
101 | 102 | |
102 | 103 | /** |
103 | 104 | * After the deployment validation it execute the methods annotateds with @Startup considering the priority order; |
104 | - * | |
105 | - * @param event | |
106 | - * @throws Exception | |
107 | - * @throws StartupException | |
108 | 105 | */ |
109 | - @SuppressWarnings("unchecked") | |
110 | - public static void startup() throws Throwable { | |
106 | + public synchronized static void startup() { | |
111 | 107 | getLogger().debug( |
112 | 108 | getBundle("demoiselle-core-bundle").getString("executing-all", annotationClass.getSimpleName())); |
109 | + | |
113 | 110 | Collections.sort(processors); |
111 | + Throwable failure = null; | |
112 | + | |
113 | + for (Iterator<StartupProcessor<?>> iter = processors.iterator(); iter.hasNext();) { | |
114 | + StartupProcessor<?> processor = iter.next(); | |
114 | 115 | |
115 | - for (StartupProcessor<?> action : processors) { | |
116 | - action.process(); | |
116 | + try { | |
117 | + processor.process(); | |
118 | + processors.remove(processor); | |
119 | + | |
120 | + } catch (Throwable cause) { | |
121 | + failure = cause; | |
122 | + } | |
117 | 123 | } |
118 | 124 | |
119 | - processors.clear(); | |
120 | 125 | unloadTempContexts(); |
126 | + | |
127 | + if (failure != null) { | |
128 | + throw new DemoiselleException(failure); | |
129 | + } | |
121 | 130 | } |
122 | 131 | |
123 | 132 | private static void unloadTempContexts() { | ... | ... |
impl/core/src/test/java/br/gov/frameworkdemoiselle/internal/bootstrap/ShutdownBootstrapTest.java
... | ... | @@ -177,31 +177,11 @@ public class ShutdownBootstrapTest { |
177 | 177 | EasyMock.expectLastCall().anyTimes(); |
178 | 178 | |
179 | 179 | PowerMock.replayAll(); |
180 | - ShutdownBootstrap.shuttingDown(null); | |
180 | + ShutdownBootstrap.shutdown(); | |
181 | 181 | |
182 | 182 | assertTrue(list.isEmpty()); |
183 | 183 | PowerMock.verifyAll(); |
184 | 184 | } |
185 | - | |
186 | - @Test | |
187 | - public void testSaveEvent() throws Throwable { | |
188 | - | |
189 | - ShutdownBootstrap bootstrap = new ShutdownBootstrap(); | |
190 | - | |
191 | - AfterBeanDiscovery event = Whitebox.getInternalState(ShutdownBootstrap.class, AfterBeanDiscovery.class); | |
192 | - | |
193 | - assertNull(event); | |
194 | - | |
195 | - AfterBeanDiscovery newEvent = EasyMock.createMock(AfterBeanDiscovery.class); | |
196 | - | |
197 | - EasyMock.replay(newEvent); | |
198 | - | |
199 | - bootstrap.saveEvent(newEvent); | |
200 | - | |
201 | - event = Whitebox.getInternalState(ShutdownBootstrap.class, AfterBeanDiscovery.class); | |
202 | - | |
203 | - assertNotNull(event); | |
204 | - } | |
205 | 185 | } |
206 | 186 | |
207 | 187 | @SuppressWarnings("rawtypes") | ... | ... |
impl/core/src/test/java/br/gov/frameworkdemoiselle/internal/bootstrap/StartupBootstrapTest.java
... | ... | @@ -219,7 +219,7 @@ public class StartupBootstrapTest { |
219 | 219 | expect(processor.process()).andReturn(true).times(1); |
220 | 220 | |
221 | 221 | PowerMock.replayAll(); |
222 | - bootstrap.startup(null); | |
222 | + bootstrap.startup(); | |
223 | 223 | |
224 | 224 | assertTrue(list.isEmpty()); |
225 | 225 | PowerMock.verifyAll(); |
... | ... | @@ -234,7 +234,7 @@ public class StartupBootstrapTest { |
234 | 234 | Assert.assertFalse(Contexts.getActiveContexts().isEmpty()); |
235 | 235 | |
236 | 236 | try { |
237 | - bootstrap.startup(null); | |
237 | + bootstrap.startup(); | |
238 | 238 | Assert.assertTrue(Contexts.getActiveContexts().isEmpty()); |
239 | 239 | } catch (Throwable e) { |
240 | 240 | fail(); | ... | ... |