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 = *