You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by rm...@apache.org on 2016/12/04 11:01:44 UTC

svn commit: r1772522 [33/45] - in /tomee/site/trunk: content/ content/admin/ content/admin/cluster/ content/admin/configuration/ content/advanced/ content/advanced/applicationcomposer/ content/advanced/client/ content/advanced/setup/ content/advanced/s...

Added: tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/component-interfaces.adoc
URL: http://svn.apache.org/viewvc/tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/component-interfaces.adoc?rev=1772522&view=auto
==============================================================================
--- tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/component-interfaces.adoc (added)
+++ tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/component-interfaces.adoc Sun Dec  4 11:01:40 2016
@@ -0,0 +1,497 @@
+= Component Interfaces
+:jbake-date: 2016-09-06
+:jbake-type: page
+:jbake-tomeepdf:
+:jbake-status: published
+
+Example component-interfaces can be browsed at https://github.com/apache/tomee/tree/master/examples/component-interfaces
+
+
+*Help us document this example! Click the blue pencil icon in the upper right to edit this page.*
+
+==  FriendlyPerson
+
+
+[source,java]
+----
+package org.superbiz;
+
+import javax.ejb.Init;
+import javax.ejb.Local;
+import javax.ejb.LocalHome;
+import javax.ejb.Remote;
+import javax.ejb.RemoteHome;
+import javax.ejb.Remove;
+import javax.ejb.Stateful;
+import java.text.MessageFormat;
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Properties;
+
+/**
+ * This is an EJB 3 style pojo stateful session bean
+ * it does not need to implement javax.ejb.SessionBean
+ *
+ */
+//START SNIPPET: code
+
+// EJB 3.0 Style business interfaces
+// Each of these interfaces are already annotated in the classes
+// themselves with @Remote and @Local, so annotating them here
+// in the bean class again is not really required.
+@Remote({FriendlyPersonRemote.class})
+@Local({FriendlyPersonLocal.class})
+
+// EJB 2.1 Style component interfaces
+// These interfaces, however, must be annotated here in the bean class.
+// Use of @RemoteHome in the FriendlyPersonEjbHome class itself is not allowed.
+// Use of @LocalHome in the FriendlyPersonEjbLocalHome class itself is also not allowed.
+@RemoteHome(FriendlyPersonEjbHome.class)
+@LocalHome(FriendlyPersonEjbLocalHome.class)
+
+@Stateful
+public class FriendlyPerson implements FriendlyPersonLocal, FriendlyPersonRemote {
+
+    private final HashMap<String, MessageFormat> greetings;
+    private final Properties languagePreferences;
+
+    private String defaultLanguage;
+
+    public FriendlyPerson() {
+        greetings = new HashMap();
+        languagePreferences = new Properties();
+        defaultLanguage = Locale.getDefault().getLanguage();
+
+        addGreeting("en", "Hello {0}!");
+        addGreeting("es", "Hola {0}!");
+        addGreeting("fr", "Bonjour {0}!");
+        addGreeting("pl", "Witaj {0}!");
+    }
+
+    /**
+     * This method corresponds to the FriendlyPersonEjbHome.create() method
+     * and the FriendlyPersonEjbLocalHome.create()
+     * <p/>
+     * If you do not have an EJBHome or EJBLocalHome interface, this method
+     * can be deleted.
+     */
+    @Init
+    public void create() {
+    }
+
+    /**
+     * This method corresponds to the following methods:
+     * - EJBObject.remove()
+     * - EJBHome.remove(ejbObject)
+     * - EJBLocalObject.remove()
+     * - EJBLocalHome.remove(ejbObject)
+     * <p/>
+     * If you do not have an EJBHome or EJBLocalHome interface, this method
+     * can be deleted.
+     */
+    @Remove
+    public void remove() {
+    }
+
+    public String greet(String friend) {
+        String language = languagePreferences.getProperty(friend, defaultLanguage);
+        return greet(language, friend);
+    }
+
+    public String greet(String language, String friend) {
+        MessageFormat greeting = greetings.get(language);
+        if (greeting == null) {
+            Locale locale = new Locale(language);
+            return "Sorry, I don't speak " + locale.getDisplayLanguage() + ".";
+        }
+
+        return greeting.format(new Object[]{friend});
+    }
+
+    public void addGreeting(String language, String message) {
+        greetings.put(language, new MessageFormat(message));
+    }
+
+    public void setLanguagePreferences(String friend, String language) {
+        languagePreferences.put(friend, language);
+    }
+
+    public String getDefaultLanguage() {
+        return defaultLanguage;
+    }
+
+    public void setDefaultLanguage(String defaultLanguage) {
+        this.defaultLanguage = defaultLanguage;
+    }
+}
+----
+
+
+==  FriendlyPersonEjbHome
+
+
+[source,java]
+----
+package org.superbiz;
+
+//START SNIPPET: code
+
+import javax.ejb.CreateException;
+import javax.ejb.EJBHome;
+import java.rmi.RemoteException;
+
+public interface FriendlyPersonEjbHome extends EJBHome {
+    FriendlyPersonEjbObject create() throws CreateException, RemoteException;
+}
+----
+
+
+==  FriendlyPersonEjbLocalHome
+
+
+[source,java]
+----
+package org.superbiz;
+
+//START SNIPPET: code
+
+import javax.ejb.CreateException;
+import javax.ejb.EJBLocalHome;
+import java.rmi.RemoteException;
+
+public interface FriendlyPersonEjbLocalHome extends EJBLocalHome {
+    FriendlyPersonEjbLocalObject create() throws CreateException, RemoteException;
+}
+----
+
+
+==  FriendlyPersonEjbLocalObject
+
+
+[source,java]
+----
+package org.superbiz;
+
+import javax.ejb.EJBLocalObject;
+
+public interface FriendlyPersonEjbLocalObject extends EJBLocalObject {
+    String greet(String friend);
+
+    String greet(String language, String friend);
+
+    void addGreeting(String language, String message);
+
+    void setLanguagePreferences(String friend, String language);
+
+    String getDefaultLanguage();
+
+    void setDefaultLanguage(String defaultLanguage);
+}
+----
+
+
+==  FriendlyPersonEjbObject
+
+
+[source,java]
+----
+package org.superbiz;
+
+//START SNIPPET: code
+
+import javax.ejb.EJBObject;
+import java.rmi.RemoteException;
+
+public interface FriendlyPersonEjbObject extends EJBObject {
+    String greet(String friend) throws RemoteException;
+
+    String greet(String language, String friend) throws RemoteException;
+
+    void addGreeting(String language, String message) throws RemoteException;
+
+    void setLanguagePreferences(String friend, String language) throws RemoteException;
+
+    String getDefaultLanguage() throws RemoteException;
+
+    void setDefaultLanguage(String defaultLanguage) throws RemoteException;
+}
+----
+
+
+==  FriendlyPersonLocal
+
+
+[source,java]
+----
+package org.superbiz;
+
+//START SNIPPET: code
+
+import javax.ejb.Local;
+
+@Local
+public interface FriendlyPersonLocal {
+    String greet(String friend);
+
+    String greet(String language, String friend);
+
+    void addGreeting(String language, String message);
+
+    void setLanguagePreferences(String friend, String language);
+
+    String getDefaultLanguage();
+
+    void setDefaultLanguage(String defaultLanguage);
+}
+----
+
+
+==  FriendlyPersonRemote
+
+
+[source,java]
+----
+package org.superbiz;
+
+import javax.ejb.Remote;
+
+//START SNIPPET: code
+@Remote
+public interface FriendlyPersonRemote {
+    String greet(String friend);
+
+    String greet(String language, String friend);
+
+    void addGreeting(String language, String message);
+
+    void setLanguagePreferences(String friend, String language);
+
+    String getDefaultLanguage();
+
+    void setDefaultLanguage(String defaultLanguage);
+}
+----
+
+
+==  FriendlyPersonTest
+
+
+[source,java]
+----
+package org.superbiz;
+
+import junit.framework.TestCase;
+
+import javax.ejb.embeddable.EJBContainer;
+import javax.naming.Context;
+import java.util.Locale;
+
+/**
+ * @version $Rev: 1090810 $ $Date: 2011-04-10 07:49:26 -0700 (Sun, 10 Apr 2011) $
+ */
+public class FriendlyPersonTest extends TestCase {
+
+    private Context context;
+
+    protected void setUp() throws Exception {
+        context = EJBContainer.createEJBContainer().getContext();
+    }
+
+    /**
+     * Here we lookup and test the FriendlyPerson bean via its EJB 2.1 EJBHome and EJBObject interfaces
+     *
+     * @throws Exception
+     */
+    //START SNIPPET: remotehome
+    public void testEjbHomeAndEjbObject() throws Exception {
+        Object object = context.lookup("java:global/component-interfaces/FriendlyPerson!org.superbiz.FriendlyPersonEjbHome");
+        FriendlyPersonEjbHome home = (FriendlyPersonEjbHome) object;
+        FriendlyPersonEjbObject friendlyPerson = home.create();
+
+        friendlyPerson.setDefaultLanguage("en");
+
+        assertEquals("Hello David!", friendlyPerson.greet("David"));
+        assertEquals("Hello Amelia!", friendlyPerson.greet("Amelia"));
+
+        friendlyPerson.setLanguagePreferences("Amelia", "es");
+
+        assertEquals("Hello David!", friendlyPerson.greet("David"));
+        assertEquals("Hola Amelia!", friendlyPerson.greet("Amelia"));
+
+        // Amelia took some French, let's see if she remembers
+        assertEquals("Bonjour Amelia!", friendlyPerson.greet("fr", "Amelia"));
+
+        // Dave should take some Polish and if he had, he could say Hi in Polish
+        assertEquals("Witaj Dave!", friendlyPerson.greet("pl", "Dave"));
+
+        // Let's see if I speak Portuguese
+        assertEquals("Sorry, I don't speak " + new Locale("pt").getDisplayLanguage() + ".", friendlyPerson.greet("pt", "David"));
+
+        // Ok, well I've been meaning to learn, so...
+        friendlyPerson.addGreeting("pt", "Ola {0}!");
+
+        assertEquals("Ola David!", friendlyPerson.greet("pt", "David"));
+    }
+    //END SNIPPET: remotehome
+
+
+    /**
+     * Here we lookup and test the FriendlyPerson bean via its EJB 2.1 EJBLocalHome and EJBLocalObject interfaces
+     *
+     * @throws Exception
+     */
+    public void testEjbLocalHomeAndEjbLocalObject() throws Exception {
+        Object object = context.lookup("java:global/component-interfaces/FriendlyPerson!org.superbiz.FriendlyPersonEjbLocalHome");
+        FriendlyPersonEjbLocalHome home = (FriendlyPersonEjbLocalHome) object;
+        FriendlyPersonEjbLocalObject friendlyPerson = home.create();
+
+        friendlyPerson.setDefaultLanguage("en");
+
+        assertEquals("Hello David!", friendlyPerson.greet("David"));
+        assertEquals("Hello Amelia!", friendlyPerson.greet("Amelia"));
+
+        friendlyPerson.setLanguagePreferences("Amelia", "es");
+
+        assertEquals("Hello David!", friendlyPerson.greet("David"));
+        assertEquals("Hola Amelia!", friendlyPerson.greet("Amelia"));
+
+        // Amelia took some French, let's see if she remembers
+        assertEquals("Bonjour Amelia!", friendlyPerson.greet("fr", "Amelia"));
+
+        // Dave should take some Polish and if he had, he could say Hi in Polish
+        assertEquals("Witaj Dave!", friendlyPerson.greet("pl", "Dave"));
+
+        // Let's see if I speak Portuguese
+        assertEquals("Sorry, I don't speak " + new Locale("pt").getDisplayLanguage() + ".", friendlyPerson.greet("pt", "David"));
+
+        // Ok, well I've been meaning to learn, so...
+        friendlyPerson.addGreeting("pt", "Ola {0}!");
+
+        assertEquals("Ola David!", friendlyPerson.greet("pt", "David"));
+    }
+
+    /**
+     * Here we lookup and test the FriendlyPerson bean via its EJB 3.0 business remote interface
+     *
+     * @throws Exception
+     */
+    //START SNIPPET: remote
+    public void testBusinessRemote() throws Exception {
+        Object object = context.lookup("java:global/component-interfaces/FriendlyPerson!org.superbiz.FriendlyPersonRemote");
+
+        FriendlyPersonRemote friendlyPerson = (FriendlyPersonRemote) object;
+
+        friendlyPerson.setDefaultLanguage("en");
+
+        assertEquals("Hello David!", friendlyPerson.greet("David"));
+        assertEquals("Hello Amelia!", friendlyPerson.greet("Amelia"));
+
+        friendlyPerson.setLanguagePreferences("Amelia", "es");
+
+        assertEquals("Hello David!", friendlyPerson.greet("David"));
+        assertEquals("Hola Amelia!", friendlyPerson.greet("Amelia"));
+
+        // Amelia took some French, let's see if she remembers
+        assertEquals("Bonjour Amelia!", friendlyPerson.greet("fr", "Amelia"));
+
+        // Dave should take some Polish and if he had, he could say Hi in Polish
+        assertEquals("Witaj Dave!", friendlyPerson.greet("pl", "Dave"));
+
+        // Let's see if I speak Portuguese
+        assertEquals("Sorry, I don't speak " + new Locale("pt").getDisplayLanguage() + ".", friendlyPerson.greet("pt", "David"));
+
+        // Ok, well I've been meaning to learn, so...
+        friendlyPerson.addGreeting("pt", "Ola {0}!");
+
+        assertEquals("Ola David!", friendlyPerson.greet("pt", "David"));
+    }
+    //START SNIPPET: remote
+
+    /**
+     * Here we lookup and test the FriendlyPerson bean via its EJB 3.0 business local interface
+     *
+     * @throws Exception
+     */
+    public void testBusinessLocal() throws Exception {
+        Object object = context.lookup("java:global/component-interfaces/FriendlyPerson!org.superbiz.FriendlyPersonLocal");
+
+        FriendlyPersonLocal friendlyPerson = (FriendlyPersonLocal) object;
+
+        friendlyPerson.setDefaultLanguage("en");
+
+        assertEquals("Hello David!", friendlyPerson.greet("David"));
+        assertEquals("Hello Amelia!", friendlyPerson.greet("Amelia"));
+
+        friendlyPerson.setLanguagePreferences("Amelia", "es");
+
+        assertEquals("Hello David!", friendlyPerson.greet("David"));
+        assertEquals("Hola Amelia!", friendlyPerson.greet("Amelia"));
+
+        // Amelia took some French, let's see if she remembers
+        assertEquals("Bonjour Amelia!", friendlyPerson.greet("fr", "Amelia"));
+
+        // Dave should take some Polish and if he had, he could say Hi in Polish
+        assertEquals("Witaj Dave!", friendlyPerson.greet("pl", "Dave"));
+
+        // Let's see if I speak Portuguese
+        assertEquals("Sorry, I don't speak " + new Locale("pt").getDisplayLanguage() + ".", friendlyPerson.greet("pt", "David"));
+
+        // Ok, well I've been meaning to learn, so...
+        friendlyPerson.addGreeting("pt", "Ola {0}!");
+
+        assertEquals("Ola David!", friendlyPerson.greet("pt", "David"));
+    }
+
+}
+----
+
+
+=  Running
+
+    
+
+[source]
+----
+-------------------------------------------------------
+ T E S T S
+-------------------------------------------------------
+Running org.superbiz.FriendlyPersonTest
+Apache OpenEJB 4.0.0-beta-1    build: 20111002-04:06
+http://tomee.apache.org/
+INFO - openejb.home = /Users/dblevins/examples/component-interfaces
+INFO - openejb.base = /Users/dblevins/examples/component-interfaces
+INFO - Using 'javax.ejb.embeddable.EJBContainer=true'
+INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)
+INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)
+INFO - Found EjbModule in classpath: /Users/dblevins/examples/component-interfaces/target/classes
+INFO - Beginning load: /Users/dblevins/examples/component-interfaces/target/classes
+INFO - Configuring enterprise application: /Users/dblevins/examples/component-interfaces
+INFO - Configuring Service(id=Default Stateful Container, type=Container, provider-id=Default Stateful Container)
+INFO - Auto-creating a container for bean FriendlyPerson: Container(type=STATEFUL, id=Default Stateful Container)
+INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)
+INFO - Auto-creating a container for bean org.superbiz.FriendlyPersonTest: Container(type=MANAGED, id=Default Managed Container)
+INFO - Enterprise application "/Users/dblevins/examples/component-interfaces" loaded.
+INFO - Assembling app: /Users/dblevins/examples/component-interfaces
+INFO - Jndi(name="java:global/component-interfaces/FriendlyPerson!org.superbiz.FriendlyPersonLocal")
+INFO - Jndi(name="java:global/component-interfaces/FriendlyPerson!org.superbiz.FriendlyPersonRemote")
+INFO - Jndi(name="java:global/component-interfaces/FriendlyPerson!org.superbiz.FriendlyPersonEjbLocalHome")
+INFO - Jndi(name="java:global/component-interfaces/FriendlyPerson!org.superbiz.FriendlyPersonEjbHome")
+INFO - Jndi(name="java:global/component-interfaces/FriendlyPerson")
+INFO - Jndi(name="java:global/EjbModule803660549/org.superbiz.FriendlyPersonTest!org.superbiz.FriendlyPersonTest")
+INFO - Jndi(name="java:global/EjbModule803660549/org.superbiz.FriendlyPersonTest")
+INFO - Created Ejb(deployment-id=FriendlyPerson, ejb-name=FriendlyPerson, container=Default Stateful Container)
+INFO - Created Ejb(deployment-id=org.superbiz.FriendlyPersonTest, ejb-name=org.superbiz.FriendlyPersonTest, container=Default Managed Container)
+INFO - Started Ejb(deployment-id=FriendlyPerson, ejb-name=FriendlyPerson, container=Default Stateful Container)
+INFO - Started Ejb(deployment-id=org.superbiz.FriendlyPersonTest, ejb-name=org.superbiz.FriendlyPersonTest, container=Default Managed Container)
+INFO - Deployed Application(path=/Users/dblevins/examples/component-interfaces)
+INFO - EJBContainer already initialized.  Call ejbContainer.close() to allow reinitialization
+INFO - EJBContainer already initialized.  Call ejbContainer.close() to allow reinitialization
+INFO - EJBContainer already initialized.  Call ejbContainer.close() to allow reinitialization
+Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.444 sec
+
+Results :
+
+Tests run: 4, Failures: 0, Errors: 0, Skipped: 0
+----
+
+    

Propchange: tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/component-interfaces.adoc
------------------------------------------------------------------------------
    svn:executable = *

Added: tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/cucumber-jvm.adoc
URL: http://svn.apache.org/viewvc/tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/cucumber-jvm.adoc?rev=1772522&view=auto
==============================================================================
--- tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/cucumber-jvm.adoc (added)
+++ tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/cucumber-jvm.adoc Sun Dec  4 11:01:40 2016
@@ -0,0 +1,9 @@
+= cucumber-jvm
+:jbake-date: 2016-09-06
+:jbake-type: page
+:jbake-tomeepdf:
+:jbake-status: published
+
+Example cucumber-jvm can be browsed at https://github.com/apache/tomee/tree/master/examples/cucumber-jvm
+
+No README.md yet, be the first to contribute one!

Propchange: tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/cucumber-jvm.adoc
------------------------------------------------------------------------------
    svn:executable = *

Added: tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/custom-injection.adoc
URL: http://svn.apache.org/viewvc/tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/custom-injection.adoc?rev=1772522&view=auto
==============================================================================
--- tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/custom-injection.adoc (added)
+++ tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/custom-injection.adoc Sun Dec  4 11:01:40 2016
@@ -0,0 +1,256 @@
+= Custom Injection
+:jbake-date: 2016-09-06
+:jbake-type: page
+:jbake-tomeepdf:
+:jbake-status: published
+
+Example custom-injection can be browsed at https://github.com/apache/tomee/tree/master/examples/custom-injection
+
+
+*Help us document this example! Click the blue pencil icon in the upper right to edit this page.*
+
+==  Pickup
+
+
+[source,java]
+----
+package org.superbiz.enventries;
+
+
+//START SNIPPET: code
+
+import java.beans.PropertyEditorManager;
+
+public enum Pickup {
+
+    HUMBUCKER,
+    SINGLE_COIL;
+
+    // Here's the little magic where we register the PickupEditor
+    // which knows how to create this object from a string.
+    // You can add any of your own Property Editors in the same way.
+    static {
+        PropertyEditorManager.registerEditor(Pickup.class, PickupEditor.class);
+    }
+}
+----
+
+
+==  PickupEditor
+
+
+[source,java]
+----
+package org.superbiz.enventries;
+
+/**
+ * With a java.beans.PropertyEditor, you can go way beyond the built-in
+ * types that OpenEJB supports and can extend dependency injection to
+ * just about anywhere.
+ * <p/>
+ * In the world of electric guitars, two types of pickups are used: humbucking, and single-coil.
+ * Guitarists often refer to their guitars as HSS, meaning a guitar with 1 humbucker and
+ * 2 single coil pickups, and so on.  This little PropertyEditor supports that shorthand notation.
+ *
+ * @version $Revision$ $Date$
+ */
+//START SNIPPET: code
+public class PickupEditor extends java.beans.PropertyEditorSupport {
+
+    public void setAsText(String text) throws IllegalArgumentException {
+        text = text.trim();
+
+        if (text.equalsIgnoreCase("H")) setValue(Pickup.HUMBUCKER);
+        else if (text.equalsIgnoreCase("S")) setValue(Pickup.SINGLE_COIL);
+        else throw new IllegalStateException("H and S are the only supported Pickup aliases");
+    }
+}
+----
+
+
+==  Stratocaster
+
+
+[source,java]
+----
+package org.superbiz.enventries;
+
+import javax.annotation.Resource;
+import javax.ejb.Stateless;
+import java.io.File;
+import java.util.Date;
+import java.util.List;
+import java.util.Map;
+
+/**
+ * In addition to the standard env-entry types (String, Integer, Long, Short, Byte, Boolean, Double, Float, Character)
+ * OpenEJB supports many other types.
+ */
+//START SNIPPET: code
+@Stateless
+public class Stratocaster {
+
+
+    @Resource(name = "pickups")
+    private List<Pickup> pickups;
+
+    @Resource(name = "style")
+    private Style style;
+
+    @Resource(name = "dateCreated")
+    private Date dateCreated;
+
+    @Resource(name = "guitarStringGuages")
+    private Map<String, Float> guitarStringGuages;
+
+    @Resource(name = "certificateOfAuthenticity")
+    private File certificateOfAuthenticity;
+
+    public Date getDateCreated() {
+        return dateCreated;
+    }
+
+    /**
+     * Gets the guage of the electric guitar strings
+     * used in this guitar.
+     *
+     * @param string
+     * @return
+     */
+    public float getStringGuage(String string) {
+        return guitarStringGuages.get(string);
+    }
+
+    public List<Pickup> getPickups() {
+        return pickups;
+    }
+
+    public Style getStyle() {
+        return style;
+    }
+
+    public File getCertificateOfAuthenticity() {
+        return certificateOfAuthenticity;
+    }
+}
+----
+
+
+==  Style
+
+
+[source,java]
+----
+package org.superbiz.enventries;
+
+/**
+ * @version $Revision$ $Date$
+ */
+//START SNIPPET: code
+public enum Style {
+
+    STANDARD,
+    DELUX,
+    VINTAGE;
+}
+----
+
+
+==  StratocasterTest
+
+
+[source,java]
+----
+package org.superbiz.enventries;
+
+import junit.framework.TestCase;
+
+import javax.ejb.EJB;
+import javax.ejb.embeddable.EJBContainer;
+import java.io.File;
+import java.text.DateFormat;
+import java.util.Date;
+import java.util.List;
+import java.util.Locale;
+
+import static java.util.Arrays.asList;
+
+/**
+ * @version $Rev: 1090810 $ $Date: 2011-04-10 07:49:26 -0700 (Sun, 10 Apr 2011) $
+ */
+//START SNIPPET: code
+public class StratocasterTest extends TestCase {
+
+    @EJB
+    private Stratocaster strat;
+
+    public void test() throws Exception {
+        EJBContainer.createEJBContainer().getContext().bind("inject", this);
+
+        Date date = DateFormat.getDateInstance(DateFormat.MEDIUM, Locale.US).parse("Mar 1, 1962");
+        assertEquals("Strat.getDateCreated()", date, strat.getDateCreated());
+
+        List<Pickup> pickups = asList(Pickup.SINGLE_COIL, Pickup.SINGLE_COIL, Pickup.SINGLE_COIL);
+        assertEquals("Strat.getPickups()", pickups, strat.getPickups());
+
+        assertEquals("Strat.getStyle()", Style.VINTAGE, strat.getStyle());
+
+        assertEquals("Strat.getStringGuage(\"E1\")", 0.052F, strat.getStringGuage("E1"));
+        assertEquals("Strat.getStringGuage(\"A\")", 0.042F, strat.getStringGuage("A"));
+        assertEquals("Strat.getStringGuage(\"D\")", 0.030F, strat.getStringGuage("D"));
+        assertEquals("Strat.getStringGuage(\"G\")", 0.017F, strat.getStringGuage("G"));
+        assertEquals("Strat.getStringGuage(\"B\")", 0.013F, strat.getStringGuage("B"));
+        assertEquals("Strat.getStringGuage(\"E\")", 0.010F, strat.getStringGuage("E"));
+
+        File file = new File("/tmp/strat-certificate.txt");
+        assertEquals("Strat.getCertificateOfAuthenticity()", file, strat.getCertificateOfAuthenticity());
+
+    }
+}
+----
+
+
+=  Running
+
+    
+
+[source]
+----
+-------------------------------------------------------
+ T E S T S
+-------------------------------------------------------
+Running org.superbiz.enventries.StratocasterTest
+Apache OpenEJB 4.0.0-beta-1    build: 20111002-04:06
+http://tomee.apache.org/
+INFO - openejb.home = /Users/dblevins/examples/custom-injection
+INFO - openejb.base = /Users/dblevins/examples/custom-injection
+INFO - Using 'javax.ejb.embeddable.EJBContainer=true'
+INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)
+INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)
+INFO - Found EjbModule in classpath: /Users/dblevins/examples/custom-injection/target/classes
+INFO - Beginning load: /Users/dblevins/examples/custom-injection/target/classes
+INFO - Configuring enterprise application: /Users/dblevins/examples/custom-injection
+WARN - Method 'lookup' is not available for 'javax.annotation.Resource'. Probably using an older Runtime.
+INFO - Configuring Service(id=Default Stateless Container, type=Container, provider-id=Default Stateless Container)
+INFO - Auto-creating a container for bean Stratocaster: Container(type=STATELESS, id=Default Stateless Container)
+INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)
+INFO - Auto-creating a container for bean org.superbiz.enventries.StratocasterTest: Container(type=MANAGED, id=Default Managed Container)
+INFO - Enterprise application "/Users/dblevins/examples/custom-injection" loaded.
+INFO - Assembling app: /Users/dblevins/examples/custom-injection
+INFO - Jndi(name="java:global/custom-injection/Stratocaster!org.superbiz.enventries.Stratocaster")
+INFO - Jndi(name="java:global/custom-injection/Stratocaster")
+INFO - Jndi(name="java:global/EjbModule1663626738/org.superbiz.enventries.StratocasterTest!org.superbiz.enventries.StratocasterTest")
+INFO - Jndi(name="java:global/EjbModule1663626738/org.superbiz.enventries.StratocasterTest")
+INFO - Created Ejb(deployment-id=Stratocaster, ejb-name=Stratocaster, container=Default Stateless Container)
+INFO - Created Ejb(deployment-id=org.superbiz.enventries.StratocasterTest, ejb-name=org.superbiz.enventries.StratocasterTest, container=Default Managed Container)
+INFO - Started Ejb(deployment-id=Stratocaster, ejb-name=Stratocaster, container=Default Stateless Container)
+INFO - Started Ejb(deployment-id=org.superbiz.enventries.StratocasterTest, ejb-name=org.superbiz.enventries.StratocasterTest, container=Default Managed Container)
+INFO - Deployed Application(path=/Users/dblevins/examples/custom-injection)
+Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.11 sec
+
+Results :
+
+Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
+----
+
+    

Propchange: tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/custom-injection.adoc
------------------------------------------------------------------------------
    svn:executable = *

Added: tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/datasource-ciphered-password.adoc
URL: http://svn.apache.org/viewvc/tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/datasource-ciphered-password.adoc?rev=1772522&view=auto
==============================================================================
--- tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/datasource-ciphered-password.adoc (added)
+++ tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/datasource-ciphered-password.adoc Sun Dec  4 11:01:40 2016
@@ -0,0 +1,228 @@
+= DataSource Ciphered Password
+:jbake-date: 2016-09-06
+:jbake-type: page
+:jbake-tomeepdf:
+:jbake-status: published
+
+Example datasource-ciphered-password can be browsed at https://github.com/apache/tomee/tree/master/examples/datasource-ciphered-password
+
+
+=  Datasource Ciphered Password example
+
+This example shows how to use a ciphered password with an OpenEJB datasource.
+
+It shows how to implement its own encryption too.
+
+=  Configuration
+
+The configuration is simply a datasource configuration with an additionnal parameter
+"PasswordCipher" to specify the encryption to use.
+
+Example using Static3DES encryption:
+
+        properties.setProperty("ProtectedDatasource", "new://Resource?type=DataSource");
+        properties.setProperty("ProtectedDatasource.JdbcDriver", "org.hsqldb.jdbcDriver");
+        properties.setProperty("ProtectedDatasource.JdbcUrl", "jdbc:hsqldb:mem:protected");
+        properties.setProperty("ProtectedDatasource.UserName", "user");
+        // the plain text password is "YouLLN3v3rFindM3"
+        properties.setProperty("ProtectedDatasource.Password", "fEroTNXjaL5SOTyRQ92x3DNVS/ksbtgs");
+        properties.setProperty("ProtectedDatasource.PasswordCipher", "Static3DES");
+        properties.setProperty("ProtectedDatasource.JtaManaged", "true");
+
+
+=  Using its own implementation
+
+The example implement a reverse encryption which simply reverse the password to encrypt/decrypt.
+
+The implementation is done with commons-lang library:
+
+
+[source,java]
+----
+public static class ReverseEncryption implements PasswordCipher {
+    @Override public char[] encrypt(String plainPassword) {
+        return StringUtils.reverse(plainPassword).toCharArray();
+    }
+
+    @Override public String decrypt(char[] encryptedPassword) {
+        return new String(encrypt(new String(encryptedPassword)));
+    }
+}
+----
+
+
+
+To be functional it needs the file `META-INF/org.apache.openejb.resource.jdbc.PasswordCipher/reverse`.
+
+The file name (reverse) define  the encryption name to use for the PasswordCipher parameter.
+
+This file simply contains the implementation class of the encryption.
+
+Then you simply declare this encryption for your datasource:
+
+        properties.setProperty("ProtectedDatasource", "new://Resource?type=DataSource");
+        properties.setProperty("ProtectedDatasource.JdbcDriver", "org.hsqldb.jdbcDriver");
+        properties.setProperty("ProtectedDatasource.JdbcUrl", "jdbc:hsqldb:mem:protected");
+        properties.setProperty("ProtectedDatasource.UserName", USER);
+        properties.setProperty("ProtectedDatasource.Password", "3MdniFr3v3NLLuoY");
+        properties.setProperty("ProtectedDatasource.PasswordCipher", "reverse");
+        properties.setProperty("ProtectedDatasource.JtaManaged", "true");
+
+=  Documentation
+
+For more information please see the link:http://tomee.apache.org/3.0/datasource-password-encryption.html[documentation]
+
+=  Full Test Source
+
+
+[source,java]
+----
+package org.superbiz;
+
+import org.apache.commons.lang.StringUtils;
+import org.apache.openejb.resource.jdbc.PasswordCipher;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+import javax.annotation.Resource;
+import javax.ejb.embeddable.EJBContainer;
+import javax.naming.Context;
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.DriverManager;
+import java.sql.Statement;
+import java.util.Properties;
+
+import static junit.framework.Assert.assertNotNull;
+
+public class DataSourceCipheredExampleTest {
+    private static final String USER = DataSourceCipheredExampleTest.class.getSimpleName().toUpperCase();
+    private static final String PASSWORD = "YouLLN3v3rFindM3";
+    private static final String DATASOURCE_URL = "jdbc:hsqldb:mem:protected";
+
+    @Resource
+    private DataSource dataSource;
+
+    @BeforeClass
+    public static void addDatabaseUserWithPassword() throws Exception {
+        Class.forName("org.hsqldb.jdbcDriver");
+        Connection conn = DriverManager.getConnection(DATASOURCE_URL, "sa", "");
+        conn.setAutoCommit(true);
+        Statement st = conn.createStatement();
+        st.executeUpdate("CREATE USER " + USER + " PASSWORD '" + PASSWORD + "';");
+        st.close();
+        conn.commit();
+        conn.close();
+    }
+
+    @Test
+    public void accessDatasource() throws Exception {
+        // define the datasource
+        Properties properties = new Properties();
+        properties.setProperty("ProtectedDatasource", "new://Resource?type=DataSource");
+        properties.setProperty("ProtectedDatasource.JdbcDriver", "org.hsqldb.jdbcDriver");
+        properties.setProperty("ProtectedDatasource.JdbcUrl", DATASOURCE_URL);
+        properties.setProperty("ProtectedDatasource.UserName", USER);
+        properties.setProperty("ProtectedDatasource.Password", "fEroTNXjaL5SOTyRQ92x3DNVS/ksbtgs");
+        properties.setProperty("ProtectedDatasource.PasswordCipher", "Static3DES");
+        properties.setProperty("ProtectedDatasource.JtaManaged", "true");
+
+        // start the context and makes junit test injections
+        EJBContainer container = EJBContainer.createEJBContainer(properties);
+        Context context = container.getContext();
+        context.bind("inject", this);
+
+        // test the datasource
+        assertNotNull(dataSource);
+        assertNotNull(dataSource.getConnection());
+
+        // closing the context
+        container.close();
+    }
+
+    @Test
+    public void accessDatasourceWithMyImplementation() throws Exception {
+        // define the datasource
+        Properties properties = new Properties();
+        properties.setProperty("ProtectedDatasource", "new://Resource?type=DataSource");
+        properties.setProperty("ProtectedDatasource.JdbcDriver", "org.hsqldb.jdbcDriver");
+        properties.setProperty("ProtectedDatasource.JdbcUrl", "jdbc:hsqldb:mem:protected");
+        properties.setProperty("ProtectedDatasource.UserName", USER);
+        properties.setProperty("ProtectedDatasource.Password", "3MdniFr3v3NLLuoY");
+        properties.setProperty("ProtectedDatasource.PasswordCipher", "reverse");
+        properties.setProperty("ProtectedDatasource.JtaManaged", "true");
+
+        // start the context and makes junit test injections
+        EJBContainer container = EJBContainer.createEJBContainer(properties);
+        Context context = container.getContext();
+        context.bind("inject", this);
+
+        // test the datasource
+        assertNotNull(dataSource);
+        assertNotNull(dataSource.getConnection());
+
+        // closing the context
+        container.close();
+    }
+
+    public static class ReverseEncryption implements PasswordCipher {
+        @Override
+        public char[] encrypt(String plainPassword) {
+            return StringUtils.reverse(plainPassword).toCharArray();
+        }
+
+        @Override
+        public String decrypt(char[] encryptedPassword) {
+            return new String(encrypt(new String(encryptedPassword)));
+        }
+    }
+}
+----
+
+
+=  Running
+
+    
+
+[source]
+----
+-------------------------------------------------------
+ T E S T S
+-------------------------------------------------------
+Running org.superbiz.DataSourceCipheredExampleTest
+Apache OpenEJB 4.0.0-beta-1    build: 20111002-04:06
+http://tomee.apache.org/
+INFO - openejb.home = /Users/dblevins/examples/datasource-ciphered-password
+INFO - openejb.base = /Users/dblevins/examples/datasource-ciphered-password
+INFO - Using 'javax.ejb.embeddable.EJBContainer=true'
+INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)
+INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)
+INFO - Configuring Service(id=ProtectedDatasource, type=Resource, provider-id=Default JDBC Database)
+INFO - Found EjbModule in classpath: /Users/dblevins/examples/datasource-ciphered-password/target/test-classes
+INFO - Beginning load: /Users/dblevins/examples/datasource-ciphered-password/target/test-classes
+INFO - Configuring enterprise application: /Users/dblevins/examples/datasource-ciphered-password
+WARN - Method 'lookup' is not available for 'javax.annotation.Resource'. Probably using an older Runtime.
+INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)
+INFO - Auto-creating a container for bean datasource-ciphered-password.Comp: Container(type=MANAGED, id=Default Managed Container)
+INFO - Auto-linking resource-ref 'java:comp/env/org.superbiz.DataSourceCipheredExampleTest/dataSource' in bean datasource-ciphered-password.Comp to Resource(id=ProtectedDatasource)
+INFO - Auto-linking resource-ref 'java:comp/env/org.superbiz.DataSourceCipheredExampleTest/dataSource' in bean org.superbiz.DataSourceCipheredExampleTest to Resource(id=ProtectedDatasource)
+INFO - Enterprise application "/Users/dblevins/examples/datasource-ciphered-password" loaded.
+INFO - Assembling app: /Users/dblevins/examples/datasource-ciphered-password
+INFO - Jndi(name="java:global/datasource-ciphered-password/datasource-ciphered-password.Comp!org.apache.openejb.BeanContext$Comp")
+INFO - Jndi(name="java:global/datasource-ciphered-password/datasource-ciphered-password.Comp")
+INFO - Jndi(name="java:global/EjbModule86823325/org.superbiz.DataSourceCipheredExampleTest!org.superbiz.DataSourceCipheredExampleTest")
+INFO - Jndi(name="java:global/EjbModule86823325/org.superbiz.DataSourceCipheredExampleTest")
+INFO - Created Ejb(deployment-id=datasource-ciphered-password.Comp, ejb-name=datasource-ciphered-password.Comp, container=Default Managed Container)
+INFO - Created Ejb(deployment-id=org.superbiz.DataSourceCipheredExampleTest, ejb-name=org.superbiz.DataSourceCipheredExampleTest, container=Default Managed Container)
+INFO - Started Ejb(deployment-id=datasource-ciphered-password.Comp, ejb-name=datasource-ciphered-password.Comp, container=Default Managed Container)
+INFO - Started Ejb(deployment-id=org.superbiz.DataSourceCipheredExampleTest, ejb-name=org.superbiz.DataSourceCipheredExampleTest, container=Default Managed Container)
+INFO - Deployed Application(path=/Users/dblevins/examples/datasource-ciphered-password)
+INFO - EJBContainer already initialized.  Call ejbContainer.close() to allow reinitialization
+Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.331 sec
+
+Results :
+
+Tests run: 2, Failures: 0, Errors: 0, Skipped: 0
+----
+
+    

Propchange: tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/datasource-ciphered-password.adoc
------------------------------------------------------------------------------
    svn:executable = *

Added: tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/datasource-definition.adoc
URL: http://svn.apache.org/viewvc/tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/datasource-definition.adoc?rev=1772522&view=auto
==============================================================================
--- tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/datasource-definition.adoc (added)
+++ tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/datasource-definition.adoc Sun Dec  4 11:01:40 2016
@@ -0,0 +1,9 @@
+= datasource-definition
+:jbake-date: 2016-09-06
+:jbake-type: page
+:jbake-tomeepdf:
+:jbake-status: published
+
+Example datasource-definition can be browsed at https://github.com/apache/tomee/tree/master/examples/datasource-definition
+
+No README.md yet, be the first to contribute one!

Propchange: tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/datasource-definition.adoc
------------------------------------------------------------------------------
    svn:executable = *

Added: tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/datasource-versioning.adoc
URL: http://svn.apache.org/viewvc/tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/datasource-versioning.adoc?rev=1772522&view=auto
==============================================================================
--- tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/datasource-versioning.adoc (added)
+++ tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/datasource-versioning.adoc Sun Dec  4 11:01:40 2016
@@ -0,0 +1,412 @@
+= DataSource Versioning
+:jbake-date: 2016-09-06
+:jbake-type: page
+:jbake-tomeepdf:
+:jbake-status: published
+
+Example datasource-versioning can be browsed at https://github.com/apache/tomee/tree/master/examples/datasource-versioning
+
+
+This example shows you how to use versioned DataSources of the same provider using the classpath attribute.
+
+=  Configuration
+
+The DataSource configuration can be made several ways and here we layout two common methods in the form of unit tests.
+Before we start, if you take a peek in the project pom.xml and look for the maven-dependency-plugin usage you will see that we pull in
+two completely different driver files for this example.
+
+=  AlternateDataSourceTest.java
+This test utilizes the Arquillian testing framework. See link:http://tomee.apache.org/arquillian-available-adapters.html[here] for more details.
+
+The example uses src/test/resources/arquillian.xml and src/test/conf/tomee.xml to define the DataSources.
+Note the differing driver version paths, yet still using the same provider (org.apache.derby.jdbc.EmbeddedDriver):
+
+
+[source,xml]
+----
+<tomee>
+
+  <Resource id="DatabaseOne" type="DataSource" classpath="${catalina.base}/../../drivers/derby-10.10.1.1.jar">
+    JdbcDriver org.apache.derby.jdbc.EmbeddedDriver
+    JdbcUrl jdbc:derby:databaseOne;create=true
+    UserName SA
+  </Resource>
+
+  <Resource id="DatabaseTwo" type="DataSource" classpath="${catalina.base}/../../drivers/derby-10.9.1.0.jar">
+    JdbcDriver org.apache.derby.jdbc.EmbeddedDriver
+    JdbcUrl jdbc:derby:databaseTwo;create=true
+    UserName SA
+  </Resource>
+
+</tomee>
+----
+
+	
+=  Developer Information
+When testing within a Maven environment it is also possible to use direct maven coordinates rather than a file link, like so:
+
+    ....
+	<Resource id="DatabaseOne" type="DataSource" classpath="mvn:org.apache.derby:derby:10.10.1.1">
+	....
+	
+
+=  AlternateDriverJarTest.java
+
+This test takes an embedded approach and as you can see the driver paths are specified as a DataSource parameter.
+Both examples demonstrate the same, in that two driver versions can be loaded and used within the same application.
+
+
+[source,java]
+----
+@Configuration
+public Properties config() {
+
+    final File drivers = new File(new File("target"), "drivers").getAbsoluteFile();
+
+    final Properties p = new Properties();
+    p.put("openejb.jdbc.datasource-creator", "dbcp-alternative");
+
+    File file = new File(drivers, "derby-10.10.1.1.jar");
+    Assert.assertTrue("Failed to find: " + file, file.exists());
+
+    p.put("JdbcOne", "new://Resource?type=DataSource&classpath="
+            + file.getAbsolutePath().replace("\\", "/"));
+    p.put("JdbcOne.JdbcDriver", "org.apache.derby.jdbc.EmbeddedDriver");
+    p.put("JdbcOne.JdbcUrl", "jdbc:derby:memory:JdbcOne;create=true");
+    p.put("JdbcOne.UserName", USER);
+    p.put("JdbcOne.Password", PASSWORD);
+    p.put("JdbcOne.JtaManaged", "false");
+
+    file = new File(drivers, "derby-10.9.1.0.jar");
+    Assert.assertTrue("Failed to find: " + file, file.exists());
+
+    p.put("JdbcTwo", "new://Resource?type=DataSource&classpath="
+            + file.getAbsolutePath().replace("\\", "/"));
+    p.put("JdbcTwo.JdbcDriver", "org.apache.derby.jdbc.EmbeddedDriver");
+    p.put("JdbcTwo.JdbcUrl", "jdbc:derby:memory:JdbcTwo;create=true");
+    p.put("JdbcTwo.UserName", USER);
+    p.put("JdbcTwo.Password", PASSWORD);
+    p.put("JdbcTwo.JtaManaged", "false");
+    return p;
+}
+----
+
+
+=  Full Test Source for AlternateDataSourceTest.java
+
+
+[source,java]
+----
+package org.superbiz;
+
+import org.jboss.arquillian.container.test.api.Deployment;
+import org.jboss.arquillian.junit.Arquillian;
+import org.jboss.shrinkwrap.api.ShrinkWrap;
+import org.jboss.shrinkwrap.api.asset.ClassLoaderAsset;
+import org.jboss.shrinkwrap.api.spec.WebArchive;
+import org.junit.Assert;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+
+import javax.annotation.Resource;
+import javax.ejb.EJB;
+import javax.ejb.Stateless;
+import javax.sql.DataSource;
+import java.sql.Connection;
+import java.sql.DatabaseMetaData;
+import java.sql.SQLException;
+
+@RunWith(Arquillian.class)
+public class AlternateDataSourceTest {
+
+    @Deployment
+    public static WebArchive createDeployment() {
+
+        return ShrinkWrap.create(WebArchive.class, "test.war")
+            .addClasses(DataSourceTester.class)
+            .addAsResource(new ClassLoaderAsset("META-INF/ejb-jar.xml"), "META-INF/ejb-jar.xml");
+        //We are using src/test/conf/tomee.xml, but this also works - .addAsResource(new ClassLoaderAsset("META-INF/resources.xml"), "META-INF/resources.xml");
+        //Or even using a persistence context - .addAsResource(new ClassLoaderAsset("META-INF/persistence.xml"), "META-INF/persistence.xml");
+    }
+
+    @EJB
+    private DataSourceTester tester;
+
+    @Test
+    public void testDataSourceOne() throws Exception {
+        Assert.assertEquals("Should be using 10.10.1.1 - (1458268)", "10.10.1.1 - (1458268)", tester.getOne());
+    }
+
+    @Test
+    public void testDataSourceTwo() throws Exception {
+        Assert.assertEquals("Should be using 10.9.1.0 - (1344872)", "10.9.1.0 - (1344872)", tester.getTwo());
+    }
+
+    @Test
+    public void testDataSourceBoth() throws Exception {
+        Assert.assertEquals("Should be using 10.10.1.1 - (1458268)|10.9.1.0 - (1344872)", "10.10.1.1 - (1458268)|10.9.1.0 - (1344872)", tester.getBoth());
+    }
+
+    @Stateless
+    public static class DataSourceTester {
+
+        @Resource(name = "DatabaseOne")
+        DataSource dataSourceOne;
+
+        @Resource(name = "DatabaseTwo")
+        DataSource dataSourceTwo;
+
+        public String getOne() throws Exception {
+            return getVersion(dataSourceOne);
+        }
+
+        public String getTwo() throws Exception {
+            return getVersion(dataSourceTwo);
+        }
+
+        public String getBoth() throws Exception {
+            return getOne() + "|" + getTwo();
+        }
+
+        private static String getVersion(final DataSource ds) throws SQLException {
+            Connection con = null;
+            try {
+                con = ds.getConnection();
+                final DatabaseMetaData md = con.getMetaData();
+                return md.getDriverVersion();
+            } finally {
+                if (con != null) {
+                    con.close();
+                }
+            }
+        }
+    }
+}
+----
+
+
+=  Running
+
+    
+
+[source]
+----
+-------------------------------------------------------
+ T E S T S
+-------------------------------------------------------
+Running org.superbiz.AlternateDataSourceTest
+Apr 17, 2014 2:19:45 PM org.apache.openejb.arquillian.common.Setup findHome
+INFO: Unable to find home in: C:\dev\svn\tomee\examples\datasource-versioning\target\apache-tomee-remote
+Apr 17, 2014 2:19:45 PM org.apache.openejb.arquillian.common.MavenCache getArtifact
+INFO: Downloading org.apache.openejb:apache-tomee:1.6.1-SNAPSHOT:zip:webprofile please wait...
+Apr 17, 2014 2:19:45 PM org.apache.openejb.arquillian.common.Zips unzip
+INFO: Extracting 'C:\Users\Andy\.m2\repository\org\apache\openejb\apache-tomee\1.6.1-SNAPSHOT\apache-tomee-1.6.1-SNAPSHOT-webprofile.zip' to 'C:\dev\svn\tomee\examples\datasource-versioning\target\apache-tomee-remote'
+Apr 17, 2014 2:19:47 PM org.apache.tomee.arquillian.remote.RemoteTomEEContainer configure
+INFO: Downloaded container to: C:\dev\svn\tomee\examples\datasource-versioning\target\apache-tomee-remote\apache-tomee-webprofile-1.6.1-SNAPSHOT
+INFO - The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: C:\Program Files\Java\jdk1.7.0_45\jre\bin;C:\WINDOWS\Sun\Java\bin;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\WINDOWS\System32\WindowsPowerShell\v1.0\;C:\Program Files (x86)\Windows Live\Shared;C:\Program Files (x86)\ATI Technologies\ATI.ACE\Core-Static;C:\Program Files\SlikSvn\bin;C:\dev\apache-maven-3.2.1\bin;C:\dev\apache-ant-1.9.3\bin;C:\Program Files (x86)\Git\cmd;C:\Program Files (x86)\Git\bin;C:\Program Files\TortoiseGit\bin;C:\Program Files\TortoiseSVN\bin;.
+INFO - Initializing ProtocolHandler ["http-bio-55243"]
+INFO - Initializing ProtocolHandler ["ajp-bio-55245"]
+INFO - Using 'openejb.jdbc.datasource-creator=org.apache.tomee.jdbc.TomEEDataSourceCreator'
+INFO - Optional service not installed: org.apache.tomee.webservices.TomeeJaxRsService
+INFO - Optional service not installed: org.apache.tomee.webservices.TomeeJaxWsService
+INFO - ********************************************************************************
+INFO - OpenEJB http://tomee.apache.org/
+INFO - Startup: Thu Apr 17 14:19:55 CEST 2014
+INFO - Copyright 1999-2013 (C) Apache OpenEJB Project, All Rights Reserved.
+INFO - Version: 7.0.0-SNAPSHOT
+INFO - Build date: 20140417
+INFO - Build time: 01:37
+INFO - ********************************************************************************
+INFO - openejb.home = C:\dev\svn\tomee\examples\datasource-versioning\target\apache-tomee-remote\apache-tomee-webprofile-1.6.1-SNAPSHOT
+INFO - openejb.base = C:\dev\svn\tomee\examples\datasource-versioning\target\apache-tomee-remote\apache-tomee-webprofile-1.6.1-SNAPSHOT
+INFO - Created new singletonService org.apache.openejb.cdi.ThreadSingletonServiceImpl@22c2e2dd
+INFO - Succeeded in installing singleton service
+INFO - openejb configuration file is 'C:\dev\svn\tomee\examples\datasource-versioning\target\apache-tomee-remote\apache-tomee-webprofile-1.6.1-SNAPSHOT\conf\tomee.xml'
+INFO - Configuring Service(id=Tomcat Security Service, type=SecurityService, provider-id=Tomcat Security Service)
+INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)
+INFO - Configuring Service(id=DatabaseOne, type=Resource, provider-id=Default JDBC Database)
+INFO - Configuring Service(id=DatabaseTwo, type=Resource, provider-id=Default JDBC Database)
+INFO - Using 'openejb.system.apps=true'
+INFO - Configuring enterprise application: openejb
+INFO - Using openejb.deploymentId.format '{ejbName}'
+INFO - Auto-deploying ejb openejb/Deployer: EjbDeployment(deployment-id=openejb/Deployer)
+INFO - Auto-deploying ejb openejb/ConfigurationInfo: EjbDeployment(deployment-id=openejb/ConfigurationInfo)
+INFO - Auto-deploying ejb MEJB: EjbDeployment(deployment-id=MEJB)
+INFO - Configuring Service(id=Default Stateless Container, type=Container, provider-id=Default Stateless Container)
+INFO - Auto-creating a container for bean openejb/Deployer: Container(type=STATELESS, id=Default Stateless Container)
+INFO - Enterprise application "openejb" loaded.
+INFO - Creating TransactionManager(id=Default Transaction Manager)
+INFO - Creating SecurityService(id=Tomcat Security Service)
+INFO - Creating Resource(id=DatabaseOne)
+INFO - Disabling testOnBorrow since no validation query is provided
+INFO - Creating Resource(id=DatabaseTwo)
+INFO - Disabling testOnBorrow since no validation query is provided
+INFO - Creating Container(id=Default Stateless Container)
+INFO - Assembling app: openejb
+INFO - Using 'openejb.jndiname.format={deploymentId}{interfaceType.openejbLegacyName}'
+INFO - Jndi(name=openejb/DeployerBusinessRemote) --> Ejb(deployment-id=openejb/Deployer)
+INFO - Jndi(name=global/openejb/openejb/Deployer!org.apache.openejb.assembler.Deployer) --> Ejb(deployment-id=openejb/Deployer)
+INFO - Jndi(name=global/openejb/openejb/Deployer) --> Ejb(deployment-id=openejb/Deployer)
+INFO - Jndi(name=openejb/ConfigurationInfoBusinessRemote) --> Ejb(deployment-id=openejb/ConfigurationInfo)
+INFO - Jndi(name=global/openejb/openejb/ConfigurationInfo!org.apache.openejb.assembler.classic.cmd.ConfigurationInfo) --> Ejb(deployment-id=openejb/ConfigurationInfo)
+INFO - Jndi(name=global/openejb/openejb/ConfigurationInfo) --> Ejb(deployment-id=openejb/ConfigurationInfo)
+INFO - Jndi(name=MEJB) --> Ejb(deployment-id=MEJB)
+INFO - Jndi(name=global/openejb/MEJB!javax.management.j2ee.ManagementHome) --> Ejb(deployment-id=MEJB)
+INFO - Jndi(name=global/openejb/MEJB) --> Ejb(deployment-id=MEJB)
+INFO - Created Ejb(deployment-id=openejb/Deployer, ejb-name=openejb/Deployer, container=Default Stateless Container)
+INFO - Created Ejb(deployment-id=MEJB, ejb-name=MEJB, container=Default Stateless Container)
+INFO - Created Ejb(deployment-id=openejb/ConfigurationInfo, ejb-name=openejb/ConfigurationInfo, container=Default Stateless Container)
+INFO - Started Ejb(deployment-id=openejb/Deployer, ejb-name=openejb/Deployer, container=Default Stateless Container)
+INFO - Started Ejb(deployment-id=MEJB, ejb-name=MEJB, container=Default Stateless Container)
+INFO - Started Ejb(deployment-id=openejb/ConfigurationInfo, ejb-name=openejb/ConfigurationInfo, container=Default Stateless Container)
+INFO - Deployed MBean(openejb.user.mbeans:application=openejb,group=org.apache.openejb.assembler.monitoring,name=JMXDeployer)
+INFO - Deployed Application(path=openejb)
+INFO -   ** Bound Services **
+INFO -   NAME                 IP              PORT
+INFO - -------
+INFO - Ready!
+INFO - Initialization processed in 7959 ms
+INFO - Importing a Tomcat Resource with id 'UserDatabase' of type 'org.apache.catalina.UserDatabase'.
+INFO - Creating Resource(id=UserDatabase)
+INFO - Starting service Catalina
+INFO - Starting Servlet Engine: Apache Tomcat (TomEE)/7.0.53 (1.6.1-SNAPSHOT)
+INFO - Starting ProtocolHandler ["http-bio-55243"]
+INFO - Starting ProtocolHandler ["ajp-bio-55245"]
+INFO - Server startup in 288 ms
+WARNING - StandardServer.await: Invalid command '' received
+Apr 17, 2014 2:20:04 PM org.apache.openejb.client.EventLogger log
+INFO: RemoteInitialContextCreated{providerUri=http://localhost:55243/tomee/ejb}
+INFO - Extracting jar: C:\dev\svn\tomee\examples\datasource-versioning\target\arquillian-test-working-dir\0\test.war
+INFO - Extracted path: C:\dev\svn\tomee\examples\datasource-versioning\target\arquillian-test-working-dir\0\test
+INFO - using default host: localhost
+INFO - ------------------------- localhost -> /test
+INFO - Using 'openejb.session.manager=org.apache.tomee.catalina.session.QuickSessionManager'
+INFO - Configuring enterprise application: C:\dev\svn\tomee\examples\datasource-versioning\target\arquillian-test-working-dir\0\test
+INFO - Auto-deploying ejb DataSourceTester: EjbDeployment(deployment-id=DataSourceTester)
+INFO - Auto-linking resource-ref 'java:comp/env/DatabaseTwo' in bean DataSourceTester to Resource(id=DatabaseTwo)
+INFO - Auto-linking resource-ref 'java:comp/env/DatabaseOne' in bean DataSourceTester to Resource(id=DatabaseOne)
+INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)
+INFO - Auto-creating a container for bean org.superbiz.AlternateDataSourceTest: Container(type=MANAGED, id=Default Managed Container)
+INFO - Creating Container(id=Default Managed Container)
+INFO - Using directory C:\dev\svn\tomee\examples\datasource-versioning\target\apache-tomee-remote\apache-tomee-webprofile-1.6.1-SNAPSHOT\temp for stateful session passivation
+INFO - Enterprise application "C:\dev\svn\tomee\examples\datasource-versioning\target\arquillian-test-working-dir\0\test" loaded.
+INFO - Assembling app: C:\dev\svn\tomee\examples\datasource-versioning\target\arquillian-test-working-dir\0\test
+INFO - Jndi(name=DataSourceTesterLocalBean) --> Ejb(deployment-id=DataSourceTester)
+INFO - Jndi(name=global/test/DataSourceTester!org.superbiz.AlternateDataSourceTest$DataSourceTester) --> Ejb(deployment-id=DataSourceTester)
+INFO - Jndi(name=global/test/DataSourceTester) --> Ejb(deployment-id=DataSourceTester)
+INFO - Existing thread singleton service in SystemInstance(): org.apache.openejb.cdi.ThreadSingletonServiceImpl@22c2e2dd
+INFO - OpenWebBeans Container is starting...
+INFO - Adding OpenWebBeansPlugin : [CdiPlugin]
+INFO - All injection points were validated successfully.
+INFO - OpenWebBeans Container has started, it took 203 ms.
+INFO - Created Ejb(deployment-id=DataSourceTester, ejb-name=DataSourceTester, container=Default Stateless Container)
+INFO - Started Ejb(deployment-id=DataSourceTester, ejb-name=DataSourceTester, container=Default Stateless Container)
+INFO - Deployed Application(path=C:\dev\svn\tomee\examples\datasource-versioning\target\arquillian-test-working-dir\0\test)
+Apr 17, 2014 2:20:11 PM org.apache.openejb.client.EventLogger log
+INFO: RemoteInitialContextCreated{providerUri=http://localhost:55243/tomee/ejb}
+INFO - Undeploying app: C:\dev\svn\tomee\examples\datasource-versioning\target\arquillian-test-working-dir\0\test
+Apr 17, 2014 2:20:13 PM org.apache.openejb.arquillian.common.TomEEContainer undeploy
+INFO: cleaning C:\dev\svn\tomee\examples\datasource-versioning\target\arquillian-test-working-dir\0
+Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 30.155 sec
+Running org.superbiz.AlternateDriverJarTest
+Apr 17, 2014 2:20:13 PM org.apache.openejb.config.ConfigUtils searchForConfiguration
+INFO: Cannot find the configuration file [conf/openejb.xml].  Will attempt to create one for the beans deployed.
+Apr 17, 2014 2:20:13 PM org.apache.openejb.config.ConfigurationFactory configureService
+INFO: Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)
+Apr 17, 2014 2:20:13 PM org.apache.openejb.config.ConfigurationFactory configureService
+INFO: Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)
+Apr 17, 2014 2:20:13 PM org.apache.openejb.config.ConfigurationFactory configureService
+INFO: Configuring Service(id=JdbcTwo, type=Resource, provider-id=Default JDBC Database)
+Apr 17, 2014 2:20:13 PM org.apache.openejb.config.ConfigurationFactory configureService
+INFO: Configuring Service(id=JdbcOne, type=Resource, provider-id=Default JDBC Database)
+Apr 17, 2014 2:20:13 PM org.apache.openejb.assembler.classic.Assembler createRecipe
+INFO: Creating TransactionManager(id=Default Transaction Manager)
+Apr 17, 2014 2:20:14 PM org.apache.openejb.assembler.classic.Assembler createRecipe
+INFO: Creating SecurityService(id=Default Security Service)
+Apr 17, 2014 2:20:14 PM org.apache.openejb.assembler.classic.Assembler createRecipe
+INFO: Creating Resource(id=JdbcTwo)
+Apr 17, 2014 2:20:15 PM org.apache.openejb.assembler.classic.Assembler createRecipe
+INFO: Creating Resource(id=JdbcOne)
+Apr 17, 2014 2:20:16 PM org.apache.openejb.config.ConfigurationFactory configureApplication
+INFO: Configuring enterprise application: C:\dev\svn\tomee\examples\datasource-versioning\AlternateDriverJarTest
+Apr 17, 2014 2:20:16 PM org.apache.openejb.config.ConfigurationFactory configureService
+INFO: Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)
+Apr 17, 2014 2:20:16 PM org.apache.openejb.config.AutoConfig createContainer
+INFO: Auto-creating a container for bean org.superbiz.AlternateDriverJarTest: Container(type=MANAGED, id=Default Managed Container)
+Apr 17, 2014 2:20:16 PM org.apache.openejb.assembler.classic.Assembler createRecipe
+INFO: Creating Container(id=Default Managed Container)
+Apr 17, 2014 2:20:16 PM org.apache.openejb.core.managed.SimplePassivater init
+INFO: Using directory C:\Users\Andy\AppData\Local\Temp for stateful session passivation
+Apr 17, 2014 2:20:16 PM org.apache.openejb.config.ConfigurationFactory configureService
+INFO: Configuring Service(id=Default Singleton Container, type=Container, provider-id=Default Singleton Container)
+Apr 17, 2014 2:20:16 PM org.apache.openejb.config.AutoConfig createContainer
+INFO: Auto-creating a container for bean JdbcOne: Container(type=SINGLETON, id=Default Singleton Container)
+Apr 17, 2014 2:20:16 PM org.apache.openejb.assembler.classic.Assembler createRecipe
+INFO: Creating Container(id=Default Singleton Container)
+Apr 17, 2014 2:20:16 PM org.apache.openejb.config.AutoConfig processResourceRef
+INFO: Auto-linking resource-ref 'java:comp/env/JdbcOne' in bean JdbcOne to Resource(id=JdbcOne)
+Apr 17, 2014 2:20:16 PM org.apache.openejb.config.AutoConfig processResourceRef
+INFO: Auto-linking resource-ref 'java:comp/env/JdbcTwo' in bean JdbcTwo to Resource(id=JdbcTwo)
+Apr 17, 2014 2:20:16 PM org.apache.openejb.config.AppInfoBuilder build
+INFO: Enterprise application "C:\dev\svn\tomee\examples\datasource-versioning\AlternateDriverJarTest" loaded.
+Apr 17, 2014 2:20:16 PM org.apache.openejb.assembler.classic.Assembler createApplication
+INFO: Assembling app: C:\dev\svn\tomee\examples\datasource-versioning\AlternateDriverJarTest
+Apr 17, 2014 2:20:16 PM org.apache.openejb.assembler.classic.JndiBuilder bind
+INFO: Jndi(name=JdbcOneLocalBean) --> Ejb(deployment-id=JdbcOne)
+Apr 17, 2014 2:20:16 PM org.apache.openejb.assembler.classic.JndiBuilder bind
+INFO: Jndi(name=global/AlternateDriverJarTest/app/JdbcOne!org.superbiz.AlternateDriverJarTest$JdbcOne) --> Ejb(deployment-id=JdbcOne)
+Apr 17, 2014 2:20:16 PM org.apache.openejb.assembler.classic.JndiBuilder bind
+INFO: Jndi(name=global/AlternateDriverJarTest/app/JdbcOne) --> Ejb(deployment-id=JdbcOne)
+Apr 17, 2014 2:20:16 PM org.apache.openejb.assembler.classic.JndiBuilder bind
+INFO: Jndi(name=JdbcTwoLocalBean) --> Ejb(deployment-id=JdbcTwo)
+Apr 17, 2014 2:20:16 PM org.apache.openejb.assembler.classic.JndiBuilder bind
+INFO: Jndi(name=global/AlternateDriverJarTest/app/JdbcTwo!org.superbiz.AlternateDriverJarTest$JdbcTwo) --> Ejb(deployment-id=JdbcTwo)
+Apr 17, 2014 2:20:16 PM org.apache.openejb.assembler.classic.JndiBuilder bind
+INFO: Jndi(name=global/AlternateDriverJarTest/app/JdbcTwo) --> Ejb(deployment-id=JdbcTwo)
+Apr 17, 2014 2:20:16 PM org.apache.openejb.cdi.CdiBuilder initializeOWB
+INFO: Created new singletonService org.apache.openejb.cdi.ThreadSingletonServiceImpl@5ddd4e70
+Apr 17, 2014 2:20:16 PM org.apache.openejb.cdi.CdiBuilder initializeOWB
+INFO: Succeeded in installing singleton service
+Apr 17, 2014 2:20:17 PM org.apache.openejb.cdi.OpenEJBLifecycle startApplication
+INFO: OpenWebBeans Container is starting...
+Apr 17, 2014 2:20:17 PM org.apache.webbeans.plugins.PluginLoader startUp
+INFO: Adding OpenWebBeansPlugin : [CdiPlugin]
+Apr 17, 2014 2:20:17 PM org.apache.webbeans.config.BeansDeployer validateInjectionPoints
+INFO: All injection points were validated successfully.
+Apr 17, 2014 2:20:17 PM org.apache.openejb.cdi.OpenEJBLifecycle startApplication
+INFO: OpenWebBeans Container has started, it took 223 ms.
+Apr 17, 2014 2:20:17 PM org.apache.openejb.assembler.classic.Assembler startEjbs
+INFO: Created Ejb(deployment-id=JdbcTwo, ejb-name=JdbcTwo, container=Default Singleton Container)
+Apr 17, 2014 2:20:17 PM org.apache.openejb.assembler.classic.Assembler startEjbs
+INFO: Created Ejb(deployment-id=JdbcOne, ejb-name=JdbcOne, container=Default Singleton Container)
+Apr 17, 2014 2:20:17 PM org.apache.openejb.assembler.classic.Assembler startEjbs
+INFO: Started Ejb(deployment-id=JdbcTwo, ejb-name=JdbcTwo, container=Default Singleton Container)
+Apr 17, 2014 2:20:17 PM org.apache.openejb.assembler.classic.Assembler startEjbs
+INFO: Started Ejb(deployment-id=JdbcOne, ejb-name=JdbcOne, container=Default Singleton Container)
+Apr 17, 2014 2:20:17 PM org.apache.openejb.assembler.classic.Assembler createApplication
+INFO: Deployed Application(path=C:\dev\svn\tomee\examples\datasource-versioning\AlternateDriverJarTest)
+Apr 17, 2014 2:20:20 PM org.apache.openejb.assembler.classic.Assembler destroyApplication
+INFO: Undeploying app: C:\dev\svn\tomee\examples\datasource-versioning\AlternateDriverJarTest
+Apr 17, 2014 2:20:20 PM org.apache.openejb.assembler.classic.Assembler destroyResource
+INFO: Closing DataSource: JdbcTwo
+Apr 17, 2014 2:20:20 PM org.apache.openejb.assembler.classic.Assembler destroyResource
+INFO: Closing DataSource: JdbcOne
+Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 7.857 sec
+INFO - A valid shutdown command was received via the shutdown port. Stopping the Server instance.
+INFO - Pausing ProtocolHandler ["http-bio-55243"]
+INFO - Pausing ProtocolHandler ["ajp-bio-55245"]
+INFO - Stopping service Catalina
+INFO - Stopping ProtocolHandler ["http-bio-55243"]
+INFO - Stopping ProtocolHandler ["ajp-bio-55245"]
+INFO - Stopping server services
+INFO - Undeploying app: openejb
+INFO - Closing DataSource: DatabaseOne
+INFO - Closing DataSource: DatabaseTwo
+INFO - Destroying ProtocolHandler ["http-bio-55243"]
+INFO - Destroying ProtocolHandler ["ajp-bio-55245"]
+
+Results :
+
+Tests run: 4, Failures: 0, Errors: 0, Skipped: 0
+----
+

Propchange: tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/datasource-versioning.adoc
------------------------------------------------------------------------------
    svn:executable = *

Added: tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/decorators.adoc
URL: http://svn.apache.org/viewvc/tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/decorators.adoc?rev=1772522&view=auto
==============================================================================
--- tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/decorators.adoc (added)
+++ tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/decorators.adoc Sun Dec  4 11:01:40 2016
@@ -0,0 +1,436 @@
+= Decorators
+:jbake-date: 2016-09-06
+:jbake-type: page
+:jbake-tomeepdf:
+:jbake-status: published
+
+Example decorators can be browsed at https://github.com/apache/tomee/tree/master/examples/decorators
+
+
+*Help us document this example! Click the blue pencil icon in the upper right to edit this page.*
+
+==  AccessDeniedException
+
+
+[source,java]
+----
+package org.superbiz.cdi.decorators;
+
+import javax.ejb.ApplicationException;
+
+/**
+ * @version $Revision$ $Date$
+ */
+@ApplicationException
+public class AccessDeniedException extends RuntimeException {
+    public AccessDeniedException(String s) {
+        super(s);
+    }
+}
+----
+
+
+==  Calculator
+
+
+[source,java]
+----
+package org.superbiz.cdi.decorators;
+
+/**
+ * @version $Revision$ $Date$
+ */
+public interface Calculator {
+
+    public int add(int a, int b);
+
+    public int subtract(int a, int b);
+
+    public int multiply(int a, int b);
+
+    public int divide(int a, int b);
+
+    public int remainder(int a, int b);
+}
+----
+
+
+==  CalculatorBean
+
+
+[source,java]
+----
+package org.superbiz.cdi.decorators;
+
+import javax.annotation.Resource;
+import javax.ejb.SessionContext;
+import javax.ejb.Stateless;
+import javax.enterprise.inject.Produces;
+
+@Stateless
+public class CalculatorBean implements Calculator {
+
+    @Produces
+    @Resource
+    private SessionContext sessionContext;
+
+    public int add(int a, int b) {
+        return a + b;
+    }
+
+    public int subtract(int a, int b) {
+        return a - b;
+    }
+
+    public int multiply(int a, int b) {
+        return a * b;
+    }
+
+    public int divide(int a, int b) {
+        return a / b;
+    }
+
+    public int remainder(int a, int b) {
+        return a % b;
+    }
+}
+----
+
+
+==  CalculatorLogging
+
+
+[source,java]
+----
+package org.superbiz.cdi.decorators;
+
+import javax.decorator.Decorator;
+import javax.decorator.Delegate;
+import javax.inject.Inject;
+import java.util.logging.Logger;
+
+@Decorator
+public class CalculatorLogging implements Calculator {
+
+    private Logger logger = Logger.getLogger("Calculator");
+
+    @Inject
+    @Delegate
+    private Calculator calculator;
+
+    @Override
+    public int add(int a, int b) {
+        logger.fine(String.format("add(%s, %s)", a, b));
+        return calculator.add(a, b);
+    }
+
+    @Override
+    public int subtract(int a, int b) {
+        return calculator.subtract(a, b);
+    }
+
+    @Override
+    public int multiply(int a, int b) {
+        logger.finest(String.format("multiply(%s, %s)", a, b));
+        return calculator.multiply(a, b);
+    }
+
+    @Override
+    public int divide(int a, int b) {
+        return calculator.divide(a, b);
+    }
+
+    @Override
+    public int remainder(int a, int b) {
+        logger.info(String.format("remainder(%s, %s)", a, b));
+        return calculator.remainder(a, b);
+    }
+}
+----
+
+
+==  CalculatorSecurity
+
+
+[source,java]
+----
+package org.superbiz.cdi.decorators;
+
+import javax.decorator.Decorator;
+import javax.decorator.Delegate;
+import javax.ejb.SessionContext;
+import javax.inject.Inject;
+
+@Decorator
+public class CalculatorSecurity implements Calculator {
+
+    @Inject
+    @Delegate
+    private Calculator calculator;
+
+    @Inject
+    private SessionContext sessionContext;
+
+    @Override
+    public int add(int a, int b) {
+        return calculator.add(a, b);
+    }
+
+    @Override
+    public int subtract(int a, int b) {
+        // Caller must pass a security check to call subtract
+        if (!sessionContext.isCallerInRole("Manager")) throw new AccessDeniedException(sessionContext.getCallerPrincipal().getName());
+
+        return calculator.subtract(a, b);
+    }
+
+    @Override
+    public int multiply(int a, int b) {
+        return calculator.multiply(a, b);
+    }
+
+    @Override
+    public int divide(int a, int b) {
+        return calculator.divide(a, b);
+    }
+
+    @Override
+    public int remainder(int a, int b) {
+        return calculator.remainder(a, b);
+    }
+}
+----
+
+
+==  beans.xml
+
+
+[source,xml]
+----
+<beans>
+  <!--
+  Explicitly declaring decorators is required by the CDI specification.
+  The order decorators are listed in the xml is the order in which they are invoked.
+  -->
+  <decorators>
+    <class>org.superbiz.cdi.decorators.CalculatorSecurity</class>
+    <class>org.superbiz.cdi.decorators.CalculatorLogging</class>
+  </decorators>
+</beans>
+----
+
+    
+
+==  CalculatorTest
+
+
+[source,java]
+----
+package org.superbiz.cdi.decorators;
+
+import junit.framework.TestCase;
+
+import javax.annotation.security.RunAs;
+import javax.ejb.EJB;
+import javax.ejb.Stateless;
+import javax.ejb.embeddable.EJBContainer;
+import java.util.concurrent.Callable;
+
+public class CalculatorTest extends TestCase {
+
+    @EJB
+    private Calculator calculator;
+
+    @EJB
+    private ManagerBean manager;
+
+    /**
+     * Bootstrap the Embedded EJB Container
+     *
+     * @throws Exception
+     */
+    protected void setUp() throws Exception {
+        EJBContainer.createEJBContainer().getContext().bind("inject", this);
+    }
+
+    /**
+     * Test Add method
+     */
+    public void testAdd() {
+
+        assertEquals(10, calculator.add(4, 6));
+    }
+
+    /**
+     * Test Subtract method
+     */
+    public void testSubtract() {
+
+        try {
+            calculator.subtract(4, 6);
+
+            fail("AccessDeniedException should have been thrown for unauthenticated access");
+        } catch (AccessDeniedException expected) {
+            // pass
+        }
+
+        final int result = manager.call(new Callable<Integer>() {
+            public Integer call() {
+                return calculator.subtract(4, 6);
+            }
+        });
+
+        assertEquals(-2, result);
+    }
+
+    /**
+     * Test Multiply method
+     */
+    public void testMultiply() {
+
+        assertEquals(24, calculator.multiply(4, 6));
+    }
+
+    /**
+     * Test Divide method
+     */
+    public void testDivide() {
+
+        assertEquals(2, calculator.divide(12, 6));
+    }
+
+    /**
+     * Test Remainder method
+     */
+    public void testRemainder() {
+
+        assertEquals(4, calculator.remainder(46, 6));
+    }
+
+    @Stateless
+    @RunAs("Manager")
+    public static class ManagerBean {
+
+        public <V> V call(Callable<V> callable) {
+            try {
+                return callable.call();
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+        }
+    }
+}
+----
+
+
+=  Running
+
+    
+
+[source]
+----
+-------------------------------------------------------
+ T E S T S
+-------------------------------------------------------
+Running org.superbiz.cdi.decorators.CalculatorTest
+Apache OpenEJB 4.0.0-beta-1    build: 20111002-04:06
+http://tomee.apache.org/
+INFO - openejb.home = /Users/dblevins/examples/decorators
+INFO - openejb.base = /Users/dblevins/examples/decorators
+INFO - Using 'javax.ejb.embeddable.EJBContainer=true'
+INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)
+INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)
+INFO - Found EjbModule in classpath: /Users/dblevins/examples/decorators/target/classes
+INFO - Found EjbModule in classpath: /Users/dblevins/examples/decorators/target/test-classes
+INFO - Beginning load: /Users/dblevins/examples/decorators/target/classes
+INFO - Beginning load: /Users/dblevins/examples/decorators/target/test-classes
+INFO - Configuring enterprise application: /Users/dblevins/examples/decorators
+WARN - Method 'lookup' is not available for 'javax.annotation.Resource'. Probably using an older Runtime.
+INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)
+INFO - Auto-creating a container for bean decorators.Comp: Container(type=MANAGED, id=Default Managed Container)
+INFO - Configuring Service(id=Default Stateless Container, type=Container, provider-id=Default Stateless Container)
+INFO - Auto-creating a container for bean CalculatorBean: Container(type=STATELESS, id=Default Stateless Container)
+INFO - Enterprise application "/Users/dblevins/examples/decorators" loaded.
+INFO - Assembling app: /Users/dblevins/examples/decorators
+INFO - Jndi(name="java:global/decorators/decorators.Comp!org.apache.openejb.BeanContext$Comp")
+INFO - Jndi(name="java:global/decorators/decorators.Comp")
+INFO - Jndi(name="java:global/decorators/CalculatorBean!org.superbiz.cdi.decorators.Calculator")
+INFO - Jndi(name="java:global/decorators/CalculatorBean")
+INFO - Jndi(name="java:global/decorators/ManagerBean!org.superbiz.cdi.decorators.CalculatorTest$ManagerBean")
+INFO - Jndi(name="java:global/decorators/ManagerBean")
+INFO - Jndi(name="java:global/EjbModule628834558/org.superbiz.cdi.decorators.CalculatorTest!org.superbiz.cdi.decorators.CalculatorTest")
+INFO - Jndi(name="java:global/EjbModule628834558/org.superbiz.cdi.decorators.CalculatorTest")
+INFO - Created Ejb(deployment-id=CalculatorBean, ejb-name=CalculatorBean, container=Default Stateless Container)
+INFO - Created Ejb(deployment-id=decorators.Comp, ejb-name=decorators.Comp, container=Default Managed Container)
+INFO - Created Ejb(deployment-id=ManagerBean, ejb-name=ManagerBean, container=Default Stateless Container)
+INFO - Created Ejb(deployment-id=org.superbiz.cdi.decorators.CalculatorTest, ejb-name=org.superbiz.cdi.decorators.CalculatorTest, container=Default Managed Container)
+INFO - Started Ejb(deployment-id=CalculatorBean, ejb-name=CalculatorBean, container=Default Stateless Container)
+INFO - Started Ejb(deployment-id=decorators.Comp, ejb-name=decorators.Comp, container=Default Managed Container)
+INFO - Started Ejb(deployment-id=ManagerBean, ejb-name=ManagerBean, container=Default Stateless Container)
+INFO - Started Ejb(deployment-id=org.superbiz.cdi.decorators.CalculatorTest, ejb-name=org.superbiz.cdi.decorators.CalculatorTest, container=Default Managed Container)
+INFO - Deployed Application(path=/Users/dblevins/examples/decorators)
+INFO - EJBContainer already initialized.  Call ejbContainer.close() to allow reinitialization
+Oct 29, 2011 11:41:04 AM org.apache.webbeans.decorator.DelegateHandler invoke
+SEVERE: Exception in calling method : [subtract] in decorator class : [org.superbiz.cdi.decorators.CalculatorSecurity]. Look in the log for target checked exception.
+org.superbiz.cdi.decorators.AccessDeniedException: guest
+	at org.superbiz.cdi.decorators.CalculatorSecurity.subtract(CalculatorSecurity.java:43)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
+	at java.lang.reflect.Method.invoke(Method.java:597)
+	at org.apache.webbeans.decorator.DelegateHandler.invoke(DelegateHandler.java:98)
+	at org.apache.openejb.cdi.CdiInterceptor.invoke(CdiInterceptor.java:127)
+	at org.apache.openejb.cdi.CdiInterceptor.access$000(CdiInterceptor.java:45)
+	at org.apache.openejb.cdi.CdiInterceptor$1.call(CdiInterceptor.java:66)
+	at org.apache.openejb.cdi.CdiInterceptor.aroundInvoke(CdiInterceptor.java:72)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
+	at java.lang.reflect.Method.invoke(Method.java:597)
+	at org.apache.openejb.core.interceptor.ReflectionInvocationContext$Invocation.invoke(ReflectionInvocationContext.java:181)
+	at org.apache.openejb.core.interceptor.ReflectionInvocationContext.proceed(ReflectionInvocationContext.java:163)
+	at org.apache.openejb.core.interceptor.InterceptorStack.invoke(InterceptorStack.java:130)
+	at org.apache.openejb.core.stateless.StatelessContainer._invoke(StatelessContainer.java:226)
+	at org.apache.openejb.core.stateless.StatelessContainer.invoke(StatelessContainer.java:178)
+	at org.apache.openejb.core.ivm.EjbObjectProxyHandler.synchronizedBusinessMethod(EjbObjectProxyHandler.java:255)
+	at org.apache.openejb.core.ivm.EjbObjectProxyHandler.businessMethod(EjbObjectProxyHandler.java:235)
+	at org.apache.openejb.core.ivm.EjbObjectProxyHandler._invoke(EjbObjectProxyHandler.java:92)
+	at org.apache.openejb.core.ivm.BaseEjbProxyHandler.invoke(BaseEjbProxyHandler.java:284)
+	at $Proxy44.subtract(Unknown Source)
+	at org.superbiz.cdi.decorators.CalculatorTest.testSubtract(CalculatorTest.java:59)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
+	at java.lang.reflect.Method.invoke(Method.java:597)
+	at junit.framework.TestCase.runTest(TestCase.java:168)
+	at junit.framework.TestCase.runBare(TestCase.java:134)
+	at junit.framework.TestResult$1.protect(TestResult.java:110)
+	at junit.framework.TestResult.runProtected(TestResult.java:128)
+	at junit.framework.TestResult.run(TestResult.java:113)
+	at junit.framework.TestCase.run(TestCase.java:124)
+	at junit.framework.TestSuite.runTest(TestSuite.java:232)
+	at junit.framework.TestSuite.run(TestSuite.java:227)
+	at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:83)
+	at org.apache.maven.surefire.junit4.JUnit4TestSet.execute(JUnit4TestSet.java:35)
+	at org.apache.maven.surefire.junit4.JUnit4Provider.executeTestSet(JUnit4Provider.java:115)
+	at org.apache.maven.surefire.junit4.JUnit4Provider.invoke(JUnit4Provider.java:97)
+	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
+	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
+	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
+	at java.lang.reflect.Method.invoke(Method.java:597)
+	at org.apache.maven.surefire.booter.ProviderFactory$ClassLoaderProxy.invoke(ProviderFactory.java:103)
+	at $Proxy0.invoke(Unknown Source)
+	at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:150)
+	at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcess(SurefireStarter.java:91)
+	at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:69)
+INFO - EJBContainer already initialized.  Call ejbContainer.close() to allow reinitialization
+INFO - EJBContainer already initialized.  Call ejbContainer.close() to allow reinitialization
+INFO - EJBContainer already initialized.  Call ejbContainer.close() to allow reinitialization
+Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.338 sec
+
+Results :
+
+Tests run: 5, Failures: 0, Errors: 0, Skipped: 0
+----
+
+    

Propchange: tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/decorators.adoc
------------------------------------------------------------------------------
    svn:executable = *

Added: tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/deltaspike-configproperty.adoc
URL: http://svn.apache.org/viewvc/tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/deltaspike-configproperty.adoc?rev=1772522&view=auto
==============================================================================
--- tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/deltaspike-configproperty.adoc (added)
+++ tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/deltaspike-configproperty.adoc Sun Dec  4 11:01:40 2016
@@ -0,0 +1,9 @@
+= deltaspike-configproperty
+:jbake-date: 2016-09-06
+:jbake-type: page
+:jbake-tomeepdf:
+:jbake-status: published
+
+Example deltaspike-configproperty can be browsed at https://github.com/apache/tomee/tree/master/examples/deltaspike-configproperty
+
+No README.md yet, be the first to contribute one!

Propchange: tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/deltaspike-configproperty.adoc
------------------------------------------------------------------------------
    svn:executable = *

Added: tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/deltaspike-exception-handling.adoc
URL: http://svn.apache.org/viewvc/tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/deltaspike-exception-handling.adoc?rev=1772522&view=auto
==============================================================================
--- tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/deltaspike-exception-handling.adoc (added)
+++ tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/deltaspike-exception-handling.adoc Sun Dec  4 11:01:40 2016
@@ -0,0 +1,9 @@
+= deltaspike-exception-handling
+:jbake-date: 2016-09-06
+:jbake-type: page
+:jbake-tomeepdf:
+:jbake-status: published
+
+Example deltaspike-exception-handling can be browsed at https://github.com/apache/tomee/tree/master/examples/deltaspike-exception-handling
+
+No README.md yet, be the first to contribute one!

Propchange: tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/deltaspike-exception-handling.adoc
------------------------------------------------------------------------------
    svn:executable = *

Added: tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/deltaspike-fullstack.adoc
URL: http://svn.apache.org/viewvc/tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/deltaspike-fullstack.adoc?rev=1772522&view=auto
==============================================================================
--- tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/deltaspike-fullstack.adoc (added)
+++ tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/deltaspike-fullstack.adoc Sun Dec  4 11:01:40 2016
@@ -0,0 +1,75 @@
+= Apache DeltaSpike Demo
+:jbake-date: 2016-09-06
+:jbake-type: page
+:jbake-tomeepdf:
+:jbake-status: published
+
+Example deltaspike-fullstack can be browsed at https://github.com/apache/tomee/tree/master/examples/deltaspike-fullstack
+
+Notice:    Licensed to the Apache Software Foundation (ASF) under one
+           or more contributor license agreements.  See the NOTICE file
+           distributed with this work for additional information
+           regarding copyright ownership.  The ASF licenses this file
+           to you under the Apache License, Version 2.0 (the
+           "License"); you may not use this file except in compliance
+           with the License.  You may obtain a copy of the License at
+           .
+             http://www.apache.org/licenses/LICENSE-2.0
+           .
+           Unless required by applicable law or agreed to in writing,
+           software distributed under the License is distributed on an
+           "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+           KIND, either express or implied.  See the License for the
+           specific language governing permissions and limitations
+           under the License.
+
+<h2>Steps to run the example</h2>
+
+Build and start the demo:
+
+    mvn clean package tomee:run
+
+Open:
+
+    http://localhost:8080/
+
+This example shows how to improve JSF2/CDI/BV/JPA applications with features provided by Apache DeltaSpike and MyFaces ExtVal.
+
+<h2>Intro of Apache DeltaSpike and MyFaces ExtVal</h2>
+
+The Apache DeltaSpike project hosts portable extensions for Contexts and Dependency Injection (CDI - JSR 299). DeltaSpike is a toolbox for your CDI application. Like CDI itself DeltaSpike is focused on type-safety. It is a modularized and extensible framework. So it's easy to choose the needed parts to facilitate the daily work in your project.
+
+MyFaces Extensions Validator (aka ExtVal) is a JSF centric validation framework which is compatible with JSF 1.x and JSF 2.x.
+This example shows how it improves the default integration of Bean-Validation (JSR-303) with JSF2 as well as meta-data based cross-field validation.
+
+
+<h2>Illustrated Features</h2>
+
+<h3>Apache DeltaSpike</h3>
+
+<ul>
+
+[source,xml]
+----
+<li><a href="./src/main/java/org/superbiz/deltaspike/view/config/Pages.java" target="_blank">Type-safe view-config</a></li>
+<li><a href="./src/main/java/org/superbiz/deltaspike/view/InfoPage.java" target="_blank">Type-safe (custom) view-meta-data</a></li>
+<li><a href="./src/main/java/org/superbiz/deltaspike/view/MenuBean.java" target="_blank">Type-safe navigation</a></li>
+<li><a href="./src/main/java/org/superbiz/deltaspike/CustomProjectStage.java" target="_blank">Type-safe custom project-stage</a></li>
+<li><a href="./src/main/java/org/superbiz/deltaspike/view/UserHolder.java" target="_blank">@WindowScoped</a></li>
+<li><a href="./src/main/java/org/superbiz/deltaspike/view/MenuBean.java" target="_blank">Controlling DeltaSpike grouped-conversations with GroupedConversationManager</a></li>
+<li><a href="./src/main/java/org/superbiz/deltaspike/view/FeedbackPage.java" target="_blank">@GroupedConversationScoped</a></li>
+<li><a href="./src/main/java/org/superbiz/deltaspike/view/FeedbackPage.java" target="_blank">Manual conversation handling</a></li>
+<li><a href="./src/main/java/org/superbiz/deltaspike/view/security/LoginAccessDecisionVoter.java" target="_blank">Secured pages (AccessDecisionVoter)</a></li>
+<li><a href="./src/main/java/org/superbiz/deltaspike/repository/Repository.java" target="_blank">@Transactional</a></li>
+<li><a href="./src/main/java/org/superbiz/deltaspike/view/RegistrationPage.java" target="_blank">I18n (type-safe messages)</a></li>
+<li><a href="./src/main/java/org/superbiz/deltaspike/domain/validation/UniqueUserNameValidator.java" target="_blank">Dependency-Injection for JSR303 (BV) constraint-validators</a></li>
+<li><a href="./src/main/java/org/superbiz/deltaspike/DebugPhaseListener.java" target="_blank">Dependency-Injection for JSF phase-listeners</a></li>
+</ul>
+
+<h3>Apache MyFaces ExtVal</h3>
+
+<ul>
+<li><a href="./src/main/java/org/superbiz/myfaces/view/RegistrationPage.java" target="_blank">Cross-Field validation (@Equals)</a></li>
+<li><a href="./src/main/java/org/superbiz/myfaces/view/RegistrationPage.java" target="_blank">Type-safe group-validation (@BeanValidation) for JSF action-methods</a></li>
+</ul>
+

Propchange: tomee/site/trunk/generators/site-tomee-ng/src/main/jbake/content/examples/deltaspike-fullstack.adoc
------------------------------------------------------------------------------
    svn:executable = *