Commit 5830b1d90a2b20a43ae37ca7d021c4346027e15c
1 parent
b39acb64
Exists in
master
Implementando melhorias para iniciar uma aplicação SE com CDI.
Showing
12 changed files
with
788 additions
and
35 deletions
Show diff stats
impl/extension/se/pom.xml
| @@ -66,6 +66,11 @@ | @@ -66,6 +66,11 @@ | ||
| 66 | <artifactId>weld-se-core</artifactId> | 66 | <artifactId>weld-se-core</artifactId> |
| 67 | <scope>test</scope> | 67 | <scope>test</scope> |
| 68 | </dependency> | 68 | </dependency> |
| 69 | + <dependency> | ||
| 70 | + <groupId>org.slf4j</groupId> | ||
| 71 | + <artifactId>slf4j-log4j12</artifactId> | ||
| 72 | + <scope>test</scope> | ||
| 73 | + </dependency> | ||
| 69 | </dependencies> | 74 | </dependencies> |
| 70 | 75 | ||
| 71 | <licenses> | 76 | <licenses> |
impl/extension/se/src/main/java/br/gov/frameworkdemoiselle/Demoiselle.java
0 → 100644
| @@ -0,0 +1,347 @@ | @@ -0,0 +1,347 @@ | ||
| 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; | ||
| 38 | + | ||
| 39 | +import java.awt.EventQueue; | ||
| 40 | +import java.awt.event.WindowEvent; | ||
| 41 | +import java.awt.event.WindowListener; | ||
| 42 | +import java.lang.reflect.Method; | ||
| 43 | +import java.util.MissingResourceException; | ||
| 44 | +import java.util.ResourceBundle; | ||
| 45 | + | ||
| 46 | +import javax.swing.JFrame; | ||
| 47 | + | ||
| 48 | +import org.jboss.weld.environment.se.Weld; | ||
| 49 | +import org.jboss.weld.environment.se.WeldContainer; | ||
| 50 | + | ||
| 51 | +import br.gov.frameworkdemoiselle.bootstrap.MainClass; | ||
| 52 | +import br.gov.frameworkdemoiselle.lifecycle.AfterShutdownProccess; | ||
| 53 | +import br.gov.frameworkdemoiselle.lifecycle.AfterStartupProccess; | ||
| 54 | +import br.gov.frameworkdemoiselle.util.Beans; | ||
| 55 | + | ||
| 56 | +/** | ||
| 57 | + * Central class to bootstrap Demoiselle SE applications. | ||
| 58 | + * | ||
| 59 | + * @author serpro | ||
| 60 | + */ | ||
| 61 | +public class Demoiselle { | ||
| 62 | + | ||
| 63 | + private static final String BUNDLE_NAME = "demoiselle-se-bundle"; | ||
| 64 | + | ||
| 65 | + private static final ResourceBundle RESOURCE_BUNDLE = ResourceBundle.getBundle(BUNDLE_NAME); | ||
| 66 | + | ||
| 67 | + protected Demoiselle() { | ||
| 68 | + throw new UnsupportedOperationException(getString("se-util-instantiation-error")); | ||
| 69 | + } | ||
| 70 | + | ||
| 71 | + /** | ||
| 72 | + * <p> | ||
| 73 | + * Bootstrapper that initializes the framework and call a main method. This method will ensure that the framework | ||
| 74 | + * facilities (CDI, etc.) are started before calling the application's real main method and that they are shut down | ||
| 75 | + * before the application's end. | ||
| 76 | + * </p> | ||
| 77 | + * <p> | ||
| 78 | + * To start an application using this method, execute the following code on a terminal: | ||
| 79 | + * </p> | ||
| 80 | + * | ||
| 81 | + * <pre> | ||
| 82 | + * ~$ java br.gov.frameworkdemoiselle.Demoiselle com.application.ClassWithMainMethod | ||
| 83 | + * </pre> | ||
| 84 | + * <p> | ||
| 85 | + * As you can see, you must pass the full qualified name of the class that has a main method as the first argument | ||
| 86 | + * of your application. | ||
| 87 | + * </p> | ||
| 88 | + * <p> | ||
| 89 | + * If your application needs more arguments, pass them normally after the class name. This method will remove the | ||
| 90 | + * class name of the argument list, so your real main method will se the first argument after the class name as | ||
| 91 | + * index 0 (zero) of the <code>args</code> parameter. Ex: | ||
| 92 | + * </p> | ||
| 93 | + * | ||
| 94 | + * <pre> | ||
| 95 | + * ~$ java br.gov.frameworkdemoiselle.Demoiselle com.application.ClassWithMainMethod firstArg secondArg | ||
| 96 | + * </pre> | ||
| 97 | + * <p> | ||
| 98 | + * Your application's main method will run as follow: | ||
| 99 | + * <p> | ||
| 100 | + * | ||
| 101 | + * <pre> | ||
| 102 | + * <code> | ||
| 103 | + * package com.application; | ||
| 104 | + * public class ClassWithMainMethod { | ||
| 105 | + * public static void main(String[] args){ | ||
| 106 | + * System.out.println(args[0]); //will print "firstArg" | ||
| 107 | + * System.out.println(args[1]); //will print "secondArg" | ||
| 108 | + * } | ||
| 109 | + * } | ||
| 110 | + * </code> | ||
| 111 | + * </pre> | ||
| 112 | + * | ||
| 113 | + * @param args | ||
| 114 | + * Arguments array. The first argument must be the full qualified name of the real class that has the | ||
| 115 | + * desired main method. All following arguments will be passed to the real main method. | ||
| 116 | + */ | ||
| 117 | + public static void main(String[] args) { | ||
| 118 | + if (args == null || args.length <= 0) { | ||
| 119 | + throw new DemoiselleException(getString("se-util-no-main-defined")); | ||
| 120 | + } | ||
| 121 | + | ||
| 122 | + Class<?> mainClass; | ||
| 123 | + try { | ||
| 124 | + mainClass = Class.forName(args[0]); | ||
| 125 | + } catch (ClassNotFoundException e) { | ||
| 126 | + throw new DemoiselleException(getString("se-util-invalid-main-defined"), e); | ||
| 127 | + } | ||
| 128 | + | ||
| 129 | + Weld weld = new Weld(); | ||
| 130 | + WeldContainer container = weld.initialize(); | ||
| 131 | + | ||
| 132 | + // Fire the AfterStartupProccess event. Methods annotated with @Startup will run now | ||
| 133 | + container.getBeanManager().fireEvent(new AfterStartupProccess() { | ||
| 134 | + }); | ||
| 135 | + | ||
| 136 | + String[] passedArgs = null; | ||
| 137 | + if (args.length > 1) { | ||
| 138 | + passedArgs = new String[args.length - 1]; | ||
| 139 | + System.arraycopy(args, 1, passedArgs, 0, args.length - 1); | ||
| 140 | + } | ||
| 141 | + | ||
| 142 | + Method mainMethod; | ||
| 143 | + try { | ||
| 144 | + mainMethod = mainClass.getMethod("main", String[].class); | ||
| 145 | + } catch (Exception e) { | ||
| 146 | + throw new DemoiselleException(getString("se-util-invalid-main-defined"), e); | ||
| 147 | + } | ||
| 148 | + | ||
| 149 | + try { | ||
| 150 | + mainMethod.invoke(null, ((Object) passedArgs)); | ||
| 151 | + } catch (Exception e) { | ||
| 152 | + throw new DemoiselleException(getString("se-util-error-calling-main"), e); | ||
| 153 | + } finally { | ||
| 154 | + container.getBeanManager().fireEvent(new AfterShutdownProccess() { | ||
| 155 | + }); | ||
| 156 | + weld.shutdown(); | ||
| 157 | + } | ||
| 158 | + } | ||
| 159 | + | ||
| 160 | + /** | ||
| 161 | + * <p> | ||
| 162 | + * Bootstrapper that initializes the framework and call a predefined user method. This method will ensure that the | ||
| 163 | + * framework facilities (CDI, etc.) are started before calling the application's {@link MainClass#run(String[] args)} | ||
| 164 | + * method. | ||
| 165 | + * <p> | ||
| 166 | + * To use this method you need to do two things: | ||
| 167 | + * </p> | ||
| 168 | + * <ul> | ||
| 169 | + * <li>Create a concrete class that implements the {@link MainClass} interface</li> | ||
| 170 | + * <li>Create a <code>main</code> class that calls this method passing your <code>MainClass</code> as argument</li> | ||
| 171 | + * </ul> | ||
| 172 | + * <p> | ||
| 173 | + * Here is an example of bootstrap with this method. | ||
| 174 | + * </p> | ||
| 175 | + * | ||
| 176 | + * <pre> | ||
| 177 | + * <code> | ||
| 178 | + * package com.application; | ||
| 179 | + * | ||
| 180 | + * import br.gov.frameworkdemoiselle.bootstrap.MainClass; | ||
| 181 | + * | ||
| 182 | + * public class MyStarterClass implements MainClass { | ||
| 183 | + * | ||
| 184 | + * public static void main(String[] args){ | ||
| 185 | + * Demoiselle.runStarterClass(MyStarterClass.class , args); | ||
| 186 | + * } | ||
| 187 | + * | ||
| 188 | + * public void run(String[] args){ | ||
| 189 | + * //Real startup code runs here | ||
| 190 | + * } | ||
| 191 | + * | ||
| 192 | + * @Startup | ||
| 193 | + * protected void init(){ | ||
| 194 | + * //This method will be called by the framework before the <code>run</code> method runs | ||
| 195 | + * } | ||
| 196 | + * | ||
| 197 | + * @Shutdown | ||
| 198 | + * protected void cleanup(){ | ||
| 199 | + * //This method will be called by the framework after the <code>run</code> method | ||
| 200 | + * //finishes and before the application closes. | ||
| 201 | + * } | ||
| 202 | + * | ||
| 203 | + * } | ||
| 204 | + * </code> | ||
| 205 | + * </pre> | ||
| 206 | + * | ||
| 207 | + * @param args | ||
| 208 | + * Arguments array. It will be passed unmodified to the {@link MainClass#run(String[] args)} method. | ||
| 209 | + */ | ||
| 210 | + public static void runStarterClass(final Class<? extends MainClass> mainClass, String[] args) { | ||
| 211 | + Weld weld = new Weld(); | ||
| 212 | + WeldContainer container = weld.initialize(); | ||
| 213 | + | ||
| 214 | + // Fire the AfterStartupProccess event. Methods annotated with @Startup will run now | ||
| 215 | + container.getBeanManager().fireEvent(new AfterStartupProccess() { | ||
| 216 | + }); | ||
| 217 | + | ||
| 218 | + MainClass mainClassInstance = null; | ||
| 219 | + try { | ||
| 220 | + mainClassInstance = Beans.getReference(mainClass); | ||
| 221 | + mainClassInstance.run(args); | ||
| 222 | + } catch (Exception e) { | ||
| 223 | + mainClassInstance = null; | ||
| 224 | + throw new DemoiselleException(getString("se-util-error-calling-run"), e); | ||
| 225 | + } finally { | ||
| 226 | + container.getBeanManager().fireEvent(new AfterShutdownProccess() { | ||
| 227 | + }); | ||
| 228 | + weld.shutdown(); | ||
| 229 | + | ||
| 230 | + mainClassInstance = null; | ||
| 231 | + } | ||
| 232 | + } | ||
| 233 | + | ||
| 234 | + /** | ||
| 235 | + * <p> | ||
| 236 | + * Bootstraps CDI and starts a main window. This window will be instantiated using the default constructor and have | ||
| 237 | + * all of it's injections resolved before instantiation. Also any methods annotated with <code>@Startup</code> | ||
| 238 | + * and <code>@Shutdown</code> will run before this window is created and after this window is closed, | ||
| 239 | + * respectively. | ||
| 240 | + * </p> | ||
| 241 | + * <p> | ||
| 242 | + * The new window will be started on the AWT event dispatcher thread, so it follows the recomendation of creating a | ||
| 243 | + * single thread to show the user interface and dispatch events since Swing components aren't thread-safe. | ||
| 244 | + * </p> | ||
| 245 | + * <p> | ||
| 246 | + * <p> | ||
| 247 | + * A typical use case of this method is: | ||
| 248 | + * </p> | ||
| 249 | + * | ||
| 250 | + * <pre> | ||
| 251 | + * <code> | ||
| 252 | + * package com.application; | ||
| 253 | + * | ||
| 254 | + * public class MyMainWindow extends JFrame { | ||
| 255 | + * | ||
| 256 | + * //Main method | ||
| 257 | + * public static void main(String args[]){ | ||
| 258 | + * Demoiselle.runMainWindow(MyMainWindow.class); | ||
| 259 | + * } | ||
| 260 | + * | ||
| 261 | + * //Configures the window | ||
| 262 | + * public MyMainWindow(){ | ||
| 263 | + * super("My Main Window"); | ||
| 264 | + * } | ||
| 265 | + * | ||
| 266 | + * //This method will be called after the window is constructed | ||
| 267 | + * @PostConstruct | ||
| 268 | + * public void initComponents(){ | ||
| 269 | + * //Initializes components. | ||
| 270 | + * | ||
| 271 | + * setVisible(true); | ||
| 272 | + * } | ||
| 273 | + * | ||
| 274 | + * } | ||
| 275 | + * </code> | ||
| 276 | + * </pre> | ||
| 277 | + * | ||
| 278 | + * @param jFrameClass | ||
| 279 | + * Type of the window that will be created. | ||
| 280 | + */ | ||
| 281 | + public static void runMainWindow(final Class<? extends JFrame> jFrameClass) { | ||
| 282 | + final Weld weld = new Weld(); | ||
| 283 | + final WeldContainer container = weld.initialize(); | ||
| 284 | + | ||
| 285 | + EventQueue.invokeLater(new Runnable() { | ||
| 286 | + | ||
| 287 | + public void run() { | ||
| 288 | + container.getBeanManager().fireEvent(new AfterStartupProccess() { | ||
| 289 | + }); | ||
| 290 | + | ||
| 291 | + JFrame jframe = null; | ||
| 292 | + try { | ||
| 293 | + jframe = Beans.getReference(jFrameClass); | ||
| 294 | + | ||
| 295 | + if (jframe.getDefaultCloseOperation() == JFrame.HIDE_ON_CLOSE) { | ||
| 296 | + jframe.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); | ||
| 297 | + } | ||
| 298 | + | ||
| 299 | + jframe.addWindowListener(new WindowListener() { | ||
| 300 | + | ||
| 301 | + @Override | ||
| 302 | + public void windowOpened(WindowEvent e) { | ||
| 303 | + } | ||
| 304 | + | ||
| 305 | + @Override | ||
| 306 | + public void windowIconified(WindowEvent e) { | ||
| 307 | + } | ||
| 308 | + | ||
| 309 | + @Override | ||
| 310 | + public void windowDeiconified(WindowEvent e) { | ||
| 311 | + } | ||
| 312 | + | ||
| 313 | + @Override | ||
| 314 | + public void windowDeactivated(WindowEvent e) { | ||
| 315 | + } | ||
| 316 | + | ||
| 317 | + @Override | ||
| 318 | + public void windowClosing(WindowEvent e) { | ||
| 319 | + container.getBeanManager().fireEvent(new AfterShutdownProccess() { | ||
| 320 | + }); | ||
| 321 | + weld.shutdown(); | ||
| 322 | + } | ||
| 323 | + | ||
| 324 | + @Override | ||
| 325 | + public void windowClosed(WindowEvent e) { | ||
| 326 | + } | ||
| 327 | + | ||
| 328 | + @Override | ||
| 329 | + public void windowActivated(WindowEvent e) { | ||
| 330 | + } | ||
| 331 | + }); | ||
| 332 | + } catch (Exception e) { | ||
| 333 | + throw new DemoiselleException(getString("se-util-error-starting-jframe"), e); | ||
| 334 | + } | ||
| 335 | + } | ||
| 336 | + }); | ||
| 337 | + } | ||
| 338 | + | ||
| 339 | + private static String getString(String key) { | ||
| 340 | + try { | ||
| 341 | + return RESOURCE_BUNDLE.getString(key); | ||
| 342 | + } catch (MissingResourceException e) { | ||
| 343 | + return '!' + key + '!'; | ||
| 344 | + } | ||
| 345 | + } | ||
| 346 | + | ||
| 347 | +} |
impl/extension/se/src/main/java/br/gov/frameworkdemoiselle/bootstrap/MainClass.java
0 → 100644
| @@ -0,0 +1,58 @@ | @@ -0,0 +1,58 @@ | ||
| 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.bootstrap; | ||
| 38 | + | ||
| 39 | +import br.gov.frameworkdemoiselle.Demoiselle; | ||
| 40 | + | ||
| 41 | +/** | ||
| 42 | + * Simple interface a class must implement to be started by the {@link Demoiselle#runStarterClass(Class, String[])} utility method. | ||
| 43 | + * | ||
| 44 | + * @author serpro | ||
| 45 | + * | ||
| 46 | + */ | ||
| 47 | +public interface MainClass { | ||
| 48 | + | ||
| 49 | + /** | ||
| 50 | + * <p>Bootstrap CDI and run startup code for your application. This method will | ||
| 51 | + * be automatically called when {@link Demoiselle#runStarterClass(Class, String[])} | ||
| 52 | + * is called passing this method's owner class.</p> | ||
| 53 | + * | ||
| 54 | + * @param args The same arguments received by your main method. | ||
| 55 | + */ | ||
| 56 | + void run(String[] args); | ||
| 57 | + | ||
| 58 | +} |
| @@ -0,0 +1 @@ | @@ -0,0 +1 @@ | ||
| 1 | +Demoiselle.0=Essa classe utilitária não deve ser instanciada |
impl/extension/se/src/main/resources/demoiselle-se-bundle.properties
0 → 100644
| @@ -0,0 +1,42 @@ | @@ -0,0 +1,42 @@ | ||
| 1 | +# Demoiselle Framework | ||
| 2 | +# Copyright (C) 2010 SERPRO | ||
| 3 | +# ---------------------------------------------------------------------------- | ||
| 4 | +# This file is part of Demoiselle Framework. | ||
| 5 | +# | ||
| 6 | +# Demoiselle Framework is free software; you can redistribute it and/or | ||
| 7 | +# modify it under the terms of the GNU Lesser General Public License version 3 | ||
| 8 | +# as published by the Free Software Foundation. | ||
| 9 | +# | ||
| 10 | +# This program is distributed in the hope that it will be useful, | ||
| 11 | +# but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 12 | +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 13 | +# GNU General Public License for more details. | ||
| 14 | +# | ||
| 15 | +# You should have received a copy of the GNU Lesser General Public License version 3 | ||
| 16 | +# along with this program; if not, see <http://www.gnu.org/licenses/> | ||
| 17 | +# or write to the Free Software Foundation, Inc., 51 Franklin Street, | ||
| 18 | +# Fifth Floor, Boston, MA 02110-1301, USA. | ||
| 19 | +# ---------------------------------------------------------------------------- | ||
| 20 | +# Este arquivo é parte do Framework Demoiselle. | ||
| 21 | +# | ||
| 22 | +# O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou | ||
| 23 | +# modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação | ||
| 24 | +# do Software Livre (FSF). | ||
| 25 | +# | ||
| 26 | +# Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA | ||
| 27 | +# GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou | ||
| 28 | +# APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português | ||
| 29 | +# para maiores detalhes. | ||
| 30 | +# | ||
| 31 | +# Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título | ||
| 32 | +# "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/> | ||
| 33 | +# ou escreva para a Fundação do Software Livre (FSF) Inc., | ||
| 34 | +# 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. | ||
| 35 | + | ||
| 36 | +se-util-instantiation-error=Essa classe utilit\u00E1ria n\u00E3o deve ser instanciada | ||
| 37 | +se-util-no-main-defined=\u00C9 necess\u00E1rio informar o nome completo da classe que cont\u00E9m o m\u00E9todo "public static void main" | ||
| 38 | +se-util-invalid-main-defined=A classe informada n\u00E3o cont\u00E9m um m\u00E9todo "public static void main" ou n\u00E3o existe | ||
| 39 | +se-util-invalid-class-defined=A classe informada n\u00E3o \u00E9 conhecida pelo container CDI ou n\u00E3o existe | ||
| 40 | +se-util-error-calling-main=N\u00E3o foi poss\u00EDvel iniciar a aplica\u00E7\u00E3o, o m\u00E9todo "main" disparou uma exce\u00E7\u00E3o ao ser invocado | ||
| 41 | +se-util-error-calling-run=N\u00E3o foi poss\u00EDvel iniciar a aplica\u00E7\u00E3o, o m\u00E9todo "start" disparou uma exce\u00E7\u00E3o ao ser invocado | ||
| 42 | +se-util-error-starting-jframe=N\u00E3o foi poss\u00EDvel criar a janela principal da aplica\u00E7\u00E3o. | ||
| 0 | \ No newline at end of file | 43 | \ No newline at end of file |
impl/extension/se/src/main/resources/demoiselle-swing-bundle.properties
| @@ -1,35 +0,0 @@ | @@ -1,35 +0,0 @@ | ||
| 1 | -# Demoiselle Framework | ||
| 2 | -# Copyright (C) 2010 SERPRO | ||
| 3 | -# ---------------------------------------------------------------------------- | ||
| 4 | -# This file is part of Demoiselle Framework. | ||
| 5 | -# | ||
| 6 | -# Demoiselle Framework is free software; you can redistribute it and/or | ||
| 7 | -# modify it under the terms of the GNU Lesser General Public License version 3 | ||
| 8 | -# as published by the Free Software Foundation. | ||
| 9 | -# | ||
| 10 | -# This program is distributed in the hope that it will be useful, | ||
| 11 | -# but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 12 | -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 13 | -# GNU General Public License for more details. | ||
| 14 | -# | ||
| 15 | -# You should have received a copy of the GNU Lesser General Public License version 3 | ||
| 16 | -# along with this program; if not, see <http://www.gnu.org/licenses/> | ||
| 17 | -# or write to the Free Software Foundation, Inc., 51 Franklin Street, | ||
| 18 | -# Fifth Floor, Boston, MA 02110-1301, USA. | ||
| 19 | -# ---------------------------------------------------------------------------- | ||
| 20 | -# Este arquivo é parte do Framework Demoiselle. | ||
| 21 | -# | ||
| 22 | -# O Framework Demoiselle é um software livre; você pode redistribuí-lo e/ou | ||
| 23 | -# modificá-lo dentro dos termos da GNU LGPL versão 3 como publicada pela Fundação | ||
| 24 | -# do Software Livre (FSF). | ||
| 25 | -# | ||
| 26 | -# Este programa é distribuído na esperança que possa ser útil, mas SEM NENHUMA | ||
| 27 | -# GARANTIA; sem uma garantia implícita de ADEQUAÇÃO a qualquer MERCADO ou | ||
| 28 | -# APLICAÇÃO EM PARTICULAR. Veja a Licença Pública Geral GNU/LGPL em português | ||
| 29 | -# para maiores detalhes. | ||
| 30 | -# | ||
| 31 | -# Você deve ter recebido uma cópia da GNU LGPL versão 3, sob o título | ||
| 32 | -# "LICENCA.txt", junto com esse programa. Se não, acesse <http://www.gnu.org/licenses/> | ||
| 33 | -# ou escreva para a Fundação do Software Livre (FSF) Inc., | ||
| 34 | -# 51 Franklin St, Fifth Floor, Boston, MA 02111-1301, USA. | ||
| 35 | - |
impl/extension/se/src/test/java/bootstraper/ClassImplementingMainClass.java
0 → 100644
| @@ -0,0 +1,78 @@ | @@ -0,0 +1,78 @@ | ||
| 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 bootstraper; | ||
| 38 | + | ||
| 39 | +import javax.inject.Inject; | ||
| 40 | + | ||
| 41 | +import br.gov.frameworkdemoiselle.bootstrap.MainClass; | ||
| 42 | +import br.gov.frameworkdemoiselle.lifecycle.Shutdown; | ||
| 43 | +import br.gov.frameworkdemoiselle.lifecycle.Startup; | ||
| 44 | + | ||
| 45 | + | ||
| 46 | +public class ClassImplementingMainClass implements MainClass { | ||
| 47 | + | ||
| 48 | + public static String startupData; | ||
| 49 | + | ||
| 50 | + public static String shutdownData; | ||
| 51 | + | ||
| 52 | + public static String firstArgument; | ||
| 53 | + | ||
| 54 | + public static String lastArgument; | ||
| 55 | + | ||
| 56 | + public static String dataFromInjectedResource; | ||
| 57 | + | ||
| 58 | + @Inject | ||
| 59 | + public InjectedResource injectedResource; | ||
| 60 | + | ||
| 61 | + @Startup | ||
| 62 | + public void fillData(){ | ||
| 63 | + startupData = "filled"; | ||
| 64 | + } | ||
| 65 | + | ||
| 66 | + @Shutdown | ||
| 67 | + public void eraseData(){ | ||
| 68 | + shutdownData = "filled"; | ||
| 69 | + } | ||
| 70 | + | ||
| 71 | + @Override | ||
| 72 | + public void run(String[] args) { | ||
| 73 | + dataFromInjectedResource = injectedResource.getData(); | ||
| 74 | + firstArgument = args[0]; | ||
| 75 | + lastArgument = args[args.length-1]; | ||
| 76 | + } | ||
| 77 | + | ||
| 78 | +} |
impl/extension/se/src/test/java/bootstraper/ClassWithMain.java
0 → 100644
| @@ -0,0 +1,73 @@ | @@ -0,0 +1,73 @@ | ||
| 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 bootstraper; | ||
| 38 | + | ||
| 39 | +import br.gov.frameworkdemoiselle.lifecycle.Shutdown; | ||
| 40 | +import br.gov.frameworkdemoiselle.lifecycle.Startup; | ||
| 41 | +import br.gov.frameworkdemoiselle.util.Beans; | ||
| 42 | + | ||
| 43 | + | ||
| 44 | +public class ClassWithMain { | ||
| 45 | + | ||
| 46 | + public static String startupData; | ||
| 47 | + | ||
| 48 | + public static String shutdownData; | ||
| 49 | + | ||
| 50 | + public static String firstArgument; | ||
| 51 | + | ||
| 52 | + public static String lastArgument; | ||
| 53 | + | ||
| 54 | + public static String dataFromInjectedResource; | ||
| 55 | + | ||
| 56 | + public static void main(String[] args){ | ||
| 57 | + InjectedResource injectedResource = Beans.getReference(InjectedResource.class); | ||
| 58 | + dataFromInjectedResource = injectedResource.getData(); | ||
| 59 | + firstArgument = args[0]; | ||
| 60 | + lastArgument = args[args.length-1]; | ||
| 61 | + } | ||
| 62 | + | ||
| 63 | + @Startup | ||
| 64 | + public void fillData(){ | ||
| 65 | + startupData = "filled"; | ||
| 66 | + } | ||
| 67 | + | ||
| 68 | + @Shutdown | ||
| 69 | + public void eraseData(){ | ||
| 70 | + shutdownData = "filled"; | ||
| 71 | + } | ||
| 72 | + | ||
| 73 | +} |
impl/extension/se/src/test/java/bootstraper/DemoiselleSeBootstrapTest.java
0 → 100644
| @@ -0,0 +1,76 @@ | @@ -0,0 +1,76 @@ | ||
| 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 bootstraper; | ||
| 38 | + | ||
| 39 | +import org.junit.Assert; | ||
| 40 | +import org.junit.Test; | ||
| 41 | + | ||
| 42 | +import br.gov.frameworkdemoiselle.Demoiselle; | ||
| 43 | + | ||
| 44 | + | ||
| 45 | +public class DemoiselleSeBootstrapTest { | ||
| 46 | + | ||
| 47 | + @Test | ||
| 48 | + public void startThroughMainMethod(){ | ||
| 49 | + Demoiselle.main(new String[]{"bootstraper.ClassWithMain" , "firstArgument" , "secondArgument" , "lastArgument"}); | ||
| 50 | + | ||
| 51 | + Assert.assertEquals("firstArgument", ClassWithMain.firstArgument); | ||
| 52 | + Assert.assertEquals("lastArgument", ClassWithMain.lastArgument); | ||
| 53 | + Assert.assertEquals("injected resource data", ClassWithMain.dataFromInjectedResource); | ||
| 54 | + Assert.assertEquals("filled", ClassWithMain.startupData); | ||
| 55 | + Assert.assertEquals("filled", ClassWithMain.shutdownData); | ||
| 56 | + } | ||
| 57 | + | ||
| 58 | + @Test | ||
| 59 | + public void startThroughMainClassInterface(){ | ||
| 60 | + Demoiselle.runStarterClass(ClassImplementingMainClass.class, new String[]{"firstArgument" , "secondArgument" , "lastArgument"}); | ||
| 61 | + | ||
| 62 | + Assert.assertEquals("firstArgument", ClassImplementingMainClass.firstArgument); | ||
| 63 | + Assert.assertEquals("lastArgument", ClassImplementingMainClass.lastArgument); | ||
| 64 | + Assert.assertEquals("injected resource data", ClassImplementingMainClass.dataFromInjectedResource); | ||
| 65 | + Assert.assertEquals("filled", ClassImplementingMainClass.startupData); | ||
| 66 | + Assert.assertEquals("filled", ClassImplementingMainClass.shutdownData); | ||
| 67 | + } | ||
| 68 | + | ||
| 69 | + @Test | ||
| 70 | + public void startJFrame(){ | ||
| 71 | + Demoiselle.runMainWindow(FakeJFrame.class); | ||
| 72 | + | ||
| 73 | + Assert.assertEquals("injected resource data", FakeJFrame.dataFromInjectedResource); | ||
| 74 | + Assert.assertEquals("dataFromPostConstruct", FakeJFrame.dataFromPostConstruct); | ||
| 75 | + } | ||
| 76 | +} |
impl/extension/se/src/test/java/bootstraper/FakeJFrame.java
0 → 100644
| @@ -0,0 +1,43 @@ | @@ -0,0 +1,43 @@ | ||
| 1 | +package bootstraper; | ||
| 2 | + | ||
| 3 | +import java.awt.GraphicsConfiguration; | ||
| 4 | +import java.awt.HeadlessException; | ||
| 5 | + | ||
| 6 | +import javax.annotation.PostConstruct; | ||
| 7 | +import javax.inject.Inject; | ||
| 8 | +import javax.swing.JFrame; | ||
| 9 | + | ||
| 10 | + | ||
| 11 | +public class FakeJFrame extends JFrame { | ||
| 12 | + | ||
| 13 | + private static final long serialVersionUID = 1L; | ||
| 14 | + | ||
| 15 | + @Inject | ||
| 16 | + private InjectedResource injectedResource; | ||
| 17 | + | ||
| 18 | + public static String dataFromInjectedResource; | ||
| 19 | + | ||
| 20 | + public static String dataFromPostConstruct; | ||
| 21 | + | ||
| 22 | + public static FakeJFrame instance; | ||
| 23 | + | ||
| 24 | + public FakeJFrame() throws HeadlessException { | ||
| 25 | + } | ||
| 26 | + | ||
| 27 | + public FakeJFrame(GraphicsConfiguration gc) { | ||
| 28 | + } | ||
| 29 | + | ||
| 30 | + public FakeJFrame(String title) throws HeadlessException { | ||
| 31 | + } | ||
| 32 | + | ||
| 33 | + public FakeJFrame(String title, GraphicsConfiguration gc) { | ||
| 34 | + } | ||
| 35 | + | ||
| 36 | + @PostConstruct | ||
| 37 | + public void init(){ | ||
| 38 | + dataFromPostConstruct = "dataFromPostConstruct"; | ||
| 39 | + dataFromInjectedResource = injectedResource.getData(); | ||
| 40 | + instance = this; | ||
| 41 | + } | ||
| 42 | + | ||
| 43 | +} |
impl/extension/se/src/test/java/bootstraper/InjectedResource.java
0 → 100644
| @@ -0,0 +1,54 @@ | @@ -0,0 +1,54 @@ | ||
| 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 bootstraper; | ||
| 38 | + | ||
| 39 | + | ||
| 40 | +public class InjectedResource { | ||
| 41 | + | ||
| 42 | + public String data = "injected resource data"; | ||
| 43 | + | ||
| 44 | + | ||
| 45 | + public String getData() { | ||
| 46 | + return data; | ||
| 47 | + } | ||
| 48 | + | ||
| 49 | + | ||
| 50 | + public void setData(String data) { | ||
| 51 | + this.data = data; | ||
| 52 | + } | ||
| 53 | + | ||
| 54 | +} |
| @@ -0,0 +1,11 @@ | @@ -0,0 +1,11 @@ | ||
| 1 | +<beans xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" | ||
| 2 | + xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/beans_1_0.xsd"> | ||
| 3 | + | ||
| 4 | + <interceptors> | ||
| 5 | + <class>br.gov.frameworkdemoiselle.transaction.TransactionalInterceptor</class> | ||
| 6 | + <class>br.gov.frameworkdemoiselle.security.RequiredPermissionInterceptor</class> | ||
| 7 | + <class>br.gov.frameworkdemoiselle.security.RequiredRoleInterceptor</class> | ||
| 8 | + <class>br.gov.frameworkdemoiselle.exception.ExceptionHandlerInterceptor</class> | ||
| 9 | + </interceptors> | ||
| 10 | + | ||
| 11 | +</beans> |