{ | |
"all":{ | |
"adapters":[ | |
{ | |
"name":"multiple-arquillian-adapters", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/multiple-arquillian-adapters" | |
} | |
], | |
"alternate":[ | |
{ | |
"name":"alternate-descriptors", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/alternate-descriptors" | |
} | |
], | |
"alternative":[ | |
{ | |
"name":"cdi-alternative-and-stereotypes", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/cdi-alternative-and-stereotypes" | |
} | |
], | |
"applet":[ | |
{ | |
"name":"applet", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/applet" | |
} | |
], | |
"applicationcomposer":[ | |
{ | |
"name":"applicationcomposer-jaxws-cdi", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/applicationcomposer-jaxws-cdi" | |
}, | |
{ | |
"name":"rest-applicationcomposer", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/rest-applicationcomposer" | |
}, | |
{ | |
"name":"application-composer", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/application-composer" | |
}, | |
{ | |
"name":"rest-applicationcomposer-mockito", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/rest-applicationcomposer-mockito" | |
} | |
], | |
"applicationexception":[ | |
{ | |
"name":"applicationexception", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/applicationexception" | |
} | |
], | |
"arquillian":[ | |
{ | |
"name":"arquillian-jpa", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/arquillian-jpa" | |
}, | |
{ | |
"name":"multiple-tomee-arquillian", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/multiple-tomee-arquillian" | |
}, | |
{ | |
"name":"multiple-arquillian-adapters", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/multiple-arquillian-adapters" | |
} | |
], | |
"async":[ | |
{ | |
"name":"async-postconstruct", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/async-postconstruct" | |
}, | |
{ | |
"name":"async-methods", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/async-methods" | |
} | |
], | |
"attachments":[ | |
{ | |
"name":"webservice-attachments", | |
"readme":"Title: Webservice Attachments\n\n*Help us document this example! Click the blue pencil icon in the upper right to edit this page.*\n\n## AttachmentImpl\n\n package org.superbiz.attachment;\n \n import javax.activation.DataHandler;\n import javax.activation.DataSource;\n import javax.ejb.Stateless;\n import javax.jws.WebService;\n import javax.xml.ws.BindingType;\n import javax.xml.ws.soap.SOAPBinding;\n import java.io.IOException;\n import java.io.InputStream;\n \n /**\n * This is an EJB 3 style pojo stateless session bean\n * Every stateless session bean implementation must be annotated\n * using the annotation @Stateless\n * This EJB has a single interface: {@link AttachmentWs} a webservice interface.\n */\n @Stateless\n @WebService(\n portName = \"AttachmentPort\",\n serviceName = \"AttachmentWsService\",\n targetNamespace = \"http://superbiz.org/wsdl\",\n endpointInterface = \"org.superbiz.attachment.AttachmentWs\")\n @BindingType(value = SOAPBinding.SOAP12HTTP_MTOM_BINDING)\n public class AttachmentImpl implements AttachmentWs {\n \n public String stringFromBytes(byte[] data) {\n return new String(data);\n }\n \n public String stringFromDataSource(DataSource source) {\n \n try {\n InputStream inStr = source.getInputStream();\n int size = inStr.available();\n byte[] data = new byte[size];\n inStr.read(data);\n inStr.close();\n return new String(data);\n } catch (IOException e) {\n e.printStackTrace();\n }\n return \"\";\n }\n \n public String stringFromDataHandler(DataHandler handler) {\n \n try {\n return (String) handler.getContent();\n } catch (IOException e) {\n e.printStackTrace();\n }\n return \"\";\n }\n }\n\n## AttachmentWs\n\n package org.superbiz.attachment;\n \n import javax.activation.DataHandler;\n import javax.jws.WebService;\n \n /**\n * This is an EJB 3 webservice interface to send attachments throughout SAOP.\n */\n @WebService(targetNamespace = \"http://superbiz.org/wsdl\")\n public interface AttachmentWs {\n \n public String stringFromBytes(byte[] data);\n \n // Not working at the moment with SUN saaj provider and CXF\n //public String stringFromDataSource(DataSource source);\n \n public String stringFromDataHandler(DataHandler handler);\n }\n\n## ejb-jar.xml\n\n <ejb-jar/>\n\n## AttachmentTest\n\n package org.superbiz.attachment;\n \n import junit.framework.TestCase;\n \n import javax.activation.DataHandler;\n import javax.activation.DataSource;\n import javax.mail.util.ByteArrayDataSource;\n import javax.naming.Context;\n import javax.naming.InitialContext;\n import javax.xml.namespace.QName;\n import javax.xml.ws.BindingProvider;\n import javax.xml.ws.Service;\n import javax.xml.ws.soap.SOAPBinding;\n import java.net.URL;\n import java.util.Properties;\n \n public class AttachmentTest extends TestCase {\n \n //START SNIPPET: setup\t\n private InitialContext initialContext;\n \n protected void setUp() throws Exception {\n \n Properties properties = new Properties();\n properties.setProperty(Context.INITIAL_CONTEXT_FACTORY, \"org.apache.openejb.core.LocalInitialContextFactory\");\n properties.setProperty(\"openejb.embedded.remotable\", \"true\");\n \n initialContext = new InitialContext(properties);\n }\n //END SNIPPET: setup \n \n /**\n * Create a webservice client using wsdl url\n *\n * @throws Exception\n */\n //START SNIPPET: webservice\n public void testAttachmentViaWsInterface() throws Exception {\n Service service = Service.create(\n new URL(\"http://127.0.0.1:4204/AttachmentImpl?wsdl\"),\n new QName(\"http://superbiz.org/wsdl\", \"AttachmentWsService\"));\n assertNotNull(service);\n \n AttachmentWs ws = service.getPort(AttachmentWs.class);\n \n // retrieve the SOAPBinding\n SOAPBinding binding = (SOAPBinding) ((BindingProvider) ws).getBinding();\n binding.setMTOMEnabled(true);\n \n String request = \"tsztelak@gmail.com\";\n \n // Byte array\n String response = ws.stringFromBytes(request.getBytes());\n assertEquals(request, response);\n \n // Data Source\n DataSource source = new ByteArrayDataSource(request.getBytes(), \"text/plain; charset=UTF-8\");\n \n // not yet supported !\n // response = ws.stringFromDataSource(source);\n // assertEquals(request, response);\n \n // Data Handler\n response = ws.stringFromDataHandler(new DataHandler(source));\n assertEquals(request, response);\n }\n //END SNIPPET: webservice\n }\n\n# Running\n\n \n -------------------------------------------------------\n T E S T S\n -------------------------------------------------------\n Running org.superbiz.attachment.AttachmentTest\n Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06\n http://tomee.apache.org/\n INFO - openejb.home = /Users/dblevins/examples/webservice-attachments\n INFO - openejb.base = /Users/dblevins/examples/webservice-attachments\n INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)\n INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)\n INFO - Found EjbModule in classpath: /Users/dblevins/examples/webservice-attachments/target/classes\n INFO - Beginning load: /Users/dblevins/examples/webservice-attachments/target/classes\n INFO - Configuring enterprise application: /Users/dblevins/examples/webservice-attachments/classpath.ear\n INFO - Configuring Service(id=Default Stateless Container, type=Container, provider-id=Default Stateless Container)\n INFO - Auto-creating a container for bean AttachmentImpl: Container(type=STATELESS, id=Default Stateless Container)\n INFO - Enterprise application \"/Users/dblevins/examples/webservice-attachments/classpath.ear\" loaded.\n INFO - Assembling app: /Users/dblevins/examples/webservice-attachments/classpath.ear\n INFO - Created Ejb(deployment-id=AttachmentImpl, ejb-name=AttachmentImpl, container=Default Stateless Container)\n INFO - Started Ejb(deployment-id=AttachmentImpl, ejb-name=AttachmentImpl, container=Default Stateless Container)\n INFO - Deployed Application(path=/Users/dblevins/examples/webservice-attachments/classpath.ear)\n INFO - Initializing network services\n INFO - Creating ServerService(id=httpejbd)\n INFO - Creating ServerService(id=cxf)\n INFO - Creating ServerService(id=admin)\n INFO - Creating ServerService(id=ejbd)\n INFO - Creating ServerService(id=ejbds)\n INFO - Initializing network services\n ** Starting Services **\n NAME IP PORT \n httpejbd 127.0.0.1 4204 \n admin thread 127.0.0.1 4200 \n ejbd 127.0.0.1 4201 \n ejbd 127.0.0.1 4203 \n -------\n Ready!\n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 3.034 sec\n \n Results :\n \n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0\n \n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/webservice-attachments" | |
} | |
], | |
"bmt":[ | |
{ | |
"name":"testing-transactions-bmt", | |
"readme":"Title: Testing Transactions BMT\n\nShows how to begin, commit and rollback transactions using a UserTransaction via a Stateful Bean.\n\n## Movie\n\n package org.superbiz.injection.tx;\n\n import javax.persistence.Entity;\n import javax.persistence.GeneratedValue;\n import javax.persistence.Id;\n\n @Entity\n public class Movie {\n\n @Id\n @GeneratedValue\n private Long id;\n private String director;\n private String title;\n private int year;\n\n public Movie(String director, String title, int year) {\n this.director = director;\n this.title = title;\n this.year = year;\n }\n\n public Movie() {\n\n }\n\n public Long getId() {\n return id;\n }\n\n public void setId(Long id) {\n this.id = id;\n }\n\n public String getDirector() {\n return director;\n }\n\n public void setDirector(String director) {\n this.director = director;\n }\n\n public String getTitle() {\n return title;\n }\n\n public void setTitle(String title) {\n this.title = title;\n }\n\n public int getYear() {\n return year;\n }\n\n public void setYear(int year) {\n this.year = year;\n }\n }\n\n## Movies\n\n package org.superbiz.injection.tx;\n\n import javax.annotation.Resource;\n import javax.ejb.Stateful;\n import javax.ejb.TransactionManagement;\n import javax.ejb.TransactionManagementType;\n import javax.persistence.EntityManager;\n import javax.persistence.PersistenceContext;\n import javax.persistence.PersistenceContextType;\n import javax.persistence.Query;\n import javax.transaction.UserTransaction;\n\n @Stateful(name = \"Movies\")\n @TransactionManagement(TransactionManagementType.BEAN)\n public class Movies {\n\n @PersistenceContext(unitName = \"movie-unit\", type = PersistenceContextType.TRANSACTION)\n private EntityManager entityManager;\n\n @Resource\n private UserTransaction userTransaction;\n\n public void addMovie(Movie movie) throws Exception {\n try {\n userTransaction.begin();\n entityManager.persist(movie);\n\n //For some dummy reason, this db can have only 5 titles. :O)\n if (countMovies() > 5) {\n userTransaction.rollback();\n } else {\n userTransaction.commit();\n }\n\n\n } catch (Exception e) {\n e.printStackTrace();\n userTransaction.rollback();\n }\n }\n\n public Long countMovies() throws Exception {\n Query query = entityManager.createQuery(\"SELECT COUNT(m) FROM Movie m\");\n return Long.class.cast(query.getSingleResult());\n }\n }\n\n\n## persistence.xml\n\n <persistence xmlns=\"http://java.sun.com/xml/ns/persistence\" version=\"1.0\">\n\n <persistence-unit name=\"movie-unit\">\n <jta-data-source>movieDatabase</jta-data-source>\n <non-jta-data-source>movieDatabaseUnmanaged</non-jta-data-source>\n <class>org.superbiz.injection.tx.Movie</class>\n\n <properties>\n <property name=\"openjpa.jdbc.SynchronizeMappings\" value=\"buildSchema(ForeignKeys=true)\"/>\n </properties>\n </persistence-unit>\n </persistence>\n\n## MoviesTest\n\n package org.superbiz.injection.tx;\n\n import org.junit.Assert;\n import org.junit.Test;\n\n import javax.ejb.EJB;\n import javax.ejb.embeddable.EJBContainer;\n import java.util.Properties;\n\n public class MoviesTest {\n\n @EJB\n private Movies movies;\n\n @Test\n public void testMe() throws Exception {\n final Properties p = new Properties();\n p.put(\"movieDatabase\", \"new://Resource?type=DataSource\");\n p.put(\"movieDatabase.JdbcDriver\", \"org.hsqldb.jdbcDriver\");\n p.put(\"movieDatabase.JdbcUrl\", \"jdbc:hsqldb:mem:moviedb\");\n\n EJBContainer.createEJBContainer(p).getContext().bind(\"inject\", this);\n\n movies.addMovie(new Movie(\"Asif Kapadia\", \"Senna\", 2010));\n movies.addMovie(new Movie(\"José Padilha\", \"Tropa de Elite\", 2007));\n movies.addMovie(new Movie(\"Andy Wachowski/Lana Wachowski\", \"The Matrix\", 1999));\n movies.addMovie(new Movie(\"Quentin Tarantino\", \"Reservoir Dogs\", 1992));\n movies.addMovie(new Movie(\"Joel Coen\", \"Fargo\", 1996));\n movies.addMovie(new Movie(\"Joel Coen\", \"The Big Lebowski\", 1998));\n\n Assert.assertEquals(5L, movies.countMovies().longValue());\n }\n\n }\n\n\n# Running\n\n -------------------------------------------------------\n T E S T S\n -------------------------------------------------------\n Running org.superbiz.injection.tx.MoviesTest\n INFO - ********************************************************************************\n INFO - OpenEJB http://tomee.apache.org/\n INFO - Startup: Sat Jul 21 16:39:28 EDT 2012\n INFO - Copyright 1999-2012 (C) Apache OpenEJB Project, All Rights Reserved.\n INFO - Version: 4.1.0\n INFO - Build date: 20120721\n INFO - Build time: 12:06\n INFO - ********************************************************************************\n INFO - openejb.home = /home/boto/dev/ws/openejb_trunk/openejb/examples/testing-transactions-bmt\n INFO - openejb.base = /home/boto/dev/ws/openejb_trunk/openejb/examples/testing-transactions-bmt\n INFO - Created new singletonService org.apache.openejb.cdi.ThreadSingletonServiceImpl@3f3f210f\n INFO - Succeeded in installing singleton service\n INFO - Using 'javax.ejb.embeddable.EJBContainer=true'\n INFO - Cannot find the configuration file [conf/openejb.xml]. Will attempt to create one for the beans deployed.\n INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)\n INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)\n INFO - Configuring Service(id=movieDatabase, type=Resource, provider-id=Default JDBC Database)\n INFO - Creating TransactionManager(id=Default Transaction Manager)\n INFO - Creating SecurityService(id=Default Security Service)\n INFO - Creating Resource(id=movieDatabase)\n INFO - Beginning load: /home/boto/dev/ws/openejb_trunk/openejb/examples/testing-transactions-bmt/target/classes\n INFO - Configuring enterprise application: /home/boto/dev/ws/openejb_trunk/openejb/examples/testing-transactions-bmt\n WARNING - Method 'lookup' is not available for 'javax.annotation.Resource'. Probably using an older Runtime.\n INFO - Auto-deploying ejb Movies: EjbDeployment(deployment-id=Movies)\n INFO - Configuring Service(id=Default Stateful Container, type=Container, provider-id=Default Stateful Container)\n INFO - Auto-creating a container for bean Movies: Container(type=STATEFUL, id=Default Stateful Container)\n INFO - Creating Container(id=Default Stateful Container)\n INFO - Using directory /tmp for stateful session passivation\n INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)\n INFO - Auto-creating a container for bean org.superbiz.injection.tx.MoviesTest: Container(type=MANAGED, id=Default Managed Container)\n INFO - Creating Container(id=Default Managed Container)\n INFO - Using directory /tmp for stateful session passivation\n INFO - Configuring PersistenceUnit(name=movie-unit)\n INFO - Auto-creating a Resource with id 'movieDatabaseNonJta' of type 'DataSource for 'movie-unit'.\n INFO - Configuring Service(id=movieDatabaseNonJta, type=Resource, provider-id=movieDatabase)\n INFO - Creating Resource(id=movieDatabaseNonJta)\n INFO - Adjusting PersistenceUnit movie-unit <non-jta-data-source> to Resource ID 'movieDatabaseNonJta' from 'movieDatabaseUnmanaged'\n INFO - Enterprise application \"/home/boto/dev/ws/openejb_trunk/openejb/examples/testing-transactions-bmt\" loaded.\n INFO - Assembling app: /home/boto/dev/ws/openejb_trunk/openejb/examples/testing-transactions-bmt\n SEVERE - JAVA AGENT NOT INSTALLED. The JPA Persistence Provider requested installation of a ClassFileTransformer which requires a JavaAgent. See http://tomee.apache.org/3.0/javaagent.html\n INFO - PersistenceUnit(name=movie-unit, provider=org.apache.openjpa.persistence.PersistenceProviderImpl) - provider time 399ms\n INFO - Jndi(name=\"java:global/testing-transactions-bmt/Movies!org.superbiz.injection.tx.Movies\")\n INFO - Jndi(name=\"java:global/testing-transactions-bmt/Movies\")\n INFO - Existing thread singleton service in SystemInstance() org.apache.openejb.cdi.ThreadSingletonServiceImpl@3f3f210f\n INFO - OpenWebBeans Container is starting...\n INFO - Adding OpenWebBeansPlugin : [CdiPlugin]\n INFO - All injection points are validated successfully.\n INFO - OpenWebBeans Container has started, it took 157 ms.\n INFO - Created Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container)\n INFO - Started Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container)\n INFO - Deployed Application(path=/home/boto/dev/ws/openejb_trunk/openejb/examples/testing-transactions-bmt)\n INFO - Started user transaction org.apache.geronimo.transaction.manager.TransactionImpl@709a1411\n 21-Jul-2012 4:39:32 PM null openjpa.Runtime\n INFO: Starting OpenJPA 2.2.0\n 21-Jul-2012 4:39:32 PM null openjpa.jdbc.JDBC\n INFO: Using dictionary class \"org.apache.openjpa.jdbc.sql.HSQLDictionary\" (HSQL Database Engine 2.2.8 ,HSQL Database Engine Driver 2.2.8).\n 21-Jul-2012 4:39:33 PM null openjpa.Enhance\n INFO: Creating subclass and redefining methods for \"[class org.superbiz.injection.tx.Movie]\". This means that your application will be less efficient than it would if you ran the OpenJPA enhancer.\n INFO - Committing user transaction org.apache.geronimo.transaction.manager.TransactionImpl@709a1411\n INFO - Started user transaction org.apache.geronimo.transaction.manager.TransactionImpl@2bb64b70\n INFO - Committing user transaction org.apache.geronimo.transaction.manager.TransactionImpl@2bb64b70\n INFO - Started user transaction org.apache.geronimo.transaction.manager.TransactionImpl@627b5c\n INFO - Committing user transaction org.apache.geronimo.transaction.manager.TransactionImpl@627b5c\n INFO - Started user transaction org.apache.geronimo.transaction.manager.TransactionImpl@2f031310\n INFO - Committing user transaction org.apache.geronimo.transaction.manager.TransactionImpl@2f031310\n INFO - Started user transaction org.apache.geronimo.transaction.manager.TransactionImpl@4df2a9da\n INFO - Committing user transaction org.apache.geronimo.transaction.manager.TransactionImpl@4df2a9da\n INFO - Started user transaction org.apache.geronimo.transaction.manager.TransactionImpl@3fa9b4a4\n INFO - Rolling back user transaction org.apache.geronimo.transaction.manager.TransactionImpl@3fa9b4a4\n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 7.471 sec\n\n Results :\n\n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0\n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/testing-transactions-bmt" | |
} | |
], | |
"bval":[ | |
{ | |
"name":"bval-evaluation-redeployment", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/bval-evaluation-redeployment" | |
} | |
], | |
"callbacks":[ | |
{ | |
"name":"simple-stateful-callbacks", | |
"readme":"Title: Simple Stateful with callback methods\n\nThis example shows how to create a stateful session bean that uses the @PrePassivate, @PostActivate, @PostConstruct, @PreDestroy and @AroundInvoke annotations.\n\n## CallbackCounter\n\n package org.superbiz.counter;\n\n import javax.annotation.PostConstruct;\n import javax.annotation.PreDestroy;\n import javax.ejb.PostActivate;\n import javax.ejb.PrePassivate;\n import javax.ejb.Stateful;\n import javax.ejb.StatefulTimeout;\n import javax.interceptor.AroundInvoke;\n import javax.interceptor.InvocationContext;\n import java.io.Serializable;\n import java.util.concurrent.TimeUnit;\n\n @Stateful\n @StatefulTimeout(value = 1, unit = TimeUnit.SECONDS)\n public class CallbackCounter implements Serializable {\n\n private int count = 0;\n\n @PrePassivate\n public void prePassivate() {\n ExecutionChannel.getInstance().notifyObservers(\"prePassivate\");\n }\n\n @PostActivate\n public void postActivate() {\n ExecutionChannel.getInstance().notifyObservers(\"postActivate\");\n }\n\n @PostConstruct\n public void postConstruct() {\n ExecutionChannel.getInstance().notifyObservers(\"postConstruct\");\n }\n\n @PreDestroy\n public void preDestroy() {\n ExecutionChannel.getInstance().notifyObservers(\"preDestroy\");\n }\n\n @AroundInvoke\n public Object intercept(InvocationContext ctx) throws Exception {\n ExecutionChannel.getInstance().notifyObservers(ctx.getMethod().getName());\n return ctx.proceed();\n }\n\n public int count() {\n return count;\n }\n\n public int increment() {\n return ++count;\n }\n\n public int reset() {\n return (count = 0);\n }\n }\n\n## ExecutionChannel\n\n package org.superbiz.counter;\n\n import java.util.ArrayList;\n import java.util.List;\n\n public class ExecutionChannel {\n private static final ExecutionChannel INSTANCE = new ExecutionChannel();\n\n private final List<ExecutionObserver> observers = new ArrayList<ExecutionObserver>();\n\n public static ExecutionChannel getInstance() {\n return INSTANCE;\n }\n\n public void addObserver(ExecutionObserver observer) {\n this.observers.add(observer);\n }\n\n public void notifyObservers(Object value) {\n for (ExecutionObserver observer : this.observers) {\n observer.onExecution(value);\n }\n }\n }\n\n## ExecutionObserver\n\n package org.superbiz.counter;\n\n public interface ExecutionObserver {\n\n void onExecution(Object value);\n\n }\n\n## CounterCallbacksTest\n\n package org.superbiz.counter;\n\n import junit.framework.Assert;\n import org.junit.Test;\n\n import javax.ejb.embeddable.EJBContainer;\n import javax.naming.Context;\n import javax.naming.InitialContext;\n import javax.naming.NamingException;\n import java.util.*;\n\n public class CounterCallbacksTest implements ExecutionObserver {\n private static List<Object> received = new ArrayList<Object>();\n\n public Context getContext() throws NamingException {\n final Properties p = new Properties();\n p.put(Context.INITIAL_CONTEXT_FACTORY, \"org.apache.openejb.core.LocalInitialContextFactory\");\n return new InitialContext(p);\n\n }\n\n @Test\n public void test() throws Exception {\n final Map<String, Object> p = new HashMap<String, Object>();\n p.put(\"MySTATEFUL\", \"new://Container?type=STATEFUL\");\n p.put(\"MySTATEFUL.Capacity\", \"2\"); //How many instances of Stateful beans can our server hold in memory?\n p.put(\"MySTATEFUL.Frequency\", \"1\"); //Interval in seconds between checks\n p.put(\"MySTATEFUL.BulkPassivate\", \"0\"); //No bulkPassivate - just passivate entities whenever it is needed\n final EJBContainer container = EJBContainer.createEJBContainer(p);\n\n //this is going to track the execution\n ExecutionChannel.getInstance().addObserver(this);\n\n {\n final Context context = getContext();\n\n CallbackCounter counterA = (CallbackCounter) context.lookup(\"java:global/simple-stateful-callbacks/CallbackCounter\");\n Assert.assertNotNull(counterA);\n Assert.assertEquals(\"postConstruct\", received.remove(0));\n\n Assert.assertEquals(0, counterA.count());\n Assert.assertEquals(\"count\", received.remove(0));\n\n Assert.assertEquals(1, counterA.increment());\n Assert.assertEquals(\"increment\", received.remove(0));\n\n Assert.assertEquals(0, counterA.reset());\n Assert.assertEquals(\"reset\", received.remove(0));\n\n Assert.assertEquals(1, counterA.increment());\n Assert.assertEquals(\"increment\", received.remove(0));\n\n System.out.println(\"Waiting 2 seconds...\");\n Thread.sleep(2000);\n\n Assert.assertEquals(\"preDestroy\", received.remove(0));\n\n try {\n counterA.increment();\n Assert.fail(\"The ejb is not supposed to be there.\");\n } catch (javax.ejb.NoSuchEJBException e) {\n //excepted\n }\n\n context.close();\n }\n\n {\n final Context context = getContext();\n\n CallbackCounter counterA = (CallbackCounter) context.lookup(\"java:global/simple-stateful-callbacks/CallbackCounter\");\n Assert.assertEquals(\"postConstruct\", received.remove(0));\n\n Assert.assertEquals(1, counterA.increment());\n Assert.assertEquals(\"increment\", received.remove(0));\n\n ((CallbackCounter) context.lookup(\"java:global/simple-stateful-callbacks/CallbackCounter\")).count();\n Assert.assertEquals(\"postConstruct\", received.remove(0));\n Assert.assertEquals(\"count\", received.remove(0));\n\n ((CallbackCounter) context.lookup(\"java:global/simple-stateful-callbacks/CallbackCounter\")).count();\n Assert.assertEquals(\"postConstruct\", received.remove(0));\n Assert.assertEquals(\"count\", received.remove(0));\n\n System.out.println(\"Waiting 2 seconds...\");\n Thread.sleep(2000);\n Assert.assertEquals(\"prePassivate\", received.remove(0));\n\n context.close();\n }\n container.close();\n\n Assert.assertEquals(\"preDestroy\", received.remove(0));\n Assert.assertEquals(\"preDestroy\", received.remove(0));\n\n Assert.assertTrue(received.toString(), received.isEmpty());\n }\n\n @Override\n public void onExecution(Object value) {\n System.out.println(\"Test step -> \" + value);\n received.add(value);\n }\n }\n\n# Running\n\n -------------------------------------------------------\n T E S T S\n -------------------------------------------------------\n Running org.superbiz.counter.CounterCallbacksTest\n INFO - ********************************************************************************\n INFO - OpenEJB http://tomee.apache.org/\n INFO - Startup: Sat Jul 21 08:18:28 EDT 2012\n INFO - Copyright 1999-2012 (C) Apache OpenEJB Project, All Rights Reserved.\n INFO - Version: 4.1.0\n INFO - Build date: 20120721\n INFO - Build time: 04:06\n INFO - ********************************************************************************\n INFO - openejb.home = /home/boto/dev/ws/openejb_trunk/openejb/examples/simple-stateful-callbacks\n INFO - openejb.base = /home/boto/dev/ws/openejb_trunk/openejb/examples/simple-stateful-callbacks\n INFO - Created new singletonService org.apache.openejb.cdi.ThreadSingletonServiceImpl@527736bd\n INFO - Succeeded in installing singleton service\n INFO - Using 'javax.ejb.embeddable.EJBContainer=true'\n INFO - Cannot find the configuration file [conf/openejb.xml]. Will attempt to create one for the beans deployed.\n INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)\n INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)\n INFO - Configuring Service(id=MySTATEFUL, type=Container, provider-id=Default Stateful Container)\n INFO - Creating TransactionManager(id=Default Transaction Manager)\n INFO - Creating SecurityService(id=Default Security Service)\n INFO - Creating Container(id=MySTATEFUL)\n INFO - Using directory /tmp for stateful session passivation\n INFO - Beginning load: /home/boto/dev/ws/openejb_trunk/openejb/examples/simple-stateful-callbacks/target/classes\n INFO - Configuring enterprise application: /home/boto/dev/ws/openejb_trunk/openejb/examples/simple-stateful-callbacks\n INFO - Auto-deploying ejb CallbackCounter: EjbDeployment(deployment-id=CallbackCounter)\n INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)\n INFO - Auto-creating a container for bean org.superbiz.counter.CounterCallbacksTest: Container(type=MANAGED, id=Default Managed Container)\n INFO - Creating Container(id=Default Managed Container)\n INFO - Using directory /tmp for stateful session passivation\n INFO - Enterprise application \"/home/boto/dev/ws/openejb_trunk/openejb/examples/simple-stateful-callbacks\" loaded.\n INFO - Assembling app: /home/boto/dev/ws/openejb_trunk/openejb/examples/simple-stateful-callbacks\n INFO - Jndi(name=\"java:global/simple-stateful-callbacks/CallbackCounter!org.superbiz.counter.CallbackCounter\")\n INFO - Jndi(name=\"java:global/simple-stateful-callbacks/CallbackCounter\")\n INFO - Existing thread singleton service in SystemInstance() org.apache.openejb.cdi.ThreadSingletonServiceImpl@527736bd\n INFO - OpenWebBeans Container is starting...\n INFO - Adding OpenWebBeansPlugin : [CdiPlugin]\n INFO - All injection points are validated successfully.\n INFO - OpenWebBeans Container has started, it took 225 ms.\n INFO - Created Ejb(deployment-id=CallbackCounter, ejb-name=CallbackCounter, container=MySTATEFUL)\n INFO - Started Ejb(deployment-id=CallbackCounter, ejb-name=CallbackCounter, container=MySTATEFUL)\n INFO - Deployed Application(path=/home/boto/dev/ws/openejb_trunk/openejb/examples/simple-stateful-callbacks)\n Test step -> postConstruct\n Test step -> count\n Test step -> increment\n Test step -> reset\n Test step -> increment\n Waiting 2 seconds...\n Test step -> preDestroy\n INFO - Removing the timed-out stateful session bean instance 583c10bfdbd326ba:57f94a9b:138a9798adf:-8000\n INFO - Activation failed: file not found /tmp/583c10bfdbd326ba=57f94a9b=138a9798adf=-8000\n Test step -> postConstruct\n Test step -> increment\n Test step -> postConstruct\n Test step -> count\n Test step -> postConstruct\n Test step -> count\n Waiting 2 seconds...\n Test step -> prePassivate\n INFO - Passivating to file /tmp/583c10bfdbd326ba=57f94a9b=138a9798adf=-7fff\n Test step -> preDestroy\n INFO - Removing the timed-out stateful session bean instance 583c10bfdbd326ba:57f94a9b:138a9798adf:-7ffe\n Test step -> preDestroy\n INFO - Removing the timed-out stateful session bean instance 583c10bfdbd326ba:57f94a9b:138a9798adf:-7ffd\n INFO - Undeploying app: /home/boto/dev/ws/openejb_trunk/openejb/examples/simple-stateful-callbacks\n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 7.487 sec\n\n Results :\n\n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0\n\n [INFO] ------------------------------------------------------------------------\n [INFO] BUILD SUCCESS\n [INFO] ------------------------------------------------------------------------\n [INFO] Total time: 15.803s\n [INFO] Finished at: Sat Jul 21 08:18:35 EDT 2012\n [INFO] Final Memory: 11M/247M\n [INFO] ------------------------------------------------------------------------\n\n\n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/simple-stateful-callbacks" | |
}, | |
{ | |
"name":"simple-stateless-callbacks", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/simple-stateless-callbacks" | |
} | |
], | |
"cdi":[ | |
{ | |
"name":"applicationcomposer-jaxws-cdi", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/applicationcomposer-jaxws-cdi" | |
}, | |
{ | |
"name":"cdi-basic", | |
"readme":"Title: CDI @Inject\n\nTo use `@Inject`, the first thing you need is a `META-INF/beans.xml` file in the module\nor jar. This effectively turns on CDI and allows the `@Inject` references to work.\nNo `META-INF/beans.xml` no injection, period. This may seem overly strict,\nbut it is not without reason. The CDI API is a bit greedy and does consume a fair\nabout of resources by design.\n\nWhen the container constructs a bean with an `@Inject` reference,\nit will first find or create the object that will be injected. For the sake of\nsimplicity, the is example has a basic `Faculty` pojo with a no-arg constructor. Anyone\nreferencing `@Inject Faculty` will get their own instance of `Faculty`. If the desire\nis to share the same instance of `Faculty`, see the concept of `scopes` -- this is\nexactly what scopes are for.\n\n# Example\n\nIn this example we have an `@Stateless` bean `Course` with an `@Inject` reference to an\nobject of type `Faculty`. When `Course` is created, the container will also create an\ninstance of `Faculty`. The `@PostConstruct` will be called on the `Faculty`,\nthen the `Faculty` instance will be injected into the `Course` bean. Finally, the\n`@PostConstruct` will be invoked on `Course` and then we're done. All instances will\nhave been created.\n\nThe `CourseTest` test case drives this creation process by having `Course` injected\ninto it in its `@Setup` method. By the time our `@Test` method is invoked,\nall the real work should be done and we should be ready to go. In the test case we do\nsome basic asserts to ensure everything was constructed, all `@PostConstruct` methods\ncalled and everyting injected.\n\n## Faculty <small>a basic injectable pojo</small>\n\n public class Faculty {\n\n private List<String> facultyMembers;\n\n private String facultyName;\n\n @PostConstruct\n public void initialize() {\n this.facultyMembers = new ArrayList<String>();\n facultyMembers.add(\"Ian Schultz\");\n facultyMembers.add(\"Diane Reyes\");\n facultyName = \"Computer Science\";\n }\n\n public List<String> getFacultyMembers() {\n return facultyMembers;\n }\n\n public String getFacultyName() {\n return facultyName;\n }\n\n }\n\n## Course <small>a simple session bean</small>\n\n @Stateless\n public class Course {\n\n @Inject\n private Faculty faculty;\n\n private String courseName;\n\n private int capacity;\n\n @PostConstruct\n private void init() {\n assert faculty != null;\n\n // These strings can be externalized\n // We'll see how to do that later\n this.courseName = \"CDI 101 - Introduction to CDI\";\n this.capacity = 100;\n }\n\n public String getCourseName() {\n return courseName;\n }\n\n public int getCapacity() {\n return capacity;\n }\n\n public Faculty getFaculty() {\n return faculty;\n }\n }\n\n# Test Case\n\n public class CourseTest extends TestCase {\n\n @EJB\n private Course course;\n\n @Before\n public void setUp() throws Exception {\n EJBContainer.createEJBContainer().getContext().bind(\"inject\", this);\n }\n\n @Test\n public void test() {\n\n // Was the EJB injected?\n assertTrue(course != null);\n\n // Was the Course @PostConstruct called?\n assertNotNull(course.getCourseName());\n assertTrue(course.getCapacity() > 0);\n\n // Was a Faculty instance injected into Course?\n final Faculty faculty = course.getFaculty();\n assertTrue(faculty != null);\n\n // Was the @PostConstruct called on Faculty?\n assertEquals(faculty.getFacultyName(), \"Computer Science\");\n assertEquals(faculty.getFacultyMembers().size(), 2);\n }\n }\n\n# Running\n\n\n -------------------------------------------------------\n T E S T S\n -------------------------------------------------------\n Running org.superbiz.cdi.basic.CourseTest\n Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06\n http://tomee.apache.org/\n INFO - openejb.home = /Users/dblevins/examples/cdi-basic\n INFO - openejb.base = /Users/dblevins/examples/cdi-basic\n INFO - Using 'javax.ejb.embeddable.EJBContainer=true'\n INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)\n INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)\n INFO - Found EjbModule in classpath: /Users/dblevins/examples/cdi-basic/target/classes\n INFO - Beginning load: /Users/dblevins/examples/cdi-basic/target/classes\n INFO - Configuring enterprise application: /Users/dblevins/examples/cdi-basic\n INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)\n INFO - Auto-creating a container for bean cdi-basic.Comp: Container(type=MANAGED, id=Default Managed Container)\n INFO - Configuring Service(id=Default Stateless Container, type=Container, provider-id=Default Stateless Container)\n INFO - Auto-creating a container for bean Course: Container(type=STATELESS, id=Default Stateless Container)\n INFO - Enterprise application \"/Users/dblevins/examples/cdi-basic\" loaded.\n INFO - Assembling app: /Users/dblevins/examples/cdi-basic\n INFO - Jndi(name=\"java:global/cdi-basic/cdi-basic.Comp!org.apache.openejb.BeanContext$Comp\")\n INFO - Jndi(name=\"java:global/cdi-basic/cdi-basic.Comp\")\n INFO - Jndi(name=\"java:global/cdi-basic/Course!org.superbiz.cdi.basic.Course\")\n INFO - Jndi(name=\"java:global/cdi-basic/Course\")\n INFO - Jndi(name=\"java:global/EjbModule1833350875/org.superbiz.cdi.basic.CourseTest!org.superbiz.cdi.basic.CourseTest\")\n INFO - Jndi(name=\"java:global/EjbModule1833350875/org.superbiz.cdi.basic.CourseTest\")\n INFO - Created Ejb(deployment-id=Course, ejb-name=Course, container=Default Stateless Container)\n INFO - Created Ejb(deployment-id=cdi-basic.Comp, ejb-name=cdi-basic.Comp, container=Default Managed Container)\n INFO - Created Ejb(deployment-id=org.superbiz.cdi.basic.CourseTest, ejb-name=org.superbiz.cdi.basic.CourseTest, container=Default Managed Container)\n INFO - Started Ejb(deployment-id=Course, ejb-name=Course, container=Default Stateless Container)\n INFO - Started Ejb(deployment-id=cdi-basic.Comp, ejb-name=cdi-basic.Comp, container=Default Managed Container)\n INFO - Started Ejb(deployment-id=org.superbiz.cdi.basic.CourseTest, ejb-name=org.superbiz.cdi.basic.CourseTest, container=Default Managed Container)\n INFO - Deployed Application(path=/Users/dblevins/examples/cdi-basic)\n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.126 sec\n\n Results :\n\n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0\n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/cdi-basic" | |
}, | |
{ | |
"name":"simple-mdb-and-cdi", | |
"readme":"Title: Simple MDB and CDI\n\n*Help us document this example! Click the blue pencil icon in the upper right to edit this page.*\n\n## ChatBean\n\n package org.superbiz.mdb;\n \n import javax.annotation.Resource;\n import javax.ejb.MessageDriven;\n import javax.inject.Inject;\n import javax.jms.Connection;\n import javax.jms.ConnectionFactory;\n import javax.jms.DeliveryMode;\n import javax.jms.JMSException;\n import javax.jms.Message;\n import javax.jms.MessageListener;\n import javax.jms.MessageProducer;\n import javax.jms.Queue;\n import javax.jms.Session;\n import javax.jms.TextMessage;\n \n @MessageDriven\n public class ChatBean implements MessageListener {\n \n @Resource\n private ConnectionFactory connectionFactory;\n \n @Resource(name = \"AnswerQueue\")\n private Queue answerQueue;\n \n @Inject\n private ChatRespondCreator responder;\n \n public void onMessage(Message message) {\n try {\n \n final TextMessage textMessage = (TextMessage) message;\n final String question = textMessage.getText();\n final String response = responder.respond(question);\n \n if (response != null) {\n respond(response);\n }\n } catch (JMSException e) {\n throw new IllegalStateException(e);\n }\n }\n \n private void respond(String text) throws JMSException {\n \n Connection connection = null;\n Session session = null;\n \n try {\n connection = connectionFactory.createConnection();\n connection.start();\n \n // Create a Session\n session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);\n \n // Create a MessageProducer from the Session to the Topic or Queue\n MessageProducer producer = session.createProducer(answerQueue);\n producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);\n \n // Create a message\n TextMessage message = session.createTextMessage(text);\n \n // Tell the producer to send the message\n producer.send(message);\n } finally {\n // Clean up\n if (session != null) session.close();\n if (connection != null) connection.close();\n }\n }\n }\n\n## ChatRespondCreator\n\n package org.superbiz.mdb;\n \n public class ChatRespondCreator {\n public String respond(String question) {\n if (\"Hello World!\".equals(question)) {\n return \"Hello, Test Case!\";\n } else if (\"How are you?\".equals(question)) {\n return \"I'm doing well.\";\n } else if (\"Still spinning?\".equals(question)) {\n return \"Once every day, as usual.\";\n }\n return null;\n }\n }\n\n## beans.xml\n\n <!--\n \n Licensed to the Apache Software Foundation (ASF) under one or more\n contributor license agreements. See the NOTICE file distributed with\n this work for additional information regarding copyright ownership.\n The ASF licenses this file to You under the Apache License, Version 2.0\n (the \"License\"); you may not use this file except in compliance with\n the License. You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n -->\n \n <beans/>\n \n\n## ChatBeanTest\n\n package org.superbiz.mdb;\n \n import junit.framework.TestCase;\n \n import javax.annotation.Resource;\n import javax.ejb.embeddable.EJBContainer;\n import javax.jms.Connection;\n import javax.jms.ConnectionFactory;\n import javax.jms.JMSException;\n import javax.jms.MessageConsumer;\n import javax.jms.MessageProducer;\n import javax.jms.Queue;\n import javax.jms.Session;\n import javax.jms.TextMessage;\n \n public class ChatBeanTest extends TestCase {\n \n @Resource\n private ConnectionFactory connectionFactory;\n \n @Resource(name = \"ChatBean\")\n private Queue questionQueue;\n \n @Resource(name = \"AnswerQueue\")\n private Queue answerQueue;\n \n public void test() throws Exception {\n EJBContainer.createEJBContainer().getContext().bind(\"inject\", this);\n \n \n final Connection connection = connectionFactory.createConnection();\n \n connection.start();\n \n final Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);\n \n final MessageProducer questions = session.createProducer(questionQueue);\n \n final MessageConsumer answers = session.createConsumer(answerQueue);\n \n \n sendText(\"Hello World!\", questions, session);\n \n assertEquals(\"Hello, Test Case!\", receiveText(answers));\n \n \n sendText(\"How are you?\", questions, session);\n \n assertEquals(\"I'm doing well.\", receiveText(answers));\n \n \n sendText(\"Still spinning?\", questions, session);\n \n assertEquals(\"Once every day, as usual.\", receiveText(answers));\n }\n \n private void sendText(String text, MessageProducer questions, Session session) throws JMSException {\n \n questions.send(session.createTextMessage(text));\n }\n \n private String receiveText(MessageConsumer answers) throws JMSException {\n \n return ((TextMessage) answers.receive(1000)).getText();\n }\n }\n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/simple-mdb-and-cdi" | |
}, | |
{ | |
"name":"jsf-cdi-and-ejb", | |
"readme":"Title: JSF-CDI-EJB\n\nThe simple application contains a CDI managed bean `CalculatorBean`, which uses the `Calculator` EJB to add two numbers\nand display the results to the user. The EJB is injected in the managed bean using @Inject annotation.\n\nYou could run this in the latest Apache TomEE [snapshot](https://repository.apache.org/content/repositories/snapshots/org/apache/openejb/apache-tomee/)\n\nThe complete source code is below but lets break down to look at some smaller snippets and see how it works.\n\n\nA little note on the setup:\n\nAs for the libraries, myfaces-api and myfaces-impl are provided in tomee/lib and hence they should not be a part of the\nwar. In maven terms, they would be with scope 'provided'\n\nAlso note that we use servlet 2.5 declaration in web.xml\n<web-app xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xmlns=\"http://java.sun.com/xml/ns/javaee\"\n xmlns:web=\"http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd\"\n xsi:schemaLocation=\"http://java.sun.com/xml/ns/javaee\n http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd\"\n version=\"2.5\">\n\nAnd we use 2.0 version of faces-config\n\n <faces-config xmlns=\"http://java.sun.com/xml/ns/javaee\"\n xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:schemaLocation=\"http://java.sun.com/xml/ns/javaee\n http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd\"\n version=\"2.0\">\n\nTo make this a cdi-aware-archive (i.e bean archive) an empty beans.xml is added in WEB-INF\n\n <?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n <beans xmlns=\"http://java.sun.com/xml/ns/javaee\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:schemaLocation=\"http://java.sun.com/xml/ns/javaee\n http://java.sun.com/xml/ns/javaee/beans_1_0.xsd\">\n </beans>\n\nWe'll first declare the FacesServlet in the web.xml\n\n <servlet>\n <servlet-name>Faces Servlet</servlet-name>\n <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>\n <load-on-startup>1</load-on-startup>\n </servlet>\n\nFacesServlet acts as the master controller.\n\nWe'll then create the calculator.xhtml file.\n\n <h:outputText value='Enter first number'/>\n <h:inputText value='#{calculatorBean.x}'/>\n <h:outputText value='Enter second number'/>\n <h:inputText value='#{calculatorBean.y}'/>\n <h:commandButton action=\"#{calculatorBean.add}\" value=\"Add\"/>\n\nNotice how we've used the bean here. By default, the bean name would be the simple name of the bean\nclass with the first letter in lower case.\n\nWe've annotated the `CalculatorBean` with `@RequestScoped`.\nSo when a request comes in, the bean is instantiated and placed in the request scope.\n\n<h:inputText value='#{calculatorBean.x}'/>\n\nHere, getX() method of calculatorBean is invoked and the resulting value is displayed.\nx being a Double, we rightly should see 0.0 displayed.\n\nWhen you change the value and submit the form, these entered values are bound using the setters\nin the bean and then the commandButton-action method is invoked.\n\nIn this case, CalculatorBean#add() is invoked.\n\nCalculator#add() delegates the work to the ejb, gets the result, stores it\nand then returns what view is to be rendered.\n\nThe return value \"success\" is checked up in faces-config navigation-rules\nand the respective page is rendered.\n\nIn our case, 'result.xhtml' page is rendered where\nuse EL and display the result from the request-scoped `calculatorBean`.\n\n#Source Code\n\n## CalculatorBean\n\n import javax.enterprise.context.RequestScoped;\n import javax.inject.Named;\n import javax.inject.Inject;\n\n @RequestScoped\n @Named\n public class CalculatorBean {\n @Inject\n Calculator calculator;\n private double x;\n private double y;\n private double result;\n \n public double getX() {\n return x;\n }\n \n public void setX(double x) {\n this.x = x;\n }\n \n public double getY() {\n return y;\n }\n \n public void setY(double y) {\n this.y = y;\n }\n \n public double getResult() {\n return result;\n }\n \n public void setResult(double result) {\n this.result = result;\n }\n \n public String add() {\n result = calculator.add(x, y);\n return \"success\";\n }\n }\n\n## Calculator\n\n package org.superbiz.jsf;\n \n import javax.ejb.Stateless;\n \n @Stateless\n public class Calculator{\n \n public double add(double x, double y) {\n return x + y;\n }\n }\n\n\n#web.xml\n\n<?xml version=\"1.0\"?>\n\n<web-app xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xmlns=\"http://java.sun.com/xml/ns/javaee\"\n xmlns:web=\"http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd\"\n xsi:schemaLocation=\"http://java.sun.com/xml/ns/javaee\n http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd\"\n version=\"2.5\">\n\n <description>MyProject web.xml</description>\n\n <!-- Faces Servlet -->\n <servlet>\n <servlet-name>Faces Servlet</servlet-name>\n <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>\n <load-on-startup>1</load-on-startup>\n </servlet>\n\n <!-- Faces Servlet Mapping -->\n <servlet-mapping>\n <servlet-name>Faces Servlet</servlet-name>\n <url-pattern>*.jsf</url-pattern>\n </servlet-mapping>\n\n <!-- Welcome files -->\n <welcome-file-list>\n <welcome-file>index.jsp</welcome-file>\n <welcome-file>index.html</welcome-file>\n </welcome-file-list>\n\n</web-app>\n\n\n#Calculator.xhtml\n\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\"\n xmlns:f=\"http://java.sun.com/jsf/core\"\n xmlns:h=\"http://java.sun.com/jsf/html\">\n\n\n<h:body bgcolor=\"white\">\n <f:view>\n <h:form>\n <h:panelGrid columns=\"2\">\n <h:outputText value='Enter first number'/>\n <h:inputText value='#{calculatorBean.x}'/>\n <h:outputText value='Enter second number'/>\n <h:inputText value='#{calculatorBean.y}'/>\n <h:commandButton action=\"#{calculatorBean.add}\" value=\"Add\"/>\n </h:panelGrid>\n </h:form>\n </f:view>\n</h:body>\n</html>\n\n\n #Result.xhtml\n\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\"\n xmlns:f=\"http://java.sun.com/jsf/core\"\n xmlns:h=\"http://java.sun.com/jsf/html\">\n\n<h:body>\n<f:view>\n <h:form id=\"mainForm\">\n <h2><h:outputText value=\"Result of adding #{calculatorBean.x} and #{calculatorBean.y} is #{calculatorBean.result }\"/></h2>\n <h:commandLink action=\"back\">\n <h:outputText value=\"Home\"/>\n </h:commandLink>\n </h:form>\n</f:view>\n</h:body>\n</html>\n\n #faces-config.xml\n\n <?xml version=\"1.0\"?>\n <faces-config xmlns=\"http://java.sun.com/xml/ns/javaee\"\n xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:schemaLocation=\"http://java.sun.com/xml/ns/javaee\n http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd\"\n version=\"2.0\">\n\n <navigation-rule>\n <from-view-id>/calculator.xhtml</from-view-id>\n <navigation-case>\n <from-outcome>success</from-outcome>\n <to-view-id>/result.xhtml</to-view-id>\n </navigation-case>\n </navigation-rule>\n\n <navigation-rule>\n <from-view-id>/result.xhtml</from-view-id>\n <navigation-case>\n <from-outcome>back</from-outcome>\n <to-view-id>/calculator.xhtml</to-view-id>\n </navigation-case>\n </navigation-rule>\n </faces-config>", | |
"url":"https://github.com/apache/tomee/tree/master/examples/jsf-cdi-and-ejb" | |
}, | |
{ | |
"name":"groovy-cdi", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/groovy-cdi" | |
}, | |
{ | |
"name":"cdi-ejbcontext-jaas", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/cdi-ejbcontext-jaas" | |
}, | |
{ | |
"name":"cdi-produces-disposes", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/cdi-produces-disposes" | |
}, | |
{ | |
"name":"cdi-interceptors", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/cdi-interceptors" | |
}, | |
{ | |
"name":"cdi-application-scope", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/cdi-application-scope" | |
}, | |
{ | |
"name":"cdi-request-scope", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/cdi-request-scope" | |
}, | |
{ | |
"name":"cdi-alternative-and-stereotypes", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/cdi-alternative-and-stereotypes" | |
}, | |
{ | |
"name":"cdi-produces-field", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/cdi-produces-field" | |
}, | |
{ | |
"name":"simple-cdi-interceptor", | |
"readme":"#Simple CDI Interceptor\n\nLet's write a simple application that would allow us to book tickets for a movie show. As with all applications, logging is one cross-cutting concern that we have. \n\n(Relevant snippets are inlined but you can check out the complete code, from the links provided)\n\nHow do we mark which methods are to be intercepted ? Wouldn't it be handy to annotate a method like \n\n @Log\n public void aMethod(){...} \n\nLet's create an annotation that would \"mark\" a method for interception. \n\n @InterceptorBinding\n @Target({ TYPE, METHOD })\n @Retention(RUNTIME)\n public @interface Log {\n }\n\nSure, you haven't missed the @InterceptorBinding annotation above ! Now that our custom annotation is created, lets attach it (or to use a better term for it, \"bind it\" )\nto an interceptor. \n\nSo here's our logging interceptor. An @AroundInvoke method and we are almost done.\n\n @Interceptor\n @Log //binding the interceptor here. now any method annotated with @Log would be intercepted by logMethodEntry\n public class LoggingInterceptor {\n @AroundInvoke\n public Object logMethodEntry(InvocationContext ctx) throws Exception {\n System.out.println(\"Entering method: \" + ctx.getMethod().getName());\n //or logger.info statement \n return ctx.proceed();\n }\n }\n\nNow the @Log annotation we created is bound to this interceptor.\n\nThat done, let's annotate at class-level or method-level and have fun intercepting ! \n\n @Log\n @Stateful\n public class BookShow implements Serializable {\n private static final long serialVersionUID = 6350400892234496909L;\n public List<String> getMoviesList() {\n List<String> moviesAvailable = new ArrayList<String>();\n moviesAvailable.add(\"12 Angry Men\");\n moviesAvailable.add(\"Kings speech\");\n return moviesAvailable;\n }\n public Integer getDiscountedPrice(int ticketPrice) {\n return ticketPrice - 50;\n }\n // assume more methods are present\n }\n\nThe `@Log` annotation applied at class level denotes that all the methods should be intercepted with `LoggingInterceptor`.\n\nBefore we say \"all done\" there's one last thing we are left with ! To enable the interceptors ! \n\nLets quickly put up a [beans.xml file]\n\n <beans>\n <interceptors>\n <class>org.superbiz.cdi.bookshow.interceptors.LoggingInterceptor\n </class>\n </interceptors>\n </beans>\n\n in META-INF\n\n\nThose lines in beans.xml not only \"enable\" the interceptors, but also define the \"order of execution\" of the interceptors.\nBut we'll see that in another example on multiple-cdi-interceptors.\n\nFire up the test, and we should see a 'Entering method: getMoviesList' printed in the console.\n\n#Tests\n Apache OpenEJB 4.0.0-beta-2 build: 20111103-01:00\n http://tomee.apache.org/\n INFO - openejb.home = /media/fthree/Workspace/open4/openejb/examples/cdi-simple-interceptors\n INFO - openejb.base = /media/fthree/Workspace/open4/openejb/examples/cdi-simple-interceptors\n INFO - Using 'javax.ejb.embeddable.EJBContainer=true' \n INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)\n INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)\n INFO - Found EjbModule in classpath: /media/fthree/Workspace/open4/openejb/examples/cdi-simple-interceptors/target/classes\n INFO - Beginning load: /media/fthree/Workspace/open4/openejb/examples/cdi-simple-interceptors/target/classes\n INFO - Configuring enterprise application: /media/fthree/Workspace/open4/openejb/examples/cdi-simple-interceptors\n INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)\n INFO - Auto-creating a container for bean cdi-simple-interceptors.Comp: Container(type=MANAGED, id=Default Managed Container)\n INFO - Configuring Service(id=Default Stateful Container, type=Container, provider-id=Default Stateful Container)\n INFO - Auto-creating a container for bean BookShow: Container(type=STATEFUL, id=Default Stateful Container)\n INFO - Enterprise application \"/media/fthree/Workspace/open4/openejb/examples/cdi-simple-interceptors\" loaded.\n INFO - Assembling app: /media/fthree/Workspace/open4/openejb/examples/cdi-simple-interceptors\n INFO - Jndi(name=\"java:global/cdi-simple-interceptors/BookShow!org.superbiz.cdi.bookshow.beans.BookShow\")\n INFO - Jndi(name=\"java:global/cdi-simple-interceptors/BookShow\")\n INFO - Created Ejb(deployment-id=BookShow, ejb-name=BookShow, container=Default Stateful Container)\n INFO - Started Ejb(deployment-id=BookShow, ejb-name=BookShow, container=Default Stateful Container)\n INFO - Deployed Application(path=/media/fthree/Workspace/open4/openejb/examples/cdi-simple-interceptors)\n Entering method: getMoviesList\n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/simple-cdi-interceptor" | |
}, | |
{ | |
"name":"cdi-events", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/cdi-events" | |
}, | |
{ | |
"name":"cdi-realm", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/cdi-realm" | |
}, | |
{ | |
"name":"rest-cdi", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/rest-cdi" | |
}, | |
{ | |
"name":"cdi-session-scope", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/cdi-session-scope" | |
} | |
], | |
"ciphered":[ | |
{ | |
"name":"datasource-ciphered-password", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/datasource-ciphered-password" | |
} | |
], | |
"client":[ | |
{ | |
"name":"client-resource-lookup-preview", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/client-resource-lookup-preview" | |
} | |
], | |
"cmp2":[ | |
{ | |
"name":"simple-cmp2", | |
"readme":"Title: EJB 2.1 CMP EntityBeans (CMP2)\n\n\n\nOpenEJB, the EJB Container for TomEE and Geronimo, does support all of EJB 1.1 to 3.1, including CMP2.\n\nThe CMP2 implementation is actually done by adapting the CMP2 bean into a JPA Entity dynamically at deploy time.\n\nAppropriate subclasses, a JPA persistence.xml file and a mapping.xml file are generated at deployment\ntime for the CMP2 EntityBeans and all the Entities will be then run on OpenJPA. This innovative code\nhas been used as the sole CMP2 implementation in Geronimo for its J2EE 1.4, JavaEE 5 and JavaEE 6 certifications.\n\nThe persistence.xml and mapping.xml files generated at deploy time can be saved to disk and included\nin the application, allowing you to:\n\n - gain finer control over persistence options\n - slowly convert individual entities from CMP2 to JPA\n\nLet's see an example.\n\n# Movies application\n\nThe following is a basic EJB 2.1 application consisting of one CMP2 Entity. For those that are reading this example\nout of curiosity and are not familiar with CMP2 or EJB 2.x, each CMP2 Entity is composed of two parts\n\n - **A Home interface** which has data access methods like \"find\", \"create\", and \"remove\". This is essentially\n what people use `@Stateless` beans for today, but with difference that you do not need to supply\n the implementation of the interface -- the container will generate one for you. This is partly what inspired\n the creation of the OpenEJB-specific [Dynamic DAO](../dynamic-dao-implementation/README.html) feature.\n\n - **An abstract EntityBean class** which declares the persistent \"properties\" of the entity without actually\ndeclaring any fields. It is the container's job to implement the actual methods and create the appropriate\nfields. OpenEJB will implement this bean as a JPA `@Entity` bean.\n\nAs such a CMP2 EntityBean is really just the description of a persistent object and the description of a \ndata-access object. There is no actual code to write.\n\nThe majority of work in CMP2 is done in the xml:\n\n - **ejb-jar.xml** mapping information, which describes the persistent properties of the entity and the queries\n for all *Home* find, create and remove methods. This information will be converted by OpenEJB into\n a JPA mapping.xml file. All queries in the cmp2 part of the ejb-jar.xml are converted \n into named queries in JPA and generally everything is converted to its JPA equivalent. \n\n## CMP2 EntityBean, MovieBean\n\n package org.superbiz.cmp2;\n \n import javax.ejb.EntityBean;\n \n public abstract class MovieBean implements EntityBean {\n \n public MovieBean() {\n }\n \n public Integer ejbCreate(String director, String title, int year) {\n this.setDirector(director);\n this.setTitle(title);\n this.setYear(year);\n return null;\n }\n \n public abstract java.lang.Integer getId();\n \n public abstract void setId(java.lang.Integer id);\n \n public abstract String getDirector();\n \n public abstract void setDirector(String director);\n \n public abstract String getTitle();\n \n public abstract void setTitle(String title);\n \n public abstract int getYear();\n \n public abstract void setYear(int year);\n \n }\n\n## CMP2 Home interface, Movies\n\n package org.superbiz.cmp2;\n \n import javax.ejb.CreateException;\n import javax.ejb.FinderException;\n import java.util.Collection;\n \n /**\n * @version $Revision$ $Date$\n */\n interface Movies extends javax.ejb.EJBLocalHome {\n Movie create(String director, String title, int year) throws CreateException;\n \n Movie findByPrimaryKey(Integer primarykey) throws FinderException;\n \n Collection<Movie> findAll() throws FinderException;\n \n Collection<Movie> findByDirector(String director) throws FinderException;\n }\n\n## CMP2 mapping in ejb-jar.xml\n\n <ejb-jar>\n <enterprise-beans>\n <entity>\n <ejb-name>MovieBean</ejb-name>\n <local-home>org.superbiz.cmp2.Movies</local-home>\n <local>org.superbiz.cmp2.Movie</local>\n <ejb-class>org.superbiz.cmp2.MovieBean</ejb-class>\n <persistence-type>Container</persistence-type>\n <prim-key-class>java.lang.Integer</prim-key-class>\n <reentrant>false</reentrant>\n <cmp-version>2.x</cmp-version>\n <abstract-schema-name>MovieBean</abstract-schema-name>\n <cmp-field>\n <field-name>id</field-name>\n </cmp-field>\n <cmp-field>\n <field-name>director</field-name>\n </cmp-field>\n <cmp-field>\n <field-name>year</field-name>\n </cmp-field>\n <cmp-field>\n <field-name>title</field-name>\n </cmp-field>\n <primkey-field>id</primkey-field>\n <query>\n <query-method>\n <method-name>findByDirector</method-name>\n <method-params>\n <method-param>java.lang.String</method-param>\n </method-params>\n </query-method>\n <ejb-ql>SELECT m FROM MovieBean m WHERE m.director = ?1</ejb-ql>\n </query>\n <query>\n <query-method>\n <method-name>findAll</method-name>\n <method-params/>\n </query-method>\n <ejb-ql>SELECT m FROM MovieBean as m</ejb-ql>\n </query>\n </entity>\n </enterprise-beans>\n </ejb-jar>\n \n\n## openejb-jar.xml\n\n <openejb-jar xmlns=\"http://www.openejb.org/xml/ns/openejb-jar-2.1\">\n <enterprise-beans>\n <entity>\n <ejb-name>MovieBean</ejb-name>\n <key-generator xmlns=\"http://www.openejb.org/xml/ns/pkgen-2.1\">\n <uuid/>\n </key-generator>\n </entity>\n </enterprise-beans>\n </openejb-jar>\n \n\n## MoviesTest\n\n package org.superbiz.cmp2;\n \n import junit.framework.TestCase;\n \n import javax.naming.Context;\n import javax.naming.InitialContext;\n import java.util.Collection;\n import java.util.Properties;\n \n /**\n * @version $Revision: 607077 $ $Date: 2007-12-27 06:55:23 -0800 (Thu, 27 Dec 2007) $\n */\n public class MoviesTest extends TestCase {\n \n public void test() throws Exception {\n Properties p = new Properties();\n p.put(Context.INITIAL_CONTEXT_FACTORY, \"org.apache.openejb.core.LocalInitialContextFactory\");\n p.put(\"movieDatabase\", \"new://Resource?type=DataSource\");\n p.put(\"movieDatabase.JdbcDriver\", \"org.hsqldb.jdbcDriver\");\n p.put(\"movieDatabase.JdbcUrl\", \"jdbc:hsqldb:mem:moviedb\");\n \n p.put(\"movieDatabaseUnmanaged\", \"new://Resource?type=DataSource\");\n p.put(\"movieDatabaseUnmanaged.JdbcDriver\", \"org.hsqldb.jdbcDriver\");\n p.put(\"movieDatabaseUnmanaged.JdbcUrl\", \"jdbc:hsqldb:mem:moviedb\");\n p.put(\"movieDatabaseUnmanaged.JtaManaged\", \"false\");\n \n Context context = new InitialContext(p);\n \n Movies movies = (Movies) context.lookup(\"MovieBeanLocalHome\");\n \n movies.create(\"Quentin Tarantino\", \"Reservoir Dogs\", 1992);\n movies.create(\"Joel Coen\", \"Fargo\", 1996);\n movies.create(\"Joel Coen\", \"The Big Lebowski\", 1998);\n \n Collection<Movie> list = movies.findAll();\n assertEquals(\"Collection.size()\", 3, list.size());\n \n for (Movie movie : list) {\n movies.remove(movie.getPrimaryKey());\n }\n \n assertEquals(\"Movies.findAll()\", 0, movies.findAll().size());\n }\n }\n\n# Running\n\n \n -------------------------------------------------------\n T E S T S\n -------------------------------------------------------\n Running org.superbiz.cmp2.MoviesTest\n Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06\n http://tomee.apache.org/\n INFO - openejb.home = /Users/dblevins/examples/simple-cmp2/target\n INFO - openejb.base = /Users/dblevins/examples/simple-cmp2/target\n INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)\n INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)\n INFO - Configuring Service(id=movieDatabaseUnmanaged, type=Resource, provider-id=Default JDBC Database)\n INFO - Configuring Service(id=movieDatabase, type=Resource, provider-id=Default JDBC Database)\n INFO - Found EjbModule in classpath: /Users/dblevins/examples/simple-cmp2/target/classes\n INFO - Beginning load: /Users/dblevins/examples/simple-cmp2/target/classes\n INFO - Configuring enterprise application: /Users/dblevins/examples/simple-cmp2/target/classpath.ear\n INFO - Configuring Service(id=Default CMP Container, type=Container, provider-id=Default CMP Container)\n INFO - Auto-creating a container for bean MovieBean: Container(type=CMP_ENTITY, id=Default CMP Container)\n INFO - Configuring PersistenceUnit(name=cmp)\n INFO - Adjusting PersistenceUnit cmp <jta-data-source> to Resource ID 'movieDatabase' from 'null'\n INFO - Adjusting PersistenceUnit cmp <non-jta-data-source> to Resource ID 'movieDatabaseUnmanaged' from 'null'\n INFO - Enterprise application \"/Users/dblevins/examples/simple-cmp2/target/classpath.ear\" loaded.\n INFO - Assembling app: /Users/dblevins/examples/simple-cmp2/target/classpath.ear\n INFO - PersistenceUnit(name=cmp, provider=org.apache.openjpa.persistence.PersistenceProviderImpl) - provider time 160ms\n INFO - Jndi(name=MovieBeanLocalHome) --> Ejb(deployment-id=MovieBean)\n INFO - Jndi(name=global/classpath.ear/simple-cmp2/MovieBean!org.superbiz.cmp2.Movies) --> Ejb(deployment-id=MovieBean)\n INFO - Jndi(name=global/classpath.ear/simple-cmp2/MovieBean) --> Ejb(deployment-id=MovieBean)\n INFO - Created Ejb(deployment-id=MovieBean, ejb-name=MovieBean, container=Default CMP Container)\n INFO - Started Ejb(deployment-id=MovieBean, ejb-name=MovieBean, container=Default CMP Container)\n INFO - Deployed Application(path=/Users/dblevins/examples/simple-cmp2/target/classpath.ear)\n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.919 sec\n \n Results :\n \n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0\n\n# CMP2 to JPA\n\nAs mentioned OpenEJB will implement the abstract CMP2 `EntityBean` as a JPA `@Entity`, create a `persistence.xml` file and convert all `ejb-jar.xml` mapping and queries to\na JPA `entity-mappings.xml` file.\n\nBoth of these files will be written to disk by setting the system property `openejb.descriptors.output` to `true`. In the testcase\nabove, this can be done via the `InitialContext` parameters via code like this:\n\n Properties p = new Properties();\n p.put(Context.INITIAL_CONTEXT_FACTORY, \"org.apache.openejb.core.LocalInitialContextFactory\");\n\n // setup the data sources as usual...\n\n // write the generated descriptors\n p.put(\"openejb.descriptors.output\", \"true\");\n\n Context context = new InitialContext(p);\n\nBelow are the generated `persistence.xml` and `mapping.xml` files for our CMP2 `EntityBean`\n\n## CMP2 to JPA generated persistence.xml file\n\n <?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n <persistence xmlns=\"http://java.sun.com/xml/ns/persistence\" version=\"1.0\">\n <persistence-unit name=\"cmp\" transaction-type=\"JTA\">\n <jta-data-source>movieDatabase</jta-data-source>\n <non-jta-data-source>movieDatabaseUnmanaged</non-jta-data-source>\n <mapping-file>META-INF/openejb-cmp-generated-orm.xml</mapping-file>\n <class>openejb.org.superbiz.cmp2.MovieBean</class>\n <properties>\n <property name=\"openjpa.jdbc.SynchronizeMappings\"\n value=\"buildSchema(ForeignKeys=true, Indexes=false, IgnoreErrors=true)\"/>\n <property name=\"openjpa.Log\" value=\"DefaultLevel=INFO\"/>\n </properties>\n </persistence-unit>\n </persistence>\n\nAll of this `persitence.xml` can be changed, however the `persistence-unit` must have the `name` fixed to `cmp`.\n\n## CMP2 to JPA generated mapping file\n\nNote that the `persistence.xml` above refers to this mappings file as `META-INF/openejb-cmp-generated-orm.xml`. It is possible\nto rename this file to whatever name you prefer, just make sure to update the `<mapping-file>` element of the `cmp` persistence unit\naccordingly.\n\n <?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>\n <entity-mappings xmlns=\"http://java.sun.com/xml/ns/persistence/orm\" version=\"1.0\">\n <entity class=\"openejb.org.superbiz.cmp2.MovieBean\" name=\"MovieBean\">\n <description>simple-cmp2#MovieBean</description>\n <table/>\n <named-query name=\"MovieBean.findByDirector(java.lang.String)\">\n <query>SELECT m FROM MovieBean m WHERE m.director = ?1</query>\n </named-query>\n <named-query name=\"MovieBean.findAll\">\n <query>SELECT m FROM MovieBean as m</query>\n </named-query>\n <attributes>\n <id name=\"id\">\n <generated-value strategy=\"IDENTITY\"/>\n </id>\n <basic name=\"director\"/>\n <basic name=\"year\"/>\n <basic name=\"title\"/>\n </attributes>\n </entity>\n </entity-mappings>\n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/simple-cmp2" | |
} | |
], | |
"codi":[ | |
{ | |
"name":"myfaces-codi-demo", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/myfaces-codi-demo" | |
} | |
], | |
"component":[ | |
{ | |
"name":"component-interfaces", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/component-interfaces" | |
} | |
], | |
"config":[ | |
{ | |
"name":"deltaspike-configproperty", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/deltaspike-configproperty" | |
}, | |
{ | |
"name":"webservice-ws-with-resources-config", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/webservice-ws-with-resources-config" | |
} | |
], | |
"connectionfactory":[ | |
{ | |
"name":"injection-of-connectionfactory", | |
"readme":"Title: Injection Of Connectionfactory\n\n*Help us document this example! Click the blue pencil icon in the upper right to edit this page.*\n\n## Messages\n\n package org.superbiz.injection.jms;\n \n import javax.annotation.Resource;\n import javax.ejb.Stateless;\n import javax.jms.Connection;\n import javax.jms.ConnectionFactory;\n import javax.jms.DeliveryMode;\n import javax.jms.JMSException;\n import javax.jms.MessageConsumer;\n import javax.jms.MessageProducer;\n import javax.jms.Queue;\n import javax.jms.Session;\n import javax.jms.TextMessage;\n \n @Stateless\n public class Messages {\n \n @Resource\n private ConnectionFactory connectionFactory;\n \n @Resource\n private Queue chatQueue;\n \n \n public void sendMessage(String text) throws JMSException {\n \n Connection connection = null;\n Session session = null;\n \n try {\n connection = connectionFactory.createConnection();\n connection.start();\n \n // Create a Session\n session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);\n \n // Create a MessageProducer from the Session to the Topic or Queue\n MessageProducer producer = session.createProducer(chatQueue);\n producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);\n \n // Create a message\n TextMessage message = session.createTextMessage(text);\n \n // Tell the producer to send the message\n producer.send(message);\n } finally {\n // Clean up\n if (session != null) session.close();\n if (connection != null) connection.close();\n }\n }\n \n public String receiveMessage() throws JMSException {\n \n Connection connection = null;\n Session session = null;\n MessageConsumer consumer = null;\n try {\n connection = connectionFactory.createConnection();\n connection.start();\n \n // Create a Session\n session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);\n \n // Create a MessageConsumer from the Session to the Topic or Queue\n consumer = session.createConsumer(chatQueue);\n \n // Wait for a message\n TextMessage message = (TextMessage) consumer.receive(1000);\n \n return message.getText();\n } finally {\n if (consumer != null) consumer.close();\n if (session != null) session.close();\n if (connection != null) connection.close();\n }\n }\n }\n\n## MessagingBeanTest\n\n package org.superbiz.injection.jms;\n \n import junit.framework.TestCase;\n \n import javax.ejb.embeddable.EJBContainer;\n import javax.naming.Context;\n \n public class MessagingBeanTest extends TestCase {\n \n public void test() throws Exception {\n \n final Context context = EJBContainer.createEJBContainer().getContext();\n \n Messages messages = (Messages) context.lookup(\"java:global/injection-of-connectionfactory/Messages\");\n \n messages.sendMessage(\"Hello World!\");\n messages.sendMessage(\"How are you?\");\n messages.sendMessage(\"Still spinning?\");\n \n assertEquals(messages.receiveMessage(), \"Hello World!\");\n assertEquals(messages.receiveMessage(), \"How are you?\");\n assertEquals(messages.receiveMessage(), \"Still spinning?\");\n }\n }\n\n# Running\n\n \n -------------------------------------------------------\n T E S T S\n -------------------------------------------------------\n Running org.superbiz.injection.jms.MessagingBeanTest\n Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06\n http://tomee.apache.org/\n INFO - openejb.home = /Users/dblevins/examples/injection-of-connectionfactory\n INFO - openejb.base = /Users/dblevins/examples/injection-of-connectionfactory\n INFO - Using 'javax.ejb.embeddable.EJBContainer=true'\n INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)\n INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)\n INFO - Found EjbModule in classpath: /Users/dblevins/examples/injection-of-connectionfactory/target/classes\n INFO - Beginning load: /Users/dblevins/examples/injection-of-connectionfactory/target/classes\n INFO - Configuring enterprise application: /Users/dblevins/examples/injection-of-connectionfactory\n WARN - Method 'lookup' is not available for 'javax.annotation.Resource'. Probably using an older Runtime.\n INFO - Configuring Service(id=Default Stateless Container, type=Container, provider-id=Default Stateless Container)\n INFO - Auto-creating a container for bean Messages: Container(type=STATELESS, id=Default Stateless Container)\n INFO - Configuring Service(id=Default JMS Connection Factory, type=Resource, provider-id=Default JMS Connection Factory)\n INFO - Auto-creating a Resource with id 'Default JMS Connection Factory' of type 'javax.jms.ConnectionFactory for 'Messages'.\n INFO - Configuring Service(id=Default JMS Resource Adapter, type=Resource, provider-id=Default JMS Resource Adapter)\n INFO - Auto-linking resource-ref 'java:comp/env/org.superbiz.injection.jms.Messages/connectionFactory' in bean Messages to Resource(id=Default JMS Connection Factory)\n INFO - Configuring Service(id=org.superbiz.injection.jms.Messages/chatQueue, type=Resource, provider-id=Default Queue)\n INFO - Auto-creating a Resource with id 'org.superbiz.injection.jms.Messages/chatQueue' of type 'javax.jms.Queue for 'Messages'.\n INFO - Auto-linking resource-env-ref 'java:comp/env/org.superbiz.injection.jms.Messages/chatQueue' in bean Messages to Resource(id=org.superbiz.injection.jms.Messages/chatQueue)\n INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)\n INFO - Auto-creating a container for bean org.superbiz.injection.jms.MessagingBeanTest: Container(type=MANAGED, id=Default Managed Container)\n INFO - Enterprise application \"/Users/dblevins/examples/injection-of-connectionfactory\" loaded.\n INFO - Assembling app: /Users/dblevins/examples/injection-of-connectionfactory\n INFO - Jndi(name=\"java:global/injection-of-connectionfactory/Messages!org.superbiz.injection.jms.Messages\")\n INFO - Jndi(name=\"java:global/injection-of-connectionfactory/Messages\")\n INFO - Jndi(name=\"java:global/EjbModule1634151355/org.superbiz.injection.jms.MessagingBeanTest!org.superbiz.injection.jms.MessagingBeanTest\")\n INFO - Jndi(name=\"java:global/EjbModule1634151355/org.superbiz.injection.jms.MessagingBeanTest\")\n INFO - Created Ejb(deployment-id=Messages, ejb-name=Messages, container=Default Stateless Container)\n INFO - Created Ejb(deployment-id=org.superbiz.injection.jms.MessagingBeanTest, ejb-name=org.superbiz.injection.jms.MessagingBeanTest, container=Default Managed Container)\n INFO - Started Ejb(deployment-id=Messages, ejb-name=Messages, container=Default Stateless Container)\n INFO - Started Ejb(deployment-id=org.superbiz.injection.jms.MessagingBeanTest, ejb-name=org.superbiz.injection.jms.MessagingBeanTest, container=Default Managed Container)\n INFO - Deployed Application(path=/Users/dblevins/examples/injection-of-connectionfactory)\n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.562 sec\n \n Results :\n \n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0\n \n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/injection-of-connectionfactory" | |
} | |
], | |
"contract":[ | |
{ | |
"name":"bean-validation-design-by-contract", | |
"readme":"# Bean Validation - Design By Contract\n\nBean Validation (aka JSR 303) contains an optional appendix dealing with method validation.\n\nSome implementions of this JSR implement this appendix (Apache bval, Hibernate validator for example).\n\nOpenEJB provides an interceptor which allows you to use this feature to do design by contract.\n\n# Design by contract\n\nThe goal is to be able to configure with a finer grain your contract. In the example you specify\nthe minimum centimeters a sport man should jump at pole vaulting:\n\n @Local\n public interface PoleVaultingManager {\n int points(@Min(120) int centimeters);\n }\n\n# Usage\n\nTomEE and OpenEJB do not provide anymore `BeanValidationAppendixInterceptor` since\nBean Validation 1.1 does it (with a slighly different usage but the exact same feature).\n\nSo basically you don't need to configure anything to use it.\n# Errors\n\nIf a parameter is not validated an exception is thrown, it is an EJBException wrapping a ConstraintViolationException:\n\n try {\n gamesManager.addSportMan(\"I lose\", \"EN\");\n fail(\"no space should be in names\");\n } catch (EJBException wrappingException) {\n assertTrue(wrappingException.getCause() instanceof ConstraintViolationException);\n ConstraintViolationException exception = ConstraintViolationException.class.cast(wrappingException.getCausedByException());\n assertEquals(1, exception.getConstraintViolations().size());\n }\n\n# Example\n\n## OlympicGamesManager\n\n package org.superbiz.designbycontract;\n\n import javax.ejb.Stateless;\n import javax.validation.constraints.NotNull;\n import javax.validation.constraints.Pattern;\n import javax.validation.constraints.Size;\n\n @Stateless\n public class OlympicGamesManager {\n public String addSportMan(@Pattern(regexp = \"^[A-Za-z]+$\") String name, @Size(min = 2, max = 4) String country) {\n if (country.equals(\"USA\")) {\n return null;\n }\n return new StringBuilder(name).append(\" [\").append(country).append(\"]\").toString();\n }\n }\n\n## PoleVaultingManager\n\n package org.superbiz.designbycontract;\n\n import javax.ejb.Local;\n import javax.validation.constraints.Min;\n\n @Local\n public interface PoleVaultingManager {\n int points(@Min(120) int centimeters);\n }\n\n## PoleVaultingManagerBean\n\n package org.superbiz.designbycontract;\n\n import javax.ejb.Stateless;\n\n @Stateless\n public class PoleVaultingManagerBean implements PoleVaultingManager {\n @Override\n public int points(int centimeters) {\n return centimeters - 120;\n }\n }\n\n## OlympicGamesTest\n\n public class OlympicGamesTest {\n private static Context context;\n\n @EJB\n private OlympicGamesManager gamesManager;\n\n @EJB\n private PoleVaultingManager poleVaultingManager;\n\n @BeforeClass\n public static void start() {\n Properties properties = new Properties();\n properties.setProperty(BeanContext.USER_INTERCEPTOR_KEY, BeanValidationAppendixInterceptor.class.getName());\n context = EJBContainer.createEJBContainer(properties).getContext();\n }\n\n @Before\n public void inject() throws Exception {\n context.bind(\"inject\", this);\n }\n\n @AfterClass\n public static void stop() throws Exception {\n if (context != null) {\n context.close();\n }\n }\n\n @Test\n public void sportMenOk() throws Exception {\n assertEquals(\"IWin [FR]\", gamesManager.addSportMan(\"IWin\", \"FR\"));\n }\n\n @Test\n public void sportMenKoBecauseOfName() throws Exception {\n try {\n gamesManager.addSportMan(\"I lose\", \"EN\");\n fail(\"no space should be in names\");\n } catch (EJBException wrappingException) {\n assertTrue(wrappingException.getCause() instanceof ConstraintViolationException);\n ConstraintViolationException exception = ConstraintViolationException.class.cast(wrappingException.getCausedByException());\n assertEquals(1, exception.getConstraintViolations().size());\n }\n }\n\n @Test\n public void sportMenKoBecauseOfCountry() throws Exception {\n try {\n gamesManager.addSportMan(\"ILoseTwo\", \"TOO-LONG\");\n fail(\"country should be between 2 and 4 characters\");\n } catch (EJBException wrappingException) {\n assertTrue(wrappingException.getCause() instanceof ConstraintViolationException);\n ConstraintViolationException exception = ConstraintViolationException.class.cast(wrappingException.getCausedByException());\n assertEquals(1, exception.getConstraintViolations().size());\n }\n }\n\n @Test\n public void polVaulting() throws Exception {\n assertEquals(100, poleVaultingManager.points(220));\n }\n\n @Test\n public void tooShortPolVaulting() throws Exception {\n try {\n poleVaultingManager.points(119);\n fail(\"the jump is too short\");\n } catch (EJBException wrappingException) {\n assertTrue(wrappingException.getCause() instanceof ConstraintViolationException);\n ConstraintViolationException exception = ConstraintViolationException.class.cast(wrappingException.getCausedByException());\n assertEquals(1, exception.getConstraintViolations().size());\n }\n }\n }\n\n# Running\n\n\n -------------------------------------------------------\n T E S T S\n -------------------------------------------------------\n Running OlympicGamesTest\n Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06\n http://tomee.apache.org/\n INFO - openejb.home = /Users/dblevins/examples/bean-validation-design-by-contract\n INFO - openejb.base = /Users/dblevins/examples/bean-validation-design-by-contract\n INFO - Using 'javax.ejb.embeddable.EJBContainer=true'\n INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)\n INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)\n INFO - Found EjbModule in classpath: /Users/dblevins/examples/bean-validation-design-by-contract/target/classes\n INFO - Beginning load: /Users/dblevins/examples/bean-validation-design-by-contract/target/classes\n INFO - Configuring enterprise application: /Users/dblevins/examples/bean-validation-design-by-contract\n INFO - Configuring Service(id=Default Stateless Container, type=Container, provider-id=Default Stateless Container)\n INFO - Auto-creating a container for bean PoleVaultingManagerBean: Container(type=STATELESS, id=Default Stateless Container)\n INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)\n INFO - Auto-creating a container for bean OlympicGamesTest: Container(type=MANAGED, id=Default Managed Container)\n INFO - Enterprise application \"/Users/dblevins/examples/bean-validation-design-by-contract\" loaded.\n INFO - Assembling app: /Users/dblevins/examples/bean-validation-design-by-contract\n INFO - Jndi(name=\"java:global/bean-validation-design-by-contract/PoleVaultingManagerBean!org.superbiz.designbycontract.PoleVaultingManager\")\n INFO - Jndi(name=\"java:global/bean-validation-design-by-contract/PoleVaultingManagerBean\")\n INFO - Jndi(name=\"java:global/bean-validation-design-by-contract/OlympicGamesManager!org.superbiz.designbycontract.OlympicGamesManager\")\n INFO - Jndi(name=\"java:global/bean-validation-design-by-contract/OlympicGamesManager\")\n INFO - Jndi(name=\"java:global/EjbModule236054577/OlympicGamesTest!OlympicGamesTest\")\n INFO - Jndi(name=\"java:global/EjbModule236054577/OlympicGamesTest\")\n INFO - Created Ejb(deployment-id=OlympicGamesManager, ejb-name=OlympicGamesManager, container=Default Stateless Container)\n INFO - Created Ejb(deployment-id=PoleVaultingManagerBean, ejb-name=PoleVaultingManagerBean, container=Default Stateless Container)\n INFO - Created Ejb(deployment-id=OlympicGamesTest, ejb-name=OlympicGamesTest, container=Default Managed Container)\n INFO - Started Ejb(deployment-id=OlympicGamesManager, ejb-name=OlympicGamesManager, container=Default Stateless Container)\n INFO - Started Ejb(deployment-id=PoleVaultingManagerBean, ejb-name=PoleVaultingManagerBean, container=Default Stateless Container)\n INFO - Started Ejb(deployment-id=OlympicGamesTest, ejb-name=OlympicGamesTest, container=Default Managed Container)\n INFO - Deployed Application(path=/Users/dblevins/examples/bean-validation-design-by-contract)\n Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.245 sec\n\n Results :\n\n Tests run: 5, Failures: 0, Errors: 0, Skipped: 0\n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/bean-validation-design-by-contract" | |
} | |
], | |
"cucumber":[ | |
{ | |
"name":"cucumber-jvm", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/cucumber-jvm" | |
} | |
], | |
"dao":[ | |
{ | |
"name":"dynamic-dao-implementation", | |
"readme":"Title: Dynamic DAO Implementation\n\nMany aspects of Data Access Objects (DAOs) are very repetitive and boiler plate. As a fun and experimental feature, TomEE supports dynamically implementing an interface\nthat is seen to have standard DAO-style methods.\n\nThe interface has to be annotated with @PersistenceContext to define which EntityManager to use.\n\nMethods should respect these conventions:\n\n * void save(Foo foo): persist foo\n * Foo update(Foo foo): merge foo\n * void delete(Foo foo): remove foo, if foo is detached it tries to attach it\n * Collection<Foo>|Foo namedQuery(String name[, Map<String, ?> params, int first, int max]): run the named query called name, params contains bindings, first and max are used for magination. Last three parameters are optionnals\n * Collection<Foo>|Foo nativeQuery(String name[, Map<String, ?> params, int first, int max]): run the native query called name, params contains bindings, first and max are used for magination. Last three parameters are optionnals\n * Collection<Foo>|Foo query(String value [, Map<String, ?> params, int first, int max]): run the query put as first parameter, params contains bindings, first and max are used for magination. Last three parameters are optionnals\n * Collection<Foo> findAll([int first, int max]): find all Foo, parameters are used for pagination\n * Collection<Foo> findByBar1AndBar2AndBar3(<bar 1 type> bar1, <bar 2 type> bar2, <bar3 type> bar3 [, int first, int max]): find all Foo with specified field values for bar1, bar2, bar3.\n\nDynamic finder can have as much as you want field constraints. For String like is used and for other type equals is used.\n\n# Example\n\n## User\n\n package org.superbiz.dynamic;\n \n import javax.persistence.Entity;\n import javax.persistence.GeneratedValue;\n import javax.persistence.Id;\n import javax.persistence.NamedQueries;\n import javax.persistence.NamedQuery;\n \n @Entity\n @NamedQueries({\n @NamedQuery(name = \"dynamic-ejb-impl-test.query\", query = \"SELECT u FROM User AS u WHERE u.name LIKE :name\"),\n @NamedQuery(name = \"dynamic-ejb-impl-test.all\", query = \"SELECT u FROM User AS u\")\n })\n public class User {\n @Id\n @GeneratedValue\n private long id;\n private String name;\n private int age;\n\n public long getId() {\n return id;\n }\n\n public void setId(long id) {\n this.id = id;\n }\n\n public String getName() {\n return name;\n }\n\n public void setName(String name) {\n this.name = name;\n }\n\n public int getAge() {\n return age;\n }\n\n public void setAge(int age) {\n this.age = age;\n }\n }\n\n## UserDao\n\n package org.superbiz.dynamic;\n \n \n import javax.ejb.Stateless;\n import javax.persistence.PersistenceContext;\n import java.util.Collection;\n import java.util.Map;\n \n @Stateless\n @PersistenceContext(name = \"dynamic\")\n public interface UserDao {\n User findById(long id);\n \n Collection<User> findByName(String name);\n \n Collection<User> findByNameAndAge(String name, int age);\n \n Collection<User> findAll();\n \n Collection<User> findAll(int first, int max);\n \n Collection<User> namedQuery(String name, Map<String, ?> params, int first, int max);\n \n Collection<User> namedQuery(String name, int first, int max, Map<String, ?> params);\n \n Collection<User> namedQuery(String name, Map<String, ?> params);\n \n Collection<User> namedQuery(String name);\n \n Collection<User> query(String value, Map<String, ?> params);\n \n void save(User u);\n \n void delete(User u);\n \n User update(User u);\n }\n\n## persistence.xml\n\n <persistence version=\"2.0\"\n xmlns=\"http://java.sun.com/xml/ns/persistence\"\n xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:schemaLocation=\"\n http://java.sun.com/xml/ns/persistence\n http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd\">\n <persistence-unit name=\"dynamic\" transaction-type=\"JTA\">\n <jta-data-source>jdbc/dynamicDB</jta-data-source>\n <class>org.superbiz.dynamic.User</class>\n <properties>\n <property name=\"openjpa.jdbc.SynchronizeMappings\" value=\"buildSchema(ForeignKeys=true)\"/>\n </properties>\n </persistence-unit>\n </persistence>\n \n\n## DynamicUserDaoTest\n\n package org.superbiz.dynamic;\n \n import junit.framework.Assert;\n import org.junit.BeforeClass;\n import org.junit.Test;\n \n import javax.ejb.EJBException;\n import javax.ejb.Stateless;\n import javax.ejb.embeddable.EJBContainer;\n import javax.naming.Context;\n import javax.persistence.EntityManager;\n import javax.persistence.NoResultException;\n import javax.persistence.PersistenceContext;\n import java.util.Collection;\n import java.util.HashMap;\n import java.util.Map;\n import java.util.Properties;\n \n import static junit.framework.Assert.assertEquals;\n import static junit.framework.Assert.assertNotNull;\n import static junit.framework.Assert.assertTrue;\n \n public class DynamicUserDaoTest {\n private static UserDao dao;\n private static Util util;\n \n @BeforeClass\n public static void init() throws Exception {\n final Properties p = new Properties();\n p.put(\"jdbc/dynamicDB\", \"new://Resource?type=DataSource\");\n p.put(\"jdbc/dynamicDB.JdbcDriver\", \"org.hsqldb.jdbcDriver\");\n p.put(\"jdbc/dynamicDB.JdbcUrl\", \"jdbc:hsqldb:mem:moviedb\");\n p.put(\"jdbc/dynamicDB.UserName\", \"sa\");\n p.put(\"jdbc/dynamicDB.Password\", \"\");\n \n final Context context = EJBContainer.createEJBContainer(p).getContext();\n dao = (UserDao) context.lookup(\"java:global/dynamic-dao-implementation/UserDao\");\n util = (Util) context.lookup(\"java:global/dynamic-dao-implementation/Util\");\n \n util.init(); // init database\n }\n \n @Test\n public void simple() {\n User user = dao.findById(1);\n assertNotNull(user);\n assertEquals(1, user.getId());\n }\n \n @Test\n public void findAll() {\n Collection<User> users = dao.findAll();\n assertEquals(10, users.size());\n }\n \n @Test\n public void pagination() {\n Collection<User> users = dao.findAll(0, 5);\n assertEquals(5, users.size());\n \n users = dao.findAll(6, 1);\n assertEquals(1, users.size());\n assertEquals(7, users.iterator().next().getId());\n }\n \n @Test\n public void persist() {\n User u = new User();\n dao.save(u);\n assertNotNull(u.getId());\n util.remove(u);\n }\n \n @Test\n public void remove() {\n User u = new User();\n dao.save(u);\n assertNotNull(u.getId());\n dao.delete(u);\n try {\n dao.findById(u.getId());\n Assert.fail();\n } catch (EJBException ee) {\n assertTrue(ee.getCause() instanceof NoResultException);\n }\n }\n \n @Test\n public void merge() {\n User u = new User();\n u.setAge(1);\n dao.save(u);\n assertEquals(1, u.getAge());\n assertNotNull(u.getId());\n \n u.setAge(2);\n dao.update(u);\n assertEquals(2, u.getAge());\n \n dao.delete(u);\n }\n \n @Test\n public void oneCriteria() {\n Collection<User> users = dao.findByName(\"foo\");\n assertEquals(4, users.size());\n for (User user : users) {\n assertEquals(\"foo\", user.getName());\n }\n }\n \n @Test\n public void twoCriteria() {\n Collection<User> users = dao.findByNameAndAge(\"bar-1\", 1);\n assertEquals(1, users.size());\n \n User user = users.iterator().next();\n assertEquals(\"bar-1\", user.getName());\n assertEquals(1, user.getAge());\n }\n \n @Test\n public void query() {\n Map<String, Object> params = new HashMap<String, Object>();\n params.put(\"name\", \"foo\");\n \n Collection<User> users = dao.namedQuery(\"dynamic-ejb-impl-test.query\", params, 0, 100);\n assertEquals(4, users.size());\n \n users = dao.namedQuery(\"dynamic-ejb-impl-test.query\", params);\n assertEquals(4, users.size());\n \n users = dao.namedQuery(\"dynamic-ejb-impl-test.query\", params, 0, 2);\n assertEquals(2, users.size());\n \n users = dao.namedQuery(\"dynamic-ejb-impl-test.query\", 0, 2, params);\n assertEquals(2, users.size());\n \n users = dao.namedQuery(\"dynamic-ejb-impl-test.all\");\n assertEquals(10, users.size());\n \n params.remove(\"name\");\n params.put(\"age\", 1);\n users = dao.query(\"SELECT u FROM User AS u WHERE u.age = :age\", params);\n assertEquals(3, users.size());\n }\n \n @Stateless\n public static class Util {\n @PersistenceContext\n private EntityManager em;\n \n public void remove(User o) {\n em.remove(em.find(User.class, o.getId()));\n }\n \n public void init() {\n for (int i = 0; i < 10; i++) {\n User u = new User();\n u.setAge(i % 4);\n if (i % 3 == 0) {\n u.setName(\"foo\");\n } else {\n u.setName(\"bar-\" + i);\n }\n em.persist(u);\n }\n }\n }\n }\n\n# Running\n\n \n -------------------------------------------------------\n T E S T S\n -------------------------------------------------------\n Running org.superbiz.dynamic.DynamicUserDaoTest\n Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06\n http://tomee.apache.org/\n INFO - openejb.home = /Users/dblevins/examples/dynamic-dao-implementation\n INFO - openejb.base = /Users/dblevins/examples/dynamic-dao-implementation\n INFO - Using 'javax.ejb.embeddable.EJBContainer=true'\n INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)\n INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)\n INFO - Configuring Service(id=jdbc/dynamicDB, type=Resource, provider-id=Default JDBC Database)\n INFO - Found EjbModule in classpath: /Users/dblevins/examples/dynamic-dao-implementation/target/classes\n INFO - Found EjbModule in classpath: /Users/dblevins/examples/dynamic-dao-implementation/target/test-classes\n INFO - Beginning load: /Users/dblevins/examples/dynamic-dao-implementation/target/classes\n INFO - Beginning load: /Users/dblevins/examples/dynamic-dao-implementation/target/test-classes\n INFO - Configuring enterprise application: /Users/dblevins/examples/dynamic-dao-implementation\n INFO - Configuring Service(id=Default Stateless Container, type=Container, provider-id=Default Stateless Container)\n INFO - Auto-creating a container for bean UserDao: Container(type=STATELESS, id=Default Stateless Container)\n INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)\n INFO - Auto-creating a container for bean org.superbiz.dynamic.DynamicUserDaoTest: Container(type=MANAGED, id=Default Managed Container)\n INFO - Configuring PersistenceUnit(name=dynamic)\n INFO - Auto-creating a Resource with id 'jdbc/dynamicDBNonJta' of type 'DataSource for 'dynamic'.\n INFO - Configuring Service(id=jdbc/dynamicDBNonJta, type=Resource, provider-id=jdbc/dynamicDB)\n INFO - Adjusting PersistenceUnit dynamic <non-jta-data-source> to Resource ID 'jdbc/dynamicDBNonJta' from 'null'\n INFO - Enterprise application \"/Users/dblevins/examples/dynamic-dao-implementation\" loaded.\n INFO - Assembling app: /Users/dblevins/examples/dynamic-dao-implementation\n INFO - PersistenceUnit(name=dynamic, provider=org.apache.openjpa.persistence.PersistenceProviderImpl) - provider time 417ms\n INFO - Jndi(name=\"java:global/dynamic-dao-implementation/UserDao!org.superbiz.dynamic.UserDao\")\n INFO - Jndi(name=\"java:global/dynamic-dao-implementation/UserDao\")\n INFO - Jndi(name=\"java:global/dynamic-dao-implementation/Util!org.superbiz.dynamic.DynamicUserDaoTest$Util\")\n INFO - Jndi(name=\"java:global/dynamic-dao-implementation/Util\")\n INFO - Jndi(name=\"java:global/EjbModule346613126/org.superbiz.dynamic.DynamicUserDaoTest!org.superbiz.dynamic.DynamicUserDaoTest\")\n INFO - Jndi(name=\"java:global/EjbModule346613126/org.superbiz.dynamic.DynamicUserDaoTest\")\n INFO - Created Ejb(deployment-id=UserDao, ejb-name=UserDao, container=Default Stateless Container)\n INFO - Created Ejb(deployment-id=Util, ejb-name=Util, container=Default Stateless Container)\n INFO - Created Ejb(deployment-id=org.superbiz.dynamic.DynamicUserDaoTest, ejb-name=org.superbiz.dynamic.DynamicUserDaoTest, container=Default Managed Container)\n INFO - Started Ejb(deployment-id=UserDao, ejb-name=UserDao, container=Default Stateless Container)\n INFO - Started Ejb(deployment-id=Util, ejb-name=Util, container=Default Stateless Container)\n INFO - Started Ejb(deployment-id=org.superbiz.dynamic.DynamicUserDaoTest, ejb-name=org.superbiz.dynamic.DynamicUserDaoTest, container=Default Managed Container)\n INFO - Deployed Application(path=/Users/dblevins/examples/dynamic-dao-implementation)\n WARN - Meta class \"org.superbiz.dynamic.User_\" for entity class org.superbiz.dynamic.User can not be registered with following exception \"java.security.PrivilegedActionException: java.lang.ClassNotFoundException: org.superbiz.dynamic.User_\"\n WARN - Query \"SELECT u FROM User AS u WHERE u.name LIKE :name\" is removed from cache excluded permanently. Query \"SELECT u FROM User AS u WHERE u.name LIKE :name\" is not cached because it uses pagination..\n Tests run: 9, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.471 sec\n \n Results :\n \n Tests run: 9, Failures: 0, Errors: 0, Skipped: 0\n \n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/dynamic-dao-implementation" | |
} | |
], | |
"data":[ | |
{ | |
"name":"spring-data-proxy", | |
"readme":"# Spring Data sample #\n\nThis example uses OpenEJB hooks to replace an EJB implementation by a proxy\nto uses Spring Data in your preferred container.\n\nIt is pretty simple: simply provide to OpenEJB an InvocationHandler using delegating to spring data\nand that's it!\n\nIt is what is done in org.superbiz.dynamic.SpringDataProxy.\n\nIt contains a little trick: even if it is not annotated \"implementingInterfaceClass\" attribute\nis injected by OpenEJB to get the interface.\n\nThen we simply create the Spring Data repository and delegate to it.\n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/spring-data-proxy" | |
}, | |
{ | |
"name":"spring-data-proxy-meta", | |
"readme":"# Spring Data With Meta sample #\n\nThis example simply simplifies the usage of spring-data sample\nproviding a meta annotation @SpringRepository to do all the dynamic procy EJB job.\n\nIt replaces @Proxy and @Stateless annotations.\n\nIsn't it more comfortable?\n\nTo do it we defined a meta annotation \"Metatype\" and used it.\n\nThe proxy implementation is the same than for spring-data sample.\n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/spring-data-proxy-meta" | |
} | |
], | |
"datasource":[ | |
{ | |
"name":"dynamic-datasource-routing", | |
"readme":"Title: Dynamic Datasource Routing\n\nThe TomEE dynamic datasource api aims to allow to use multiple data sources as one from an application point of view.\n\nIt can be useful for technical reasons (load balancing for example) or more generally\nfunctionnal reasons (filtering, aggregation, enriching...). However please note you can choose\nonly one datasource by transaction. It means the goal of this feature is not to switch more than\nonce of datasource in a transaction. The following code will not work:\n\n @Stateless\n public class MyEJB {\n @Resource private MyRouter router;\n @PersistenceContext private EntityManager em;\n\n public void workWithDataSources() {\n router.setDataSource(\"ds1\");\n em.persist(new MyEntity());\n\n router.setDataSource(\"ds2\"); // same transaction -> this invocation doesn't work\n em.persist(new MyEntity());\n }\n }\n\nIn this example the implementation simply use a datasource from its name and needs to be set before using any JPA\noperation in the transaction (to keep the logic simple in the example).\n\n# The implementation of the Router\n\nOur router has two configuration parameters:\n* a list of jndi names representing datasources to use\n* a default datasource to use\n\n## Router implementation\n\nThe interface Router (`org.apache.openejb.resource.jdbc.Router`) has only one method to implement, `public DataSource getDataSource()`\n\nOur `DeterminedRouter` implementation uses a ThreadLocal to manage the currently used datasource. Keep in mind JPA used more than once the getDatasource() method\nfor one operation. To change the datasource in one transaction is dangerous and should be avoid.\n\n package org.superbiz.dynamicdatasourcerouting;\n\n import org.apache.openejb.resource.jdbc.AbstractRouter;\n\n import javax.naming.NamingException;\n import javax.sql.DataSource;\n import java.util.Map;\n import java.util.concurrent.ConcurrentHashMap;\n\n public class DeterminedRouter extends AbstractRouter {\n private String dataSourceNames;\n private String defaultDataSourceName;\n private Map<String, DataSource> dataSources = null;\n private ThreadLocal<DataSource> currentDataSource = new ThreadLocal<DataSource>();\n\n /**\n * @param datasourceList datasource resource name, separator is a space\n */\n public void setDataSourceNames(String datasourceList) {\n dataSourceNames = datasourceList;\n }\n\n /**\n * lookup datasource in openejb resources\n */\n private void init() {\n dataSources = new ConcurrentHashMap<String, DataSource>();\n for (String ds : dataSourceNames.split(\" \")) {\n try {\n Object o = getOpenEJBResource(ds);\n if (o instanceof DataSource) {\n dataSources.put(ds, DataSource.class.cast(o));\n }\n } catch (NamingException e) {\n // ignored\n }\n }\n }\n\n /**\n * @return the user selected data source if it is set\n * or the default one\n * @throws IllegalArgumentException if the data source is not found\n */\n @Override\n public DataSource getDataSource() {\n // lazy init of routed datasources\n if (dataSources == null) {\n init();\n }\n\n // if no datasource is selected use the default one\n if (currentDataSource.get() == null) {\n if (dataSources.containsKey(defaultDataSourceName)) {\n return dataSources.get(defaultDataSourceName);\n\n } else {\n throw new IllegalArgumentException(\"you have to specify at least one datasource\");\n }\n }\n\n // the developper set the datasource to use\n return currentDataSource.get();\n }\n\n /**\n *\n * @param datasourceName data source name\n */\n public void setDataSource(String datasourceName) {\n if (dataSources == null) {\n init();\n }\n if (!dataSources.containsKey(datasourceName)) {\n throw new IllegalArgumentException(\"data source called \" + datasourceName + \" can't be found.\");\n }\n DataSource ds = dataSources.get(datasourceName);\n currentDataSource.set(ds);\n }\n\n /**\n * reset the data source\n */\n public void clear() {\n currentDataSource.remove();\n }\n\n public void setDefaultDataSourceName(String name) {\n this.defaultDataSourceName = name;\n }\n }\n\n## Declaring the implementation\n\nTo be able to use your router as a resource you need to provide a service configuration. It is done in a file\nyou can find in META-INF/org.router/ and called service-jar.xml\n(for your implementation you can of course change the package name).\n\nIt contains the following code:\n\n <ServiceJar>\n <ServiceProvider id=\"DeterminedRouter\" <!-- the name you want to use -->\n service=\"Resource\"\n type=\"org.apache.openejb.resource.jdbc.Router\"\n class-name=\"org.superbiz.dynamicdatasourcerouting.DeterminedRouter\"> <!-- implementation class -->\n\n # the parameters\n\n DataSourceNames\n DefaultDataSourceName\n </ServiceProvider>\n </ServiceJar>\n\n\n# Using the Router\n\nHere we have a `RoutedPersister` stateless bean which uses our `DeterminedRouter`\n\n package org.superbiz.dynamicdatasourcerouting;\n\n import javax.annotation.Resource;\n import javax.ejb.Stateless;\n import javax.persistence.EntityManager;\n import javax.persistence.PersistenceContext;\n\n @Stateless\n public class RoutedPersister {\n @PersistenceContext(unitName = \"router\")\n private EntityManager em;\n\n @Resource(name = \"My Router\", type = DeterminedRouter.class)\n private DeterminedRouter router;\n\n public void persist(int id, String name, String ds) {\n router.setDataSource(ds);\n em.persist(new Person(id, name));\n }\n }\n\n# The test\n\nIn test mode and using property style configuration the foolowing configuration is used:\n\n public class DynamicDataSourceTest {\n @Test\n public void route() throws Exception {\n String[] databases = new String[]{\"database1\", \"database2\", \"database3\"};\n\n Properties properties = new Properties();\n properties.setProperty(Context.INITIAL_CONTEXT_FACTORY, LocalInitialContextFactory.class.getName());\n\n // resources\n // datasources\n for (int i = 1; i <= databases.length; i++) {\n String dbName = databases[i - 1];\n properties.setProperty(dbName, \"new://Resource?type=DataSource\");\n dbName += \".\";\n properties.setProperty(dbName + \"JdbcDriver\", \"org.hsqldb.jdbcDriver\");\n properties.setProperty(dbName + \"JdbcUrl\", \"jdbc:hsqldb:mem:db\" + i);\n properties.setProperty(dbName + \"UserName\", \"sa\");\n properties.setProperty(dbName + \"Password\", \"\");\n properties.setProperty(dbName + \"JtaManaged\", \"true\");\n }\n\n // router\n properties.setProperty(\"My Router\", \"new://Resource?provider=org.router:DeterminedRouter&type=\" + DeterminedRouter.class.getName());\n properties.setProperty(\"My Router.DatasourceNames\", \"database1 database2 database3\");\n properties.setProperty(\"My Router.DefaultDataSourceName\", \"database1\");\n\n // routed datasource\n properties.setProperty(\"Routed Datasource\", \"new://Resource?provider=RoutedDataSource&type=\" + Router.class.getName());\n properties.setProperty(\"Routed Datasource.Router\", \"My Router\");\n\n Context ctx = EJBContainer.createEJBContainer(properties).getContext();\n RoutedPersister ejb = (RoutedPersister) ctx.lookup(\"java:global/dynamic-datasource-routing/RoutedPersister\");\n for (int i = 0; i < 18; i++) {\n // persisting a person on database db -> kind of manual round robin\n String name = \"record \" + i;\n String db = databases[i % 3];\n ejb.persist(i, name, db);\n }\n\n // assert database records number using jdbc\n for (int i = 1; i <= databases.length; i++) {\n Connection connection = DriverManager.getConnection(\"jdbc:hsqldb:mem:db\" + i, \"sa\", \"\");\n Statement st = connection.createStatement();\n ResultSet rs = st.executeQuery(\"select count(*) from PERSON\");\n rs.next();\n assertEquals(6, rs.getInt(1));\n st.close();\n connection.close();\n }\n\n ctx.close();\n }\n }\n\n# Configuration via openejb.xml\n\nThe testcase above uses properties for configuration. The identical way to do it via the `conf/openejb.xml` is as follows:\n\n <!-- Router and datasource -->\n <Resource id=\"My Router\" type=\"org.apache.openejb.router.test.DynamicDataSourceTest$DeterminedRouter\" provider=\"org.routertest:DeterminedRouter\">\n DatasourceNames = database1 database2 database3\n DefaultDataSourceName = database1\n </Resource>\n <Resource id=\"Routed Datasource\" type=\"org.apache.openejb.resource.jdbc.Router\" provider=\"RoutedDataSource\">\n Router = My Router\n </Resource>\n\n <!-- real datasources -->\n <Resource id=\"database1\" type=\"DataSource\">\n JdbcDriver = org.hsqldb.jdbcDriver\n JdbcUrl = jdbc:hsqldb:mem:db1\n UserName = sa\n Password\n JtaManaged = true\n </Resource>\n <Resource id=\"database2\" type=\"DataSource\">\n JdbcDriver = org.hsqldb.jdbcDriver\n JdbcUrl = jdbc:hsqldb:mem:db2\n UserName = sa\n Password\n JtaManaged = true\n </Resource>\n <Resource id=\"database3\" type=\"DataSource\">\n JdbcDriver = org.hsqldb.jdbcDriver\n JdbcUrl = jdbc:hsqldb:mem:db3\n UserName = sa\n Password\n JtaManaged = true\n </Resource>\n\n\n\n\n## Some hack for OpenJPA\n\nUsing more than one datasource behind one EntityManager means the databases are already created. If it is not the case,\nthe JPA provider has to create the datasource at boot time.\n\nHibernate do it so if you declare your databases it will work. However with OpenJPA\n(the default JPA provider for OpenEJB), the creation is lazy and it happens only once so when you'll switch of database\nit will no more work.\n\nOf course OpenEJB provides @Singleton and @Startup features of Java EE 6 and we can do a bean just making a simple find,\neven on none existing entities, just to force the database creation:\n\n @Startup\n @Singleton\n public class BoostrapUtility {\n // inject all real databases\n\n @PersistenceContext(unitName = \"db1\")\n private EntityManager em1;\n\n @PersistenceContext(unitName = \"db2\")\n private EntityManager em2;\n\n @PersistenceContext(unitName = \"db3\")\n private EntityManager em3;\n\n // force database creation\n\n @PostConstruct\n @TransactionAttribute(TransactionAttributeType.SUPPORTS)\n public void initDatabase() {\n em1.find(Person.class, 0);\n em2.find(Person.class, 0);\n em3.find(Person.class, 0);\n }\n }\n\n## Using the routed datasource\n\nNow you configured the way you want to route your JPA operation, you registered the resources and you initialized\nyour databases you can use it and see how it is simple:\n\n @Stateless\n public class RoutedPersister {\n // injection of the \"proxied\" datasource\n @PersistenceContext(unitName = \"router\")\n private EntityManager em;\n\n // injection of the router you need it to configured the database\n @Resource(name = \"My Router\", type = DeterminedRouter.class)\n private DeterminedRouter router;\n\n public void persist(int id, String name, String ds) {\n router.setDataSource(ds); // configuring the database for the current transaction\n em.persist(new Person(id, name)); // will use ds database automatically\n }\n }\n\n# Running\n\n\n -------------------------------------------------------\n T E S T S\n -------------------------------------------------------\n Running org.superbiz.dynamicdatasourcerouting.DynamicDataSourceTest\n Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06\n http://tomee.apache.org/\n INFO - openejb.home = /Users/dblevins/examples/dynamic-datasource-routing\n INFO - openejb.base = /Users/dblevins/examples/dynamic-datasource-routing\n INFO - Using 'javax.ejb.embeddable.EJBContainer=true'\n INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)\n INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)\n INFO - Configuring Service(id=My Router, type=Resource, provider-id=DeterminedRouter)\n INFO - Configuring Service(id=database3, type=Resource, provider-id=Default JDBC Database)\n INFO - Configuring Service(id=database2, type=Resource, provider-id=Default JDBC Database)\n INFO - Configuring Service(id=Routed Datasource, type=Resource, provider-id=RoutedDataSource)\n INFO - Configuring Service(id=database1, type=Resource, provider-id=Default JDBC Database)\n INFO - Found EjbModule in classpath: /Users/dblevins/examples/dynamic-datasource-routing/target/classes\n INFO - Beginning load: /Users/dblevins/examples/dynamic-datasource-routing/target/classes\n INFO - Configuring enterprise application: /Users/dblevins/examples/dynamic-datasource-routing\n WARN - Method 'lookup' is not available for 'javax.annotation.Resource'. Probably using an older Runtime.\n INFO - Configuring Service(id=Default Singleton Container, type=Container, provider-id=Default Singleton Container)\n INFO - Auto-creating a container for bean BoostrapUtility: Container(type=SINGLETON, id=Default Singleton Container)\n INFO - Configuring Service(id=Default Stateless Container, type=Container, provider-id=Default Stateless Container)\n INFO - Auto-creating a container for bean RoutedPersister: Container(type=STATELESS, id=Default Stateless Container)\n INFO - Auto-linking resource-ref 'java:comp/env/My Router' in bean RoutedPersister to Resource(id=My Router)\n INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)\n INFO - Auto-creating a container for bean org.superbiz.dynamicdatasourcerouting.DynamicDataSourceTest: Container(type=MANAGED, id=Default Managed Container)\n INFO - Configuring PersistenceUnit(name=router)\n INFO - Configuring PersistenceUnit(name=db1)\n INFO - Auto-creating a Resource with id 'database1NonJta' of type 'DataSource for 'db1'.\n INFO - Configuring Service(id=database1NonJta, type=Resource, provider-id=database1)\n INFO - Adjusting PersistenceUnit db1 <non-jta-data-source> to Resource ID 'database1NonJta' from 'null'\n INFO - Configuring PersistenceUnit(name=db2)\n INFO - Auto-creating a Resource with id 'database2NonJta' of type 'DataSource for 'db2'.\n INFO - Configuring Service(id=database2NonJta, type=Resource, provider-id=database2)\n INFO - Adjusting PersistenceUnit db2 <non-jta-data-source> to Resource ID 'database2NonJta' from 'null'\n INFO - Configuring PersistenceUnit(name=db3)\n INFO - Auto-creating a Resource with id 'database3NonJta' of type 'DataSource for 'db3'.\n INFO - Configuring Service(id=database3NonJta, type=Resource, provider-id=database3)\n INFO - Adjusting PersistenceUnit db3 <non-jta-data-source> to Resource ID 'database3NonJta' from 'null'\n INFO - Enterprise application \"/Users/dblevins/examples/dynamic-datasource-routing\" loaded.\n INFO - Assembling app: /Users/dblevins/examples/dynamic-datasource-routing\n INFO - PersistenceUnit(name=router, provider=org.apache.openjpa.persistence.PersistenceProviderImpl) - provider time 504ms\n INFO - PersistenceUnit(name=db1, provider=org.apache.openjpa.persistence.PersistenceProviderImpl) - provider time 11ms\n INFO - PersistenceUnit(name=db2, provider=org.apache.openjpa.persistence.PersistenceProviderImpl) - provider time 7ms\n INFO - PersistenceUnit(name=db3, provider=org.apache.openjpa.persistence.PersistenceProviderImpl) - provider time 6ms\n INFO - Jndi(name=\"java:global/dynamic-datasource-routing/BoostrapUtility!org.superbiz.dynamicdatasourcerouting.BoostrapUtility\")\n INFO - Jndi(name=\"java:global/dynamic-datasource-routing/BoostrapUtility\")\n INFO - Jndi(name=\"java:global/dynamic-datasource-routing/RoutedPersister!org.superbiz.dynamicdatasourcerouting.RoutedPersister\")\n INFO - Jndi(name=\"java:global/dynamic-datasource-routing/RoutedPersister\")\n INFO - Jndi(name=\"java:global/EjbModule1519652738/org.superbiz.dynamicdatasourcerouting.DynamicDataSourceTest!org.superbiz.dynamicdatasourcerouting.DynamicDataSourceTest\")\n INFO - Jndi(name=\"java:global/EjbModule1519652738/org.superbiz.dynamicdatasourcerouting.DynamicDataSourceTest\")\n INFO - Created Ejb(deployment-id=RoutedPersister, ejb-name=RoutedPersister, container=Default Stateless Container)\n INFO - Created Ejb(deployment-id=org.superbiz.dynamicdatasourcerouting.DynamicDataSourceTest, ejb-name=org.superbiz.dynamicdatasourcerouting.DynamicDataSourceTest, container=Default Managed Container)\n INFO - Created Ejb(deployment-id=BoostrapUtility, ejb-name=BoostrapUtility, container=Default Singleton Container)\n INFO - Started Ejb(deployment-id=RoutedPersister, ejb-name=RoutedPersister, container=Default Stateless Container)\n INFO - Started Ejb(deployment-id=org.superbiz.dynamicdatasourcerouting.DynamicDataSourceTest, ejb-name=org.superbiz.dynamicdatasourcerouting.DynamicDataSourceTest, container=Default Managed Container)\n INFO - Started Ejb(deployment-id=BoostrapUtility, ejb-name=BoostrapUtility, container=Default Singleton Container)\n INFO - Deployed Application(path=/Users/dblevins/examples/dynamic-datasource-routing)\n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.504 sec\n\n Results :\n\n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0\n\n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/dynamic-datasource-routing" | |
}, | |
{ | |
"name":"injection-of-datasource", | |
"readme":"Title: Injection Of Datasource\n\n*Help us document this example! Click the blue pencil icon in the upper right to edit this page.*\n\n## Movie\n\n package org.superbiz.injection;\n \n /**\n * @version $Revision: 607077 $ $Date: 2007-12-27 06:55:23 -0800 (Thu, 27 Dec 2007) $\n */\n public class Movie {\n private String director;\n private String title;\n private int year;\n \n public Movie() {\n }\n \n public Movie(String director, String title, int year) {\n this.director = director;\n this.title = title;\n this.year = year;\n }\n \n public String getDirector() {\n return director;\n }\n \n public void setDirector(String director) {\n this.director = director;\n }\n \n public String getTitle() {\n return title;\n }\n \n public void setTitle(String title) {\n this.title = title;\n }\n \n public int getYear() {\n return year;\n }\n \n public void setYear(int year) {\n this.year = year;\n }\n \n }\n\n## Movies\n\n package org.superbiz.injection;\n \n import javax.annotation.PostConstruct;\n import javax.annotation.Resource;\n import javax.ejb.Stateful;\n import javax.sql.DataSource;\n import java.sql.Connection;\n import java.sql.PreparedStatement;\n import java.sql.ResultSet;\n import java.util.ArrayList;\n import java.util.List;\n \n @Stateful\n public class Movies {\n \n /**\n * The field name \"movieDatabase\" matches the DataSource we\n * configure in the TestCase via :\n * p.put(\"movieDatabase\", \"new://Resource?type=DataSource\");\n * <p/>\n * This would also match an equivalent delcaration in an openejb.xml:\n * <Resource id=\"movieDatabase\" type=\"DataSource\"/>\n * <p/>\n * If you'd like the freedom to change the field name without\n * impact on your configuration you can set the \"name\" attribute\n * of the @Resource annotation to \"movieDatabase\" instead.\n */\n @Resource\n private DataSource movieDatabase;\n \n @PostConstruct\n private void construct() throws Exception {\n Connection connection = movieDatabase.getConnection();\n try {\n PreparedStatement stmt = connection.prepareStatement(\"CREATE TABLE movie ( director VARCHAR(255), title VARCHAR(255), year integer)\");\n stmt.execute();\n } finally {\n connection.close();\n }\n }\n \n public void addMovie(Movie movie) throws Exception {\n Connection conn = movieDatabase.getConnection();\n try {\n PreparedStatement sql = conn.prepareStatement(\"INSERT into movie (director, title, year) values (?, ?, ?)\");\n sql.setString(1, movie.getDirector());\n sql.setString(2, movie.getTitle());\n sql.setInt(3, movie.getYear());\n sql.execute();\n } finally {\n conn.close();\n }\n }\n \n public void deleteMovie(Movie movie) throws Exception {\n Connection conn = movieDatabase.getConnection();\n try {\n PreparedStatement sql = conn.prepareStatement(\"DELETE from movie where director = ? AND title = ? AND year = ?\");\n sql.setString(1, movie.getDirector());\n sql.setString(2, movie.getTitle());\n sql.setInt(3, movie.getYear());\n sql.execute();\n } finally {\n conn.close();\n }\n }\n \n public List<Movie> getMovies() throws Exception {\n ArrayList<Movie> movies = new ArrayList<Movie>();\n Connection conn = movieDatabase.getConnection();\n try {\n PreparedStatement sql = conn.prepareStatement(\"SELECT director, title, year from movie\");\n ResultSet set = sql.executeQuery();\n while (set.next()) {\n Movie movie = new Movie();\n movie.setDirector(set.getString(\"director\"));\n movie.setTitle(set.getString(\"title\"));\n movie.setYear(set.getInt(\"year\"));\n movies.add(movie);\n }\n } finally {\n conn.close();\n }\n return movies;\n }\n }\n\n## MoviesTest\n\n package org.superbiz.injection;\n \n import junit.framework.TestCase;\n \n import javax.ejb.embeddable.EJBContainer;\n import javax.naming.Context;\n import java.util.List;\n import java.util.Properties;\n \n //START SNIPPET: code\n public class MoviesTest extends TestCase {\n \n public void test() throws Exception {\n \n Properties p = new Properties();\n p.put(\"movieDatabase\", \"new://Resource?type=DataSource\");\n p.put(\"movieDatabase.JdbcDriver\", \"org.hsqldb.jdbcDriver\");\n p.put(\"movieDatabase.JdbcUrl\", \"jdbc:hsqldb:mem:moviedb\");\n \n Context context = EJBContainer.createEJBContainer(p).getContext();\n \n Movies movies = (Movies) context.lookup(\"java:global/injection-of-datasource/Movies\");\n \n movies.addMovie(new Movie(\"Quentin Tarantino\", \"Reservoir Dogs\", 1992));\n movies.addMovie(new Movie(\"Joel Coen\", \"Fargo\", 1996));\n movies.addMovie(new Movie(\"Joel Coen\", \"The Big Lebowski\", 1998));\n \n List<Movie> list = movies.getMovies();\n assertEquals(\"List.size()\", 3, list.size());\n \n for (Movie movie : list) {\n movies.deleteMovie(movie);\n }\n \n assertEquals(\"Movies.getMovies()\", 0, movies.getMovies().size());\n }\n }\n\n# Running\n\n \n -------------------------------------------------------\n T E S T S\n -------------------------------------------------------\n Running org.superbiz.injection.MoviesTest\n Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06\n http://tomee.apache.org/\n INFO - openejb.home = /Users/dblevins/examples/injection-of-datasource\n INFO - openejb.base = /Users/dblevins/examples/injection-of-datasource\n INFO - Using 'javax.ejb.embeddable.EJBContainer=true'\n INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)\n INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)\n INFO - Configuring Service(id=movieDatabase, type=Resource, provider-id=Default JDBC Database)\n INFO - Found EjbModule in classpath: /Users/dblevins/examples/injection-of-datasource/target/classes\n INFO - Beginning load: /Users/dblevins/examples/injection-of-datasource/target/classes\n INFO - Configuring enterprise application: /Users/dblevins/examples/injection-of-datasource\n WARN - Method 'lookup' is not available for 'javax.annotation.Resource'. Probably using an older Runtime.\n INFO - Configuring Service(id=Default Stateful Container, type=Container, provider-id=Default Stateful Container)\n INFO - Auto-creating a container for bean Movies: Container(type=STATEFUL, id=Default Stateful Container)\n INFO - Auto-linking resource-ref 'java:comp/env/org.superbiz.injection.Movies/movieDatabase' in bean Movies to Resource(id=movieDatabase)\n INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)\n INFO - Auto-creating a container for bean org.superbiz.injection.MoviesTest: Container(type=MANAGED, id=Default Managed Container)\n INFO - Enterprise application \"/Users/dblevins/examples/injection-of-datasource\" loaded.\n INFO - Assembling app: /Users/dblevins/examples/injection-of-datasource\n INFO - Jndi(name=\"java:global/injection-of-datasource/Movies!org.superbiz.injection.Movies\")\n INFO - Jndi(name=\"java:global/injection-of-datasource/Movies\")\n INFO - Jndi(name=\"java:global/EjbModule1508028338/org.superbiz.injection.MoviesTest!org.superbiz.injection.MoviesTest\")\n INFO - Jndi(name=\"java:global/EjbModule1508028338/org.superbiz.injection.MoviesTest\")\n INFO - Created Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container)\n INFO - Created Ejb(deployment-id=org.superbiz.injection.MoviesTest, ejb-name=org.superbiz.injection.MoviesTest, container=Default Managed Container)\n INFO - Started Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container)\n INFO - Started Ejb(deployment-id=org.superbiz.injection.MoviesTest, ejb-name=org.superbiz.injection.MoviesTest, container=Default Managed Container)\n INFO - Deployed Application(path=/Users/dblevins/examples/injection-of-datasource)\n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.276 sec\n \n Results :\n \n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0\n \n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/injection-of-datasource" | |
}, | |
{ | |
"name":"datasource-definition", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/datasource-definition" | |
}, | |
{ | |
"name":"datasource-versioning", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/datasource-versioning" | |
}, | |
{ | |
"name":"datasource-ciphered-password", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/datasource-ciphered-password" | |
} | |
], | |
"decorators":[ | |
{ | |
"name":"decorators", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/decorators" | |
} | |
], | |
"definition":[ | |
{ | |
"name":"datasource-definition", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/datasource-definition" | |
} | |
], | |
"deltaspike":[ | |
{ | |
"name":"deltaspike-fullstack", | |
"readme":"Title: Apache DeltaSpike Demo\nNotice: Licensed to the Apache Software Foundation (ASF) under one\n or more contributor license agreements. See the NOTICE file\n distributed with this work for additional information\n regarding copyright ownership. The ASF licenses this file\n to you under the Apache License, Version 2.0 (the\n \"License\"); you may not use this file except in compliance\n with the License. You may obtain a copy of the License at\n .\n http://www.apache.org/licenses/LICENSE-2.0\n .\n Unless required by applicable law or agreed to in writing,\n software distributed under the License is distributed on an\n \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n KIND, either express or implied. See the License for the\n specific language governing permissions and limitations\n under the License.\n\n<h2>Steps to run the example</h2>\n\nBuild and start the demo:\n\n mvn clean package tomee:run\n\nOpen:\n\n http://localhost:8080/\n\nThis example shows how to improve JSF2/CDI/BV/JPA applications with features provided by Apache DeltaSpike and MyFaces ExtVal.\n\n<h2>Intro of Apache DeltaSpike and MyFaces ExtVal</h2>\n\nThe 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.\n\nMyFaces Extensions Validator (aka ExtVal) is a JSF centric validation framework which is compatible with JSF 1.x and JSF 2.x.\nThis example shows how it improves the default integration of Bean-Validation (JSR-303) with JSF2 as well as meta-data based cross-field validation.\n\n\n<h2>Illustrated Features</h2>\n\n<h3>Apache DeltaSpike</h3>\n\n<ul>\n <li><a href=\"./src/main/java/org/superbiz/deltaspike/view/config/Pages.java\" target=\"_blank\">Type-safe view-config</a></li>\n <li><a href=\"./src/main/java/org/superbiz/deltaspike/view/InfoPage.java\" target=\"_blank\">Type-safe (custom) view-meta-data</a></li>\n <li><a href=\"./src/main/java/org/superbiz/deltaspike/view/MenuBean.java\" target=\"_blank\">Type-safe navigation</a></li>\n <li><a href=\"./src/main/java/org/superbiz/deltaspike/CustomProjectStage.java\" target=\"_blank\">Type-safe custom project-stage</a></li>\n <li><a href=\"./src/main/java/org/superbiz/deltaspike/view/UserHolder.java\" target=\"_blank\">@WindowScoped</a></li>\n <li><a href=\"./src/main/java/org/superbiz/deltaspike/view/MenuBean.java\" target=\"_blank\">Controlling DeltaSpike grouped-conversations with GroupedConversationManager</a></li>\n <li><a href=\"./src/main/java/org/superbiz/deltaspike/view/FeedbackPage.java\" target=\"_blank\">@GroupedConversationScoped</a></li>\n <li><a href=\"./src/main/java/org/superbiz/deltaspike/view/FeedbackPage.java\" target=\"_blank\">Manual conversation handling</a></li>\n <li><a href=\"./src/main/java/org/superbiz/deltaspike/view/security/LoginAccessDecisionVoter.java\" target=\"_blank\">Secured pages (AccessDecisionVoter)</a></li>\n <li><a href=\"./src/main/java/org/superbiz/deltaspike/repository/Repository.java\" target=\"_blank\">@Transactional</a></li>\n <li><a href=\"./src/main/java/org/superbiz/deltaspike/view/RegistrationPage.java\" target=\"_blank\">I18n (type-safe messages)</a></li>\n <li><a href=\"./src/main/java/org/superbiz/deltaspike/domain/validation/UniqueUserNameValidator.java\" target=\"_blank\">Dependency-Injection for JSR303 (BV) constraint-validators</a></li>\n <li><a href=\"./src/main/java/org/superbiz/deltaspike/DebugPhaseListener.java\" target=\"_blank\">Dependency-Injection for JSF phase-listeners</a></li>\n</ul>\n\n<h3>Apache MyFaces ExtVal</h3>\n\n<ul>\n <li><a href=\"./src/main/java/org/superbiz/myfaces/view/RegistrationPage.java\" target=\"_blank\">Cross-Field validation (@Equals)</a></li>\n <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>\n</ul>\n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/deltaspike-fullstack" | |
}, | |
{ | |
"name":"deltaspike-exception-handling", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/deltaspike-exception-handling" | |
}, | |
{ | |
"name":"deltaspike-i18n", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/deltaspike-i18n" | |
}, | |
{ | |
"name":"deltaspike-configproperty", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/deltaspike-configproperty" | |
} | |
], | |
"descriptor":[ | |
{ | |
"name":"simple-stateless-with-descriptor", | |
"readme":"Title: Simple Stateless with Descriptor\n\nThis test is similar to simple-stateless, with two major differences. In this case all the classes are regular POJOs without annotations.\nThe EJB-specific metadata is provided via an XML descriptor. The second difference is the explicite use of Local and Remote interfaces. \n\n## CalculatorImpl\n\n package org.superbiz.calculator;\n \n /**\n * This is an EJB 3 stateless session bean, configured using an EJB 3\n * deployment descriptor as opposed to using annotations.\n * This EJB has 2 business interfaces: CalculatorRemote, a remote business\n * interface, and CalculatorLocal, a local business interface\n */\n public class CalculatorImpl implements CalculatorRemote, CalculatorLocal {\n \n public int sum(int add1, int add2) {\n return add1 + add2;\n }\n \n public int multiply(int mul1, int mul2) {\n return mul1 * mul2;\n }\n }\n\n## CalculatorLocal\n\n package org.superbiz.calculator;\n \n /**\n * This is an EJB 3 local business interface\n * This interface is specified using the business-local tag in the deployment descriptor\n */\n public interface CalculatorLocal {\n \n public int sum(int add1, int add2);\n \n public int multiply(int mul1, int mul2);\n }\n\n## CalculatorRemote\n\n package org.superbiz.calculator;\n \n \n /**\n * This is an EJB 3 remote business interface\n * This interface is specified using the business-local tag in the deployment descriptor\n */\n public interface CalculatorRemote {\n \n public int sum(int add1, int add2);\n \n public int multiply(int mul1, int mul2);\n }\n\n## ejb-jar.xml\n\nThe XML descriptor defines the EJB class and both local and remote interfaces.\n\n <ejb-jar xmlns=\"http://java.sun.com/xml/ns/javaee\"\n xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:schemaLocation=\"http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd\"\n version=\"3.0\">\n <enterprise-beans>\n <session>\n <ejb-name>CalculatorImpl</ejb-name>\n <business-local>org.superbiz.calculator.CalculatorLocal</business-local>\n <business-remote>org.superbiz.calculator.CalculatorRemote</business-remote>\n <ejb-class>org.superbiz.calculator.CalculatorImpl</ejb-class>\n <session-type>Stateless</session-type>\n <transaction-type>Container</transaction-type>\n </session>\n </enterprise-beans>\n </ejb-jar>\n\n \n\n## CalculatorTest\n\nTwo tests obtain a Local and Remote interface to the bean instance. This time an `InitialContext` object is directly created, \nas opposed to getting the context from `EJBContainer`, as we did in the previous example. \n\n package org.superbiz.calculator;\n \n import junit.framework.TestCase;\n \n import javax.naming.Context;\n import javax.naming.InitialContext;\n import java.util.Properties;\n \n public class CalculatorTest extends TestCase {\n \n private InitialContext initialContext;\n \n protected void setUp() throws Exception {\n Properties properties = new Properties();\n properties.setProperty(Context.INITIAL_CONTEXT_FACTORY, \"org.apache.openejb.core.LocalInitialContextFactory\");\n \n initialContext = new InitialContext(properties);\n }\n\n /**\n * Lookup the Calculator bean via its remote home interface\n *\n * @throws Exception\n */\n public void testCalculatorViaRemoteInterface() throws Exception {\n Object object = initialContext.lookup(\"CalculatorImplRemote\");\n \n assertNotNull(object);\n assertTrue(object instanceof CalculatorRemote);\n CalculatorRemote calc = (CalculatorRemote) object;\n assertEquals(10, calc.sum(4, 6));\n assertEquals(12, calc.multiply(3, 4));\n }\n\n /**\n * Lookup the Calculator bean via its local home interface\n *\n * @throws Exception\n */\n public void testCalculatorViaLocalInterface() throws Exception {\n Object object = initialContext.lookup(\"CalculatorImplLocal\");\n \n assertNotNull(object);\n assertTrue(object instanceof CalculatorLocal);\n CalculatorLocal calc = (CalculatorLocal) object;\n assertEquals(10, calc.sum(4, 6));\n assertEquals(12, calc.multiply(3, 4));\n }\n }\n\n# Running\n\n \n -------------------------------------------------------\n T E S T S\n -------------------------------------------------------\n Running org.superbiz.calculator.CalculatorTest\n Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06\n http://tomee.apache.org/\n INFO - openejb.home = /Users/dblevins/examples/simple-stateless-with-descriptor\n INFO - openejb.base = /Users/dblevins/examples/simple-stateless-with-descriptor\n INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)\n INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)\n INFO - Found EjbModule in classpath: /Users/dblevins/examples/simple-stateless-with-descriptor/target/classes\n INFO - Beginning load: /Users/dblevins/examples/simple-stateless-with-descriptor/target/classes\n INFO - Configuring enterprise application: /Users/dblevins/examples/simple-stateless-with-descriptor/classpath.ear\n INFO - Configuring Service(id=Default Stateless Container, type=Container, provider-id=Default Stateless Container)\n INFO - Auto-creating a container for bean CalculatorImpl: Container(type=STATELESS, id=Default Stateless Container)\n INFO - Enterprise application \"/Users/dblevins/examples/simple-stateless-with-descriptor/classpath.ear\" loaded.\n INFO - Assembling app: /Users/dblevins/examples/simple-stateless-with-descriptor/classpath.ear\n INFO - Jndi(name=CalculatorImplLocal) --> Ejb(deployment-id=CalculatorImpl)\n INFO - Jndi(name=global/classpath.ear/simple-stateless-with-descriptor/CalculatorImpl!org.superbiz.calculator.CalculatorLocal) --> Ejb(deployment-id=CalculatorImpl)\n INFO - Jndi(name=CalculatorImplRemote) --> Ejb(deployment-id=CalculatorImpl)\n INFO - Jndi(name=global/classpath.ear/simple-stateless-with-descriptor/CalculatorImpl!org.superbiz.calculator.CalculatorRemote) --> Ejb(deployment-id=CalculatorImpl)\n INFO - Jndi(name=global/classpath.ear/simple-stateless-with-descriptor/CalculatorImpl) --> Ejb(deployment-id=CalculatorImpl)\n INFO - Created Ejb(deployment-id=CalculatorImpl, ejb-name=CalculatorImpl, container=Default Stateless Container)\n INFO - Started Ejb(deployment-id=CalculatorImpl, ejb-name=CalculatorImpl, container=Default Stateless Container)\n INFO - Deployed Application(path=/Users/dblevins/examples/simple-stateless-with-descriptor/classpath.ear)\n Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.475 sec\n \n Results :\n \n Tests run: 2, Failures: 0, Errors: 0, Skipped: 0\n \n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/simple-stateless-with-descriptor" | |
}, | |
{ | |
"name":"simple-mdb-with-descriptor", | |
"readme":"Title: Simple MDB with Descriptor\n\n*Help us document this example! Click the blue pencil icon in the upper right to edit this page.*\n\n## ChatBean\n\n package org.superbiz.mdbdesc;\n \n import javax.jms.Connection;\n import javax.jms.ConnectionFactory;\n import javax.jms.DeliveryMode;\n import javax.jms.JMSException;\n import javax.jms.Message;\n import javax.jms.MessageListener;\n import javax.jms.MessageProducer;\n import javax.jms.Queue;\n import javax.jms.Session;\n import javax.jms.TextMessage;\n \n public class ChatBean implements MessageListener {\n \n private ConnectionFactory connectionFactory;\n \n private Queue answerQueue;\n \n public void onMessage(Message message) {\n try {\n \n final TextMessage textMessage = (TextMessage) message;\n final String question = textMessage.getText();\n \n if (\"Hello World!\".equals(question)) {\n \n respond(\"Hello, Test Case!\");\n } else if (\"How are you?\".equals(question)) {\n \n respond(\"I'm doing well.\");\n } else if (\"Still spinning?\".equals(question)) {\n \n respond(\"Once every day, as usual.\");\n }\n } catch (JMSException e) {\n throw new IllegalStateException(e);\n }\n }\n \n private void respond(String text) throws JMSException {\n \n Connection connection = null;\n Session session = null;\n \n try {\n connection = connectionFactory.createConnection();\n connection.start();\n \n // Create a Session\n session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);\n \n // Create a MessageProducer from the Session to the Topic or Queue\n MessageProducer producer = session.createProducer(answerQueue);\n producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);\n \n // Create a message\n TextMessage message = session.createTextMessage(text);\n \n // Tell the producer to send the message\n producer.send(message);\n } finally {\n // Clean up\n if (session != null) session.close();\n if (connection != null) connection.close();\n }\n }\n }\n\n## ejb-jar.xml\n\n <ejb-jar xmlns=\"http://java.sun.com/xml/ns/javaee\" metadata-complete=\"true\">\n <enterprise-beans>\n \n <message-driven>\n \n <ejb-name>ChatBean</ejb-name>\n <ejb-class>org.superbiz.mdbdesc.ChatBean</ejb-class>\n \n <messaging-type>javax.jms.MessageListener</messaging-type>\n \n <activation-config>\n <activation-config-property>\n <activation-config-property-name>destination</activation-config-property-name>\n <activation-config-property-value>ChatBean</activation-config-property-value>\n </activation-config-property>\n <activation-config-property>\n <activation-config-property-name>destinationType</activation-config-property-name>\n <activation-config-property-value>javax.jms.Queue</activation-config-property-value>\n </activation-config-property>\n </activation-config>\n \n <resource-ref>\n <res-ref-name>java:comp/env/org.superbiz.mdbdesc.ChatBean/connectionFactory</res-ref-name>\n <res-type>javax.jms.ConnectionFactory</res-type>\n <injection-target>\n <injection-target-class>org.superbiz.mdbdesc.ChatBean</injection-target-class>\n <injection-target-name>connectionFactory</injection-target-name>\n </injection-target>\n </resource-ref>\n \n <resource-env-ref>\n <resource-env-ref-name>java:comp/env/AnswerQueue</resource-env-ref-name>\n <resource-env-ref-type>javax.jms.Queue</resource-env-ref-type>\n <mapped-name>AnswerQueue</mapped-name>\n <injection-target>\n <injection-target-class>org.superbiz.mdbdesc.ChatBean</injection-target-class>\n <injection-target-name>answerQueue</injection-target-name>\n </injection-target>\n </resource-env-ref>\n \n </message-driven>\n \n </enterprise-beans>\n </ejb-jar>\n \n\n## ChatBeanTest\n\n package org.superbiz.mdb;\n \n import junit.framework.TestCase;\n \n import javax.annotation.Resource;\n import javax.ejb.embeddable.EJBContainer;\n import javax.jms.Connection;\n import javax.jms.ConnectionFactory;\n import javax.jms.JMSException;\n import javax.jms.MessageConsumer;\n import javax.jms.MessageProducer;\n import javax.jms.Queue;\n import javax.jms.Session;\n import javax.jms.TextMessage;\n \n public class ChatBeanTest extends TestCase {\n \n @Resource\n private ConnectionFactory connectionFactory;\n \n @Resource(name = \"ChatBean\")\n private Queue questionQueue;\n \n @Resource(name = \"AnswerQueue\")\n private Queue answerQueue;\n \n public void test() throws Exception {\n \n EJBContainer.createEJBContainer().getContext().bind(\"inject\", this);\n \n final Connection connection = connectionFactory.createConnection();\n \n connection.start();\n \n final Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);\n \n final MessageProducer questions = session.createProducer(questionQueue);\n \n final MessageConsumer answers = session.createConsumer(answerQueue);\n \n \n sendText(\"Hello World!\", questions, session);\n \n assertEquals(\"Hello, Test Case!\", receiveText(answers));\n \n \n sendText(\"How are you?\", questions, session);\n \n assertEquals(\"I'm doing well.\", receiveText(answers));\n \n \n sendText(\"Still spinning?\", questions, session);\n \n assertEquals(\"Once every day, as usual.\", receiveText(answers));\n }\n \n private void sendText(String text, MessageProducer questions, Session session) throws JMSException {\n \n questions.send(session.createTextMessage(text));\n }\n \n private String receiveText(MessageConsumer answers) throws JMSException {\n \n return ((TextMessage) answers.receive(1000)).getText();\n }\n }\n\n# Running\n\n \n -------------------------------------------------------\n T E S T S\n -------------------------------------------------------\n Running org.superbiz.mdb.ChatBeanTest\n Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06\n http://tomee.apache.org/\n INFO - openejb.home = /Users/dblevins/examples/simple-mdb-with-descriptor\n INFO - openejb.base = /Users/dblevins/examples/simple-mdb-with-descriptor\n INFO - Using 'javax.ejb.embeddable.EJBContainer=true'\n INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)\n INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)\n INFO - Found EjbModule in classpath: /Users/dblevins/examples/simple-mdb-with-descriptor/target/classes\n INFO - Beginning load: /Users/dblevins/examples/simple-mdb-with-descriptor/target/classes\n INFO - Configuring enterprise application: /Users/dblevins/examples/simple-mdb-with-descriptor\n WARN - Method 'lookup' is not available for 'javax.annotation.Resource'. Probably using an older Runtime.\n INFO - Configuring Service(id=Default MDB Container, type=Container, provider-id=Default MDB Container)\n INFO - Auto-creating a container for bean ChatBean: Container(type=MESSAGE, id=Default MDB Container)\n INFO - Configuring Service(id=Default JMS Resource Adapter, type=Resource, provider-id=Default JMS Resource Adapter)\n INFO - Configuring Service(id=Default JMS Connection Factory, type=Resource, provider-id=Default JMS Connection Factory)\n INFO - Auto-creating a Resource with id 'Default JMS Connection Factory' of type 'javax.jms.ConnectionFactory for 'ChatBean'.\n INFO - Auto-linking resource-ref 'java:comp/env/org.superbiz.mdbdesc.ChatBean/connectionFactory' in bean ChatBean to Resource(id=Default JMS Connection Factory)\n INFO - Configuring Service(id=AnswerQueue, type=Resource, provider-id=Default Queue)\n INFO - Auto-creating a Resource with id 'AnswerQueue' of type 'javax.jms.Queue for 'ChatBean'.\n INFO - Auto-linking resource-env-ref 'java:comp/env/AnswerQueue' in bean ChatBean to Resource(id=AnswerQueue)\n INFO - Configuring Service(id=ChatBean, type=Resource, provider-id=Default Queue)\n INFO - Auto-creating a Resource with id 'ChatBean' of type 'javax.jms.Queue for 'ChatBean'.\n INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)\n INFO - Auto-creating a container for bean org.superbiz.mdb.ChatBeanTest: Container(type=MANAGED, id=Default Managed Container)\n INFO - Auto-linking resource-ref 'java:comp/env/org.superbiz.mdb.ChatBeanTest/connectionFactory' in bean org.superbiz.mdb.ChatBeanTest to Resource(id=Default JMS Connection Factory)\n INFO - Auto-linking resource-env-ref 'java:comp/env/AnswerQueue' in bean org.superbiz.mdb.ChatBeanTest to Resource(id=AnswerQueue)\n INFO - Auto-linking resource-env-ref 'java:comp/env/ChatBean' in bean org.superbiz.mdb.ChatBeanTest to Resource(id=ChatBean)\n INFO - Enterprise application \"/Users/dblevins/examples/simple-mdb-with-descriptor\" loaded.\n INFO - Assembling app: /Users/dblevins/examples/simple-mdb-with-descriptor\n INFO - Jndi(name=\"java:global/EjbModule1842275169/org.superbiz.mdb.ChatBeanTest!org.superbiz.mdb.ChatBeanTest\")\n INFO - Jndi(name=\"java:global/EjbModule1842275169/org.superbiz.mdb.ChatBeanTest\")\n INFO - Created Ejb(deployment-id=org.superbiz.mdb.ChatBeanTest, ejb-name=org.superbiz.mdb.ChatBeanTest, container=Default Managed Container)\n INFO - Created Ejb(deployment-id=ChatBean, ejb-name=ChatBean, container=Default MDB Container)\n INFO - Started Ejb(deployment-id=org.superbiz.mdb.ChatBeanTest, ejb-name=org.superbiz.mdb.ChatBeanTest, container=Default Managed Container)\n INFO - Started Ejb(deployment-id=ChatBean, ejb-name=ChatBean, container=Default MDB Container)\n INFO - Deployed Application(path=/Users/dblevins/examples/simple-mdb-with-descriptor)\n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.914 sec\n \n Results :\n \n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0\n \n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/simple-mdb-with-descriptor" | |
}, | |
{ | |
"name":"alternate-descriptors", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/alternate-descriptors" | |
}, | |
{ | |
"name":"lookup-of-ejbs-with-descriptor", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/lookup-of-ejbs-with-descriptor" | |
} | |
], | |
"design":[ | |
{ | |
"name":"bean-validation-design-by-contract", | |
"readme":"# Bean Validation - Design By Contract\n\nBean Validation (aka JSR 303) contains an optional appendix dealing with method validation.\n\nSome implementions of this JSR implement this appendix (Apache bval, Hibernate validator for example).\n\nOpenEJB provides an interceptor which allows you to use this feature to do design by contract.\n\n# Design by contract\n\nThe goal is to be able to configure with a finer grain your contract. In the example you specify\nthe minimum centimeters a sport man should jump at pole vaulting:\n\n @Local\n public interface PoleVaultingManager {\n int points(@Min(120) int centimeters);\n }\n\n# Usage\n\nTomEE and OpenEJB do not provide anymore `BeanValidationAppendixInterceptor` since\nBean Validation 1.1 does it (with a slighly different usage but the exact same feature).\n\nSo basically you don't need to configure anything to use it.\n# Errors\n\nIf a parameter is not validated an exception is thrown, it is an EJBException wrapping a ConstraintViolationException:\n\n try {\n gamesManager.addSportMan(\"I lose\", \"EN\");\n fail(\"no space should be in names\");\n } catch (EJBException wrappingException) {\n assertTrue(wrappingException.getCause() instanceof ConstraintViolationException);\n ConstraintViolationException exception = ConstraintViolationException.class.cast(wrappingException.getCausedByException());\n assertEquals(1, exception.getConstraintViolations().size());\n }\n\n# Example\n\n## OlympicGamesManager\n\n package org.superbiz.designbycontract;\n\n import javax.ejb.Stateless;\n import javax.validation.constraints.NotNull;\n import javax.validation.constraints.Pattern;\n import javax.validation.constraints.Size;\n\n @Stateless\n public class OlympicGamesManager {\n public String addSportMan(@Pattern(regexp = \"^[A-Za-z]+$\") String name, @Size(min = 2, max = 4) String country) {\n if (country.equals(\"USA\")) {\n return null;\n }\n return new StringBuilder(name).append(\" [\").append(country).append(\"]\").toString();\n }\n }\n\n## PoleVaultingManager\n\n package org.superbiz.designbycontract;\n\n import javax.ejb.Local;\n import javax.validation.constraints.Min;\n\n @Local\n public interface PoleVaultingManager {\n int points(@Min(120) int centimeters);\n }\n\n## PoleVaultingManagerBean\n\n package org.superbiz.designbycontract;\n\n import javax.ejb.Stateless;\n\n @Stateless\n public class PoleVaultingManagerBean implements PoleVaultingManager {\n @Override\n public int points(int centimeters) {\n return centimeters - 120;\n }\n }\n\n## OlympicGamesTest\n\n public class OlympicGamesTest {\n private static Context context;\n\n @EJB\n private OlympicGamesManager gamesManager;\n\n @EJB\n private PoleVaultingManager poleVaultingManager;\n\n @BeforeClass\n public static void start() {\n Properties properties = new Properties();\n properties.setProperty(BeanContext.USER_INTERCEPTOR_KEY, BeanValidationAppendixInterceptor.class.getName());\n context = EJBContainer.createEJBContainer(properties).getContext();\n }\n\n @Before\n public void inject() throws Exception {\n context.bind(\"inject\", this);\n }\n\n @AfterClass\n public static void stop() throws Exception {\n if (context != null) {\n context.close();\n }\n }\n\n @Test\n public void sportMenOk() throws Exception {\n assertEquals(\"IWin [FR]\", gamesManager.addSportMan(\"IWin\", \"FR\"));\n }\n\n @Test\n public void sportMenKoBecauseOfName() throws Exception {\n try {\n gamesManager.addSportMan(\"I lose\", \"EN\");\n fail(\"no space should be in names\");\n } catch (EJBException wrappingException) {\n assertTrue(wrappingException.getCause() instanceof ConstraintViolationException);\n ConstraintViolationException exception = ConstraintViolationException.class.cast(wrappingException.getCausedByException());\n assertEquals(1, exception.getConstraintViolations().size());\n }\n }\n\n @Test\n public void sportMenKoBecauseOfCountry() throws Exception {\n try {\n gamesManager.addSportMan(\"ILoseTwo\", \"TOO-LONG\");\n fail(\"country should be between 2 and 4 characters\");\n } catch (EJBException wrappingException) {\n assertTrue(wrappingException.getCause() instanceof ConstraintViolationException);\n ConstraintViolationException exception = ConstraintViolationException.class.cast(wrappingException.getCausedByException());\n assertEquals(1, exception.getConstraintViolations().size());\n }\n }\n\n @Test\n public void polVaulting() throws Exception {\n assertEquals(100, poleVaultingManager.points(220));\n }\n\n @Test\n public void tooShortPolVaulting() throws Exception {\n try {\n poleVaultingManager.points(119);\n fail(\"the jump is too short\");\n } catch (EJBException wrappingException) {\n assertTrue(wrappingException.getCause() instanceof ConstraintViolationException);\n ConstraintViolationException exception = ConstraintViolationException.class.cast(wrappingException.getCausedByException());\n assertEquals(1, exception.getConstraintViolations().size());\n }\n }\n }\n\n# Running\n\n\n -------------------------------------------------------\n T E S T S\n -------------------------------------------------------\n Running OlympicGamesTest\n Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06\n http://tomee.apache.org/\n INFO - openejb.home = /Users/dblevins/examples/bean-validation-design-by-contract\n INFO - openejb.base = /Users/dblevins/examples/bean-validation-design-by-contract\n INFO - Using 'javax.ejb.embeddable.EJBContainer=true'\n INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)\n INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)\n INFO - Found EjbModule in classpath: /Users/dblevins/examples/bean-validation-design-by-contract/target/classes\n INFO - Beginning load: /Users/dblevins/examples/bean-validation-design-by-contract/target/classes\n INFO - Configuring enterprise application: /Users/dblevins/examples/bean-validation-design-by-contract\n INFO - Configuring Service(id=Default Stateless Container, type=Container, provider-id=Default Stateless Container)\n INFO - Auto-creating a container for bean PoleVaultingManagerBean: Container(type=STATELESS, id=Default Stateless Container)\n INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)\n INFO - Auto-creating a container for bean OlympicGamesTest: Container(type=MANAGED, id=Default Managed Container)\n INFO - Enterprise application \"/Users/dblevins/examples/bean-validation-design-by-contract\" loaded.\n INFO - Assembling app: /Users/dblevins/examples/bean-validation-design-by-contract\n INFO - Jndi(name=\"java:global/bean-validation-design-by-contract/PoleVaultingManagerBean!org.superbiz.designbycontract.PoleVaultingManager\")\n INFO - Jndi(name=\"java:global/bean-validation-design-by-contract/PoleVaultingManagerBean\")\n INFO - Jndi(name=\"java:global/bean-validation-design-by-contract/OlympicGamesManager!org.superbiz.designbycontract.OlympicGamesManager\")\n INFO - Jndi(name=\"java:global/bean-validation-design-by-contract/OlympicGamesManager\")\n INFO - Jndi(name=\"java:global/EjbModule236054577/OlympicGamesTest!OlympicGamesTest\")\n INFO - Jndi(name=\"java:global/EjbModule236054577/OlympicGamesTest\")\n INFO - Created Ejb(deployment-id=OlympicGamesManager, ejb-name=OlympicGamesManager, container=Default Stateless Container)\n INFO - Created Ejb(deployment-id=PoleVaultingManagerBean, ejb-name=PoleVaultingManagerBean, container=Default Stateless Container)\n INFO - Created Ejb(deployment-id=OlympicGamesTest, ejb-name=OlympicGamesTest, container=Default Managed Container)\n INFO - Started Ejb(deployment-id=OlympicGamesManager, ejb-name=OlympicGamesManager, container=Default Stateless Container)\n INFO - Started Ejb(deployment-id=PoleVaultingManagerBean, ejb-name=PoleVaultingManagerBean, container=Default Stateless Container)\n INFO - Started Ejb(deployment-id=OlympicGamesTest, ejb-name=OlympicGamesTest, container=Default Managed Container)\n INFO - Deployed Application(path=/Users/dblevins/examples/bean-validation-design-by-contract)\n Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.245 sec\n\n Results :\n\n Tests run: 5, Failures: 0, Errors: 0, Skipped: 0\n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/bean-validation-design-by-contract" | |
} | |
], | |
"disposes":[ | |
{ | |
"name":"cdi-produces-disposes", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/cdi-produces-disposes" | |
} | |
], | |
"dynamic":[ | |
{ | |
"name":"dynamic-implementation", | |
"readme":"Title: Dynamic Implementation\n\n*Help us document this example! Click the blue pencil icon in the upper right to edit this page.*\n\n## SocialBean\n\n package org.superbiz.dynamic;\n \n import org.apache.openejb.api.Proxy;\n \n import javax.ejb.Singleton;\n import javax.interceptor.Interceptors;\n \n @Singleton\n @Proxy(SocialHandler.class)\n @Interceptors(SocialInterceptor.class)\n public interface SocialBean {\n public String facebookStatus();\n \n public String twitterStatus();\n \n public String status();\n }\n\n## SocialHandler\n\n package org.superbiz.dynamic;\n \n import java.lang.reflect.InvocationHandler;\n import java.lang.reflect.Method;\n \n public class SocialHandler implements InvocationHandler {\n @Override\n public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {\n String mtd = method.getName();\n if (mtd.toLowerCase().contains(\"facebook\")) {\n return \"You think you have a life!\";\n } else if (mtd.toLowerCase().contains(\"twitter\")) {\n return \"Wow, you eat pop corn!\";\n }\n return \"Hey, you have no virtual friend!\";\n }\n }\n\n## SocialInterceptor\n\n packagenull\n }\n\n## SocialTest\n\n package org.superbiz.dynamic;\n \n import org.junit.AfterClass;\n import org.junit.BeforeClass;\n import org.junit.Test;\n \n import javax.ejb.embeddable.EJBContainer;\n \n import static junit.framework.Assert.assertTrue;\n \n public class SocialTest {\n private static SocialBean social;\n private static EJBContainer container;\n \n @BeforeClass\n public static void init() throws Exception {\n container = EJBContainer.createEJBContainer();\n social = (SocialBean) container.getContext().lookup(\"java:global/dynamic-implementation/SocialBean\");\n }\n \n @AfterClass\n public static void close() {\n container.close();\n }\n \n @Test\n public void simple() {\n assertTrue(social.facebookStatus().contains(\"think\"));\n assertTrue(social.twitterStatus().contains(\"eat\"));\n assertTrue(social.status().contains(\"virtual\"));\n }\n }\n\n# Running\n\n \n -------------------------------------------------------\n T E S T S\n -------------------------------------------------------\n Running org.superbiz.dynamic.SocialTest\n Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06\n http://tomee.apache.org/\n INFO - openejb.home = /Users/dblevins/examples/dynamic-implementation\n INFO - openejb.base = /Users/dblevins/examples/dynamic-implementation\n INFO - Using 'javax.ejb.embeddable.EJBContainer=true'\n INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)\n INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)\n INFO - Found EjbModule in classpath: /Users/dblevins/examples/dynamic-implementation/target/classes\n INFO - Beginning load: /Users/dblevins/examples/dynamic-implementation/target/classes\n INFO - Configuring enterprise application: /Users/dblevins/examples/dynamic-implementation\n INFO - Configuring Service(id=Default Singleton Container, type=Container, provider-id=Default Singleton Container)\n INFO - Auto-creating a container for bean SocialBean: Container(type=SINGLETON, id=Default Singleton Container)\n INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)\n INFO - Auto-creating a container for bean org.superbiz.dynamic.SocialTest: Container(type=MANAGED, id=Default Managed Container)\n INFO - Enterprise application \"/Users/dblevins/examples/dynamic-implementation\" loaded.\n INFO - Assembling app: /Users/dblevins/examples/dynamic-implementation\n INFO - Jndi(name=\"java:global/dynamic-implementation/SocialBean!org.superbiz.dynamic.SocialBean\")\n INFO - Jndi(name=\"java:global/dynamic-implementation/SocialBean\")\n INFO - Jndi(name=\"java:global/EjbModule236706648/org.superbiz.dynamic.SocialTest!org.superbiz.dynamic.SocialTest\")\n INFO - Jndi(name=\"java:global/EjbModule236706648/org.superbiz.dynamic.SocialTest\")\n INFO - Created Ejb(deployment-id=org.superbiz.dynamic.SocialTest, ejb-name=org.superbiz.dynamic.SocialTest, container=Default Managed Container)\n INFO - Created Ejb(deployment-id=SocialBean, ejb-name=SocialBean, container=Default Singleton Container)\n INFO - Started Ejb(deployment-id=org.superbiz.dynamic.SocialTest, ejb-name=org.superbiz.dynamic.SocialTest, container=Default Managed Container)\n INFO - Started Ejb(deployment-id=SocialBean, ejb-name=SocialBean, container=Default Singleton Container)\n INFO - Deployed Application(path=/Users/dblevins/examples/dynamic-implementation)\n INFO - Undeploying app: /Users/dblevins/examples/dynamic-implementation\n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.107 sec\n \n Results :\n \n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0\n \n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/dynamic-implementation" | |
}, | |
{ | |
"name":"dynamic-datasource-routing", | |
"readme":"Title: Dynamic Datasource Routing\n\nThe TomEE dynamic datasource api aims to allow to use multiple data sources as one from an application point of view.\n\nIt can be useful for technical reasons (load balancing for example) or more generally\nfunctionnal reasons (filtering, aggregation, enriching...). However please note you can choose\nonly one datasource by transaction. It means the goal of this feature is not to switch more than\nonce of datasource in a transaction. The following code will not work:\n\n @Stateless\n public class MyEJB {\n @Resource private MyRouter router;\n @PersistenceContext private EntityManager em;\n\n public void workWithDataSources() {\n router.setDataSource(\"ds1\");\n em.persist(new MyEntity());\n\n router.setDataSource(\"ds2\"); // same transaction -> this invocation doesn't work\n em.persist(new MyEntity());\n }\n }\n\nIn this example the implementation simply use a datasource from its name and needs to be set before using any JPA\noperation in the transaction (to keep the logic simple in the example).\n\n# The implementation of the Router\n\nOur router has two configuration parameters:\n* a list of jndi names representing datasources to use\n* a default datasource to use\n\n## Router implementation\n\nThe interface Router (`org.apache.openejb.resource.jdbc.Router`) has only one method to implement, `public DataSource getDataSource()`\n\nOur `DeterminedRouter` implementation uses a ThreadLocal to manage the currently used datasource. Keep in mind JPA used more than once the getDatasource() method\nfor one operation. To change the datasource in one transaction is dangerous and should be avoid.\n\n package org.superbiz.dynamicdatasourcerouting;\n\n import org.apache.openejb.resource.jdbc.AbstractRouter;\n\n import javax.naming.NamingException;\n import javax.sql.DataSource;\n import java.util.Map;\n import java.util.concurrent.ConcurrentHashMap;\n\n public class DeterminedRouter extends AbstractRouter {\n private String dataSourceNames;\n private String defaultDataSourceName;\n private Map<String, DataSource> dataSources = null;\n private ThreadLocal<DataSource> currentDataSource = new ThreadLocal<DataSource>();\n\n /**\n * @param datasourceList datasource resource name, separator is a space\n */\n public void setDataSourceNames(String datasourceList) {\n dataSourceNames = datasourceList;\n }\n\n /**\n * lookup datasource in openejb resources\n */\n private void init() {\n dataSources = new ConcurrentHashMap<String, DataSource>();\n for (String ds : dataSourceNames.split(\" \")) {\n try {\n Object o = getOpenEJBResource(ds);\n if (o instanceof DataSource) {\n dataSources.put(ds, DataSource.class.cast(o));\n }\n } catch (NamingException e) {\n // ignored\n }\n }\n }\n\n /**\n * @return the user selected data source if it is set\n * or the default one\n * @throws IllegalArgumentException if the data source is not found\n */\n @Override\n public DataSource getDataSource() {\n // lazy init of routed datasources\n if (dataSources == null) {\n init();\n }\n\n // if no datasource is selected use the default one\n if (currentDataSource.get() == null) {\n if (dataSources.containsKey(defaultDataSourceName)) {\n return dataSources.get(defaultDataSourceName);\n\n } else {\n throw new IllegalArgumentException(\"you have to specify at least one datasource\");\n }\n }\n\n // the developper set the datasource to use\n return currentDataSource.get();\n }\n\n /**\n *\n * @param datasourceName data source name\n */\n public void setDataSource(String datasourceName) {\n if (dataSources == null) {\n init();\n }\n if (!dataSources.containsKey(datasourceName)) {\n throw new IllegalArgumentException(\"data source called \" + datasourceName + \" can't be found.\");\n }\n DataSource ds = dataSources.get(datasourceName);\n currentDataSource.set(ds);\n }\n\n /**\n * reset the data source\n */\n public void clear() {\n currentDataSource.remove();\n }\n\n public void setDefaultDataSourceName(String name) {\n this.defaultDataSourceName = name;\n }\n }\n\n## Declaring the implementation\n\nTo be able to use your router as a resource you need to provide a service configuration. It is done in a file\nyou can find in META-INF/org.router/ and called service-jar.xml\n(for your implementation you can of course change the package name).\n\nIt contains the following code:\n\n <ServiceJar>\n <ServiceProvider id=\"DeterminedRouter\" <!-- the name you want to use -->\n service=\"Resource\"\n type=\"org.apache.openejb.resource.jdbc.Router\"\n class-name=\"org.superbiz.dynamicdatasourcerouting.DeterminedRouter\"> <!-- implementation class -->\n\n # the parameters\n\n DataSourceNames\n DefaultDataSourceName\n </ServiceProvider>\n </ServiceJar>\n\n\n# Using the Router\n\nHere we have a `RoutedPersister` stateless bean which uses our `DeterminedRouter`\n\n package org.superbiz.dynamicdatasourcerouting;\n\n import javax.annotation.Resource;\n import javax.ejb.Stateless;\n import javax.persistence.EntityManager;\n import javax.persistence.PersistenceContext;\n\n @Stateless\n public class RoutedPersister {\n @PersistenceContext(unitName = \"router\")\n private EntityManager em;\n\n @Resource(name = \"My Router\", type = DeterminedRouter.class)\n private DeterminedRouter router;\n\n public void persist(int id, String name, String ds) {\n router.setDataSource(ds);\n em.persist(new Person(id, name));\n }\n }\n\n# The test\n\nIn test mode and using property style configuration the foolowing configuration is used:\n\n public class DynamicDataSourceTest {\n @Test\n public void route() throws Exception {\n String[] databases = new String[]{\"database1\", \"database2\", \"database3\"};\n\n Properties properties = new Properties();\n properties.setProperty(Context.INITIAL_CONTEXT_FACTORY, LocalInitialContextFactory.class.getName());\n\n // resources\n // datasources\n for (int i = 1; i <= databases.length; i++) {\n String dbName = databases[i - 1];\n properties.setProperty(dbName, \"new://Resource?type=DataSource\");\n dbName += \".\";\n properties.setProperty(dbName + \"JdbcDriver\", \"org.hsqldb.jdbcDriver\");\n properties.setProperty(dbName + \"JdbcUrl\", \"jdbc:hsqldb:mem:db\" + i);\n properties.setProperty(dbName + \"UserName\", \"sa\");\n properties.setProperty(dbName + \"Password\", \"\");\n properties.setProperty(dbName + \"JtaManaged\", \"true\");\n }\n\n // router\n properties.setProperty(\"My Router\", \"new://Resource?provider=org.router:DeterminedRouter&type=\" + DeterminedRouter.class.getName());\n properties.setProperty(\"My Router.DatasourceNames\", \"database1 database2 database3\");\n properties.setProperty(\"My Router.DefaultDataSourceName\", \"database1\");\n\n // routed datasource\n properties.setProperty(\"Routed Datasource\", \"new://Resource?provider=RoutedDataSource&type=\" + Router.class.getName());\n properties.setProperty(\"Routed Datasource.Router\", \"My Router\");\n\n Context ctx = EJBContainer.createEJBContainer(properties).getContext();\n RoutedPersister ejb = (RoutedPersister) ctx.lookup(\"java:global/dynamic-datasource-routing/RoutedPersister\");\n for (int i = 0; i < 18; i++) {\n // persisting a person on database db -> kind of manual round robin\n String name = \"record \" + i;\n String db = databases[i % 3];\n ejb.persist(i, name, db);\n }\n\n // assert database records number using jdbc\n for (int i = 1; i <= databases.length; i++) {\n Connection connection = DriverManager.getConnection(\"jdbc:hsqldb:mem:db\" + i, \"sa\", \"\");\n Statement st = connection.createStatement();\n ResultSet rs = st.executeQuery(\"select count(*) from PERSON\");\n rs.next();\n assertEquals(6, rs.getInt(1));\n st.close();\n connection.close();\n }\n\n ctx.close();\n }\n }\n\n# Configuration via openejb.xml\n\nThe testcase above uses properties for configuration. The identical way to do it via the `conf/openejb.xml` is as follows:\n\n <!-- Router and datasource -->\n <Resource id=\"My Router\" type=\"org.apache.openejb.router.test.DynamicDataSourceTest$DeterminedRouter\" provider=\"org.routertest:DeterminedRouter\">\n DatasourceNames = database1 database2 database3\n DefaultDataSourceName = database1\n </Resource>\n <Resource id=\"Routed Datasource\" type=\"org.apache.openejb.resource.jdbc.Router\" provider=\"RoutedDataSource\">\n Router = My Router\n </Resource>\n\n <!-- real datasources -->\n <Resource id=\"database1\" type=\"DataSource\">\n JdbcDriver = org.hsqldb.jdbcDriver\n JdbcUrl = jdbc:hsqldb:mem:db1\n UserName = sa\n Password\n JtaManaged = true\n </Resource>\n <Resource id=\"database2\" type=\"DataSource\">\n JdbcDriver = org.hsqldb.jdbcDriver\n JdbcUrl = jdbc:hsqldb:mem:db2\n UserName = sa\n Password\n JtaManaged = true\n </Resource>\n <Resource id=\"database3\" type=\"DataSource\">\n JdbcDriver = org.hsqldb.jdbcDriver\n JdbcUrl = jdbc:hsqldb:mem:db3\n UserName = sa\n Password\n JtaManaged = true\n </Resource>\n\n\n\n\n## Some hack for OpenJPA\n\nUsing more than one datasource behind one EntityManager means the databases are already created. If it is not the case,\nthe JPA provider has to create the datasource at boot time.\n\nHibernate do it so if you declare your databases it will work. However with OpenJPA\n(the default JPA provider for OpenEJB), the creation is lazy and it happens only once so when you'll switch of database\nit will no more work.\n\nOf course OpenEJB provides @Singleton and @Startup features of Java EE 6 and we can do a bean just making a simple find,\neven on none existing entities, just to force the database creation:\n\n @Startup\n @Singleton\n public class BoostrapUtility {\n // inject all real databases\n\n @PersistenceContext(unitName = \"db1\")\n private EntityManager em1;\n\n @PersistenceContext(unitName = \"db2\")\n private EntityManager em2;\n\n @PersistenceContext(unitName = \"db3\")\n private EntityManager em3;\n\n // force database creation\n\n @PostConstruct\n @TransactionAttribute(TransactionAttributeType.SUPPORTS)\n public void initDatabase() {\n em1.find(Person.class, 0);\n em2.find(Person.class, 0);\n em3.find(Person.class, 0);\n }\n }\n\n## Using the routed datasource\n\nNow you configured the way you want to route your JPA operation, you registered the resources and you initialized\nyour databases you can use it and see how it is simple:\n\n @Stateless\n public class RoutedPersister {\n // injection of the \"proxied\" datasource\n @PersistenceContext(unitName = \"router\")\n private EntityManager em;\n\n // injection of the router you need it to configured the database\n @Resource(name = \"My Router\", type = DeterminedRouter.class)\n private DeterminedRouter router;\n\n public void persist(int id, String name, String ds) {\n router.setDataSource(ds); // configuring the database for the current transaction\n em.persist(new Person(id, name)); // will use ds database automatically\n }\n }\n\n# Running\n\n\n -------------------------------------------------------\n T E S T S\n -------------------------------------------------------\n Running org.superbiz.dynamicdatasourcerouting.DynamicDataSourceTest\n Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06\n http://tomee.apache.org/\n INFO - openejb.home = /Users/dblevins/examples/dynamic-datasource-routing\n INFO - openejb.base = /Users/dblevins/examples/dynamic-datasource-routing\n INFO - Using 'javax.ejb.embeddable.EJBContainer=true'\n INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)\n INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)\n INFO - Configuring Service(id=My Router, type=Resource, provider-id=DeterminedRouter)\n INFO - Configuring Service(id=database3, type=Resource, provider-id=Default JDBC Database)\n INFO - Configuring Service(id=database2, type=Resource, provider-id=Default JDBC Database)\n INFO - Configuring Service(id=Routed Datasource, type=Resource, provider-id=RoutedDataSource)\n INFO - Configuring Service(id=database1, type=Resource, provider-id=Default JDBC Database)\n INFO - Found EjbModule in classpath: /Users/dblevins/examples/dynamic-datasource-routing/target/classes\n INFO - Beginning load: /Users/dblevins/examples/dynamic-datasource-routing/target/classes\n INFO - Configuring enterprise application: /Users/dblevins/examples/dynamic-datasource-routing\n WARN - Method 'lookup' is not available for 'javax.annotation.Resource'. Probably using an older Runtime.\n INFO - Configuring Service(id=Default Singleton Container, type=Container, provider-id=Default Singleton Container)\n INFO - Auto-creating a container for bean BoostrapUtility: Container(type=SINGLETON, id=Default Singleton Container)\n INFO - Configuring Service(id=Default Stateless Container, type=Container, provider-id=Default Stateless Container)\n INFO - Auto-creating a container for bean RoutedPersister: Container(type=STATELESS, id=Default Stateless Container)\n INFO - Auto-linking resource-ref 'java:comp/env/My Router' in bean RoutedPersister to Resource(id=My Router)\n INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)\n INFO - Auto-creating a container for bean org.superbiz.dynamicdatasourcerouting.DynamicDataSourceTest: Container(type=MANAGED, id=Default Managed Container)\n INFO - Configuring PersistenceUnit(name=router)\n INFO - Configuring PersistenceUnit(name=db1)\n INFO - Auto-creating a Resource with id 'database1NonJta' of type 'DataSource for 'db1'.\n INFO - Configuring Service(id=database1NonJta, type=Resource, provider-id=database1)\n INFO - Adjusting PersistenceUnit db1 <non-jta-data-source> to Resource ID 'database1NonJta' from 'null'\n INFO - Configuring PersistenceUnit(name=db2)\n INFO - Auto-creating a Resource with id 'database2NonJta' of type 'DataSource for 'db2'.\n INFO - Configuring Service(id=database2NonJta, type=Resource, provider-id=database2)\n INFO - Adjusting PersistenceUnit db2 <non-jta-data-source> to Resource ID 'database2NonJta' from 'null'\n INFO - Configuring PersistenceUnit(name=db3)\n INFO - Auto-creating a Resource with id 'database3NonJta' of type 'DataSource for 'db3'.\n INFO - Configuring Service(id=database3NonJta, type=Resource, provider-id=database3)\n INFO - Adjusting PersistenceUnit db3 <non-jta-data-source> to Resource ID 'database3NonJta' from 'null'\n INFO - Enterprise application \"/Users/dblevins/examples/dynamic-datasource-routing\" loaded.\n INFO - Assembling app: /Users/dblevins/examples/dynamic-datasource-routing\n INFO - PersistenceUnit(name=router, provider=org.apache.openjpa.persistence.PersistenceProviderImpl) - provider time 504ms\n INFO - PersistenceUnit(name=db1, provider=org.apache.openjpa.persistence.PersistenceProviderImpl) - provider time 11ms\n INFO - PersistenceUnit(name=db2, provider=org.apache.openjpa.persistence.PersistenceProviderImpl) - provider time 7ms\n INFO - PersistenceUnit(name=db3, provider=org.apache.openjpa.persistence.PersistenceProviderImpl) - provider time 6ms\n INFO - Jndi(name=\"java:global/dynamic-datasource-routing/BoostrapUtility!org.superbiz.dynamicdatasourcerouting.BoostrapUtility\")\n INFO - Jndi(name=\"java:global/dynamic-datasource-routing/BoostrapUtility\")\n INFO - Jndi(name=\"java:global/dynamic-datasource-routing/RoutedPersister!org.superbiz.dynamicdatasourcerouting.RoutedPersister\")\n INFO - Jndi(name=\"java:global/dynamic-datasource-routing/RoutedPersister\")\n INFO - Jndi(name=\"java:global/EjbModule1519652738/org.superbiz.dynamicdatasourcerouting.DynamicDataSourceTest!org.superbiz.dynamicdatasourcerouting.DynamicDataSourceTest\")\n INFO - Jndi(name=\"java:global/EjbModule1519652738/org.superbiz.dynamicdatasourcerouting.DynamicDataSourceTest\")\n INFO - Created Ejb(deployment-id=RoutedPersister, ejb-name=RoutedPersister, container=Default Stateless Container)\n INFO - Created Ejb(deployment-id=org.superbiz.dynamicdatasourcerouting.DynamicDataSourceTest, ejb-name=org.superbiz.dynamicdatasourcerouting.DynamicDataSourceTest, container=Default Managed Container)\n INFO - Created Ejb(deployment-id=BoostrapUtility, ejb-name=BoostrapUtility, container=Default Singleton Container)\n INFO - Started Ejb(deployment-id=RoutedPersister, ejb-name=RoutedPersister, container=Default Stateless Container)\n INFO - Started Ejb(deployment-id=org.superbiz.dynamicdatasourcerouting.DynamicDataSourceTest, ejb-name=org.superbiz.dynamicdatasourcerouting.DynamicDataSourceTest, container=Default Managed Container)\n INFO - Started Ejb(deployment-id=BoostrapUtility, ejb-name=BoostrapUtility, container=Default Singleton Container)\n INFO - Deployed Application(path=/Users/dblevins/examples/dynamic-datasource-routing)\n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.504 sec\n\n Results :\n\n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0\n\n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/dynamic-datasource-routing" | |
}, | |
{ | |
"name":"dynamic-dao-implementation", | |
"readme":"Title: Dynamic DAO Implementation\n\nMany aspects of Data Access Objects (DAOs) are very repetitive and boiler plate. As a fun and experimental feature, TomEE supports dynamically implementing an interface\nthat is seen to have standard DAO-style methods.\n\nThe interface has to be annotated with @PersistenceContext to define which EntityManager to use.\n\nMethods should respect these conventions:\n\n * void save(Foo foo): persist foo\n * Foo update(Foo foo): merge foo\n * void delete(Foo foo): remove foo, if foo is detached it tries to attach it\n * Collection<Foo>|Foo namedQuery(String name[, Map<String, ?> params, int first, int max]): run the named query called name, params contains bindings, first and max are used for magination. Last three parameters are optionnals\n * Collection<Foo>|Foo nativeQuery(String name[, Map<String, ?> params, int first, int max]): run the native query called name, params contains bindings, first and max are used for magination. Last three parameters are optionnals\n * Collection<Foo>|Foo query(String value [, Map<String, ?> params, int first, int max]): run the query put as first parameter, params contains bindings, first and max are used for magination. Last three parameters are optionnals\n * Collection<Foo> findAll([int first, int max]): find all Foo, parameters are used for pagination\n * Collection<Foo> findByBar1AndBar2AndBar3(<bar 1 type> bar1, <bar 2 type> bar2, <bar3 type> bar3 [, int first, int max]): find all Foo with specified field values for bar1, bar2, bar3.\n\nDynamic finder can have as much as you want field constraints. For String like is used and for other type equals is used.\n\n# Example\n\n## User\n\n package org.superbiz.dynamic;\n \n import javax.persistence.Entity;\n import javax.persistence.GeneratedValue;\n import javax.persistence.Id;\n import javax.persistence.NamedQueries;\n import javax.persistence.NamedQuery;\n \n @Entity\n @NamedQueries({\n @NamedQuery(name = \"dynamic-ejb-impl-test.query\", query = \"SELECT u FROM User AS u WHERE u.name LIKE :name\"),\n @NamedQuery(name = \"dynamic-ejb-impl-test.all\", query = \"SELECT u FROM User AS u\")\n })\n public class User {\n @Id\n @GeneratedValue\n private long id;\n private String name;\n private int age;\n\n public long getId() {\n return id;\n }\n\n public void setId(long id) {\n this.id = id;\n }\n\n public String getName() {\n return name;\n }\n\n public void setName(String name) {\n this.name = name;\n }\n\n public int getAge() {\n return age;\n }\n\n public void setAge(int age) {\n this.age = age;\n }\n }\n\n## UserDao\n\n package org.superbiz.dynamic;\n \n \n import javax.ejb.Stateless;\n import javax.persistence.PersistenceContext;\n import java.util.Collection;\n import java.util.Map;\n \n @Stateless\n @PersistenceContext(name = \"dynamic\")\n public interface UserDao {\n User findById(long id);\n \n Collection<User> findByName(String name);\n \n Collection<User> findByNameAndAge(String name, int age);\n \n Collection<User> findAll();\n \n Collection<User> findAll(int first, int max);\n \n Collection<User> namedQuery(String name, Map<String, ?> params, int first, int max);\n \n Collection<User> namedQuery(String name, int first, int max, Map<String, ?> params);\n \n Collection<User> namedQuery(String name, Map<String, ?> params);\n \n Collection<User> namedQuery(String name);\n \n Collection<User> query(String value, Map<String, ?> params);\n \n void save(User u);\n \n void delete(User u);\n \n User update(User u);\n }\n\n## persistence.xml\n\n <persistence version=\"2.0\"\n xmlns=\"http://java.sun.com/xml/ns/persistence\"\n xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:schemaLocation=\"\n http://java.sun.com/xml/ns/persistence\n http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd\">\n <persistence-unit name=\"dynamic\" transaction-type=\"JTA\">\n <jta-data-source>jdbc/dynamicDB</jta-data-source>\n <class>org.superbiz.dynamic.User</class>\n <properties>\n <property name=\"openjpa.jdbc.SynchronizeMappings\" value=\"buildSchema(ForeignKeys=true)\"/>\n </properties>\n </persistence-unit>\n </persistence>\n \n\n## DynamicUserDaoTest\n\n package org.superbiz.dynamic;\n \n import junit.framework.Assert;\n import org.junit.BeforeClass;\n import org.junit.Test;\n \n import javax.ejb.EJBException;\n import javax.ejb.Stateless;\n import javax.ejb.embeddable.EJBContainer;\n import javax.naming.Context;\n import javax.persistence.EntityManager;\n import javax.persistence.NoResultException;\n import javax.persistence.PersistenceContext;\n import java.util.Collection;\n import java.util.HashMap;\n import java.util.Map;\n import java.util.Properties;\n \n import static junit.framework.Assert.assertEquals;\n import static junit.framework.Assert.assertNotNull;\n import static junit.framework.Assert.assertTrue;\n \n public class DynamicUserDaoTest {\n private static UserDao dao;\n private static Util util;\n \n @BeforeClass\n public static void init() throws Exception {\n final Properties p = new Properties();\n p.put(\"jdbc/dynamicDB\", \"new://Resource?type=DataSource\");\n p.put(\"jdbc/dynamicDB.JdbcDriver\", \"org.hsqldb.jdbcDriver\");\n p.put(\"jdbc/dynamicDB.JdbcUrl\", \"jdbc:hsqldb:mem:moviedb\");\n p.put(\"jdbc/dynamicDB.UserName\", \"sa\");\n p.put(\"jdbc/dynamicDB.Password\", \"\");\n \n final Context context = EJBContainer.createEJBContainer(p).getContext();\n dao = (UserDao) context.lookup(\"java:global/dynamic-dao-implementation/UserDao\");\n util = (Util) context.lookup(\"java:global/dynamic-dao-implementation/Util\");\n \n util.init(); // init database\n }\n \n @Test\n public void simple() {\n User user = dao.findById(1);\n assertNotNull(user);\n assertEquals(1, user.getId());\n }\n \n @Test\n public void findAll() {\n Collection<User> users = dao.findAll();\n assertEquals(10, users.size());\n }\n \n @Test\n public void pagination() {\n Collection<User> users = dao.findAll(0, 5);\n assertEquals(5, users.size());\n \n users = dao.findAll(6, 1);\n assertEquals(1, users.size());\n assertEquals(7, users.iterator().next().getId());\n }\n \n @Test\n public void persist() {\n User u = new User();\n dao.save(u);\n assertNotNull(u.getId());\n util.remove(u);\n }\n \n @Test\n public void remove() {\n User u = new User();\n dao.save(u);\n assertNotNull(u.getId());\n dao.delete(u);\n try {\n dao.findById(u.getId());\n Assert.fail();\n } catch (EJBException ee) {\n assertTrue(ee.getCause() instanceof NoResultException);\n }\n }\n \n @Test\n public void merge() {\n User u = new User();\n u.setAge(1);\n dao.save(u);\n assertEquals(1, u.getAge());\n assertNotNull(u.getId());\n \n u.setAge(2);\n dao.update(u);\n assertEquals(2, u.getAge());\n \n dao.delete(u);\n }\n \n @Test\n public void oneCriteria() {\n Collection<User> users = dao.findByName(\"foo\");\n assertEquals(4, users.size());\n for (User user : users) {\n assertEquals(\"foo\", user.getName());\n }\n }\n \n @Test\n public void twoCriteria() {\n Collection<User> users = dao.findByNameAndAge(\"bar-1\", 1);\n assertEquals(1, users.size());\n \n User user = users.iterator().next();\n assertEquals(\"bar-1\", user.getName());\n assertEquals(1, user.getAge());\n }\n \n @Test\n public void query() {\n Map<String, Object> params = new HashMap<String, Object>();\n params.put(\"name\", \"foo\");\n \n Collection<User> users = dao.namedQuery(\"dynamic-ejb-impl-test.query\", params, 0, 100);\n assertEquals(4, users.size());\n \n users = dao.namedQuery(\"dynamic-ejb-impl-test.query\", params);\n assertEquals(4, users.size());\n \n users = dao.namedQuery(\"dynamic-ejb-impl-test.query\", params, 0, 2);\n assertEquals(2, users.size());\n \n users = dao.namedQuery(\"dynamic-ejb-impl-test.query\", 0, 2, params);\n assertEquals(2, users.size());\n \n users = dao.namedQuery(\"dynamic-ejb-impl-test.all\");\n assertEquals(10, users.size());\n \n params.remove(\"name\");\n params.put(\"age\", 1);\n users = dao.query(\"SELECT u FROM User AS u WHERE u.age = :age\", params);\n assertEquals(3, users.size());\n }\n \n @Stateless\n public static class Util {\n @PersistenceContext\n private EntityManager em;\n \n public void remove(User o) {\n em.remove(em.find(User.class, o.getId()));\n }\n \n public void init() {\n for (int i = 0; i < 10; i++) {\n User u = new User();\n u.setAge(i % 4);\n if (i % 3 == 0) {\n u.setName(\"foo\");\n } else {\n u.setName(\"bar-\" + i);\n }\n em.persist(u);\n }\n }\n }\n }\n\n# Running\n\n \n -------------------------------------------------------\n T E S T S\n -------------------------------------------------------\n Running org.superbiz.dynamic.DynamicUserDaoTest\n Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06\n http://tomee.apache.org/\n INFO - openejb.home = /Users/dblevins/examples/dynamic-dao-implementation\n INFO - openejb.base = /Users/dblevins/examples/dynamic-dao-implementation\n INFO - Using 'javax.ejb.embeddable.EJBContainer=true'\n INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)\n INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)\n INFO - Configuring Service(id=jdbc/dynamicDB, type=Resource, provider-id=Default JDBC Database)\n INFO - Found EjbModule in classpath: /Users/dblevins/examples/dynamic-dao-implementation/target/classes\n INFO - Found EjbModule in classpath: /Users/dblevins/examples/dynamic-dao-implementation/target/test-classes\n INFO - Beginning load: /Users/dblevins/examples/dynamic-dao-implementation/target/classes\n INFO - Beginning load: /Users/dblevins/examples/dynamic-dao-implementation/target/test-classes\n INFO - Configuring enterprise application: /Users/dblevins/examples/dynamic-dao-implementation\n INFO - Configuring Service(id=Default Stateless Container, type=Container, provider-id=Default Stateless Container)\n INFO - Auto-creating a container for bean UserDao: Container(type=STATELESS, id=Default Stateless Container)\n INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)\n INFO - Auto-creating a container for bean org.superbiz.dynamic.DynamicUserDaoTest: Container(type=MANAGED, id=Default Managed Container)\n INFO - Configuring PersistenceUnit(name=dynamic)\n INFO - Auto-creating a Resource with id 'jdbc/dynamicDBNonJta' of type 'DataSource for 'dynamic'.\n INFO - Configuring Service(id=jdbc/dynamicDBNonJta, type=Resource, provider-id=jdbc/dynamicDB)\n INFO - Adjusting PersistenceUnit dynamic <non-jta-data-source> to Resource ID 'jdbc/dynamicDBNonJta' from 'null'\n INFO - Enterprise application \"/Users/dblevins/examples/dynamic-dao-implementation\" loaded.\n INFO - Assembling app: /Users/dblevins/examples/dynamic-dao-implementation\n INFO - PersistenceUnit(name=dynamic, provider=org.apache.openjpa.persistence.PersistenceProviderImpl) - provider time 417ms\n INFO - Jndi(name=\"java:global/dynamic-dao-implementation/UserDao!org.superbiz.dynamic.UserDao\")\n INFO - Jndi(name=\"java:global/dynamic-dao-implementation/UserDao\")\n INFO - Jndi(name=\"java:global/dynamic-dao-implementation/Util!org.superbiz.dynamic.DynamicUserDaoTest$Util\")\n INFO - Jndi(name=\"java:global/dynamic-dao-implementation/Util\")\n INFO - Jndi(name=\"java:global/EjbModule346613126/org.superbiz.dynamic.DynamicUserDaoTest!org.superbiz.dynamic.DynamicUserDaoTest\")\n INFO - Jndi(name=\"java:global/EjbModule346613126/org.superbiz.dynamic.DynamicUserDaoTest\")\n INFO - Created Ejb(deployment-id=UserDao, ejb-name=UserDao, container=Default Stateless Container)\n INFO - Created Ejb(deployment-id=Util, ejb-name=Util, container=Default Stateless Container)\n INFO - Created Ejb(deployment-id=org.superbiz.dynamic.DynamicUserDaoTest, ejb-name=org.superbiz.dynamic.DynamicUserDaoTest, container=Default Managed Container)\n INFO - Started Ejb(deployment-id=UserDao, ejb-name=UserDao, container=Default Stateless Container)\n INFO - Started Ejb(deployment-id=Util, ejb-name=Util, container=Default Stateless Container)\n INFO - Started Ejb(deployment-id=org.superbiz.dynamic.DynamicUserDaoTest, ejb-name=org.superbiz.dynamic.DynamicUserDaoTest, container=Default Managed Container)\n INFO - Deployed Application(path=/Users/dblevins/examples/dynamic-dao-implementation)\n WARN - Meta class \"org.superbiz.dynamic.User_\" for entity class org.superbiz.dynamic.User can not be registered with following exception \"java.security.PrivilegedActionException: java.lang.ClassNotFoundException: org.superbiz.dynamic.User_\"\n WARN - Query \"SELECT u FROM User AS u WHERE u.name LIKE :name\" is removed from cache excluded permanently. Query \"SELECT u FROM User AS u WHERE u.name LIKE :name\" is not cached because it uses pagination..\n Tests run: 9, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.471 sec\n \n Results :\n \n Tests run: 9, Failures: 0, Errors: 0, Skipped: 0\n \n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/dynamic-dao-implementation" | |
}, | |
{ | |
"name":"dynamic-proxy-to-access-mbean", | |
"readme":"Title: dynamic-proxy-to-access-mbean\n\n*Help us document this example! Click the blue pencil icon in the upper right to edit this page.*\n\n## Example\n\nAcessing MBean is something simple through the JMX API but it is often technical and not very interesting.\n\nThis example simplify this work simply doing it generically in a proxy.\n\nSo from an user side you simple declare an interface to access your MBeans.\n\nNote: the example implementation uses a local MBeanServer but enhancing the example API\nit is easy to imagine a remote connection with user/password if needed.\n\n## ObjectName API (annotation)\n\nSimply an annotation to get the object\n\n package org.superbiz.dynamic.mbean;\n\n import java.lang.annotation.Retention;\n import java.lang.annotation.Target;\n\n import static java.lang.annotation.ElementType.TYPE;\n import static java.lang.annotation.ElementType.METHOD;\n import static java.lang.annotation.RetentionPolicy.RUNTIME;\n\n @Target({TYPE, METHOD})\n @Retention(RUNTIME)\n public @interface ObjectName {\n String value();\n\n // for remote usage only\n String url() default \"\";\n String user() default \"\";\n String password() default \"\";\n }\n\n## DynamicMBeanHandler (thr proxy implementation)\n\n package org.superbiz.dynamic.mbean;\n\n import javax.annotation.PreDestroy;\n import javax.management.Attribute;\n import javax.management.MBeanAttributeInfo;\n import javax.management.MBeanInfo;\n import javax.management.MBeanServer;\n import javax.management.MBeanServerConnection;\n import javax.management.ObjectName;\n import javax.management.remote.JMXConnector;\n import javax.management.remote.JMXConnectorFactory;\n import javax.management.remote.JMXServiceURL;\n import java.io.IOException;\n import java.lang.management.ManagementFactory;\n import java.lang.reflect.InvocationHandler;\n import java.lang.reflect.Method;\n import java.util.HashMap;\n import java.util.Map;\n import java.util.concurrent.ConcurrentHashMap;\n\n /**\n * Need a @PreDestroy method to disconnect the remote host when used in remote mode.\n */\n public class DynamicMBeanHandler implements InvocationHandler {\n private final Map<Method, ConnectionInfo> infos = new ConcurrentHashMap<Method, ConnectionInfo>();\n\n @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {\n final String methodName = method.getName();\n if (method.getDeclaringClass().equals(Object.class) && \"toString\".equals(methodName)) {\n return getClass().getSimpleName() + \" Proxy\";\n }\n if (method.getAnnotation(PreDestroy.class) != null) {\n return destroy();\n }\n\n final ConnectionInfo info = getConnectionInfo(method);\n final MBeanInfo infos = info.getMBeanInfo();\n if (methodName.startsWith(\"set\") && methodName.length() > 3 && args != null && args.length == 1\n && (Void.TYPE.equals(method.getReturnType()) || Void.class.equals(method.getReturnType()))) {\n final String attributeName = attributeName(infos, methodName, method.getParameterTypes()[0]);\n info.setAttribute(new Attribute(attributeName, args[0]));\n return null;\n } else if (methodName.startsWith(\"get\") && (args == null || args.length == 0) && methodName.length() > 3) {\n final String attributeName = attributeName(infos, methodName, method.getReturnType());\n return info.getAttribute(attributeName);\n }\n // operation\n return info.invoke(methodName, args, getSignature(method));\n }\n\n public Object destroy() {\n for (ConnectionInfo info : infos.values()) {\n info.clean();\n }\n infos.clear();\n return null;\n }\n\n private String[] getSignature(Method method) {\n String[] args = new String[method.getParameterTypes().length];\n for (int i = 0; i < method.getParameterTypes().length; i++) {\n args[i] = method.getParameterTypes()[i].getName();\n }\n return args; // note: null should often work...\n }\n\n private String attributeName(MBeanInfo infos, String methodName, Class<?> type) {\n String found = null;\n String foundBackUp = null; // without checking the type\n final String attributeName = methodName.substring(3, methodName.length());\n final String lowerName = Character.toLowerCase(methodName.charAt(3)) + methodName.substring(4, methodName.length());\n\n for (MBeanAttributeInfo attribute : infos.getAttributes()) {\n final String name = attribute.getName();\n if (attributeName.equals(name)) {\n foundBackUp = attributeName;\n if (attribute.getType().equals(type.getName())) {\n found = name;\n }\n } else if (found == null && ((lowerName.equals(name) && !attributeName.equals(name))\n || lowerName.equalsIgnoreCase(name))) {\n foundBackUp = name;\n if (attribute.getType().equals(type.getName())) {\n found = name;\n }\n }\n }\n\n if (found == null && foundBackUp == null) {\n throw new UnsupportedOperationException(\"cannot find attribute \" + attributeName);\n }\n\n if (found != null) {\n return found;\n }\n return foundBackUp;\n }\n\n private synchronized ConnectionInfo getConnectionInfo(Method method) throws Exception {\n if (!infos.containsKey(method)) {\n synchronized (infos) {\n if (!infos.containsKey(method)) { // double check for synchro\n org.superbiz.dynamic.mbean.ObjectName on = method.getAnnotation(org.superbiz.dynamic.mbean.ObjectName.class);\n if (on == null) {\n Class<?> current = method.getDeclaringClass();\n do {\n on = method.getDeclaringClass().getAnnotation(org.superbiz.dynamic.mbean.ObjectName.class);\n current = current.getSuperclass();\n } while (on == null && current != null);\n if (on == null) {\n throw new UnsupportedOperationException(\"class or method should define the objectName to use for invocation: \" + method.toGenericString());\n }\n }\n final ConnectionInfo info;\n if (on.url().isEmpty()) {\n info = new LocalConnectionInfo();\n ((LocalConnectionInfo) info).server = ManagementFactory.getPlatformMBeanServer(); // could use an id...\n } else {\n info = new RemoteConnectionInfo();\n final Map<String, String[]> environment = new HashMap<String, String[]>();\n if (!on.user().isEmpty()) {\n environment.put(JMXConnector.CREDENTIALS, new String[]{ on.user(), on.password() });\n }\n // ((RemoteConnectionInfo) info).connector = JMXConnectorFactory.newJMXConnector(new JMXServiceURL(on.url()), environment);\n ((RemoteConnectionInfo) info).connector = JMXConnectorFactory.connect(new JMXServiceURL(on.url()), environment);\n\n }\n info.objectName = new ObjectName(on.value());\n\n infos.put(method, info);\n }\n }\n }\n return infos.get(method);\n }\n\n private abstract static class ConnectionInfo {\n protected ObjectName objectName;\n\n public abstract void setAttribute(Attribute attribute) throws Exception;\n public abstract Object getAttribute(String attribute) throws Exception;\n public abstract Object invoke(String operationName, Object params[], String signature[]) throws Exception;\n public abstract MBeanInfo getMBeanInfo() throws Exception;\n public abstract void clean();\n }\n\n private static class LocalConnectionInfo extends ConnectionInfo {\n private MBeanServer server;\n\n @Override public void setAttribute(Attribute attribute) throws Exception {\n server.setAttribute(objectName, attribute);\n }\n\n @Override public Object getAttribute(String attribute) throws Exception {\n return server.getAttribute(objectName, attribute);\n }\n\n @Override\n public Object invoke(String operationName, Object[] params, String[] signature) throws Exception {\n return server.invoke(objectName, operationName, params, signature);\n }\n\n @Override public MBeanInfo getMBeanInfo() throws Exception {\n return server.getMBeanInfo(objectName);\n }\n\n @Override public void clean() {\n // no-op\n }\n }\n\n private static class RemoteConnectionInfo extends ConnectionInfo {\n private JMXConnector connector;\n private MBeanServerConnection connection;\n\n private void before() throws IOException {\n connection = connector.getMBeanServerConnection();\n }\n\n private void after() throws IOException {\n // no-op\n }\n\n @Override public void setAttribute(Attribute attribute) throws Exception {\n before();\n connection.setAttribute(objectName, attribute);\n after();\n }\n\n @Override public Object getAttribute(String attribute) throws Exception {\n before();\n try {\n return connection.getAttribute(objectName, attribute);\n } finally {\n after();\n }\n }\n\n @Override\n public Object invoke(String operationName, Object[] params, String[] signature) throws Exception {\n before();\n try {\n return connection.invoke(objectName, operationName, params, signature);\n } finally {\n after();\n }\n }\n\n @Override public MBeanInfo getMBeanInfo() throws Exception {\n before();\n try {\n return connection.getMBeanInfo(objectName);\n } finally {\n after();\n }\n }\n\n @Override public void clean() {\n try {\n connector.close();\n } catch (IOException e) {\n // no-op\n }\n }\n }\n }\n\n## Dynamic Proxies \n\n### DynamicMBeanClient (the dynamic JMX client)\n\n\tpackage org.superbiz.dynamic.mbean;\n\n\timport org.apache.openejb.api.Proxy;\n\timport org.superbiz.dynamic.mbean.DynamicMBeanHandler;\n\timport org.superbiz.dynamic.mbean.ObjectName;\n\n\timport javax.ejb.Singleton;\n\n\t/**\n\t * @author rmannibucau\n\t */\n\t@Singleton\n\t@Proxy(DynamicMBeanHandler.class)\n\t@ObjectName(DynamicMBeanClient.OBJECT_NAME)\n\tpublic interface DynamicMBeanClient {\n\t\tstatic final String OBJECT_NAME = \"test:group=DynamicMBeanClientTest\";\n\n\t\tint getCounter();\n\t\tvoid setCounter(int i);\n\t\tint length(String aString);\n\t}\n\n### DynamicMBeanClient (the dynamic JMX client)\n package org.superbiz.dynamic.mbean;\n\n import org.apache.openejb.api.Proxy;\n\n import javax.annotation.PreDestroy;\n import javax.ejb.Singleton;\n\n\n @Singleton\n @Proxy(DynamicMBeanHandler.class)\n @ObjectName(value = DynamicRemoteMBeanClient.OBJECT_NAME, url = \"service:jmx:rmi:///jndi/rmi://localhost:8243/jmxrmi\")\n public interface DynamicRemoteMBeanClient {\n static final String OBJECT_NAME = \"test:group=DynamicMBeanClientTest\";\n\n int getCounter();\n void setCounter(int i);\n int length(String aString);\n\n @PreDestroy void clean();\n }\n\n## The MBean used for the test\n\n### SimpleMBean\n\n\tpackage org.superbiz.dynamic.mbean.simple;\n\n\tpublic interface SimpleMBean {\n\t\tint length(String s);\n\n\t\tint getCounter();\n\t\tvoid setCounter(int c);\n\t}\n\n## Simple\n\n\tpackage org.superbiz.dynamic.mbean.simple;\n\n\tpublic class Simple implements SimpleMBean {\n\t\tprivate int counter = 0;\n\n\t\t@Override public int length(String s) {\n\t\t if (s == null) {\n\t\t return 0;\n\t\t }\n\t\t return s.length();\n\t\t}\n\n\t\t@Override public int getCounter() {\n\t\t return counter;\n\t\t}\n\n\t\t@Override public void setCounter(int c) {\n\t\t counter = c;\n\t\t}\n\t}\n\n## DynamicMBeanClientTest (The test)\n\n package org.superbiz.dynamic.mbean;\n\n import org.junit.After;\n import org.junit.AfterClass;\n import org.junit.Before;\n import org.junit.BeforeClass;\n import org.junit.Test;\n import org.superbiz.dynamic.mbean.simple.Simple;\n\n import javax.ejb.EJB;\n import javax.ejb.embeddable.EJBContainer;\n import javax.management.Attribute;\n import javax.management.ObjectName;\n import java.lang.management.ManagementFactory;\n\n import static junit.framework.Assert.assertEquals;\n\n public class DynamicMBeanClientTest {\n private static ObjectName objectName;\n private static EJBContainer container;\n\n @EJB private DynamicMBeanClient localClient;\n @EJB private DynamicRemoteMBeanClient remoteClient;\n\n @BeforeClass public static void start() {\n container = EJBContainer.createEJBContainer();\n }\n\n @Before public void injectAndRegisterMBean() throws Exception {\n container.getContext().bind(\"inject\", this);\n objectName = new ObjectName(DynamicMBeanClient.OBJECT_NAME);\n ManagementFactory.getPlatformMBeanServer().registerMBean(new Simple(), objectName);\n }\n\n @After public void unregisterMBean() throws Exception {\n if (objectName != null) {\n ManagementFactory.getPlatformMBeanServer().unregisterMBean(objectName);\n }\n }\n\n @Test public void localGet() throws Exception {\n assertEquals(0, localClient.getCounter());\n ManagementFactory.getPlatformMBeanServer().setAttribute(objectName, new Attribute(\"Counter\", 5));\n assertEquals(5, localClient.getCounter());\n }\n\n @Test public void localSet() throws Exception {\n assertEquals(0, ((Integer) ManagementFactory.getPlatformMBeanServer().getAttribute(objectName, \"Counter\")).intValue());\n localClient.setCounter(8);\n assertEquals(8, ((Integer) ManagementFactory.getPlatformMBeanServer().getAttribute(objectName, \"Counter\")).intValue());\n }\n\n @Test public void localOperation() {\n assertEquals(7, localClient.length(\"openejb\"));\n }\n\n @Test public void remoteGet() throws Exception {\n assertEquals(0, remoteClient.getCounter());\n ManagementFactory.getPlatformMBeanServer().setAttribute(objectName, new Attribute(\"Counter\", 5));\n assertEquals(5, remoteClient.getCounter());\n }\n\n @Test public void remoteSet() throws Exception {\n assertEquals(0, ((Integer) ManagementFactory.getPlatformMBeanServer().getAttribute(objectName, \"Counter\")).intValue());\n remoteClient.setCounter(8);\n assertEquals(8, ((Integer) ManagementFactory.getPlatformMBeanServer().getAttribute(objectName, \"Counter\")).intValue());\n }\n\n @Test public void remoteOperation() {\n assertEquals(7, remoteClient.length(\"openejb\"));\n }\n\n @AfterClass public static void close() {\n if (container != null) {\n container.close();\n }\n }\n }\n\n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/dynamic-proxy-to-access-mbean" | |
} | |
], | |
"ear":[ | |
{ | |
"name":"ear-testing", | |
"readme":"Title: EAR Testing\n\nThe goal of this example is to demonstrate how maven projects might be organized in a more real world style and how testing with OpenEJB can fit into that structure.\n\nThis example takes the basic moviefun code we us in many of examples and splits it into two modules:\n\n - `business-logic`\n - `business-model`\n\nAs the names imply, we keep our `@Entity` beans in the `business-model` module and our session beans in the `business-logic` model. The tests located and run from the business logic module.\n\n ear-testing\n ear-testing/business-logic\n ear-testing/business-logic/pom.xml\n ear-testing/business-logic/src/main/java/org/superbiz/logic/Movies.java\n ear-testing/business-logic/src/main/java/org/superbiz/logic/MoviesImpl.java\n ear-testing/business-logic/src/main/resources\n ear-testing/business-logic/src/main/resources/META-INF\n ear-testing/business-logic/src/main/resources/META-INF/ejb-jar.xml\n ear-testing/business-logic/src/test/java/org/superbiz/logic/MoviesTest.java\n ear-testing/business-model\n ear-testing/business-model/pom.xml\n ear-testing/business-model/src/main/java/org/superbiz/model/Movie.java\n ear-testing/business-model/src/main/resources/META-INF/persistence.xml\n ear-testing/pom.xml\n\n# Project configuration\n\nThe parent pom, trimmed to the minimum, looks like so:\n\n <project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd\">\n\n <modelVersion>4.0.0</modelVersion>\n <groupId>org.superbiz</groupId>\n <artifactId>myear</artifactId>\n <version>1.1.0-SNAPSHOT</version>\n\n <packaging>pom</packaging>\n\n <modules>\n <module>business-model</module>\n <module>business-logic</module>\n </modules>\n\n <dependencyManagement>\n <dependencies>\n <dependency>\n <groupId>org.apache.openejb</groupId>\n <artifactId>javaee-api</artifactId>\n <version>6.0-2</version>\n </dependency>\n <dependency>\n <groupId>junit</groupId>\n <artifactId>junit</artifactId>\n <version>4.8.1</version>\n </dependency>\n </dependencies>\n </dependencyManagement>\n </project>\n\nThe `business-model/pom.xml` as follows:\n\n <project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd\">\n <parent>\n <groupId>org.superbiz</groupId>\n <artifactId>myear</artifactId>\n <version>1.1.0-SNAPSHOT</version>\n </parent>\n\n <modelVersion>4.0.0</modelVersion>\n\n <artifactId>business-model</artifactId>\n <packaging>jar</packaging>\n\n <dependencies>\n <dependency>\n <groupId>org.apache.openejb</groupId>\n <artifactId>javaee-api</artifactId>\n <scope>provided</scope>\n </dependency>\n <dependency>\n <groupId>junit</groupId>\n <artifactId>junit</artifactId>\n <scope>test</scope>\n </dependency>\n\n </dependencies>\n\n </project>\n\nAnd finally, the `business-logic/pom.xml` which is setup to support embedded testing with OpenEJB:\n\n <project xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd\">\n <parent>\n <groupId>org.superbiz</groupId>\n <artifactId>myear</artifactId>\n <version>1.1.0-SNAPSHOT</version>\n </parent>\n\n <modelVersion>4.0.0</modelVersion>\n\n <artifactId>business-logic</artifactId>\n <packaging>jar</packaging>\n\n <dependencies>\n <dependency>\n <groupId>org.superbiz</groupId>\n <artifactId>business-model</artifactId>\n <version>${project.version}</version>\n </dependency>\n <dependency>\n <groupId>org.apache.openejb</groupId>\n <artifactId>javaee-api</artifactId>\n <scope>provided</scope>\n </dependency>\n <dependency>\n <groupId>junit</groupId>\n <artifactId>junit</artifactId>\n <scope>test</scope>\n </dependency>\n <!--\n The <scope>test</scope> guarantees that non of your runtime\n code is dependent on any OpenEJB classes.\n -->\n <dependency>\n <groupId>org.apache.openejb</groupId>\n <artifactId>openejb-core</artifactId>\n <version>7.0.0-SNAPSHOT</version>\n <scope>test</scope>\n </dependency>\n </dependencies>\n </project>\n\n# TestCode\n\nThe test code is the same as always:\n\n public class MoviesTest extends TestCase {\n\n public void test() throws Exception {\n Properties p = new Properties();\n p.put(Context.INITIAL_CONTEXT_FACTORY, \"org.apache.openejb.core.LocalInitialContextFactory\");\n\n p.put(\"openejb.deployments.classpath.ear\", \"true\");\n\n p.put(\"movieDatabase\", \"new://Resource?type=DataSource\");\n p.put(\"movieDatabase.JdbcDriver\", \"org.hsqldb.jdbcDriver\");\n p.put(\"movieDatabase.JdbcUrl\", \"jdbc:hsqldb:mem:moviedb\");\n\n p.put(\"movieDatabaseUnmanaged\", \"new://Resource?type=DataSource\");\n p.put(\"movieDatabaseUnmanaged.JdbcDriver\", \"org.hsqldb.jdbcDriver\");\n p.put(\"movieDatabaseUnmanaged.JdbcUrl\", \"jdbc:hsqldb:mem:moviedb\");\n p.put(\"movieDatabaseUnmanaged.JtaManaged\", \"false\");\n\n Context context = new InitialContext(p);\n\n Movies movies = (Movies) context.lookup(\"MoviesLocal\");\n\n movies.addMovie(new Movie(\"Quentin Tarantino\", \"Reservoir Dogs\", 1992));\n movies.addMovie(new Movie(\"Joel Coen\", \"Fargo\", 1996));\n movies.addMovie(new Movie(\"Joel Coen\", \"The Big Lebowski\", 1998));\n\n List<Movie> list = movies.getMovies();\n assertEquals(\"List.size()\", 3, list.size());\n\n for (Movie movie : list) {\n movies.deleteMovie(movie);\n }\n\n assertEquals(\"Movies.getMovies()\", 0, movies.getMovies().size());\n }\n }\n\n\n# Running\n\n\n -------------------------------------------------------\n T E S T S\n -------------------------------------------------------\n Running org.superbiz.logic.MoviesTest\n Apache OpenEJB 7.0.0-SNAPSHOT build: 20111002-04:06\n http://tomee.apache.org/\n INFO - openejb.home = /Users/dblevins/examples/ear-testing/business-logic\n INFO - openejb.base = /Users/dblevins/examples/ear-testing/business-logic\n INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)\n INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)\n INFO - Configuring Service(id=movieDatabaseUnmanaged, type=Resource, provider-id=Default JDBC Database)\n INFO - Configuring Service(id=movieDatabase, type=Resource, provider-id=Default JDBC Database)\n INFO - Found PersistenceModule in classpath: /Users/dblevins/examples/ear-testing/business-model/target/business-model-1.0.jar\n INFO - Found EjbModule in classpath: /Users/dblevins/examples/ear-testing/business-logic/target/classes\n INFO - Using 'openejb.deployments.classpath.ear=true'\n INFO - Beginning load: /Users/dblevins/examples/ear-testing/business-model/target/business-model-1.0.jar\n INFO - Beginning load: /Users/dblevins/examples/ear-testing/business-logic/target/classes\n INFO - Configuring enterprise application: /Users/dblevins/examples/ear-testing/business-logic/classpath.ear\n INFO - Configuring Service(id=Default Stateful Container, type=Container, provider-id=Default Stateful Container)\n INFO - Auto-creating a container for bean Movies: Container(type=STATEFUL, id=Default Stateful Container)\n INFO - Configuring PersistenceUnit(name=movie-unit)\n INFO - Enterprise application \"/Users/dblevins/examples/ear-testing/business-logic/classpath.ear\" loaded.\n INFO - Assembling app: /Users/dblevins/examples/ear-testing/business-logic/classpath.ear\n INFO - PersistenceUnit(name=movie-unit, provider=org.apache.openjpa.persistence.PersistenceProviderImpl) - provider time 415ms\n INFO - Jndi(name=MoviesLocal) --> Ejb(deployment-id=Movies)\n INFO - Jndi(name=global/classpath.ear/business-logic/Movies!org.superbiz.logic.Movies) --> Ejb(deployment-id=Movies)\n INFO - Jndi(name=global/classpath.ear/business-logic/Movies) --> Ejb(deployment-id=Movies)\n INFO - Created Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container)\n INFO - Started Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container)\n INFO - Deployed Application(path=/Users/dblevins/examples/ear-testing/business-logic/classpath.ear)\n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.393 sec\n\n Results :\n\n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0\n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/ear-testing" | |
} | |
], | |
"eclipselink":[ | |
{ | |
"name":"jpa-eclipselink", | |
"readme":"Title: JPA Eclipselink\n\nThis example shows how to configure `persistence.xml` to work with Eclipselink. It uses an `@Entity` class and a `@Stateful` bean to add and delete entities from a database.\n\n## Creating the JPA Entity\n\nThe entity itself is simply a pojo annotated with `@Entity`. We create one pojo called `Movie` which we can use to hold movie records.\n\n package org.superbiz.eclipselink;\n \n import javax.persistence.Entity;\n import javax.persistence.GeneratedValue;\n import javax.persistence.GenerationType;\n import javax.persistence.Id;\n \n @Entity\n public class Movie {\n \n @Id\n @GeneratedValue(strategy = GenerationType.AUTO)\n private long id;\n \n private String director;\n private String title;\n private int year;\n \n public Movie() {\n }\n \n public Movie(String director, String title, int year) {\n this.director = director;\n this.title = title;\n this.year = year;\n }\n \n public String getDirector() {\n return director;\n }\n \n public void setDirector(String director) {\n this.director = director;\n }\n \n public String getTitle() {\n return title;\n }\n \n public void setTitle(String title) {\n this.title = title;\n }\n \n public int getYear() {\n return year;\n }\n \n public void setYear(int year) {\n this.year = year;\n }\n \n }\n\n## Database Operations\n\nThis is the bean responsible for database operations; it allows us to persist or delete entities.\nFor more information we recommend you to see [injection-of-entitymanager](http://tomee.apache.org/examples-trunk/injection-of-entitymanager/README.html)\n\n\n package org.superbiz.eclipselink;\n \n import javax.ejb.Stateful;\n import javax.persistence.EntityManager;\n import javax.persistence.PersistenceContext;\n import javax.persistence.PersistenceContextType;\n import javax.persistence.Query;\n import java.util.List;\n \n @Stateful\n public class Movies {\n \n @PersistenceContext(unitName = \"movie-unit\", type = PersistenceContextType.EXTENDED)\n private EntityManager entityManager;\n \n public void addMovie(Movie movie) throws Exception {\n entityManager.persist(movie);\n }\n \n public void deleteMovie(Movie movie) throws Exception {\n entityManager.remove(movie);\n }\n \n public List<Movie> getMovies() throws Exception {\n Query query = entityManager.createQuery(\"SELECT m from Movie as m\");\n return query.getResultList();\n }\n }\n\n## Persistence.xml with EclipseLink configuration\n\nThis operation is too easy, just set the `provider` to `org.eclipse.persistence.jpa.PersistenceProvider` and add additional properties to the persistence unit. \nThe example has followed a strategy that allows the creation of tables in a HSQL database.\nFor a complete list of persistence unit properties see [here](http://www.eclipse.org/eclipselink/api/2.4/org/eclipse/persistence/config/PersistenceUnitProperties.html)\n\n <persistence version=\"1.0\"\n xmlns=\"http://java.sun.com/xml/ns/persistence\"\n xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:schemaLocation=\"http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd\">\n <persistence-unit name=\"movie-unit\">\n <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>\n <jta-data-source>movieDatabase</jta-data-source>\n <non-jta-data-source>movieDatabaseUnmanaged</non-jta-data-source>\n <properties>\n <property name=\"eclipselink.target-database\" value=\"org.eclipse.persistence.platform.database.HSQLPlatform\"/>\n <property name=\"eclipselink.ddl-generation\" value=\"create-tables\"/>\n <property name=\"eclipselink.ddl-generation.output-mode\" value=\"database\"/>\n </properties>\n </persistence-unit>\n </persistence>\n \n\n## MoviesTest\n\nTesting JPA is quite easy, we can simply use the `EJBContainer` API to create a container in our test case.\n\n package org.superbiz.eclipselink;\n \n import junit.framework.TestCase;\n \n import javax.ejb.embeddable.EJBContainer;\n import javax.naming.Context;\n import java.util.List;\n import java.util.Properties;\n \n /**\n * @version $Revision: 607077 $ $Date: 2007-12-27 06:55:23 -0800 (Thu, 27 Dec 2007) $\n */\n public class MoviesTest extends TestCase {\n \n public void test() throws Exception {\n Properties p = new Properties();\n p.put(\"movieDatabase\", \"new://Resource?type=DataSource\");\n p.put(\"movieDatabase.JdbcDriver\", \"org.hsqldb.jdbcDriver\");\n p.put(\"movieDatabase.JdbcUrl\", \"jdbc:hsqldb:mem:moviedb\");\n \n final Context context = EJBContainer.createEJBContainer(p).getContext();\n \n Movies movies = (Movies) context.lookup(\"java:global/jpa-eclipselink/Movies\");\n \n movies.addMovie(new Movie(\"Quentin Tarantino\", \"Reservoir Dogs\", 1992));\n movies.addMovie(new Movie(\"Joel Coen\", \"Fargo\", 1996));\n movies.addMovie(new Movie(\"Joel Coen\", \"The Big Lebowski\", 1998));\n \n List<Movie> list = movies.getMovies();\n assertEquals(\"List.size()\", 3, list.size());\n \n for (Movie movie : list) {\n movies.deleteMovie(movie);\n }\n \n assertEquals(\"Movies.getMovies()\", 0, movies.getMovies().size());\n }\n }\n\n# Running\n\nWhen we run our test case we should see output similar to the following. \n\n -------------------------------------------------------\n T E S T S\n -------------------------------------------------------\n Running org.superbiz.eclipselink.MoviesTest\n Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06\n http://tomee.apache.org/\n INFO - openejb.home = /Users/dblevins/examples/jpa-eclipselink\n INFO - openejb.base = /Users/dblevins/examples/jpa-eclipselink\n INFO - Using 'javax.ejb.embeddable.EJBContainer=true'\n INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)\n INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)\n INFO - Configuring Service(id=movieDatabase, type=Resource, provider-id=Default JDBC Database)\n INFO - Found EjbModule in classpath: /Users/dblevins/examples/jpa-eclipselink/target/classes\n INFO - Beginning load: /Users/dblevins/examples/jpa-eclipselink/target/classes\n INFO - Configuring enterprise application: /Users/dblevins/examples/jpa-eclipselink\n INFO - Configuring Service(id=Default Stateful Container, type=Container, provider-id=Default Stateful Container)\n INFO - Auto-creating a container for bean Movies: Container(type=STATEFUL, id=Default Stateful Container)\n INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)\n INFO - Auto-creating a container for bean org.superbiz.eclipselink.MoviesTest: Container(type=MANAGED, id=Default Managed Container)\n INFO - Configuring PersistenceUnit(name=movie-unit, provider=org.eclipse.persistence.jpa.PersistenceProvider)\n INFO - Auto-creating a Resource with id 'movieDatabaseNonJta' of type 'DataSource for 'movie-unit'.\n INFO - Configuring Service(id=movieDatabaseNonJta, type=Resource, provider-id=movieDatabase)\n INFO - Adjusting PersistenceUnit movie-unit <non-jta-data-source> to Resource ID 'movieDatabaseNonJta' from 'movieDatabaseUnmanaged'\n INFO - Enterprise application \"/Users/dblevins/examples/jpa-eclipselink\" loaded.\n INFO - Assembling app: /Users/dblevins/examples/jpa-eclipselink\n INFO - PersistenceUnit(name=movie-unit, provider=org.eclipse.persistence.jpa.PersistenceProvider) - provider time 511ms\n INFO - Jndi(name=\"java:global/jpa-eclipselink/Movies!org.superbiz.eclipselink.Movies\")\n INFO - Jndi(name=\"java:global/jpa-eclipselink/Movies\")\n INFO - Jndi(name=\"java:global/EjbModule225280863/org.superbiz.eclipselink.MoviesTest!org.superbiz.eclipselink.MoviesTest\")\n INFO - Jndi(name=\"java:global/EjbModule225280863/org.superbiz.eclipselink.MoviesTest\")\n INFO - Created Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container)\n INFO - Created Ejb(deployment-id=org.superbiz.eclipselink.MoviesTest, ejb-name=org.superbiz.eclipselink.MoviesTest, container=Default Managed Container)\n INFO - Started Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container)\n INFO - Started Ejb(deployment-id=org.superbiz.eclipselink.MoviesTest, ejb-name=org.superbiz.eclipselink.MoviesTest, container=Default Managed Container)\n INFO - Deployed Application(path=/Users/dblevins/examples/jpa-eclipselink)\n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 3.188 sec\n \n Results :\n \n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0\n ", | |
"url":"https://github.com/apache/tomee/tree/master/examples/jpa-eclipselink" | |
}, | |
{ | |
"name":"tomee-jersey-eclipselink", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/tomee-jersey-eclipselink" | |
} | |
], | |
"ejb":[ | |
{ | |
"name":"rest-on-ejb", | |
"readme":"Title: REST on EJB\n\n*Help us document this example! Click the blue pencil icon in the upper right to edit this page.*\n\n## User\n\n package org.superbiz.rest;\n \n import javax.persistence.Entity;\n import javax.persistence.GeneratedValue;\n import javax.persistence.Id;\n import javax.persistence.NamedQueries;\n import javax.persistence.NamedQuery;\n import javax.xml.bind.annotation.XmlRootElement;\n \n @Entity\n @NamedQueries({\n @NamedQuery(name = \"user.list\", query = \"select u from User u\")\n }\n\n## UserService\n\n package org.superbiz.rest;\n \n import javax.ejb.Lock;\n import javax.ejb.LockType;\n import javax.ejb.Singleton;\n import javax.persistence.EntityManager;\n import javax.persistence.PersistenceContext;\n import javax.ws.rs.DELETE;\n import javax.ws.rs.DefaultValue;\n import javax.ws.rs.GET;\n import javax.ws.rs.POST;\n import javax.ws.rs.PUT;\n import javax.ws.rs.Path;\n import javax.ws.rs.PathParam;\n import javax.ws.rs.Produces;\n import javax.ws.rs.QueryParam;\n import javax.ws.rs.core.MediaType;\n import javax.ws.rs.core.Response;\n import java.util.ArrayList;\n import java.util.List;\n \n /**\n * Outputs are copied because of the enhancement of OpenJPA.\n *\n */\n @Singleton\n @Lock(LockType.WRITE)\n @Path(\"/user\")\n @Produces(MediaType.APPLICATION_XML)\n public class UserService {\n @PersistenceContext\n private EntityManager em;\n \n @Path(\"/create\")\n @PUT\n public User create(@QueryParam(\"name\") String name,\n @QueryParam(\"pwd\") String pwd,\n @QueryParam(\"mail\") String mail) {\n User user = new User();\n user.setFullname(name);\n user.setPassword(pwd);\n user.setEmail(mail);\n em.persist(user);\n return user;\n }\n \n @Path(\"/list\")\n @GET\n public List<User> list(@QueryParam(\"first\") @DefaultValue(\"0\") int first,\n @QueryParam(\"max\") @DefaultValue(\"20\") int max) {\n List<User> users = new ArrayList<User>();\n List<User> found = em.createNamedQuery(\"user.list\", User.class).setFirstResult(first).setMaxResults(max).getResultList();\n for (User u : found) {\n users.add(u.copy());\n }\n return users;\n }\n \n @Path(\"/show/{id}\")\n @GET\n public User find(@PathParam(\"id\") long id) {\n User user = em.find(User.class, id);\n if (user == null) {\n return null;\n }\n return user.copy();\n }\n \n @Path(\"/delete/{id}\")\n @DELETE\n public void delete(@PathParam(\"id\") long id) {\n User user = em.find(User.class, id);\n if (user != null) {\n em.remove(user);\n }\n }\n \n @Path(\"/update/{id}\")\n @POST\n public Response update(@PathParam(\"id\") long id,\n @QueryParam(\"name\") String name,\n @QueryParam(\"pwd\") String pwd,\n @QueryParam(\"mail\") String mail) {\n User user = em.find(User.class, id);\n if (user == null) {\n throw new IllegalArgumentException(\"user id \" + id + \" not found\");\n }\n \n user.setFullname(name);\n user.setPassword(pwd);\n user.setEmail(mail);\n em.merge(user);\n \n return Response.ok(user.copy()).build();\n }\n }\n\n## persistence.xml\n\n <persistence version=\"2.0\"\n xmlns=\"http://java.sun.com/xml/ns/persistence\"\n xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:schemaLocation=\"http://java.sun.com/xml/ns/persistence\n http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd\">\n <persistence-unit name=\"user\">\n <jta-data-source>My DataSource</jta-data-source>\n <non-jta-data-source>My Unmanaged DataSource</non-jta-data-source>\n <class>org.superbiz.rest.User</class>\n <properties>\n <property name=\"openjpa.jdbc.SynchronizeMappings\" value=\"buildSchema(ForeignKeys=true)\"/>\n </properties>\n </persistence-unit>\n </persistence>\n\n## UserServiceTest\n\n package org.superbiz.rest;\n \n import org.apache.cxf.jaxrs.client.WebClient;\n import org.apache.openejb.OpenEjbContainer;\n import org.junit.AfterClass;\n import org.junit.BeforeClass;\n import org.junit.Test;\n \n import javax.ejb.embeddable.EJBContainer;\n import javax.naming.Context;\n import javax.naming.NamingException;\n import javax.ws.rs.core.Response;\n import javax.xml.bind.JAXBContext;\n import javax.xml.bind.Unmarshaller;\n import java.io.InputStream;\n import java.util.ArrayList;\n import java.util.List;\n import java.util.Properties;\n \n import static junit.framework.Assert.assertEquals;\n import static junit.framework.Assert.assertNull;\n import static junit.framework.Assert.fail;\n \n public class UserServiceTest {\n private static Context context;\n private static UserService service;\n private static List<User> users = new ArrayList<User>();\n \n @BeforeClass\n public static void start() throws NamingException {\n Properties properties = new Properties();\n properties.setProperty(OpenEjbContainer.OPENEJB_EMBEDDED_REMOTABLE, \"true\");\n context = EJBContainer.createEJBContainer(properties).getContext();\n \n // create some records\n service = (UserService) context.lookup(\"java:global/rest-on-ejb/UserService\");\n users.add(service.create(\"foo\", \"foopwd\", \"foo@foo.com\"));\n users.add(service.create(\"bar\", \"barpwd\", \"bar@bar.com\"));\n }\n \n @AfterClass\n public static void close() throws NamingException {\n if (context != null) {\n context.close();\n }\n }\n \n @Test\n public void create() {\n int expected = service.list(0, 100).size() + 1;\n Response response = WebClient.create(\"http://localhost:4204\")\n .path(\"/user/create\")\n .query(\"name\", \"dummy\")\n .query(\"pwd\", \"unbreakable\")\n .query(\"mail\", \"foo@bar.fr\")\n .put(null);\n List<User> list = service.list(0, 100);\n for (User u : list) {\n if (!users.contains(u)) {\n service.delete(u.getId());\n return;\n }\n }\n fail(\"user was not added\");\n }\n \n @Test\n public void delete() throws Exception {\n User user = service.create(\"todelete\", \"dontforget\", \"delete@me.com\");\n \n WebClient.create(\"http://localhost:4204\").path(\"/user/delete/\" + user.getId()).delete();\n \n user = service.find(user.getId());\n assertNull(user);\n }\n \n @Test\n public void show() {\n User user = WebClient.create(\"http://localhost:4204\")\n .path(\"/user/show/\" + users.iterator().next().getId())\n .get(User.class);\n assertEquals(\"foo\", user.getFullname());\n assertEquals(\"foopwd\", user.getPassword());\n assertEquals(\"foo@foo.com\", user.getEmail());\n }\n \n @Test\n public void list() throws Exception {\n String users = WebClient.create(\"http://localhost:4204\")\n .path(\"/user/list\")\n .get(String.class);\n assertEquals(\n \"<users>\" +\n \"<user>\" +\n \"<email>foo@foo.com</email>\" +\n \"<fullname>foo</fullname>\" +\n \"<id>1</id>\" +\n \"<password>foopwd</password>\" +\n \"</user>\" +\n \"<user>\" +\n \"<email>bar@bar.com</email>\" +\n \"<fullname>bar</fullname>\" +\n \"<id>2</id>\" +\n \"<password>barpwd</password>\" +\n \"</user>\" +\n \"</users>\", users);\n }\n \n @Test\n public void update() throws Exception {\n User created = service.create(\"name\", \"pwd\", \"mail\");\n Response response = WebClient.create(\"http://localhost:4204\")\n .path(\"/user/update/\" + created.getId())\n .query(\"name\", \"corrected\")\n .query(\"pwd\", \"userpwd\")\n .query(\"mail\", \"it@is.ok\")\n .post(null);\n \n JAXBContext ctx = JAXBContext.newInstance(User.class);\n Unmarshaller unmarshaller = ctx.createUnmarshaller();\n User modified = (User) unmarshaller.unmarshal(InputStream.class.cast(response.getEntity()));\n \n assertEquals(\"corrected\", modified.getFullname());\n assertEquals(\"userpwd\", modified.getPassword());\n assertEquals(\"it@is.ok\", modified.getEmail());\n }\n }\n\n# Running\n\n \n -------------------------------------------------------\n T E S T S\n -------------------------------------------------------\n Running org.superbiz.rest.UserServiceTest\n Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06\n http://tomee.apache.org/\n INFO - openejb.home = /Users/dblevins/examples/rest-on-ejb\n INFO - openejb.base = /Users/dblevins/examples/rest-on-ejb\n INFO - Using 'javax.ejb.embeddable.EJBContainer=true'\n INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)\n INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)\n INFO - Found EjbModule in classpath: /Users/dblevins/examples/rest-on-ejb/target/classes\n INFO - Beginning load: /Users/dblevins/examples/rest-on-ejb/target/classes\n INFO - Configuring enterprise application: /Users/dblevins/examples/rest-on-ejb\n INFO - Configuring Service(id=Default Singleton Container, type=Container, provider-id=Default Singleton Container)\n INFO - Auto-creating a container for bean UserService: Container(type=SINGLETON, id=Default Singleton Container)\n INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)\n INFO - Auto-creating a container for bean org.superbiz.rest.UserServiceTest: Container(type=MANAGED, id=Default Managed Container)\n INFO - Configuring PersistenceUnit(name=user)\n INFO - Configuring Service(id=Default JDBC Database, type=Resource, provider-id=Default JDBC Database)\n INFO - Auto-creating a Resource with id 'Default JDBC Database' of type 'DataSource for 'user'.\n INFO - Configuring Service(id=Default Unmanaged JDBC Database, type=Resource, provider-id=Default Unmanaged JDBC Database)\n INFO - Auto-creating a Resource with id 'Default Unmanaged JDBC Database' of type 'DataSource for 'user'.\n INFO - Adjusting PersistenceUnit user <jta-data-source> to Resource ID 'Default JDBC Database' from 'My DataSource'\n INFO - Adjusting PersistenceUnit user <non-jta-data-source> to Resource ID 'Default Unmanaged JDBC Database' from 'My Unmanaged DataSource'\n INFO - Enterprise application \"/Users/dblevins/examples/rest-on-ejb\" loaded.\n INFO - Assembling app: /Users/dblevins/examples/rest-on-ejb\n INFO - PersistenceUnit(name=user, provider=org.apache.openjpa.persistence.PersistenceProviderImpl) - provider time 407ms\n INFO - Jndi(name=\"java:global/rest-on-ejb/UserService!org.superbiz.rest.UserService\")\n INFO - Jndi(name=\"java:global/rest-on-ejb/UserService\")\n INFO - Jndi(name=\"java:global/EjbModule1789767313/org.superbiz.rest.UserServiceTest!org.superbiz.rest.UserServiceTest\")\n INFO - Jndi(name=\"java:global/EjbModule1789767313/org.superbiz.rest.UserServiceTest\")\n INFO - Created Ejb(deployment-id=org.superbiz.rest.UserServiceTest, ejb-name=org.superbiz.rest.UserServiceTest, container=Default Managed Container)\n INFO - Created Ejb(deployment-id=UserService, ejb-name=UserService, container=Default Singleton Container)\n INFO - Started Ejb(deployment-id=org.superbiz.rest.UserServiceTest, ejb-name=org.superbiz.rest.UserServiceTest, container=Default Managed Container)\n INFO - Started Ejb(deployment-id=UserService, ejb-name=UserService, container=Default Singleton Container)\n INFO - Deployed Application(path=/Users/dblevins/examples/rest-on-ejb)\n INFO - Initializing network services\n INFO - Creating ServerService(id=httpejbd)\n INFO - Creating ServerService(id=admin)\n INFO - Creating ServerService(id=ejbd)\n INFO - Creating ServerService(id=ejbds)\n INFO - Creating ServerService(id=cxf-rs)\n INFO - Initializing network services\n ** Starting Services **\n NAME IP PORT \n httpejbd 127.0.0.1 4204 \n admin thread 127.0.0.1 4200 \n ejbd 127.0.0.1 4201 \n ejbd 127.0.0.1 4203 \n -------\n Ready!\n WARN - Query \"select u from User u\" is removed from cache excluded permanently. Query \"select u from User u\" is not cached because it uses pagination..\n Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 3.102 sec\n \n Results :\n \n Tests run: 5, Failures: 0, Errors: 0, Skipped: 0\n \n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/rest-on-ejb" | |
}, | |
{ | |
"name":"jsf-managedBean-and-ejb", | |
"readme":"Title: JSF Application that uses managed-bean and ejb\n\nThis is a simple web-app showing how to use dependency injection in JSF managed beans using TomEE.\n\nIt contains a Local Stateless session bean `CalculatorImpl` which adds two numbers and returns the result.\nThe application also contains a JSF managed bean `CalculatorBean`, which uses the EJB to add two numbers\nand display the results to the user. The EJB is injected in the managed bean using `@EJB` annotation.\n\n\n## A little note on the setup:\n\nYou could run this in the latest Apache TomEE [snapshot](https://repository.apache.org/content/repositories/snapshots/org/apache/openejb/apache-tomee/)\n\nAs for the libraries, myfaces-api and myfaces-impl are provided in tomee/lib and hence they should not be a part of the\nwar. In maven terms, they would be with scope 'provided'\n\nAlso note that we use servlet 2.5 declaration in web.xml\n \n <web-app xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xmlns=\"http://java.sun.com/xml/ns/javaee\"\n xmlns:web=\"http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd\"\n xsi:schemaLocation=\"http://java.sun.com/xml/ns/javaee\n http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd\"\n version=\"2.5\">\n\nAnd we use 2.0 version of faces-config\n\n <faces-config xmlns=\"http://java.sun.com/xml/ns/javaee\"\n xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:schemaLocation=\"http://java.sun.com/xml/ns/javaee\n http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd\"\n version=\"2.0\">\n\n\nThe complete source code is provided below but let's break down to look at some smaller snippets and see how it works.\n\nWe'll first declare the `FacesServlet` in the `web.xml`\n\n <servlet>\n <servlet-name>Faces Servlet</servlet-name>\n <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>\n <load-on-startup>1</load-on-startup>\n </servlet>\n\n`FacesServlet` acts as the master controller.\n\nWe'll then create the `calculator.xhtml` file.\n\n <h:outputText value='Enter first number'/>\n <h:inputText value='#{calculatorBean.x}'/>\n <h:outputText value='Enter second number'/>\n <h:inputText value='#{calculatorBean.y}'/>\n <h:commandButton action=\"#{calculatorBean.add}\" value=\"Add\"/>\n\n\nNotice how we've use the bean here.\nBy default it is the simple class name of the managed bean.\n\nWhen a request comes in, the bean is instantiated and placed in the appropriate scope.\nBy default, the bean is placed in the request scope.\n\n <h:inputText value='#{calculatorBean.x}'/>\n\nHere, getX() method of calculatorBean is invoked and the resulting value is displayed.\nx being a Double, we rightly should see 0.0 displayed.\n\nWhen you change the value and submit the form, these entered values are bound using the setters\nin the bean and then the commandButton-action method is invoked.\n\nIn this case, `CalculatorBean#add()` is invoked.\n\n`Calculator#add()` delegates the work to the ejb, gets the result, stores it\nand then instructs what view is to be rendered.\n\nYou're right. The return value \"success\" is checked up in faces-config navigation-rules\nand the respective page is rendered.\n\nIn our case, `result.xhtml` page is rendered.\n\nThe request scoped `calculatorBean` is available here, and we use EL to display the values.\n\n## Source\n\n## Calculator\n\n package org.superbiz.jsf;\n \n import javax.ejb.Local;\n \n @Local\n public interface Calculator {\n public double add(double x, double y);\n }\n\n\n## CalculatorBean\n\n package org.superbiz.jsf;\n \n import javax.ejb.EJB;\n import javax.faces.bean.ManagedBean;\n\n @ManagedBean\n public class CalculatorBean {\n @EJB\n Calculator calculator;\n private double x;\n private double y;\n private double result;\n \n public double getX() {\n return x;\n }\n \n public void setX(double x) {\n this.x = x;\n }\n \n public double getY() {\n return y;\n }\n \n public void setY(double y) {\n this.y = y;\n }\n \n public double getResult() {\n return result;\n }\n \n public void setResult(double result) {\n this.result = result;\n }\n \n public String add() {\n result = calculator.add(x, y);\n return \"success\";\n }\n }\n\n## CalculatorImpl\n\n package org.superbiz.jsf;\n \n import javax.ejb.Stateless;\n \n @Stateless\n public class CalculatorImpl implements Calculator {\n \n public double add(double x, double y) {\n return x + y;\n }\n }\n\n\n# web.xml\n\n <?xml version=\"1.0\"?>\n\n <web-app xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xmlns=\"http://java.sun.com/xml/ns/javaee\"\n xmlns:web=\"http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd\"\n xsi:schemaLocation=\"http://java.sun.com/xml/ns/javaee\n http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd\"\n version=\"2.5\">\n\n <description>MyProject web.xml</description>\n\n <!-- Faces Servlet -->\n <servlet>\n <servlet-name>Faces Servlet</servlet-name>\n <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>\n <load-on-startup>1</load-on-startup>\n </servlet>\n\n <!-- Faces Servlet Mapping -->\n <servlet-mapping>\n <servlet-name>Faces Servlet</servlet-name>\n <url-pattern>*.jsf</url-pattern>\n </servlet-mapping>\n\n <!-- Welcome files -->\n <welcome-file-list>\n <welcome-file>index.jsp</welcome-file>\n <welcome-file>index.html</welcome-file>\n </welcome-file-list>\n </web-app>\n\n \n##Calculator.xhtml\n\n <?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\"\n xmlns:f=\"http://java.sun.com/jsf/core\"\n xmlns:h=\"http://java.sun.com/jsf/html\">\n\n\n <h:body bgcolor=\"white\">\n <f:view>\n <h:form>\n <h:panelGrid columns=\"2\">\n <h:outputText value='Enter first number'/>\n <h:inputText value='#{calculatorBean.x}'/>\n <h:outputText value='Enter second number'/>\n <h:inputText value='#{calculatorBean.y}'/>\n <h:commandButton action=\"#{calculatorBean.add}\" value=\"Add\"/>\n </h:panelGrid>\n </h:form>\n </f:view>\n </h:body>\n </html>\n\n \n##Result.xhtml\n\n <?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\"\n xmlns:f=\"http://java.sun.com/jsf/core\"\n xmlns:h=\"http://java.sun.com/jsf/html\">\n\n <h:body>\n <f:view>\n <h:form id=\"mainForm\">\n <h2><h:outputText value=\"Result of adding #{calculatorBean.x} and #{calculatorBean.y} is #{calculatorBean.result }\"/></h2>\n <h:commandLink action=\"back\">\n <h:outputText value=\"Home\"/>\n </h:commandLink>\n </h:form>\n </f:view>\n </h:body>\n </html>\n \n#faces-config.xml\n\n <?xml version=\"1.0\"?>\n <faces-config xmlns=\"http://java.sun.com/xml/ns/javaee\"\n xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:schemaLocation=\"http://java.sun.com/xml/ns/javaee\n http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd\"\n version=\"2.0\">\n\n <navigation-rule>\n <from-view-id>/calculator.xhtml</from-view-id>\n <navigation-case>\n <from-outcome>success</from-outcome>\n <to-view-id>/result.xhtml</to-view-id>\n </navigation-case>\n </navigation-rule>\n\n <navigation-rule>\n <from-view-id>/result.xhtml</from-view-id>\n <navigation-case>\n <from-outcome>back</from-outcome>\n <to-view-id>/calculator.xhtml</to-view-id>\n </navigation-case>\n </navigation-rule>\n </faces-config>\n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/jsf-managedBean-and-ejb" | |
}, | |
{ | |
"name":"ejb-examples", | |
"readme":"Title: EJB Examples\n\n*Help us document this example! Click the blue pencil icon in the upper right to edit this page.*\n\n## AnnotatedEJB\n\n package org.superbiz.servlet;\n \n import javax.annotation.Resource;\n import javax.ejb.LocalBean;\n import javax.ejb.Stateless;\n import javax.sql.DataSource;\n \n @Stateless\n @LocalBean\n public class AnnotatedEJB implements AnnotatedEJBLocal, AnnotatedEJBRemote {\n @Resource\n private DataSource ds;\n \n private String name = \"foo\";\n \n public String getName() {\n return name;\n }\n \n public void setName(String name) {\n this.name = name;\n }\n \n public DataSource getDs() {\n return ds;\n }\n \n public void setDs(DataSource ds) {\n this.ds = ds;\n }\n \n public String toString() {\n return \"AnnotatedEJB[name=\" + name + \"]\";\n }\n }\n\n## AnnotatedEJBLocal\n\n package org.superbiz.servlet;\n \n import javax.ejb.Local;\n import javax.sql.DataSource;\n \n @Local\n public interface AnnotatedEJBLocal {\n String getName();\n \n void setName(String name);\n \n DataSource getDs();\n \n void setDs(DataSource ds);\n }\n\n## AnnotatedEJBRemote\n\n package org.superbiz.servlet;\n \n import javax.ejb.Remote;\n \n @Remote\n public interface AnnotatedEJBRemote {\n String getName();\n \n void setName(String name);\n }\n\n## AnnotatedServlet\n\n package org.superbiz.servlet;\n \n import javax.annotation.Resource;\n import javax.ejb.EJB;\n import javax.naming.InitialContext;\n import javax.naming.NamingException;\n import javax.servlet.ServletException;\n import javax.servlet.ServletOutputStream;\n import javax.servlet.http.HttpServlet;\n import javax.servlet.http.HttpServletRequest;\n import javax.servlet.http.HttpServletResponse;\n import javax.sql.DataSource;\n import java.io.IOException;\n \n public class AnnotatedServlet extends HttpServlet {\n @EJB\n private AnnotatedEJBLocal localEJB;\n \n @EJB\n private AnnotatedEJBRemote remoteEJB;\n \n @EJB\n private AnnotatedEJB localbeanEJB;\n \n @Resource\n private DataSource ds;\n \n \n protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {\n response.setContentType(\"text/plain\");\n ServletOutputStream out = response.getOutputStream();\n \n out.println(\"LocalBean EJB\");\n out.println(\"@EJB=\" + localbeanEJB);\n if (localbeanEJB != null) {\n out.println(\"@EJB.getName()=\" + localbeanEJB.getName());\n out.println(\"@EJB.getDs()=\" + localbeanEJB.getDs());\n }\n out.println(\"JNDI=\" + lookupField(\"localbeanEJB\"));\n out.println();\n \n out.println(\"Local EJB\");\n out.println(\"@EJB=\" + localEJB);\n if (localEJB != null) {\n out.println(\"@EJB.getName()=\" + localEJB.getName());\n out.println(\"@EJB.getDs()=\" + localEJB.getDs());\n }\n out.println(\"JNDI=\" + lookupField(\"localEJB\"));\n out.println();\n \n out.println(\"Remote EJB\");\n out.println(\"@EJB=\" + remoteEJB);\n if (localEJB != null) {\n out.println(\"@EJB.getName()=\" + remoteEJB.getName());\n }\n out.println(\"JNDI=\" + lookupField(\"remoteEJB\"));\n out.println();\n \n \n out.println(\"DataSource\");\n out.println(\"@Resource=\" + ds);\n out.println(\"JNDI=\" + lookupField(\"ds\"));\n }\n \n private Object lookupField(String name) {\n try {\n return new InitialContext().lookup(\"java:comp/env/\" + getClass().getName() + \"/\" + name);\n } catch (NamingException e) {\n return null;\n }\n }\n }\n\n## ClientHandler\n\n package org.superbiz.servlet;\n \n import javax.xml.ws.handler.Handler;\n import javax.xml.ws.handler.MessageContext;\n \n public class ClientHandler implements Handler {\n public boolean handleMessage(MessageContext messageContext) {\n WebserviceServlet.write(\" ClientHandler handleMessage\");\n return true;\n }\n \n public void close(MessageContext messageContext) {\n WebserviceServlet.write(\" ClientHandler close\");\n }\n \n public boolean handleFault(MessageContext messageContext) {\n WebserviceServlet.write(\" ClientHandler handleFault\");\n return true;\n }\n }\n\n## HelloEjb\n\n package org.superbiz.servlet;\n \n import javax.jws.WebService;\n \n @WebService(targetNamespace = \"http://examples.org/wsdl\")\n public interface HelloEjb {\n String hello(String name);\n }\n\n## HelloEjbService\n\n package org.superbiz.servlet;\n \n import javax.ejb.Stateless;\n import javax.jws.HandlerChain;\n import javax.jws.WebService;\n \n @WebService(\n portName = \"HelloEjbPort\",\n serviceName = \"HelloEjbService\",\n targetNamespace = \"http://examples.org/wsdl\",\n endpointInterface = \"org.superbiz.servlet.HelloEjb\"\n )\n @HandlerChain(file = \"server-handlers.xml\")\n @Stateless\n public class HelloEjbService implements HelloEjb {\n public String hello(String name) {\n WebserviceServlet.write(\" HelloEjbService hello(\" + name + \")\");\n if (name == null) name = \"World\";\n return \"Hello \" + name + \" from EJB Webservice!\";\n }\n }\n\n## HelloPojo\n\n package org.superbiz.servlet;\n \n import javax.jws.WebService;\n \n @WebService(targetNamespace = \"http://examples.org/wsdl\")\n public interface HelloPojo {\n String hello(String name);\n }\n\n## HelloPojoService\n\n package org.superbiz.servlet;\n \n import javax.jws.HandlerChain;\n import javax.jws.WebService;\n \n @WebService(\n portName = \"HelloPojoPort\",\n serviceName = \"HelloPojoService\",\n targetNamespace = \"http://examples.org/wsdl\",\n endpointInterface = \"org.superbiz.servlet.HelloPojo\"\n )\n @HandlerChain(file = \"server-handlers.xml\")\n public class HelloPojoService implements HelloPojo {\n public String hello(String name) {\n WebserviceServlet.write(\" HelloPojoService hello(\" + name + \")\");\n if (name == null) name = \"World\";\n return \"Hello \" + name + \" from Pojo Webservice!\";\n }\n }\n\n## JndiServlet\n\n package org.superbiz.servlet;\n \n import javax.naming.Context;\n import javax.naming.InitialContext;\n import javax.naming.NameClassPair;\n import javax.naming.NamingException;\n import javax.servlet.ServletException;\n import javax.servlet.ServletOutputStream;\n import javax.servlet.http.HttpServlet;\n import javax.servlet.http.HttpServletRequest;\n import javax.servlet.http.HttpServletResponse;\n import java.io.IOException;\n import java.util.Collections;\n import java.util.Map;\n import java.util.TreeMap;\n \n public class JndiServlet extends HttpServlet {\n protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {\n response.setContentType(\"text/plain\");\n ServletOutputStream out = response.getOutputStream();\n \n Map<String, Object> bindings = new TreeMap<String, Object>(String.CASE_INSENSITIVE_ORDER);\n try {\n Context context = (Context) new InitialContext().lookup(\"java:comp/\");\n addBindings(\"\", bindings, context);\n } catch (NamingException e) {\n throw new ServletException(e);\n }\n \n out.println(\"JNDI Context:\");\n for (Map.Entry<String, Object> entry : bindings.entrySet()) {\n if (entry.getValue() != null) {\n out.println(\" \" + entry.getKey() + \"=\" + entry.getValue());\n } else {\n out.println(\" \" + entry.getKey());\n }\n }\n }\n \n private void addBindings(String path, Map<String, Object> bindings, Context context) {\n try {\n for (NameClassPair pair : Collections.list(context.list(\"\"))) {\n String name = pair.getName();\n String className = pair.getClassName();\n if (\"org.apache.naming.resources.FileDirContext$FileResource\".equals(className)) {\n bindings.put(path + name, \"<file>\");\n } else {\n try {\n Object value = context.lookup(name);\n if (value instanceof Context) {\n Context nextedContext = (Context) value;\n bindings.put(path + name, \"\");\n addBindings(path + name + \"/\", bindings, nextedContext);\n } else {\n bindings.put(path + name, value);\n }\n } catch (NamingException e) {\n // lookup failed\n bindings.put(path + name, \"ERROR: \" + e.getMessage());\n }\n }\n }\n } catch (NamingException e) {\n bindings.put(path, \"ERROR: list bindings threw an exception: \" + e.getMessage());\n }\n }\n }\n\n## JpaBean\n\n package org.superbiz.servlet;\n \n import javax.persistence.Column;\n import javax.persistence.Entity;\n import javax.persistence.GeneratedValue;\n import javax.persistence.GenerationType;\n import javax.persistence.Id;\n \n @Entity\n public class JpaBean {\n @Id\n @GeneratedValue(strategy = GenerationType.IDENTITY)\n @Column(name = \"id\")\n private int id;\n \n @Column(name = \"name\")\n private String name;\n \n public int getId() {\n return id;\n }\n \n public String getName() {\n return name;\n }\n \n public void setName(String name) {\n this.name = name;\n }\n \n \n public String toString() {\n return \"[JpaBean id=\" + id + \", name=\" + name + \"]\";\n }\n }\n\n## JpaServlet\n\n package org.superbiz.servlet;\n \n import javax.persistence.EntityManager;\n import javax.persistence.EntityManagerFactory;\n import javax.persistence.EntityTransaction;\n import javax.persistence.PersistenceUnit;\n import javax.persistence.Query;\n import javax.servlet.ServletException;\n import javax.servlet.ServletOutputStream;\n import javax.servlet.http.HttpServlet;\n import javax.servlet.http.HttpServletRequest;\n import javax.servlet.http.HttpServletResponse;\n import java.io.IOException;\n \n public class JpaServlet extends HttpServlet {\n @PersistenceUnit(name = \"jpa-example\")\n private EntityManagerFactory emf;\n \n \n protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {\n response.setContentType(\"text/plain\");\n ServletOutputStream out = response.getOutputStream();\n \n out.println(\"@PersistenceUnit=\" + emf);\n \n EntityManager em = emf.createEntityManager();\n EntityTransaction transaction = em.getTransaction();\n transaction.begin();\n \n JpaBean jpaBean = new JpaBean();\n jpaBean.setName(\"JpaBean\");\n em.persist(jpaBean);\n \n transaction.commit();\n transaction.begin();\n \n Query query = em.createQuery(\"SELECT j FROM JpaBean j WHERE j.name='JpaBean'\");\n jpaBean = (JpaBean) query.getSingleResult();\n out.println(\"Loaded \" + jpaBean);\n \n em.remove(jpaBean);\n \n transaction.commit();\n transaction.begin();\n \n query = em.createQuery(\"SELECT count(j) FROM JpaBean j WHERE j.name='JpaBean'\");\n int count = ((Number) query.getSingleResult()).intValue();\n if (count == 0) {\n out.println(\"Removed \" + jpaBean);\n } else {\n out.println(\"ERROR: unable to remove\" + jpaBean);\n }\n \n transaction.commit();\n }\n }\n\n## ResourceBean\n\n package org.superbiz.servlet;\n \n public class ResourceBean {\n private String value;\n \n public String getValue() {\n return value;\n }\n \n public void setValue(String value) {\n this.value = value;\n }\n \n public String toString() {\n return \"[ResourceBean \" + value + \"]\";\n }\n }\n\n## RunAsServlet\n\n package org.superbiz.servlet;\n \n import javax.ejb.EJB;\n import javax.ejb.EJBAccessException;\n import javax.servlet.ServletException;\n import javax.servlet.ServletOutputStream;\n import javax.servlet.http.HttpServlet;\n import javax.servlet.http.HttpServletRequest;\n import javax.servlet.http.HttpServletResponse;\n import java.io.IOException;\n import java.security.Principal;\n \n public class RunAsServlet extends HttpServlet {\n @EJB\n private SecureEJBLocal secureEJBLocal;\n \n protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {\n response.setContentType(\"text/plain\");\n ServletOutputStream out = response.getOutputStream();\n \n out.println(\"Servlet\");\n Principal principal = request.getUserPrincipal();\n if (principal != null) {\n out.println(\"Servlet.getUserPrincipal()=\" + principal + \" [\" + principal.getName() + \"]\");\n } else {\n out.println(\"Servlet.getUserPrincipal()=<null>\");\n }\n out.println(\"Servlet.isCallerInRole(\\\"user\\\")=\" + request.isUserInRole(\"user\"));\n out.println(\"Servlet.isCallerInRole(\\\"manager\\\")=\" + request.isUserInRole(\"manager\"));\n out.println(\"Servlet.isCallerInRole(\\\"fake\\\")=\" + request.isUserInRole(\"fake\"));\n out.println();\n \n out.println(\"@EJB=\" + secureEJBLocal);\n if (secureEJBLocal != null) {\n principal = secureEJBLocal.getCallerPrincipal();\n if (principal != null) {\n out.println(\"@EJB.getCallerPrincipal()=\" + principal + \" [\" + principal.getName() + \"]\");\n } else {\n out.println(\"@EJB.getCallerPrincipal()=<null>\");\n }\n out.println(\"@EJB.isCallerInRole(\\\"user\\\")=\" + secureEJBLocal.isCallerInRole(\"user\"));\n out.println(\"@EJB.isCallerInRole(\\\"manager\\\")=\" + secureEJBLocal.isCallerInRole(\"manager\"));\n out.println(\"@EJB.isCallerInRole(\\\"fake\\\")=\" + secureEJBLocal.isCallerInRole(\"fake\"));\n \n try {\n secureEJBLocal.allowUserMethod();\n out.println(\"@EJB.allowUserMethod() ALLOWED\");\n } catch (EJBAccessException e) {\n out.println(\"@EJB.allowUserMethod() DENIED\");\n }\n \n try {\n secureEJBLocal.allowManagerMethod();\n out.println(\"@EJB.allowManagerMethod() ALLOWED\");\n } catch (EJBAccessException e) {\n out.println(\"@EJB.allowManagerMethod() DENIED\");\n }\n \n try {\n secureEJBLocal.allowFakeMethod();\n out.println(\"@EJB.allowFakeMethod() ALLOWED\");\n } catch (EJBAccessException e) {\n out.println(\"@EJB.allowFakeMethod() DENIED\");\n }\n \n try {\n secureEJBLocal.denyAllMethod();\n out.println(\"@EJB.denyAllMethod() ALLOWED\");\n } catch (EJBAccessException e) {\n out.println(\"@EJB.denyAllMethod() DENIED\");\n }\n }\n out.println();\n }\n }\n\n## SecureEJB\n\n package org.superbiz.servlet;\n \n import javax.annotation.Resource;\n import javax.annotation.security.DeclareRoles;\n import javax.annotation.security.DenyAll;\n import javax.annotation.security.RolesAllowed;\n import javax.ejb.SessionContext;\n import javax.ejb.Stateless;\n import java.security.Principal;\n \n @Stateless\n @DeclareRoles({\"user\", \"manager\", \"fake\"})\n public class SecureEJB implements SecureEJBLocal {\n @Resource\n private SessionContext context;\n \n public Principal getCallerPrincipal() {\n return context.getCallerPrincipal();\n }\n \n public boolean isCallerInRole(String role) {\n return context.isCallerInRole(role);\n }\n \n @RolesAllowed(\"user\")\n public void allowUserMethod() {\n }\n \n @RolesAllowed(\"manager\")\n public void allowManagerMethod() {\n }\n \n @RolesAllowed(\"fake\")\n public void allowFakeMethod() {\n }\n \n @DenyAll\n public void denyAllMethod() {\n }\n \n public String toString() {\n return \"SecureEJB[userName=\" + getCallerPrincipal() + \"]\";\n }\n }\n\n## SecureEJBLocal\n\n package org.superbiz.servlet;\n \n import javax.ejb.Local;\n import java.security.Principal;\n \n @Local\n public interface SecureEJBLocal {\n Principal getCallerPrincipal();\n \n boolean isCallerInRole(String role);\n \n void allowUserMethod();\n \n void allowManagerMethod();\n \n void allowFakeMethod();\n \n void denyAllMethod();\n }\n\n## SecureServlet\n\n package org.superbiz.servlet;\n \n import javax.ejb.EJB;\n import javax.ejb.EJBAccessException;\n import javax.servlet.ServletException;\n import javax.servlet.ServletOutputStream;\n import javax.servlet.http.HttpServlet;\n import javax.servlet.http.HttpServletRequest;\n import javax.servlet.http.HttpServletResponse;\n import java.io.IOException;\n import java.security.Principal;\n \n public class SecureServlet extends HttpServlet {\n @EJB\n private SecureEJBLocal secureEJBLocal;\n \n protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {\n response.setContentType(\"text/plain\");\n ServletOutputStream out = response.getOutputStream();\n \n out.println(\"Servlet\");\n Principal principal = request.getUserPrincipal();\n if (principal != null) {\n out.println(\"Servlet.getUserPrincipal()=\" + principal + \" [\" + principal.getName() + \"]\");\n } else {\n out.println(\"Servlet.getUserPrincipal()=<null>\");\n }\n out.println(\"Servlet.isCallerInRole(\\\"user\\\")=\" + request.isUserInRole(\"user\"));\n out.println(\"Servlet.isCallerInRole(\\\"manager\\\")=\" + request.isUserInRole(\"manager\"));\n out.println(\"Servlet.isCallerInRole(\\\"fake\\\")=\" + request.isUserInRole(\"fake\"));\n out.println();\n \n out.println(\"@EJB=\" + secureEJBLocal);\n if (secureEJBLocal != null) {\n principal = secureEJBLocal.getCallerPrincipal();\n if (principal != null) {\n out.println(\"@EJB.getCallerPrincipal()=\" + principal + \" [\" + principal.getName() + \"]\");\n } else {\n out.println(\"@EJB.getCallerPrincipal()=<null>\");\n }\n out.println(\"@EJB.isCallerInRole(\\\"user\\\")=\" + secureEJBLocal.isCallerInRole(\"user\"));\n out.println(\"@EJB.isCallerInRole(\\\"manager\\\")=\" + secureEJBLocal.isCallerInRole(\"manager\"));\n out.println(\"@EJB.isCallerInRole(\\\"fake\\\")=\" + secureEJBLocal.isCallerInRole(\"fake\"));\n \n try {\n secureEJBLocal.allowUserMethod();\n out.println(\"@EJB.allowUserMethod() ALLOWED\");\n } catch (EJBAccessException e) {\n out.println(\"@EJB.allowUserMethod() DENIED\");\n }\n \n try {\n secureEJBLocal.allowManagerMethod();\n out.println(\"@EJB.allowManagerMethod() ALLOWED\");\n } catch (EJBAccessException e) {\n out.println(\"@EJB.allowManagerMethod() DENIED\");\n }\n \n try {\n secureEJBLocal.allowFakeMethod();\n out.println(\"@EJB.allowFakeMethod() ALLOWED\");\n } catch (EJBAccessException e) {\n out.println(\"@EJB.allowFakeMethod() DENIED\");\n }\n \n try {\n secureEJBLocal.denyAllMethod();\n out.println(\"@EJB.denyAllMethod() ALLOWED\");\n } catch (EJBAccessException e) {\n out.println(\"@EJB.denyAllMethod() DENIED\");\n }\n }\n out.println();\n }\n }\n\n## ServerHandler\n\n package org.superbiz.servlet;\n \n import javax.xml.ws.handler.Handler;\n import javax.xml.ws.handler.MessageContext;\n \n public class ServerHandler implements Handler {\n public boolean handleMessage(MessageContext messageContext) {\n WebserviceServlet.write(\" ServerHandler handleMessage\");\n return true;\n }\n \n public void close(MessageContext messageContext) {\n WebserviceServlet.write(\" ServerHandler close\");\n }\n \n public boolean handleFault(MessageContext messageContext) {\n WebserviceServlet.write(\" ServerHandler handleFault\");\n return true;\n }\n }\n\n## WebserviceClient\n\n package org.superbiz.servlet;\n \n import javax.xml.ws.Service;\n import java.io.PrintStream;\n import java.net.URL;\n \n public class WebserviceClient {\n /**\n * Unfortunately, to run this example with CXF you need to have a HUGE class path. This\n * is just what is required to run CXF:\n * <p/>\n * jaxb-api-2.0.jar\n * jaxb-impl-2.0.3.jar\n * <p/>\n * saaj-api-1.3.jar\n * saaj-impl-1.3.jar\n * <p/>\n * <p/>\n * cxf-api-2.0.2-incubator.jar\n * cxf-common-utilities-2.0.2-incubator.jar\n * cxf-rt-bindings-soap-2.0.2-incubator.jar\n * cxf-rt-core-2.0.2-incubator.jar\n * cxf-rt-databinding-jaxb-2.0.2-incubator.jar\n * cxf-rt-frontend-jaxws-2.0.2-incubator.jar\n * cxf-rt-frontend-simple-2.0.2-incubator.jar\n * cxf-rt-transports-http-jetty-2.0.2-incubator.jar\n * cxf-rt-transports-http-2.0.2-incubator.jar\n * cxf-tools-common-2.0.2-incubator.jar\n * <p/>\n * geronimo-activation_1.1_spec-1.0.jar\n * geronimo-annotation_1.0_spec-1.1.jar\n * geronimo-ejb_3.0_spec-1.0.jar\n * geronimo-jpa_3.0_spec-1.1.jar\n * geronimo-servlet_2.5_spec-1.1.jar\n * geronimo-stax-api_1.0_spec-1.0.jar\n * jaxws-api-2.0.jar\n * axis2-jws-api-1.3.jar\n * <p/>\n * wsdl4j-1.6.1.jar\n * xml-resolver-1.2.jar\n * XmlSchema-1.3.1.jar\n */\n public static void main(String[] args) throws Exception {\n PrintStream out = System.out;\n \n Service helloPojoService = Service.create(new URL(\"http://localhost:8080/ejb-examples/hello?wsdl\"), null);\n HelloPojo helloPojo = helloPojoService.getPort(HelloPojo.class);\n out.println();\n out.println(\"Pojo Webservice\");\n out.println(\" helloPojo.hello(\\\"Bob\\\")=\" + helloPojo.hello(\"Bob\"));\n out.println(\" helloPojo.hello(null)=\" + helloPojo.hello(null));\n out.println();\n \n Service helloEjbService = Service.create(new URL(\"http://localhost:8080/HelloEjbService?wsdl\"), null);\n HelloEjb helloEjb = helloEjbService.getPort(HelloEjb.class);\n out.println();\n out.println(\"EJB Webservice\");\n out.println(\" helloEjb.hello(\\\"Bob\\\")=\" + helloEjb.hello(\"Bob\"));\n out.println(\" helloEjb.hello(null)=\" + helloEjb.hello(null));\n out.println();\n }\n }\n\n## WebserviceServlet\n\n package org.superbiz.servlet;\n \n import javax.jws.HandlerChain;\n import javax.servlet.ServletException;\n import javax.servlet.ServletOutputStream;\n import javax.servlet.http.HttpServlet;\n import javax.servlet.http.HttpServletRequest;\n import javax.servlet.http.HttpServletResponse;\n import javax.xml.ws.WebServiceRef;\n import java.io.IOException;\n \n public class WebserviceServlet extends HttpServlet {\n \n @WebServiceRef\n @HandlerChain(file = \"client-handlers.xml\")\n private HelloPojo helloPojo;\n \n @WebServiceRef\n @HandlerChain(file = \"client-handlers.xml\")\n private HelloEjb helloEjb;\n \n protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {\n response.setContentType(\"text/plain\");\n ServletOutputStream out = response.getOutputStream();\n \n OUT = out;\n try {\n out.println(\"Pojo Webservice\");\n out.println(\" helloPojo.hello(\\\"Bob\\\")=\" + helloPojo.hello(\"Bob\"));\n out.println();\n out.println(\" helloPojo.hello(null)=\" + helloPojo.hello(null));\n out.println();\n out.println(\"EJB Webservice\");\n out.println(\" helloEjb.hello(\\\"Bob\\\")=\" + helloEjb.hello(\"Bob\"));\n out.println();\n out.println(\" helloEjb.hello(null)=\" + helloEjb.hello(null));\n out.println();\n } finally {\n OUT = out;\n }\n }\n \n private static ServletOutputStream OUT;\n \n public static void write(String message) {\n try {\n ServletOutputStream out = OUT;\n out.println(message);\n } catch (Exception e) {\n e.printStackTrace();\n }\n }\n }\n\n\n## persistence.xml\n\n <persistence xmlns=\"http://java.sun.com/xml/ns/persistence\" version=\"1.0\">\n <persistence-unit transaction-type=\"RESOURCE_LOCAL\" name=\"jpa-example\">\n <jta-data-source>java:openejb/Connector/Default JDBC Database</jta-data-source>\n <non-jta-data-source>java:openejb/Connector/Default Unmanaged JDBC Database</non-jta-data-source>\n <class>org.superbiz.servlet.JpaBean</class>\n \n <properties>\n <property name=\"openjpa.jdbc.SynchronizeMappings\" value=\"buildSchema(ForeignKeys=true)\"/>\n </properties>\n </persistence-unit>\n </persistence>\n\n## client-handlers.xml\n\n <jws:handler-chains xmlns:jws=\"http://java.sun.com/xml/ns/javaee\">\n <jws:handler-chain>\n <jws:handler>\n <jws:handler-name>ClientHandler</jws:handler-name>\n <jws:handler-class>org.superbiz.servlet.ClientHandler</jws:handler-class>\n </jws:handler>\n </jws:handler-chain>\n </jws:handler-chains>\n \n\n## server-handlers.xml\n\n <jws:handler-chains xmlns:jws=\"http://java.sun.com/xml/ns/javaee\">\n <jws:handler-chain>\n <jws:handler>\n <jws:handler-name>ServerHandler</jws:handler-name>\n <jws:handler-class>org.superbiz.servlet.ServerHandler</jws:handler-class>\n </jws:handler>\n </jws:handler-chain>\n </jws:handler-chains>\n \n\n## context.xml\n\n <Context>\n <!-- This only works if the context is installed under the correct name -->\n <Realm className=\"org.apache.catalina.realm.MemoryRealm\"\n pathname=\"webapps/ejb-examples-1.0-SNAPSHOT/WEB-INF/tomcat-users.xml\"/>\n \n <Environment\n name=\"context.xml/environment\"\n value=\"ContextString\"\n type=\"java.lang.String\"/>\n <Resource\n name=\"context.xml/resource\"\n auth=\"Container\"\n type=\"org.superbiz.servlet.ResourceBean\"\n factory=\"org.apache.naming.factory.BeanFactory\"\n value=\"ContextResource\"/>\n <ResourceLink\n name=\"context.xml/resource-link\"\n global=\"server.xml/environment\"\n type=\"java.lang.String\"/>\n \n <!-- web.xml resources -->\n <Resource\n name=\"web.xml/resource-env-ref\"\n auth=\"Container\"\n type=\"org.superbiz.servlet.ResourceBean\"\n factory=\"org.apache.naming.factory.BeanFactory\"\n value=\"ContextResourceEnvRef\"/>\n <Resource\n name=\"web.xml/resource-ref\"\n auth=\"Container\"\n type=\"org.superbiz.servlet.ResourceBean\"\n factory=\"org.apache.naming.factory.BeanFactory\"\n value=\"ContextResourceRef\"/>\n <ResourceLink\n name=\"web.xml/resource-link\"\n global=\"server.xml/environment\"\n type=\"java.lang.String\"/>\n </Context>\n \n\n## jetty-web.xml\n\n <Configure class=\"org.eclipse.jetty.webapp.WebAppContext\">\n <Get name=\"securityHandler\">\n <Set name=\"loginService\">\n <New class=\"org.eclipse.jetty.security.HashLoginService\">\n <Set name=\"name\">Test Realm</Set>\n <Set name=\"config\"><SystemProperty name=\"jetty.home\" default=\".\"/>/etc/realm.properties\n </Set>\n </New>\n </Set>\n </Get>\n </Configure>\n\n## tomcat-users.xml\n\n <tomcat-users>\n <user name=\"manager\" password=\"manager\" roles=\"manager,user\"/>\n <user name=\"user\" password=\"user\" roles=\"user\"/>\n </tomcat-users>\n \n\n## web.xml\n\n <web-app xmlns=\"http://java.sun.com/xml/ns/javaee\"\n xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:schemaLocation=\"http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd\"\n metadata-complete=\"false\"\n version=\"2.5\">\n \n <display-name>OpenEJB Servlet Examples</display-name>\n \n <servlet>\n <servlet-name>AnnotatedServlet</servlet-name>\n <servlet-class>org.superbiz.servlet.AnnotatedServlet</servlet-class>\n </servlet>\n \n <servlet-mapping>\n <servlet-name>AnnotatedServlet</servlet-name>\n <url-pattern>/annotated/*</url-pattern>\n </servlet-mapping>\n \n <servlet>\n <servlet-name>JpaServlet</servlet-name>\n <servlet-class>org.superbiz.servlet.JpaServlet</servlet-class>\n </servlet>\n \n <servlet-mapping>\n <servlet-name>JpaServlet</servlet-name>\n <url-pattern>/jpa/*</url-pattern>\n </servlet-mapping>\n \n <servlet>\n <servlet-name>JndiServlet</servlet-name>\n <servlet-class>org.superbiz.servlet.JndiServlet</servlet-class>\n </servlet>\n \n <servlet-mapping>\n <servlet-name>JndiServlet</servlet-name>\n <url-pattern>/jndi/*</url-pattern>\n </servlet-mapping>\n \n <servlet>\n <servlet-name>RunAsServlet</servlet-name>\n <servlet-class>org.superbiz.servlet.RunAsServlet</servlet-class>\n <run-as>\n <role-name>fake</role-name>\n </run-as>\n </servlet>\n \n <servlet-mapping>\n <servlet-name>RunAsServlet</servlet-name>\n <url-pattern>/runas/*</url-pattern>\n </servlet-mapping>\n \n <servlet>\n <servlet-name>SecureServlet</servlet-name>\n <servlet-class>org.superbiz.servlet.SecureServlet</servlet-class>\n </servlet>\n \n <servlet-mapping>\n <servlet-name>SecureServlet</servlet-name>\n <url-pattern>/secure/*</url-pattern>\n </servlet-mapping>\n \n <security-constraint>\n <web-resource-collection>\n <web-resource-name>Secure Area</web-resource-name>\n <url-pattern>/secure/*</url-pattern>\n <url-pattern>/runas/*</url-pattern>\n </web-resource-collection>\n <auth-constraint>\n <role-name>user</role-name>\n </auth-constraint>\n </security-constraint>\n \n <servlet>\n <servlet-name>WebserviceServlet</servlet-name>\n <servlet-class>org.superbiz.servlet.WebserviceServlet</servlet-class>\n </servlet>\n \n <servlet-mapping>\n <servlet-name>WebserviceServlet</servlet-name>\n <url-pattern>/webservice/*</url-pattern>\n </servlet-mapping>\n \n \n <servlet>\n <servlet-name>HelloPojoService</servlet-name>\n <servlet-class>org.superbiz.servlet.HelloPojoService</servlet-class>\n </servlet>\n \n <servlet-mapping>\n <servlet-name>HelloPojoService</servlet-name>\n <url-pattern>/hello</url-pattern>\n </servlet-mapping>\n \n <login-config>\n <auth-method>BASIC</auth-method>\n </login-config>\n \n <security-role>\n <role-name>manager</role-name>\n </security-role>\n \n <security-role>\n <role-name>user</role-name>\n </security-role>\n \n <env-entry>\n <env-entry-name>web.xml/env-entry</env-entry-name>\n <env-entry-type>java.lang.String</env-entry-type>\n <env-entry-value>WebValue</env-entry-value>\n </env-entry>\n \n <resource-ref>\n <res-ref-name>web.xml/Data Source</res-ref-name>\n <res-type>javax.sql.DataSource</res-type>\n <res-auth>Container</res-auth>\n </resource-ref>\n \n <resource-env-ref>\n <resource-env-ref-name>web.xml/Queue</resource-env-ref-name>\n <resource-env-ref-type>javax.jms.Queue</resource-env-ref-type>\n </resource-env-ref>\n \n <ejb-ref>\n <ejb-ref-name>web.xml/EjbRemote</ejb-ref-name>\n <ejb-ref-type>Session</ejb-ref-type>\n <remote>org.superbiz.servlet.AnnotatedEJBRemote</remote>\n </ejb-ref>\n \n <ejb-local-ref>\n <ejb-ref-name>web.xml/EjLocal</ejb-ref-name>\n <ejb-ref-type>Session</ejb-ref-type>\n <local>org.superbiz.servlet.AnnotatedEJBLocal</local>\n </ejb-local-ref>\n \n <persistence-unit-ref>\n <persistence-unit-ref-name>web.xml/PersistenceUnit</persistence-unit-ref-name>\n <persistence-unit-name>jpa-example</persistence-unit-name>\n </persistence-unit-ref>\n \n <persistence-context-ref>\n <persistence-context-ref-name>web.xml/PersistenceContext</persistence-context-ref-name>\n <persistence-unit-name>jpa-example</persistence-unit-name>\n <persistence-context-type>Transactional</persistence-context-type>\n </persistence-context-ref>\n </web-app>\n \n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/ejb-examples" | |
}, | |
{ | |
"name":"injection-of-ejbs", | |
"readme":"Title: Injection Of Ejbs\n\nThis example shows how to use the @EJB annotation on a bean class to refer to other beans.\n\nThis functionality is often referred as dependency injection (see\nhttp://www.martinfowler.com/articles/injection.html), and has been recently introduced in\nJava EE 5.\n\nIn this particular example, we will create two session stateless beans\n\n * a DataStore session bean\n * a DataReader session bean\n\nThe DataReader bean uses the DataStore to retrieve some informations, and\nwe will see how we can, inside the DataReader bean, get a reference to the\nDataStore bean using the @EJB annotation, thus avoiding the use of the\nJNDI API.\n\n## DataReader\n\n package org.superbiz.injection;\n \n import javax.ejb.EJB;\n import javax.ejb.Stateless;\n \n /**\n * This is an EJB 3.1 style pojo stateless session bean\n * Every stateless session bean implementation must be annotated\n * using the annotation @Stateless\n * This EJB has 2 business interfaces: DataReaderRemote, a remote business\n * interface, and DataReaderLocal, a local business interface\n * <p/>\n * The instance variables 'dataStoreRemote' is annotated with the @EJB annotation:\n * this means that the application server, at runtime, will inject in this instance\n * variable a reference to the EJB DataStoreRemote\n * <p/>\n * The instance variables 'dataStoreLocal' is annotated with the @EJB annotation:\n * this means that the application server, at runtime, will inject in this instance\n * variable a reference to the EJB DataStoreLocal\n */\n //START SNIPPET: code\n @Stateless\n public class DataReader {\n \n @EJB\n private DataStoreRemote dataStoreRemote;\n @EJB\n private DataStoreLocal dataStoreLocal;\n @EJB\n private DataStore dataStore;\n \n public String readDataFromLocalStore() {\n return \"LOCAL:\" + dataStoreLocal.getData();\n }\n \n public String readDataFromLocalBeanStore() {\n return \"LOCALBEAN:\" + dataStore.getData();\n }\n \n public String readDataFromRemoteStore() {\n return \"REMOTE:\" + dataStoreRemote.getData();\n }\n }\n\n## DataStore\n\n package org.superbiz.injection;\n \n import javax.ejb.LocalBean;\n import javax.ejb.Stateless;\n \n /**\n * This is an EJB 3 style pojo stateless session bean\n * Every stateless session bean implementation must be annotated\n * using the annotation @Stateless\n * This EJB has 2 business interfaces: DataStoreRemote, a remote business\n * interface, and DataStoreLocal, a local business interface\n */\n //START SNIPPET: code\n @Stateless\n @LocalBean\n public class DataStore implements DataStoreLocal, DataStoreRemote {\n \n public String getData() {\n return \"42\";\n }\n }\n\n## DataStoreLocal\n\n package org.superbiz.injection;\n \n import javax.ejb.Local;\n \n /**\n * This is an EJB 3 local business interface\n * A local business interface may be annotated with the @Local\n * annotation, but it's optional. A business interface which is\n * not annotated with @Local or @Remote is assumed to be Local\n */\n //START SNIPPET: code\n @Local\n public interface DataStoreLocal {\n \n public String getData();\n }\n\n## DataStoreRemote\n\n package org.superbiz.injection;\n \n import javax.ejb.Remote;\n \n /**\n * This is an EJB 3 remote business interface\n * A remote business interface must be annotated with the @Remote\n * annotation\n */\n //START SNIPPET: code\n @Remote\n public interface DataStoreRemote {\n \n public String getData();\n }\n\n## EjbDependencyTest\n\n package org.superbiz.injection;\n \n import junit.framework.TestCase;\n \n import javax.ejb.embeddable.EJBContainer;\n import javax.naming.Context;\n \n /**\n * A test case for DataReaderImpl ejb, testing both the remote and local interface\n */\n //START SNIPPET: code\n public class EjbDependencyTest extends TestCase {\n \n public void test() throws Exception {\n final Context context = EJBContainer.createEJBContainer().getContext();\n \n DataReader dataReader = (DataReader) context.lookup(\"java:global/injection-of-ejbs/DataReader\");\n \n assertNotNull(dataReader);\n \n assertEquals(\"LOCAL:42\", dataReader.readDataFromLocalStore());\n assertEquals(\"REMOTE:42\", dataReader.readDataFromRemoteStore());\n assertEquals(\"LOCALBEAN:42\", dataReader.readDataFromLocalBeanStore());\n }\n }\n\n# Running\n\n \n -------------------------------------------------------\n T E S T S\n -------------------------------------------------------\n Running org.superbiz.injection.EjbDependencyTest\n Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06\n http://tomee.apache.org/\n INFO - openejb.home = /Users/dblevins/examples/injection-of-ejbs\n INFO - openejb.base = /Users/dblevins/examples/injection-of-ejbs\n INFO - Using 'javax.ejb.embeddable.EJBContainer=true'\n INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)\n INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)\n INFO - Found EjbModule in classpath: /Users/dblevins/examples/injection-of-ejbs/target/classes\n INFO - Beginning load: /Users/dblevins/examples/injection-of-ejbs/target/classes\n INFO - Configuring enterprise application: /Users/dblevins/examples/injection-of-ejbs\n INFO - Configuring Service(id=Default Stateless Container, type=Container, provider-id=Default Stateless Container)\n INFO - Auto-creating a container for bean DataReader: Container(type=STATELESS, id=Default Stateless Container)\n INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)\n INFO - Auto-creating a container for bean org.superbiz.injection.EjbDependencyTest: Container(type=MANAGED, id=Default Managed Container)\n INFO - Enterprise application \"/Users/dblevins/examples/injection-of-ejbs\" loaded.\n INFO - Assembling app: /Users/dblevins/examples/injection-of-ejbs\n INFO - Jndi(name=\"java:global/injection-of-ejbs/DataReader!org.superbiz.injection.DataReader\")\n INFO - Jndi(name=\"java:global/injection-of-ejbs/DataReader\")\n INFO - Jndi(name=\"java:global/injection-of-ejbs/DataStore!org.superbiz.injection.DataStore\")\n INFO - Jndi(name=\"java:global/injection-of-ejbs/DataStore!org.superbiz.injection.DataStoreLocal\")\n INFO - Jndi(name=\"java:global/injection-of-ejbs/DataStore!org.superbiz.injection.DataStoreRemote\")\n INFO - Jndi(name=\"java:global/injection-of-ejbs/DataStore\")\n INFO - Jndi(name=\"java:global/EjbModule355598874/org.superbiz.injection.EjbDependencyTest!org.superbiz.injection.EjbDependencyTest\")\n INFO - Jndi(name=\"java:global/EjbModule355598874/org.superbiz.injection.EjbDependencyTest\")\n INFO - Created Ejb(deployment-id=DataReader, ejb-name=DataReader, container=Default Stateless Container)\n INFO - Created Ejb(deployment-id=DataStore, ejb-name=DataStore, container=Default Stateless Container)\n INFO - Created Ejb(deployment-id=org.superbiz.injection.EjbDependencyTest, ejb-name=org.superbiz.injection.EjbDependencyTest, container=Default Managed Container)\n INFO - Started Ejb(deployment-id=DataReader, ejb-name=DataReader, container=Default Stateless Container)\n INFO - Started Ejb(deployment-id=DataStore, ejb-name=DataStore, container=Default Stateless Container)\n INFO - Started Ejb(deployment-id=org.superbiz.injection.EjbDependencyTest, ejb-name=org.superbiz.injection.EjbDependencyTest, container=Default Managed Container)\n INFO - Deployed Application(path=/Users/dblevins/examples/injection-of-ejbs)\n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.225 sec\n \n Results :\n \n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0\n \n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/injection-of-ejbs" | |
}, | |
{ | |
"name":"jsf-cdi-and-ejb", | |
"readme":"Title: JSF-CDI-EJB\n\nThe simple application contains a CDI managed bean `CalculatorBean`, which uses the `Calculator` EJB to add two numbers\nand display the results to the user. The EJB is injected in the managed bean using @Inject annotation.\n\nYou could run this in the latest Apache TomEE [snapshot](https://repository.apache.org/content/repositories/snapshots/org/apache/openejb/apache-tomee/)\n\nThe complete source code is below but lets break down to look at some smaller snippets and see how it works.\n\n\nA little note on the setup:\n\nAs for the libraries, myfaces-api and myfaces-impl are provided in tomee/lib and hence they should not be a part of the\nwar. In maven terms, they would be with scope 'provided'\n\nAlso note that we use servlet 2.5 declaration in web.xml\n<web-app xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xmlns=\"http://java.sun.com/xml/ns/javaee\"\n xmlns:web=\"http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd\"\n xsi:schemaLocation=\"http://java.sun.com/xml/ns/javaee\n http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd\"\n version=\"2.5\">\n\nAnd we use 2.0 version of faces-config\n\n <faces-config xmlns=\"http://java.sun.com/xml/ns/javaee\"\n xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:schemaLocation=\"http://java.sun.com/xml/ns/javaee\n http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd\"\n version=\"2.0\">\n\nTo make this a cdi-aware-archive (i.e bean archive) an empty beans.xml is added in WEB-INF\n\n <?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n <beans xmlns=\"http://java.sun.com/xml/ns/javaee\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:schemaLocation=\"http://java.sun.com/xml/ns/javaee\n http://java.sun.com/xml/ns/javaee/beans_1_0.xsd\">\n </beans>\n\nWe'll first declare the FacesServlet in the web.xml\n\n <servlet>\n <servlet-name>Faces Servlet</servlet-name>\n <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>\n <load-on-startup>1</load-on-startup>\n </servlet>\n\nFacesServlet acts as the master controller.\n\nWe'll then create the calculator.xhtml file.\n\n <h:outputText value='Enter first number'/>\n <h:inputText value='#{calculatorBean.x}'/>\n <h:outputText value='Enter second number'/>\n <h:inputText value='#{calculatorBean.y}'/>\n <h:commandButton action=\"#{calculatorBean.add}\" value=\"Add\"/>\n\nNotice how we've used the bean here. By default, the bean name would be the simple name of the bean\nclass with the first letter in lower case.\n\nWe've annotated the `CalculatorBean` with `@RequestScoped`.\nSo when a request comes in, the bean is instantiated and placed in the request scope.\n\n<h:inputText value='#{calculatorBean.x}'/>\n\nHere, getX() method of calculatorBean is invoked and the resulting value is displayed.\nx being a Double, we rightly should see 0.0 displayed.\n\nWhen you change the value and submit the form, these entered values are bound using the setters\nin the bean and then the commandButton-action method is invoked.\n\nIn this case, CalculatorBean#add() is invoked.\n\nCalculator#add() delegates the work to the ejb, gets the result, stores it\nand then returns what view is to be rendered.\n\nThe return value \"success\" is checked up in faces-config navigation-rules\nand the respective page is rendered.\n\nIn our case, 'result.xhtml' page is rendered where\nuse EL and display the result from the request-scoped `calculatorBean`.\n\n#Source Code\n\n## CalculatorBean\n\n import javax.enterprise.context.RequestScoped;\n import javax.inject.Named;\n import javax.inject.Inject;\n\n @RequestScoped\n @Named\n public class CalculatorBean {\n @Inject\n Calculator calculator;\n private double x;\n private double y;\n private double result;\n \n public double getX() {\n return x;\n }\n \n public void setX(double x) {\n this.x = x;\n }\n \n public double getY() {\n return y;\n }\n \n public void setY(double y) {\n this.y = y;\n }\n \n public double getResult() {\n return result;\n }\n \n public void setResult(double result) {\n this.result = result;\n }\n \n public String add() {\n result = calculator.add(x, y);\n return \"success\";\n }\n }\n\n## Calculator\n\n package org.superbiz.jsf;\n \n import javax.ejb.Stateless;\n \n @Stateless\n public class Calculator{\n \n public double add(double x, double y) {\n return x + y;\n }\n }\n\n\n#web.xml\n\n<?xml version=\"1.0\"?>\n\n<web-app xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xmlns=\"http://java.sun.com/xml/ns/javaee\"\n xmlns:web=\"http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd\"\n xsi:schemaLocation=\"http://java.sun.com/xml/ns/javaee\n http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd\"\n version=\"2.5\">\n\n <description>MyProject web.xml</description>\n\n <!-- Faces Servlet -->\n <servlet>\n <servlet-name>Faces Servlet</servlet-name>\n <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>\n <load-on-startup>1</load-on-startup>\n </servlet>\n\n <!-- Faces Servlet Mapping -->\n <servlet-mapping>\n <servlet-name>Faces Servlet</servlet-name>\n <url-pattern>*.jsf</url-pattern>\n </servlet-mapping>\n\n <!-- Welcome files -->\n <welcome-file-list>\n <welcome-file>index.jsp</welcome-file>\n <welcome-file>index.html</welcome-file>\n </welcome-file-list>\n\n</web-app>\n\n\n#Calculator.xhtml\n\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\"\n xmlns:f=\"http://java.sun.com/jsf/core\"\n xmlns:h=\"http://java.sun.com/jsf/html\">\n\n\n<h:body bgcolor=\"white\">\n <f:view>\n <h:form>\n <h:panelGrid columns=\"2\">\n <h:outputText value='Enter first number'/>\n <h:inputText value='#{calculatorBean.x}'/>\n <h:outputText value='Enter second number'/>\n <h:inputText value='#{calculatorBean.y}'/>\n <h:commandButton action=\"#{calculatorBean.add}\" value=\"Add\"/>\n </h:panelGrid>\n </h:form>\n </f:view>\n</h:body>\n</html>\n\n\n #Result.xhtml\n\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\"\n xmlns:f=\"http://java.sun.com/jsf/core\"\n xmlns:h=\"http://java.sun.com/jsf/html\">\n\n<h:body>\n<f:view>\n <h:form id=\"mainForm\">\n <h2><h:outputText value=\"Result of adding #{calculatorBean.x} and #{calculatorBean.y} is #{calculatorBean.result }\"/></h2>\n <h:commandLink action=\"back\">\n <h:outputText value=\"Home\"/>\n </h:commandLink>\n </h:form>\n</f:view>\n</h:body>\n</html>\n\n #faces-config.xml\n\n <?xml version=\"1.0\"?>\n <faces-config xmlns=\"http://java.sun.com/xml/ns/javaee\"\n xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:schemaLocation=\"http://java.sun.com/xml/ns/javaee\n http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd\"\n version=\"2.0\">\n\n <navigation-rule>\n <from-view-id>/calculator.xhtml</from-view-id>\n <navigation-case>\n <from-outcome>success</from-outcome>\n <to-view-id>/result.xhtml</to-view-id>\n </navigation-case>\n </navigation-rule>\n\n <navigation-rule>\n <from-view-id>/result.xhtml</from-view-id>\n <navigation-case>\n <from-outcome>back</from-outcome>\n <to-view-id>/calculator.xhtml</to-view-id>\n </navigation-case>\n </navigation-rule>\n </faces-config>", | |
"url":"https://github.com/apache/tomee/tree/master/examples/jsf-cdi-and-ejb" | |
}, | |
{ | |
"name":"ejb-webservice", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/ejb-webservice" | |
}, | |
{ | |
"name":"lookup-of-ejbs", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/lookup-of-ejbs" | |
}, | |
{ | |
"name":"lookup-of-ejbs-with-descriptor", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/lookup-of-ejbs-with-descriptor" | |
} | |
], | |
"ejbcontext":[ | |
{ | |
"name":"cdi-ejbcontext-jaas", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/cdi-ejbcontext-jaas" | |
} | |
], | |
"entitymanager":[ | |
{ | |
"name":"injection-of-entitymanager", | |
"readme":"Title: Injection Of Entitymanager\n\nThis example shows use of `@PersistenceContext` to have an `EntityManager` with an\n`EXTENDED` persistence context injected into a `@Stateful bean`. A JPA\n`@Entity` bean is used with the `EntityManager` to create, persist and merge\ndata to a database.\n\n## Creating the JPA Entity\n\nThe entity itself is simply a pojo annotated with `@Entity`. We create one called `Movie` which we can use to hold movie records.\n\n package org.superbiz.injection.jpa;\n\n import javax.persistence.Entity;\n \n @Entity\n public class Movie {\n\n @Id @GeneratedValue\n private long id;\n\n private String director;\n private String title;\n private int year;\n\n public Movie() {\n }\n\n public long getId() {\n return id;\n }\n\n public void setId(long id) {\n this.id = id;\n }\n\n public Movie(String director, String title, int year) {\n this.director = director;\n this.title = title;\n this.year = year;\n }\n\n public String getDirector() {\n return director;\n }\n\n public void setDirector(String director) {\n this.director = director;\n }\n\n public String getTitle() {\n return title;\n }\n\n public void setTitle(String title) {\n this.title = title;\n }\n\n public int getYear() {\n return year;\n }\n\n public void setYear(int year) {\n this.year = year;\n }\n }\n\n## Configure the EntityManager via a persistence.xml file\n\nThe above `Movie` entity can be created, removed, updated or deleted via an `EntityManager` object. The `EntityManager` itself is\nconfigured via a `META-INF/persistence.xml` file that is placed in the same jar as the `Movie` entity.\n\n <persistence xmlns=\"http://java.sun.com/xml/ns/persistence\" version=\"1.0\">\n\n <persistence-unit name=\"movie-unit\">\n <jta-data-source>movieDatabase</jta-data-source>\n <non-jta-data-source>movieDatabaseUnmanaged</non-jta-data-source>\n <class>org.superbiz.injection.jpa.Movie</class>\n\n <properties>\n <property name=\"openjpa.jdbc.SynchronizeMappings\" value=\"buildSchema(ForeignKeys=true)\"/>\n </properties>\n </persistence-unit>\n </persistence>\n\nNotice that the `Movie` entity is listed via a `<class>` element. This is not required, but can help when testing or when the\n`Movie` class is located in a different jar than the jar containing the `persistence.xml` file.\n\n## Injection via @PersistenceContext\n\nThe `EntityManager` itself is created by the container using the information in the `persistence.xml`, so to use it at\nruntime, we simply need to request it be injected into one of our components. We do this via `@PersistenceContext`\n\nThe `@PersistenceContext` annotation can be used on any CDI bean, EJB, Servlet, Servlet Listener, Servlet Filter, or JSF ManagedBean. If you don't use an EJB you will need to use a `UserTransaction` begin and commit transactions manually. A transaction is required for any of the create, update or delete methods of the EntityManager to work.\n\n package org.superbiz.injection.jpa;\n\n import javax.ejb.Stateful;\n import javax.persistence.EntityManager;\n import javax.persistence.PersistenceContext;\n import javax.persistence.PersistenceContextType;\n import javax.persistence.Query;\n import java.util.List;\n \n @Stateful\n public class Movies {\n \n @PersistenceContext(unitName = \"movie-unit\", type = PersistenceContextType.EXTENDED)\n private EntityManager entityManager;\n \n public void addMovie(Movie movie) throws Exception {\n entityManager.persist(movie);\n }\n \n public void deleteMovie(Movie movie) throws Exception {\n entityManager.remove(movie);\n }\n \n public List<Movie> getMovies() throws Exception {\n Query query = entityManager.createQuery(\"SELECT m from Movie as m\");\n return query.getResultList();\n }\n }\n\nThis particular `EntityManager` is injected as an `EXTENDED` persistence context, which simply means that the `EntityManager`\nis created when the `@Stateful` bean is created and destroyed when the `@Stateful` bean is destroyed. Simply put, the\ndata in the `EntityManager` is cached for the lifetime of the `@Stateful` bean.\n\nThe use of `EXTENDED` persistence contexts is **only** available to `@Stateful` beans. See the [JPA Concepts](../../jpa-concepts.html) page for an high level explanation of what a \"persistence context\" really is and how it is significant to JPA.\n\n## MoviesTest\n\nTesting JPA is quite easy, we can simply use the `EJBContainer` API to create a container in our test case.\n\n package org.superbiz.injection.jpa;\n \n import junit.framework.TestCase;\n \n import javax.ejb.embeddable.EJBContainer;\n import javax.naming.Context;\n import java.util.List;\n import java.util.Properties;\n \n //START SNIPPET: code\n public class MoviesTest extends TestCase {\n \n public void test() throws Exception {\n \n final Properties p = new Properties();\n p.put(\"movieDatabase\", \"new://Resource?type=DataSource\");\n p.put(\"movieDatabase.JdbcDriver\", \"org.hsqldb.jdbcDriver\");\n p.put(\"movieDatabase.JdbcUrl\", \"jdbc:hsqldb:mem:moviedb\");\n \n final Context context = EJBContainer.createEJBContainer(p).getContext();\n \n Movies movies = (Movies) context.lookup(\"java:global/injection-of-entitymanager/Movies\");\n \n movies.addMovie(new Movie(\"Quentin Tarantino\", \"Reservoir Dogs\", 1992));\n movies.addMovie(new Movie(\"Joel Coen\", \"Fargo\", 1996));\n movies.addMovie(new Movie(\"Joel Coen\", \"The Big Lebowski\", 1998));\n \n List<Movie> list = movies.getMovies();\n assertEquals(\"List.size()\", 3, list.size());\n \n for (Movie movie : list) {\n movies.deleteMovie(movie);\n }\n \n assertEquals(\"Movies.getMovies()\", 0, movies.getMovies().size());\n }\n }\n\n# Running\n\nWhen we run our test case we should see output similar to the following.\n \n -------------------------------------------------------\n T E S T S\n -------------------------------------------------------\n Running org.superbiz.injection.jpa.MoviesTest\n Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06\n http://tomee.apache.org/\n INFO - openejb.home = /Users/dblevins/examples/injection-of-entitymanager\n INFO - openejb.base = /Users/dblevins/examples/injection-of-entitymanager\n INFO - Using 'javax.ejb.embeddable.EJBContainer=true'\n INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)\n INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)\n INFO - Configuring Service(id=movieDatabase, type=Resource, provider-id=Default JDBC Database)\n INFO - Found EjbModule in classpath: /Users/dblevins/examples/injection-of-entitymanager/target/classes\n INFO - Beginning load: /Users/dblevins/examples/injection-of-entitymanager/target/classes\n INFO - Configuring enterprise application: /Users/dblevins/examples/injection-of-entitymanager\n INFO - Configuring Service(id=Default Stateful Container, type=Container, provider-id=Default Stateful Container)\n INFO - Auto-creating a container for bean Movies: Container(type=STATEFUL, id=Default Stateful Container)\n INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)\n INFO - Auto-creating a container for bean org.superbiz.injection.jpa.MoviesTest: Container(type=MANAGED, id=Default Managed Container)\n INFO - Configuring PersistenceUnit(name=movie-unit)\n INFO - Auto-creating a Resource with id 'movieDatabaseNonJta' of type 'DataSource for 'movie-unit'.\n INFO - Configuring Service(id=movieDatabaseNonJta, type=Resource, provider-id=movieDatabase)\n INFO - Adjusting PersistenceUnit movie-unit <non-jta-data-source> to Resource ID 'movieDatabaseNonJta' from 'movieDatabaseUnmanaged'\n INFO - Enterprise application \"/Users/dblevins/examples/injection-of-entitymanager\" loaded.\n INFO - Assembling app: /Users/dblevins/examples/injection-of-entitymanager\n INFO - PersistenceUnit(name=movie-unit, provider=org.apache.openjpa.persistence.PersistenceProviderImpl) - provider time 462ms\n INFO - Jndi(name=\"java:global/injection-of-entitymanager/Movies!org.superbiz.injection.jpa.Movies\")\n INFO - Jndi(name=\"java:global/injection-of-entitymanager/Movies\")\n INFO - Jndi(name=\"java:global/EjbModule1461341140/org.superbiz.injection.jpa.MoviesTest!org.superbiz.injection.jpa.MoviesTest\")\n INFO - Jndi(name=\"java:global/EjbModule1461341140/org.superbiz.injection.jpa.MoviesTest\")\n INFO - Created Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container)\n INFO - Created Ejb(deployment-id=org.superbiz.injection.jpa.MoviesTest, ejb-name=org.superbiz.injection.jpa.MoviesTest, container=Default Managed Container)\n INFO - Started Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container)\n INFO - Started Ejb(deployment-id=org.superbiz.injection.jpa.MoviesTest, ejb-name=org.superbiz.injection.jpa.MoviesTest, container=Default Managed Container)\n INFO - Deployed Application(path=/Users/dblevins/examples/injection-of-entitymanager)\n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.301 sec\n \n Results :\n \n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0\n \n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/injection-of-entitymanager" | |
} | |
], | |
"enumerated":[ | |
{ | |
"name":"jpa-enumerated", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/jpa-enumerated" | |
} | |
], | |
"enventry":[ | |
{ | |
"name":"injection-of-env-entry", | |
"readme":"Title: Using EnvEntries\n\nThe `@Resource` annotation can be used to inject several things including\nDataSources, Topics, Queues, etc. Most of these are container supplied objects.\n\nIt is possible, however, to supply your own values to be injected via an `<env-entry>`\nin your `ejb-jar.xml` or `web.xml` deployment descriptor. Java EE 6 supported `<env-entry>` types\nare limited to the following:\n\n - java.lang.String\n - java.lang.Integer\n - java.lang.Short\n - java.lang.Float\n - java.lang.Double\n - java.lang.Byte\n - java.lang.Character\n - java.lang.Boolean\n - java.lang.Class\n - java.lang.Enum (any enum)\n\nSee also the [Custom Injection](../custom-injection) exmaple for a TomEE and OpenEJB feature that will let you\nuse more than just the above types as well as declare `<env-entry>` items with a plain properties file.\n\n# Using @Resource for basic properties\n\nThe use of the `@Resource` annotation isn't limited to setters. For\nexample, this annotation could have been used on the corresponding *field*\nlike so:\n\n @Resource\n private int maxLineItems;\n\nA fuller example might look like this:\n\n package org.superbiz.injection.enventry;\n \n import javax.annotation.Resource;\n import javax.ejb.Singleton;\n import java.util.Date;\n \n @Singleton\n public class Configuration {\n \n @Resource\n private String color;\n \n @Resource\n private Shape shape;\n \n @Resource\n private Class strategy;\n \n @Resource(name = \"date\")\n private long date;\n \n public String getColor() {\n return color;\n }\n \n public Shape getShape() {\n return shape;\n }\n \n public Class getStrategy() {\n return strategy;\n }\n \n public Date getDate() {\n return new Date(date);\n }\n }\n\nHere we have an `@Singleton` bean called `Confuration` that has the following properties (`<env-entry>` items)\n\n- String color\n- Shape shape\n- Class strategy\n- long date\n\n## Supplying @Resource values for <env-entry> items in ejb-jar.xml\n\nThe values for our `color`, `shape`, `strategy` and `date` properties are supplied via `<env-entry>` elements in the `ejb-jar.xml` file or the\n`web.xml` file like so:\n\n\n <ejb-jar xmlns=\"http://java.sun.com/xml/ns/javaee\" version=\"3.0\" metadata-complete=\"false\">\n <enterprise-beans>\n <session>\n <ejb-name>Configuration</ejb-name>\n <env-entry>\n <env-entry-name>org.superbiz.injection.enventry.Configuration/color</env-entry-name>\n <env-entry-type>java.lang.String</env-entry-type>\n <env-entry-value>orange</env-entry-value>\n </env-entry>\n <env-entry>\n <env-entry-name>org.superbiz.injection.enventry.Configuration/shape</env-entry-name>\n <env-entry-type>org.superbiz.injection.enventry.Shape</env-entry-type>\n <env-entry-value>TRIANGLE</env-entry-value>\n </env-entry>\n <env-entry>\n <env-entry-name>org.superbiz.injection.enventry.Configuration/strategy</env-entry-name>\n <env-entry-type>java.lang.Class</env-entry-type>\n <env-entry-value>org.superbiz.injection.enventry.Widget</env-entry-value>\n </env-entry>\n <env-entry>\n <description>The name was explicitly set in the annotation so the classname prefix isn't required</description>\n <env-entry-name>date</env-entry-name>\n <env-entry-type>java.lang.Long</env-entry-type>\n <env-entry-value>123456789</env-entry-value>\n </env-entry>\n </session>\n </enterprise-beans>\n </ejb-jar>\n\n\n### Using the @Resource 'name' attribute\n\nNote that `date` was referenced by `name` as:\n\n @Resource(name = \"date\")\n private long date;\n\nWhen the `@Resource(name)` is used, you do not need to specify the full class name of the bean and can do it briefly like so:\n\n <env-entry>\n <description>The name was explicitly set in the annotation so the classname prefix isn't required</description>\n <env-entry-name>date</env-entry-name>\n <env-entry-type>java.lang.Long</env-entry-type>\n <env-entry-value>123456789</env-entry-value>\n </env-entry>\n\nConversly, `color` was not referenced by `name`\n\n @Resource\n private String color;\n\nWhen something is not referenced by `name` in the `@Resource` annotation a default name is created. The format is essentially this:\n\n bean.getClass() + \"/\" + field.getName()\n\nSo the default `name` of the above `color` property ends up being `org.superbiz.injection.enventry.Configuration/color`. This is the name\nwe must use when we attempt to decalre a value for it in xml.\n\n <env-entry>\n <env-entry-name>org.superbiz.injection.enventry.Configuration/color</env-entry-name>\n <env-entry-type>java.lang.String</env-entry-type>\n <env-entry-value>orange</env-entry-value>\n </env-entry>\n\n### @Resource and Enum (Enumerations)\n\nThe `shape` field is actually a custom Java Enum type\n\n package org.superbiz.injection.enventry;\n\n public enum Shape {\n \n CIRCLE,\n TRIANGLE,\n SQUARE\n }\n\nAs of Java EE 6, java.lang.Enum types are allowed as `<env-entry>` items. Declaring one in xml is done using the actual enum's class name like so:\n\n <env-entry>\n <env-entry-name>org.superbiz.injection.enventry.Configuration/shape</env-entry-name>\n <env-entry-type>org.superbiz.injection.enventry.Shape</env-entry-type>\n <env-entry-value>TRIANGLE</env-entry-value>\n </env-entry>\n\nDo not use `<env-entry-type>java.lang.Enum</env-entry-type>` or it will not work!\n\n## ConfigurationTest\n\n package org.superbiz.injection.enventry;\n \n import junit.framework.TestCase;\n \n import javax.ejb.embeddable.EJBContainer;\n import javax.naming.Context;\n import java.util.Date;\n \n public class ConfigurationTest extends TestCase {\n \n \n public void test() throws Exception {\n final Context context = EJBContainer.createEJBContainer().getContext();\n \n final Configuration configuration = (Configuration) context.lookup(\"java:global/injection-of-env-entry/Configuration\");\n \n assertEquals(\"orange\", configuration.getColor());\n \n assertEquals(Shape.TRIANGLE, configuration.getShape());\n \n assertEquals(Widget.class, configuration.getStrategy());\n \n assertEquals(new Date(123456789), configuration.getDate());\n }\n }\n\n# Running\n\n \n -------------------------------------------------------\n T E S T S\n -------------------------------------------------------\n Running org.superbiz.injection.enventry.ConfigurationTest\n Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06\n http://tomee.apache.org/\n INFO - openejb.home = /Users/dblevins/examples/injection-of-env-entry\n INFO - openejb.base = /Users/dblevins/examples/injection-of-env-entry\n INFO - Using 'javax.ejb.embeddable.EJBContainer=true'\n INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)\n INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)\n INFO - Found EjbModule in classpath: /Users/dblevins/examples/injection-of-env-entry/target/classes\n INFO - Beginning load: /Users/dblevins/examples/injection-of-env-entry/target/classes\n INFO - Configuring enterprise application: /Users/dblevins/examples/injection-of-env-entry\n WARN - Method 'lookup' is not available for 'javax.annotation.Resource'. Probably using an older Runtime.\n INFO - Configuring Service(id=Default Singleton Container, type=Container, provider-id=Default Singleton Container)\n INFO - Auto-creating a container for bean Configuration: Container(type=SINGLETON, id=Default Singleton Container)\n INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)\n INFO - Auto-creating a container for bean org.superbiz.injection.enventry.ConfigurationTest: Container(type=MANAGED, id=Default Managed Container)\n INFO - Enterprise application \"/Users/dblevins/examples/injection-of-env-entry\" loaded.\n INFO - Assembling app: /Users/dblevins/examples/injection-of-env-entry\n INFO - Jndi(name=\"java:global/injection-of-env-entry/Configuration!org.superbiz.injection.enventry.Configuration\")\n INFO - Jndi(name=\"java:global/injection-of-env-entry/Configuration\")\n INFO - Jndi(name=\"java:global/EjbModule1355224018/org.superbiz.injection.enventry.ConfigurationTest!org.superbiz.injection.enventry.ConfigurationTest\")\n INFO - Jndi(name=\"java:global/EjbModule1355224018/org.superbiz.injection.enventry.ConfigurationTest\")\n INFO - Created Ejb(deployment-id=org.superbiz.injection.enventry.ConfigurationTest, ejb-name=org.superbiz.injection.enventry.ConfigurationTest, container=Default Managed Container)\n INFO - Created Ejb(deployment-id=Configuration, ejb-name=Configuration, container=Default Singleton Container)\n INFO - Started Ejb(deployment-id=org.superbiz.injection.enventry.ConfigurationTest, ejb-name=org.superbiz.injection.enventry.ConfigurationTest, container=Default Managed Container)\n INFO - Started Ejb(deployment-id=Configuration, ejb-name=Configuration, container=Default Singleton Container)\n INFO - Deployed Application(path=/Users/dblevins/examples/injection-of-env-entry)\n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.664 sec\n \n Results :\n \n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0\n \n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/injection-of-env-entry" | |
} | |
], | |
"evaluation":[ | |
{ | |
"name":"bval-evaluation-redeployment", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/bval-evaluation-redeployment" | |
} | |
], | |
"event":[ | |
{ | |
"name":"server-events", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/server-events" | |
}, | |
{ | |
"name":"cdi-events", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/cdi-events" | |
}, | |
{ | |
"name":"schedule-events", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/schedule-events" | |
} | |
], | |
"examples":[ | |
{ | |
"name":"ejb-examples", | |
"readme":"Title: EJB Examples\n\n*Help us document this example! Click the blue pencil icon in the upper right to edit this page.*\n\n## AnnotatedEJB\n\n package org.superbiz.servlet;\n \n import javax.annotation.Resource;\n import javax.ejb.LocalBean;\n import javax.ejb.Stateless;\n import javax.sql.DataSource;\n \n @Stateless\n @LocalBean\n public class AnnotatedEJB implements AnnotatedEJBLocal, AnnotatedEJBRemote {\n @Resource\n private DataSource ds;\n \n private String name = \"foo\";\n \n public String getName() {\n return name;\n }\n \n public void setName(String name) {\n this.name = name;\n }\n \n public DataSource getDs() {\n return ds;\n }\n \n public void setDs(DataSource ds) {\n this.ds = ds;\n }\n \n public String toString() {\n return \"AnnotatedEJB[name=\" + name + \"]\";\n }\n }\n\n## AnnotatedEJBLocal\n\n package org.superbiz.servlet;\n \n import javax.ejb.Local;\n import javax.sql.DataSource;\n \n @Local\n public interface AnnotatedEJBLocal {\n String getName();\n \n void setName(String name);\n \n DataSource getDs();\n \n void setDs(DataSource ds);\n }\n\n## AnnotatedEJBRemote\n\n package org.superbiz.servlet;\n \n import javax.ejb.Remote;\n \n @Remote\n public interface AnnotatedEJBRemote {\n String getName();\n \n void setName(String name);\n }\n\n## AnnotatedServlet\n\n package org.superbiz.servlet;\n \n import javax.annotation.Resource;\n import javax.ejb.EJB;\n import javax.naming.InitialContext;\n import javax.naming.NamingException;\n import javax.servlet.ServletException;\n import javax.servlet.ServletOutputStream;\n import javax.servlet.http.HttpServlet;\n import javax.servlet.http.HttpServletRequest;\n import javax.servlet.http.HttpServletResponse;\n import javax.sql.DataSource;\n import java.io.IOException;\n \n public class AnnotatedServlet extends HttpServlet {\n @EJB\n private AnnotatedEJBLocal localEJB;\n \n @EJB\n private AnnotatedEJBRemote remoteEJB;\n \n @EJB\n private AnnotatedEJB localbeanEJB;\n \n @Resource\n private DataSource ds;\n \n \n protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {\n response.setContentType(\"text/plain\");\n ServletOutputStream out = response.getOutputStream();\n \n out.println(\"LocalBean EJB\");\n out.println(\"@EJB=\" + localbeanEJB);\n if (localbeanEJB != null) {\n out.println(\"@EJB.getName()=\" + localbeanEJB.getName());\n out.println(\"@EJB.getDs()=\" + localbeanEJB.getDs());\n }\n out.println(\"JNDI=\" + lookupField(\"localbeanEJB\"));\n out.println();\n \n out.println(\"Local EJB\");\n out.println(\"@EJB=\" + localEJB);\n if (localEJB != null) {\n out.println(\"@EJB.getName()=\" + localEJB.getName());\n out.println(\"@EJB.getDs()=\" + localEJB.getDs());\n }\n out.println(\"JNDI=\" + lookupField(\"localEJB\"));\n out.println();\n \n out.println(\"Remote EJB\");\n out.println(\"@EJB=\" + remoteEJB);\n if (localEJB != null) {\n out.println(\"@EJB.getName()=\" + remoteEJB.getName());\n }\n out.println(\"JNDI=\" + lookupField(\"remoteEJB\"));\n out.println();\n \n \n out.println(\"DataSource\");\n out.println(\"@Resource=\" + ds);\n out.println(\"JNDI=\" + lookupField(\"ds\"));\n }\n \n private Object lookupField(String name) {\n try {\n return new InitialContext().lookup(\"java:comp/env/\" + getClass().getName() + \"/\" + name);\n } catch (NamingException e) {\n return null;\n }\n }\n }\n\n## ClientHandler\n\n package org.superbiz.servlet;\n \n import javax.xml.ws.handler.Handler;\n import javax.xml.ws.handler.MessageContext;\n \n public class ClientHandler implements Handler {\n public boolean handleMessage(MessageContext messageContext) {\n WebserviceServlet.write(\" ClientHandler handleMessage\");\n return true;\n }\n \n public void close(MessageContext messageContext) {\n WebserviceServlet.write(\" ClientHandler close\");\n }\n \n public boolean handleFault(MessageContext messageContext) {\n WebserviceServlet.write(\" ClientHandler handleFault\");\n return true;\n }\n }\n\n## HelloEjb\n\n package org.superbiz.servlet;\n \n import javax.jws.WebService;\n \n @WebService(targetNamespace = \"http://examples.org/wsdl\")\n public interface HelloEjb {\n String hello(String name);\n }\n\n## HelloEjbService\n\n package org.superbiz.servlet;\n \n import javax.ejb.Stateless;\n import javax.jws.HandlerChain;\n import javax.jws.WebService;\n \n @WebService(\n portName = \"HelloEjbPort\",\n serviceName = \"HelloEjbService\",\n targetNamespace = \"http://examples.org/wsdl\",\n endpointInterface = \"org.superbiz.servlet.HelloEjb\"\n )\n @HandlerChain(file = \"server-handlers.xml\")\n @Stateless\n public class HelloEjbService implements HelloEjb {\n public String hello(String name) {\n WebserviceServlet.write(\" HelloEjbService hello(\" + name + \")\");\n if (name == null) name = \"World\";\n return \"Hello \" + name + \" from EJB Webservice!\";\n }\n }\n\n## HelloPojo\n\n package org.superbiz.servlet;\n \n import javax.jws.WebService;\n \n @WebService(targetNamespace = \"http://examples.org/wsdl\")\n public interface HelloPojo {\n String hello(String name);\n }\n\n## HelloPojoService\n\n package org.superbiz.servlet;\n \n import javax.jws.HandlerChain;\n import javax.jws.WebService;\n \n @WebService(\n portName = \"HelloPojoPort\",\n serviceName = \"HelloPojoService\",\n targetNamespace = \"http://examples.org/wsdl\",\n endpointInterface = \"org.superbiz.servlet.HelloPojo\"\n )\n @HandlerChain(file = \"server-handlers.xml\")\n public class HelloPojoService implements HelloPojo {\n public String hello(String name) {\n WebserviceServlet.write(\" HelloPojoService hello(\" + name + \")\");\n if (name == null) name = \"World\";\n return \"Hello \" + name + \" from Pojo Webservice!\";\n }\n }\n\n## JndiServlet\n\n package org.superbiz.servlet;\n \n import javax.naming.Context;\n import javax.naming.InitialContext;\n import javax.naming.NameClassPair;\n import javax.naming.NamingException;\n import javax.servlet.ServletException;\n import javax.servlet.ServletOutputStream;\n import javax.servlet.http.HttpServlet;\n import javax.servlet.http.HttpServletRequest;\n import javax.servlet.http.HttpServletResponse;\n import java.io.IOException;\n import java.util.Collections;\n import java.util.Map;\n import java.util.TreeMap;\n \n public class JndiServlet extends HttpServlet {\n protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {\n response.setContentType(\"text/plain\");\n ServletOutputStream out = response.getOutputStream();\n \n Map<String, Object> bindings = new TreeMap<String, Object>(String.CASE_INSENSITIVE_ORDER);\n try {\n Context context = (Context) new InitialContext().lookup(\"java:comp/\");\n addBindings(\"\", bindings, context);\n } catch (NamingException e) {\n throw new ServletException(e);\n }\n \n out.println(\"JNDI Context:\");\n for (Map.Entry<String, Object> entry : bindings.entrySet()) {\n if (entry.getValue() != null) {\n out.println(\" \" + entry.getKey() + \"=\" + entry.getValue());\n } else {\n out.println(\" \" + entry.getKey());\n }\n }\n }\n \n private void addBindings(String path, Map<String, Object> bindings, Context context) {\n try {\n for (NameClassPair pair : Collections.list(context.list(\"\"))) {\n String name = pair.getName();\n String className = pair.getClassName();\n if (\"org.apache.naming.resources.FileDirContext$FileResource\".equals(className)) {\n bindings.put(path + name, \"<file>\");\n } else {\n try {\n Object value = context.lookup(name);\n if (value instanceof Context) {\n Context nextedContext = (Context) value;\n bindings.put(path + name, \"\");\n addBindings(path + name + \"/\", bindings, nextedContext);\n } else {\n bindings.put(path + name, value);\n }\n } catch (NamingException e) {\n // lookup failed\n bindings.put(path + name, \"ERROR: \" + e.getMessage());\n }\n }\n }\n } catch (NamingException e) {\n bindings.put(path, \"ERROR: list bindings threw an exception: \" + e.getMessage());\n }\n }\n }\n\n## JpaBean\n\n package org.superbiz.servlet;\n \n import javax.persistence.Column;\n import javax.persistence.Entity;\n import javax.persistence.GeneratedValue;\n import javax.persistence.GenerationType;\n import javax.persistence.Id;\n \n @Entity\n public class JpaBean {\n @Id\n @GeneratedValue(strategy = GenerationType.IDENTITY)\n @Column(name = \"id\")\n private int id;\n \n @Column(name = \"name\")\n private String name;\n \n public int getId() {\n return id;\n }\n \n public String getName() {\n return name;\n }\n \n public void setName(String name) {\n this.name = name;\n }\n \n \n public String toString() {\n return \"[JpaBean id=\" + id + \", name=\" + name + \"]\";\n }\n }\n\n## JpaServlet\n\n package org.superbiz.servlet;\n \n import javax.persistence.EntityManager;\n import javax.persistence.EntityManagerFactory;\n import javax.persistence.EntityTransaction;\n import javax.persistence.PersistenceUnit;\n import javax.persistence.Query;\n import javax.servlet.ServletException;\n import javax.servlet.ServletOutputStream;\n import javax.servlet.http.HttpServlet;\n import javax.servlet.http.HttpServletRequest;\n import javax.servlet.http.HttpServletResponse;\n import java.io.IOException;\n \n public class JpaServlet extends HttpServlet {\n @PersistenceUnit(name = \"jpa-example\")\n private EntityManagerFactory emf;\n \n \n protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {\n response.setContentType(\"text/plain\");\n ServletOutputStream out = response.getOutputStream();\n \n out.println(\"@PersistenceUnit=\" + emf);\n \n EntityManager em = emf.createEntityManager();\n EntityTransaction transaction = em.getTransaction();\n transaction.begin();\n \n JpaBean jpaBean = new JpaBean();\n jpaBean.setName(\"JpaBean\");\n em.persist(jpaBean);\n \n transaction.commit();\n transaction.begin();\n \n Query query = em.createQuery(\"SELECT j FROM JpaBean j WHERE j.name='JpaBean'\");\n jpaBean = (JpaBean) query.getSingleResult();\n out.println(\"Loaded \" + jpaBean);\n \n em.remove(jpaBean);\n \n transaction.commit();\n transaction.begin();\n \n query = em.createQuery(\"SELECT count(j) FROM JpaBean j WHERE j.name='JpaBean'\");\n int count = ((Number) query.getSingleResult()).intValue();\n if (count == 0) {\n out.println(\"Removed \" + jpaBean);\n } else {\n out.println(\"ERROR: unable to remove\" + jpaBean);\n }\n \n transaction.commit();\n }\n }\n\n## ResourceBean\n\n package org.superbiz.servlet;\n \n public class ResourceBean {\n private String value;\n \n public String getValue() {\n return value;\n }\n \n public void setValue(String value) {\n this.value = value;\n }\n \n public String toString() {\n return \"[ResourceBean \" + value + \"]\";\n }\n }\n\n## RunAsServlet\n\n package org.superbiz.servlet;\n \n import javax.ejb.EJB;\n import javax.ejb.EJBAccessException;\n import javax.servlet.ServletException;\n import javax.servlet.ServletOutputStream;\n import javax.servlet.http.HttpServlet;\n import javax.servlet.http.HttpServletRequest;\n import javax.servlet.http.HttpServletResponse;\n import java.io.IOException;\n import java.security.Principal;\n \n public class RunAsServlet extends HttpServlet {\n @EJB\n private SecureEJBLocal secureEJBLocal;\n \n protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {\n response.setContentType(\"text/plain\");\n ServletOutputStream out = response.getOutputStream();\n \n out.println(\"Servlet\");\n Principal principal = request.getUserPrincipal();\n if (principal != null) {\n out.println(\"Servlet.getUserPrincipal()=\" + principal + \" [\" + principal.getName() + \"]\");\n } else {\n out.println(\"Servlet.getUserPrincipal()=<null>\");\n }\n out.println(\"Servlet.isCallerInRole(\\\"user\\\")=\" + request.isUserInRole(\"user\"));\n out.println(\"Servlet.isCallerInRole(\\\"manager\\\")=\" + request.isUserInRole(\"manager\"));\n out.println(\"Servlet.isCallerInRole(\\\"fake\\\")=\" + request.isUserInRole(\"fake\"));\n out.println();\n \n out.println(\"@EJB=\" + secureEJBLocal);\n if (secureEJBLocal != null) {\n principal = secureEJBLocal.getCallerPrincipal();\n if (principal != null) {\n out.println(\"@EJB.getCallerPrincipal()=\" + principal + \" [\" + principal.getName() + \"]\");\n } else {\n out.println(\"@EJB.getCallerPrincipal()=<null>\");\n }\n out.println(\"@EJB.isCallerInRole(\\\"user\\\")=\" + secureEJBLocal.isCallerInRole(\"user\"));\n out.println(\"@EJB.isCallerInRole(\\\"manager\\\")=\" + secureEJBLocal.isCallerInRole(\"manager\"));\n out.println(\"@EJB.isCallerInRole(\\\"fake\\\")=\" + secureEJBLocal.isCallerInRole(\"fake\"));\n \n try {\n secureEJBLocal.allowUserMethod();\n out.println(\"@EJB.allowUserMethod() ALLOWED\");\n } catch (EJBAccessException e) {\n out.println(\"@EJB.allowUserMethod() DENIED\");\n }\n \n try {\n secureEJBLocal.allowManagerMethod();\n out.println(\"@EJB.allowManagerMethod() ALLOWED\");\n } catch (EJBAccessException e) {\n out.println(\"@EJB.allowManagerMethod() DENIED\");\n }\n \n try {\n secureEJBLocal.allowFakeMethod();\n out.println(\"@EJB.allowFakeMethod() ALLOWED\");\n } catch (EJBAccessException e) {\n out.println(\"@EJB.allowFakeMethod() DENIED\");\n }\n \n try {\n secureEJBLocal.denyAllMethod();\n out.println(\"@EJB.denyAllMethod() ALLOWED\");\n } catch (EJBAccessException e) {\n out.println(\"@EJB.denyAllMethod() DENIED\");\n }\n }\n out.println();\n }\n }\n\n## SecureEJB\n\n package org.superbiz.servlet;\n \n import javax.annotation.Resource;\n import javax.annotation.security.DeclareRoles;\n import javax.annotation.security.DenyAll;\n import javax.annotation.security.RolesAllowed;\n import javax.ejb.SessionContext;\n import javax.ejb.Stateless;\n import java.security.Principal;\n \n @Stateless\n @DeclareRoles({\"user\", \"manager\", \"fake\"})\n public class SecureEJB implements SecureEJBLocal {\n @Resource\n private SessionContext context;\n \n public Principal getCallerPrincipal() {\n return context.getCallerPrincipal();\n }\n \n public boolean isCallerInRole(String role) {\n return context.isCallerInRole(role);\n }\n \n @RolesAllowed(\"user\")\n public void allowUserMethod() {\n }\n \n @RolesAllowed(\"manager\")\n public void allowManagerMethod() {\n }\n \n @RolesAllowed(\"fake\")\n public void allowFakeMethod() {\n }\n \n @DenyAll\n public void denyAllMethod() {\n }\n \n public String toString() {\n return \"SecureEJB[userName=\" + getCallerPrincipal() + \"]\";\n }\n }\n\n## SecureEJBLocal\n\n package org.superbiz.servlet;\n \n import javax.ejb.Local;\n import java.security.Principal;\n \n @Local\n public interface SecureEJBLocal {\n Principal getCallerPrincipal();\n \n boolean isCallerInRole(String role);\n \n void allowUserMethod();\n \n void allowManagerMethod();\n \n void allowFakeMethod();\n \n void denyAllMethod();\n }\n\n## SecureServlet\n\n package org.superbiz.servlet;\n \n import javax.ejb.EJB;\n import javax.ejb.EJBAccessException;\n import javax.servlet.ServletException;\n import javax.servlet.ServletOutputStream;\n import javax.servlet.http.HttpServlet;\n import javax.servlet.http.HttpServletRequest;\n import javax.servlet.http.HttpServletResponse;\n import java.io.IOException;\n import java.security.Principal;\n \n public class SecureServlet extends HttpServlet {\n @EJB\n private SecureEJBLocal secureEJBLocal;\n \n protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {\n response.setContentType(\"text/plain\");\n ServletOutputStream out = response.getOutputStream();\n \n out.println(\"Servlet\");\n Principal principal = request.getUserPrincipal();\n if (principal != null) {\n out.println(\"Servlet.getUserPrincipal()=\" + principal + \" [\" + principal.getName() + \"]\");\n } else {\n out.println(\"Servlet.getUserPrincipal()=<null>\");\n }\n out.println(\"Servlet.isCallerInRole(\\\"user\\\")=\" + request.isUserInRole(\"user\"));\n out.println(\"Servlet.isCallerInRole(\\\"manager\\\")=\" + request.isUserInRole(\"manager\"));\n out.println(\"Servlet.isCallerInRole(\\\"fake\\\")=\" + request.isUserInRole(\"fake\"));\n out.println();\n \n out.println(\"@EJB=\" + secureEJBLocal);\n if (secureEJBLocal != null) {\n principal = secureEJBLocal.getCallerPrincipal();\n if (principal != null) {\n out.println(\"@EJB.getCallerPrincipal()=\" + principal + \" [\" + principal.getName() + \"]\");\n } else {\n out.println(\"@EJB.getCallerPrincipal()=<null>\");\n }\n out.println(\"@EJB.isCallerInRole(\\\"user\\\")=\" + secureEJBLocal.isCallerInRole(\"user\"));\n out.println(\"@EJB.isCallerInRole(\\\"manager\\\")=\" + secureEJBLocal.isCallerInRole(\"manager\"));\n out.println(\"@EJB.isCallerInRole(\\\"fake\\\")=\" + secureEJBLocal.isCallerInRole(\"fake\"));\n \n try {\n secureEJBLocal.allowUserMethod();\n out.println(\"@EJB.allowUserMethod() ALLOWED\");\n } catch (EJBAccessException e) {\n out.println(\"@EJB.allowUserMethod() DENIED\");\n }\n \n try {\n secureEJBLocal.allowManagerMethod();\n out.println(\"@EJB.allowManagerMethod() ALLOWED\");\n } catch (EJBAccessException e) {\n out.println(\"@EJB.allowManagerMethod() DENIED\");\n }\n \n try {\n secureEJBLocal.allowFakeMethod();\n out.println(\"@EJB.allowFakeMethod() ALLOWED\");\n } catch (EJBAccessException e) {\n out.println(\"@EJB.allowFakeMethod() DENIED\");\n }\n \n try {\n secureEJBLocal.denyAllMethod();\n out.println(\"@EJB.denyAllMethod() ALLOWED\");\n } catch (EJBAccessException e) {\n out.println(\"@EJB.denyAllMethod() DENIED\");\n }\n }\n out.println();\n }\n }\n\n## ServerHandler\n\n package org.superbiz.servlet;\n \n import javax.xml.ws.handler.Handler;\n import javax.xml.ws.handler.MessageContext;\n \n public class ServerHandler implements Handler {\n public boolean handleMessage(MessageContext messageContext) {\n WebserviceServlet.write(\" ServerHandler handleMessage\");\n return true;\n }\n \n public void close(MessageContext messageContext) {\n WebserviceServlet.write(\" ServerHandler close\");\n }\n \n public boolean handleFault(MessageContext messageContext) {\n WebserviceServlet.write(\" ServerHandler handleFault\");\n return true;\n }\n }\n\n## WebserviceClient\n\n package org.superbiz.servlet;\n \n import javax.xml.ws.Service;\n import java.io.PrintStream;\n import java.net.URL;\n \n public class WebserviceClient {\n /**\n * Unfortunately, to run this example with CXF you need to have a HUGE class path. This\n * is just what is required to run CXF:\n * <p/>\n * jaxb-api-2.0.jar\n * jaxb-impl-2.0.3.jar\n * <p/>\n * saaj-api-1.3.jar\n * saaj-impl-1.3.jar\n * <p/>\n * <p/>\n * cxf-api-2.0.2-incubator.jar\n * cxf-common-utilities-2.0.2-incubator.jar\n * cxf-rt-bindings-soap-2.0.2-incubator.jar\n * cxf-rt-core-2.0.2-incubator.jar\n * cxf-rt-databinding-jaxb-2.0.2-incubator.jar\n * cxf-rt-frontend-jaxws-2.0.2-incubator.jar\n * cxf-rt-frontend-simple-2.0.2-incubator.jar\n * cxf-rt-transports-http-jetty-2.0.2-incubator.jar\n * cxf-rt-transports-http-2.0.2-incubator.jar\n * cxf-tools-common-2.0.2-incubator.jar\n * <p/>\n * geronimo-activation_1.1_spec-1.0.jar\n * geronimo-annotation_1.0_spec-1.1.jar\n * geronimo-ejb_3.0_spec-1.0.jar\n * geronimo-jpa_3.0_spec-1.1.jar\n * geronimo-servlet_2.5_spec-1.1.jar\n * geronimo-stax-api_1.0_spec-1.0.jar\n * jaxws-api-2.0.jar\n * axis2-jws-api-1.3.jar\n * <p/>\n * wsdl4j-1.6.1.jar\n * xml-resolver-1.2.jar\n * XmlSchema-1.3.1.jar\n */\n public static void main(String[] args) throws Exception {\n PrintStream out = System.out;\n \n Service helloPojoService = Service.create(new URL(\"http://localhost:8080/ejb-examples/hello?wsdl\"), null);\n HelloPojo helloPojo = helloPojoService.getPort(HelloPojo.class);\n out.println();\n out.println(\"Pojo Webservice\");\n out.println(\" helloPojo.hello(\\\"Bob\\\")=\" + helloPojo.hello(\"Bob\"));\n out.println(\" helloPojo.hello(null)=\" + helloPojo.hello(null));\n out.println();\n \n Service helloEjbService = Service.create(new URL(\"http://localhost:8080/HelloEjbService?wsdl\"), null);\n HelloEjb helloEjb = helloEjbService.getPort(HelloEjb.class);\n out.println();\n out.println(\"EJB Webservice\");\n out.println(\" helloEjb.hello(\\\"Bob\\\")=\" + helloEjb.hello(\"Bob\"));\n out.println(\" helloEjb.hello(null)=\" + helloEjb.hello(null));\n out.println();\n }\n }\n\n## WebserviceServlet\n\n package org.superbiz.servlet;\n \n import javax.jws.HandlerChain;\n import javax.servlet.ServletException;\n import javax.servlet.ServletOutputStream;\n import javax.servlet.http.HttpServlet;\n import javax.servlet.http.HttpServletRequest;\n import javax.servlet.http.HttpServletResponse;\n import javax.xml.ws.WebServiceRef;\n import java.io.IOException;\n \n public class WebserviceServlet extends HttpServlet {\n \n @WebServiceRef\n @HandlerChain(file = \"client-handlers.xml\")\n private HelloPojo helloPojo;\n \n @WebServiceRef\n @HandlerChain(file = \"client-handlers.xml\")\n private HelloEjb helloEjb;\n \n protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {\n response.setContentType(\"text/plain\");\n ServletOutputStream out = response.getOutputStream();\n \n OUT = out;\n try {\n out.println(\"Pojo Webservice\");\n out.println(\" helloPojo.hello(\\\"Bob\\\")=\" + helloPojo.hello(\"Bob\"));\n out.println();\n out.println(\" helloPojo.hello(null)=\" + helloPojo.hello(null));\n out.println();\n out.println(\"EJB Webservice\");\n out.println(\" helloEjb.hello(\\\"Bob\\\")=\" + helloEjb.hello(\"Bob\"));\n out.println();\n out.println(\" helloEjb.hello(null)=\" + helloEjb.hello(null));\n out.println();\n } finally {\n OUT = out;\n }\n }\n \n private static ServletOutputStream OUT;\n \n public static void write(String message) {\n try {\n ServletOutputStream out = OUT;\n out.println(message);\n } catch (Exception e) {\n e.printStackTrace();\n }\n }\n }\n\n\n## persistence.xml\n\n <persistence xmlns=\"http://java.sun.com/xml/ns/persistence\" version=\"1.0\">\n <persistence-unit transaction-type=\"RESOURCE_LOCAL\" name=\"jpa-example\">\n <jta-data-source>java:openejb/Connector/Default JDBC Database</jta-data-source>\n <non-jta-data-source>java:openejb/Connector/Default Unmanaged JDBC Database</non-jta-data-source>\n <class>org.superbiz.servlet.JpaBean</class>\n \n <properties>\n <property name=\"openjpa.jdbc.SynchronizeMappings\" value=\"buildSchema(ForeignKeys=true)\"/>\n </properties>\n </persistence-unit>\n </persistence>\n\n## client-handlers.xml\n\n <jws:handler-chains xmlns:jws=\"http://java.sun.com/xml/ns/javaee\">\n <jws:handler-chain>\n <jws:handler>\n <jws:handler-name>ClientHandler</jws:handler-name>\n <jws:handler-class>org.superbiz.servlet.ClientHandler</jws:handler-class>\n </jws:handler>\n </jws:handler-chain>\n </jws:handler-chains>\n \n\n## server-handlers.xml\n\n <jws:handler-chains xmlns:jws=\"http://java.sun.com/xml/ns/javaee\">\n <jws:handler-chain>\n <jws:handler>\n <jws:handler-name>ServerHandler</jws:handler-name>\n <jws:handler-class>org.superbiz.servlet.ServerHandler</jws:handler-class>\n </jws:handler>\n </jws:handler-chain>\n </jws:handler-chains>\n \n\n## context.xml\n\n <Context>\n <!-- This only works if the context is installed under the correct name -->\n <Realm className=\"org.apache.catalina.realm.MemoryRealm\"\n pathname=\"webapps/ejb-examples-1.0-SNAPSHOT/WEB-INF/tomcat-users.xml\"/>\n \n <Environment\n name=\"context.xml/environment\"\n value=\"ContextString\"\n type=\"java.lang.String\"/>\n <Resource\n name=\"context.xml/resource\"\n auth=\"Container\"\n type=\"org.superbiz.servlet.ResourceBean\"\n factory=\"org.apache.naming.factory.BeanFactory\"\n value=\"ContextResource\"/>\n <ResourceLink\n name=\"context.xml/resource-link\"\n global=\"server.xml/environment\"\n type=\"java.lang.String\"/>\n \n <!-- web.xml resources -->\n <Resource\n name=\"web.xml/resource-env-ref\"\n auth=\"Container\"\n type=\"org.superbiz.servlet.ResourceBean\"\n factory=\"org.apache.naming.factory.BeanFactory\"\n value=\"ContextResourceEnvRef\"/>\n <Resource\n name=\"web.xml/resource-ref\"\n auth=\"Container\"\n type=\"org.superbiz.servlet.ResourceBean\"\n factory=\"org.apache.naming.factory.BeanFactory\"\n value=\"ContextResourceRef\"/>\n <ResourceLink\n name=\"web.xml/resource-link\"\n global=\"server.xml/environment\"\n type=\"java.lang.String\"/>\n </Context>\n \n\n## jetty-web.xml\n\n <Configure class=\"org.eclipse.jetty.webapp.WebAppContext\">\n <Get name=\"securityHandler\">\n <Set name=\"loginService\">\n <New class=\"org.eclipse.jetty.security.HashLoginService\">\n <Set name=\"name\">Test Realm</Set>\n <Set name=\"config\"><SystemProperty name=\"jetty.home\" default=\".\"/>/etc/realm.properties\n </Set>\n </New>\n </Set>\n </Get>\n </Configure>\n\n## tomcat-users.xml\n\n <tomcat-users>\n <user name=\"manager\" password=\"manager\" roles=\"manager,user\"/>\n <user name=\"user\" password=\"user\" roles=\"user\"/>\n </tomcat-users>\n \n\n## web.xml\n\n <web-app xmlns=\"http://java.sun.com/xml/ns/javaee\"\n xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:schemaLocation=\"http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd\"\n metadata-complete=\"false\"\n version=\"2.5\">\n \n <display-name>OpenEJB Servlet Examples</display-name>\n \n <servlet>\n <servlet-name>AnnotatedServlet</servlet-name>\n <servlet-class>org.superbiz.servlet.AnnotatedServlet</servlet-class>\n </servlet>\n \n <servlet-mapping>\n <servlet-name>AnnotatedServlet</servlet-name>\n <url-pattern>/annotated/*</url-pattern>\n </servlet-mapping>\n \n <servlet>\n <servlet-name>JpaServlet</servlet-name>\n <servlet-class>org.superbiz.servlet.JpaServlet</servlet-class>\n </servlet>\n \n <servlet-mapping>\n <servlet-name>JpaServlet</servlet-name>\n <url-pattern>/jpa/*</url-pattern>\n </servlet-mapping>\n \n <servlet>\n <servlet-name>JndiServlet</servlet-name>\n <servlet-class>org.superbiz.servlet.JndiServlet</servlet-class>\n </servlet>\n \n <servlet-mapping>\n <servlet-name>JndiServlet</servlet-name>\n <url-pattern>/jndi/*</url-pattern>\n </servlet-mapping>\n \n <servlet>\n <servlet-name>RunAsServlet</servlet-name>\n <servlet-class>org.superbiz.servlet.RunAsServlet</servlet-class>\n <run-as>\n <role-name>fake</role-name>\n </run-as>\n </servlet>\n \n <servlet-mapping>\n <servlet-name>RunAsServlet</servlet-name>\n <url-pattern>/runas/*</url-pattern>\n </servlet-mapping>\n \n <servlet>\n <servlet-name>SecureServlet</servlet-name>\n <servlet-class>org.superbiz.servlet.SecureServlet</servlet-class>\n </servlet>\n \n <servlet-mapping>\n <servlet-name>SecureServlet</servlet-name>\n <url-pattern>/secure/*</url-pattern>\n </servlet-mapping>\n \n <security-constraint>\n <web-resource-collection>\n <web-resource-name>Secure Area</web-resource-name>\n <url-pattern>/secure/*</url-pattern>\n <url-pattern>/runas/*</url-pattern>\n </web-resource-collection>\n <auth-constraint>\n <role-name>user</role-name>\n </auth-constraint>\n </security-constraint>\n \n <servlet>\n <servlet-name>WebserviceServlet</servlet-name>\n <servlet-class>org.superbiz.servlet.WebserviceServlet</servlet-class>\n </servlet>\n \n <servlet-mapping>\n <servlet-name>WebserviceServlet</servlet-name>\n <url-pattern>/webservice/*</url-pattern>\n </servlet-mapping>\n \n \n <servlet>\n <servlet-name>HelloPojoService</servlet-name>\n <servlet-class>org.superbiz.servlet.HelloPojoService</servlet-class>\n </servlet>\n \n <servlet-mapping>\n <servlet-name>HelloPojoService</servlet-name>\n <url-pattern>/hello</url-pattern>\n </servlet-mapping>\n \n <login-config>\n <auth-method>BASIC</auth-method>\n </login-config>\n \n <security-role>\n <role-name>manager</role-name>\n </security-role>\n \n <security-role>\n <role-name>user</role-name>\n </security-role>\n \n <env-entry>\n <env-entry-name>web.xml/env-entry</env-entry-name>\n <env-entry-type>java.lang.String</env-entry-type>\n <env-entry-value>WebValue</env-entry-value>\n </env-entry>\n \n <resource-ref>\n <res-ref-name>web.xml/Data Source</res-ref-name>\n <res-type>javax.sql.DataSource</res-type>\n <res-auth>Container</res-auth>\n </resource-ref>\n \n <resource-env-ref>\n <resource-env-ref-name>web.xml/Queue</resource-env-ref-name>\n <resource-env-ref-type>javax.jms.Queue</resource-env-ref-type>\n </resource-env-ref>\n \n <ejb-ref>\n <ejb-ref-name>web.xml/EjbRemote</ejb-ref-name>\n <ejb-ref-type>Session</ejb-ref-type>\n <remote>org.superbiz.servlet.AnnotatedEJBRemote</remote>\n </ejb-ref>\n \n <ejb-local-ref>\n <ejb-ref-name>web.xml/EjLocal</ejb-ref-name>\n <ejb-ref-type>Session</ejb-ref-type>\n <local>org.superbiz.servlet.AnnotatedEJBLocal</local>\n </ejb-local-ref>\n \n <persistence-unit-ref>\n <persistence-unit-ref-name>web.xml/PersistenceUnit</persistence-unit-ref-name>\n <persistence-unit-name>jpa-example</persistence-unit-name>\n </persistence-unit-ref>\n \n <persistence-context-ref>\n <persistence-context-ref-name>web.xml/PersistenceContext</persistence-context-ref-name>\n <persistence-unit-name>jpa-example</persistence-unit-name>\n <persistence-context-type>Transactional</persistence-context-type>\n </persistence-context-ref>\n </web-app>\n \n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/ejb-examples" | |
} | |
], | |
"exception":[ | |
{ | |
"name":"deltaspike-exception-handling", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/deltaspike-exception-handling" | |
} | |
], | |
"expression":[ | |
{ | |
"name":"schedule-expression", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/schedule-expression" | |
} | |
], | |
"field":[ | |
{ | |
"name":"cdi-produces-field", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/cdi-produces-field" | |
} | |
], | |
"fragment":[ | |
{ | |
"name":"persistence-fragment", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/persistence-fragment" | |
} | |
], | |
"fullstack":[ | |
{ | |
"name":"deltaspike-fullstack", | |
"readme":"Title: Apache DeltaSpike Demo\nNotice: Licensed to the Apache Software Foundation (ASF) under one\n or more contributor license agreements. See the NOTICE file\n distributed with this work for additional information\n regarding copyright ownership. The ASF licenses this file\n to you under the Apache License, Version 2.0 (the\n \"License\"); you may not use this file except in compliance\n with the License. You may obtain a copy of the License at\n .\n http://www.apache.org/licenses/LICENSE-2.0\n .\n Unless required by applicable law or agreed to in writing,\n software distributed under the License is distributed on an\n \"AS IS\" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY\n KIND, either express or implied. See the License for the\n specific language governing permissions and limitations\n under the License.\n\n<h2>Steps to run the example</h2>\n\nBuild and start the demo:\n\n mvn clean package tomee:run\n\nOpen:\n\n http://localhost:8080/\n\nThis example shows how to improve JSF2/CDI/BV/JPA applications with features provided by Apache DeltaSpike and MyFaces ExtVal.\n\n<h2>Intro of Apache DeltaSpike and MyFaces ExtVal</h2>\n\nThe 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.\n\nMyFaces Extensions Validator (aka ExtVal) is a JSF centric validation framework which is compatible with JSF 1.x and JSF 2.x.\nThis example shows how it improves the default integration of Bean-Validation (JSR-303) with JSF2 as well as meta-data based cross-field validation.\n\n\n<h2>Illustrated Features</h2>\n\n<h3>Apache DeltaSpike</h3>\n\n<ul>\n <li><a href=\"./src/main/java/org/superbiz/deltaspike/view/config/Pages.java\" target=\"_blank\">Type-safe view-config</a></li>\n <li><a href=\"./src/main/java/org/superbiz/deltaspike/view/InfoPage.java\" target=\"_blank\">Type-safe (custom) view-meta-data</a></li>\n <li><a href=\"./src/main/java/org/superbiz/deltaspike/view/MenuBean.java\" target=\"_blank\">Type-safe navigation</a></li>\n <li><a href=\"./src/main/java/org/superbiz/deltaspike/CustomProjectStage.java\" target=\"_blank\">Type-safe custom project-stage</a></li>\n <li><a href=\"./src/main/java/org/superbiz/deltaspike/view/UserHolder.java\" target=\"_blank\">@WindowScoped</a></li>\n <li><a href=\"./src/main/java/org/superbiz/deltaspike/view/MenuBean.java\" target=\"_blank\">Controlling DeltaSpike grouped-conversations with GroupedConversationManager</a></li>\n <li><a href=\"./src/main/java/org/superbiz/deltaspike/view/FeedbackPage.java\" target=\"_blank\">@GroupedConversationScoped</a></li>\n <li><a href=\"./src/main/java/org/superbiz/deltaspike/view/FeedbackPage.java\" target=\"_blank\">Manual conversation handling</a></li>\n <li><a href=\"./src/main/java/org/superbiz/deltaspike/view/security/LoginAccessDecisionVoter.java\" target=\"_blank\">Secured pages (AccessDecisionVoter)</a></li>\n <li><a href=\"./src/main/java/org/superbiz/deltaspike/repository/Repository.java\" target=\"_blank\">@Transactional</a></li>\n <li><a href=\"./src/main/java/org/superbiz/deltaspike/view/RegistrationPage.java\" target=\"_blank\">I18n (type-safe messages)</a></li>\n <li><a href=\"./src/main/java/org/superbiz/deltaspike/domain/validation/UniqueUserNameValidator.java\" target=\"_blank\">Dependency-Injection for JSR303 (BV) constraint-validators</a></li>\n <li><a href=\"./src/main/java/org/superbiz/deltaspike/DebugPhaseListener.java\" target=\"_blank\">Dependency-Injection for JSF phase-listeners</a></li>\n</ul>\n\n<h3>Apache MyFaces ExtVal</h3>\n\n<ul>\n <li><a href=\"./src/main/java/org/superbiz/myfaces/view/RegistrationPage.java\" target=\"_blank\">Cross-Field validation (@Equals)</a></li>\n <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>\n</ul>\n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/deltaspike-fullstack" | |
} | |
], | |
"groovy":[ | |
{ | |
"name":"groovy-jpa", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/groovy-jpa" | |
}, | |
{ | |
"name":"groovy-spock", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/groovy-spock" | |
}, | |
{ | |
"name":"groovy-cdi", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/groovy-cdi" | |
} | |
], | |
"handlerchain":[ | |
{ | |
"name":"webservice-handlerchain", | |
"readme":"Title: @WebService handlers with @HandlerChain\n\nIn this example we see a basic JAX-WS `@WebService` component use a handler chain to alter incoming and outgoing SOAP messages. SOAP Handlers are similar to Servlet Filters or EJB/CDI Interceptors.\n\nAt high level, the steps involved are:\n\n 1. Create handler(s) implementing `javax.xml.ws.handler.soap.SOAPHandler`\n 1. Declare and order them in an xml file via `<handler-chain>`\n 1. Associate the xml file with an `@WebService` component via `@HandlerChain`\n\n## The @HandlerChain\n\nFirst we'll start with our plain `@WebService` bean, called `Calculator`, which is annotated with `@HandlerChain`\n\n @Singleton\n @WebService(\n portName = \"CalculatorPort\",\n serviceName = \"CalculatorService\",\n targetNamespace = \"http://superbiz.org/wsdl\",\n endpointInterface = \"org.superbiz.calculator.wsh.CalculatorWs\")\n @HandlerChain(file = \"handlers.xml\")\n public class Calculator implements CalculatorWs {\n\n public int sum(int add1, int add2) {\n return add1 + add2;\n }\n\n public int multiply(int mul1, int mul2) {\n return mul1 * mul2;\n }\n }\n\nHere we see `@HandlerChain` pointing to a file called `handlers.xml`. This file could be called anything, but it must be in the same jar and java package as our `Calculator` component.\n\n## The <handler-chains> file\n\nOur `Calculator` service is in the package `org.superbiz.calculator.wsh`, which means our handler chain xml file must be at `org/superbiz/calculator/wsh/handlers.xml` in our application's classpath or the file will not be found and no handlers will be used.\n\nIn maven we achieve this by putting our handlers.xml in `src/main/resources` like so:\n\n - `src/main/resources/org/superbiz/calculator/wsh/handlers.xml`\n\nWith this file we declare and **order** our handler chain.\n\n <?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <handler-chains xmlns=\"http://java.sun.com/xml/ns/javaee\">\n <handler-chain>\n <handler>\n <handler-name>org.superbiz.calculator.wsh.Inflate</handler-name>\n <handler-class>org.superbiz.calculator.wsh.Inflate</handler-class>\n </handler>\n <handler>\n <handler-name>org.superbiz.calculator.wsh.Increment</handler-name>\n <handler-class>org.superbiz.calculator.wsh.Increment</handler-class>\n </handler>\n </handler-chain>\n </handler-chains>\n\nThe order as you might suspect is:\n\n - `Inflate`\n - `Increment`\n\n## The SOAPHandler implementation\n\nOur `Inflate` handler has the job of monitoring *responses* to the `sum` and `multiply` operations and making them 1000 times better. Manipulation of the message is done by walking the `SOAPBody` and editing the nodes. The `handleMessage` method is invoked for both requests and responses, so it is important to check the `SOAPBody` before attempting to naviage the nodes.\n\n import org.w3c.dom.Node;\n import javax.xml.namespace.QName;\n import javax.xml.soap.SOAPBody;\n import javax.xml.soap.SOAPException;\n import javax.xml.soap.SOAPMessage;\n import javax.xml.ws.handler.MessageContext;\n import javax.xml.ws.handler.soap.SOAPHandler;\n import javax.xml.ws.handler.soap.SOAPMessageContext;\n import java.util.Collections;\n import java.util.Set;\n\n public class Inflate implements SOAPHandler<SOAPMessageContext> {\n\n public boolean handleMessage(SOAPMessageContext mc) {\n try {\n final SOAPMessage message = mc.getMessage();\n final SOAPBody body = message.getSOAPBody();\n final String localName = body.getFirstChild().getLocalName();\n\n if (\"sumResponse\".equals(localName) || \"multiplyResponse\".equals(localName)) {\n final Node responseNode = body.getFirstChild();\n final Node returnNode = responseNode.getFirstChild();\n final Node intNode = returnNode.getFirstChild();\n\n final int value = new Integer(intNode.getNodeValue());\n intNode.setNodeValue(Integer.toString(value * 1000));\n }\n\n return true;\n } catch (SOAPException e) {\n return false;\n }\n }\n\n public Set<QName> getHeaders() {\n return Collections.emptySet();\n }\n\n public void close(MessageContext mc) {\n }\n\n public boolean handleFault(SOAPMessageContext mc) {\n return true;\n }\n }\n\nThe `Increment` handler is identical in code and therefore not shown. Instead of multiplying by 1000, it simply adds 1.\n\n## The TestCase\n\nWe use the JAX-WS API to create a Java client for our `Calculator` web service and use it to invoke both the `sum` and `multiply` operations. Note the clever use of math to assert both the existence and order of our handlers. If `Inflate` and `Increment` were reversed, the responses would be 11000 and 13000 respectively.\n\n public class CalculatorTest {\n\n @BeforeClass\n public static void setUp() throws Exception {\n Properties properties = new Properties();\n properties.setProperty(\"openejb.embedded.remotable\", \"true\");\n EJBContainer.createEJBContainer(properties);\n }\n\n @Test\n public void testCalculatorViaWsInterface() throws Exception {\n final Service calculatorService = Service.create(\n new URL(\"http://127.0.0.1:4204/Calculator?wsdl\"),\n new QName(\"http://superbiz.org/wsdl\", \"CalculatorService\"));\n\n assertNotNull(calculatorService);\n\n final CalculatorWs calculator = calculatorService.getPort(CalculatorWs.class);\n\n // we expect our answers to come back 1000 times better, plus one!\n assertEquals(10001, calculator.sum(4, 6));\n assertEquals(12001, calculator.multiply(3, 4));\n }\n }\n\n## Running the example\n\nSimply run `mvn clean install` and you should see output similar to the following:\n\n -------------------------------------------------------\n T E S T S\n -------------------------------------------------------\n Running org.superbiz.calculator.wsh.CalculatorTest\n INFO - openejb.home = /Users/dblevins/work/all/trunk/openejb/examples/webservice-handlers\n INFO - openejb.base = /Users/dblevins/work/all/trunk/openejb/examples/webservice-handlers\n INFO - Using 'javax.ejb.embeddable.EJBContainer=true'\n INFO - Cannot find the configuration file [conf/openejb.xml]. Will attempt to create one for the beans deployed.\n INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)\n INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)\n INFO - Creating TransactionManager(id=Default Transaction Manager)\n INFO - Creating SecurityService(id=Default Security Service)\n INFO - Beginning load: /Users/dblevins/work/all/trunk/openejb/examples/webservice-handlers/target/test-classes\n INFO - Beginning load: /Users/dblevins/work/all/trunk/openejb/examples/webservice-handlers/target/classes\n INFO - Configuring enterprise application: /Users/dblevins/work/all/trunk/openejb/examples/webservice-handlers\n INFO - Auto-deploying ejb Calculator: EjbDeployment(deployment-id=Calculator)\n INFO - Configuring Service(id=Default Singleton Container, type=Container, provider-id=Default Singleton Container)\n INFO - Auto-creating a container for bean Calculator: Container(type=SINGLETON, id=Default Singleton Container)\n INFO - Creating Container(id=Default Singleton Container)\n INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)\n INFO - Auto-creating a container for bean org.superbiz.calculator.wsh.CalculatorTest: Container(type=MANAGED, id=Default Managed Container)\n INFO - Creating Container(id=Default Managed Container)\n INFO - Enterprise application \"/Users/dblevins/work/all/trunk/openejb/examples/webservice-handlers\" loaded.\n INFO - Assembling app: /Users/dblevins/work/all/trunk/openejb/examples/webservice-handlers\n INFO - Created Ejb(deployment-id=Calculator, ejb-name=Calculator, container=Default Singleton Container)\n INFO - Started Ejb(deployment-id=Calculator, ejb-name=Calculator, container=Default Singleton Container)\n INFO - Deployed Application(path=/Users/dblevins/work/all/trunk/openejb/examples/webservice-handlers)\n INFO - Initializing network services\n INFO - Creating ServerService(id=httpejbd)\n INFO - Creating ServerService(id=cxf)\n INFO - Creating ServerService(id=admin)\n INFO - Creating ServerService(id=ejbd)\n INFO - Creating ServerService(id=ejbds)\n INFO - Initializing network services\n INFO - ** Starting Services **\n INFO - NAME IP PORT\n INFO - httpejbd 127.0.0.1 4204\n INFO - Creating Service {http://superbiz.org/wsdl}CalculatorService from class org.superbiz.calculator.wsh.CalculatorWs\n INFO - Setting the server's publish address to be http://nopath:80\n INFO - Webservice(wsdl=http://127.0.0.1:4204/Calculator, qname={http://superbiz.org/wsdl}CalculatorService) --> Ejb(id=Calculator)\n INFO - admin thread 127.0.0.1 4200\n INFO - ejbd 127.0.0.1 4201\n INFO - ejbd 127.0.0.1 4203\n INFO - -------\n INFO - Ready!\n INFO - Creating Service {http://superbiz.org/wsdl}CalculatorService from WSDL: http://127.0.0.1:4204/Calculator?wsdl\n INFO - Creating Service {http://superbiz.org/wsdl}CalculatorService from WSDL: http://127.0.0.1:4204/Calculator?wsdl\n INFO - Default SAAJ universe not set\n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.783 sec\n\n Results :\n\n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0\n\n## Inspecting the messages\n\nThe above would generate the following messages.\n\n### Calculator wsdl\n\n <?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <wsdl:definitions xmlns:wsdl=\"http://schemas.xmlsoap.org/wsdl/\"\n name=\"CalculatorService\" targetNamespace=\"http://superbiz.org/wsdl\"\n xmlns:soap=\"http://schemas.xmlsoap.org/wsdl/soap/\"\n xmlns:tns=\"http://superbiz.org/wsdl\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n <wsdl:types>\n <xsd:schema attributeFormDefault=\"unqualified\" elementFormDefault=\"unqualified\"\n targetNamespace=\"http://superbiz.org/wsdl\" xmlns:tns=\"http://superbiz.org/wsdl\"\n xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n <xsd:element name=\"multiply\" type=\"tns:multiply\"/>\n <xsd:complexType name=\"multiply\">\n <xsd:sequence>\n <xsd:element name=\"arg0\" type=\"xsd:int\"/>\n <xsd:element name=\"arg1\" type=\"xsd:int\"/>\n </xsd:sequence>\n </xsd:complexType>\n <xsd:element name=\"multiplyResponse\" type=\"tns:multiplyResponse\"/>\n <xsd:complexType name=\"multiplyResponse\">\n <xsd:sequence>\n <xsd:element name=\"return\" type=\"xsd:int\"/>\n </xsd:sequence>\n </xsd:complexType>\n <xsd:element name=\"sum\" type=\"tns:sum\"/>\n <xsd:complexType name=\"sum\">\n <xsd:sequence>\n <xsd:element name=\"arg0\" type=\"xsd:int\"/>\n <xsd:element name=\"arg1\" type=\"xsd:int\"/>\n </xsd:sequence>\n </xsd:complexType>\n <xsd:element name=\"sumResponse\" type=\"tns:sumResponse\"/>\n <xsd:complexType name=\"sumResponse\">\n <xsd:sequence>\n <xsd:element name=\"return\" type=\"xsd:int\"/>\n </xsd:sequence>\n </xsd:complexType>\n </xsd:schema>\n </wsdl:types>\n <wsdl:message name=\"multiplyResponse\">\n <wsdl:part element=\"tns:multiplyResponse\" name=\"parameters\">\n </wsdl:part>\n </wsdl:message>\n <wsdl:message name=\"sumResponse\">\n <wsdl:part element=\"tns:sumResponse\" name=\"parameters\">\n </wsdl:part>\n </wsdl:message>\n <wsdl:message name=\"sum\">\n <wsdl:part element=\"tns:sum\" name=\"parameters\">\n </wsdl:part>\n </wsdl:message>\n <wsdl:message name=\"multiply\">\n <wsdl:part element=\"tns:multiply\" name=\"parameters\">\n </wsdl:part>\n </wsdl:message>\n <wsdl:portType name=\"CalculatorWs\">\n <wsdl:operation name=\"multiply\">\n <wsdl:input message=\"tns:multiply\" name=\"multiply\">\n </wsdl:input>\n <wsdl:output message=\"tns:multiplyResponse\" name=\"multiplyResponse\">\n </wsdl:output>\n </wsdl:operation>\n <wsdl:operation name=\"sum\">\n <wsdl:input message=\"tns:sum\" name=\"sum\">\n </wsdl:input>\n <wsdl:output message=\"tns:sumResponse\" name=\"sumResponse\">\n </wsdl:output>\n </wsdl:operation>\n </wsdl:portType>\n <wsdl:binding name=\"CalculatorServiceSoapBinding\" type=\"tns:CalculatorWs\">\n <soap:binding style=\"document\" transport=\"http://schemas.xmlsoap.org/soap/http\"/>\n <wsdl:operation name=\"multiply\">\n <soap:operation soapAction=\"\" style=\"document\"/>\n <wsdl:input name=\"multiply\">\n <soap:body use=\"literal\"/>\n </wsdl:input>\n <wsdl:output name=\"multiplyResponse\">\n <soap:body use=\"literal\"/>\n </wsdl:output>\n </wsdl:operation>\n <wsdl:operation name=\"sum\">\n <soap:operation soapAction=\"\" style=\"document\"/>\n <wsdl:input name=\"sum\">\n <soap:body use=\"literal\"/>\n </wsdl:input>\n <wsdl:output name=\"sumResponse\">\n <soap:body use=\"literal\"/>\n </wsdl:output>\n </wsdl:operation>\n </wsdl:binding>\n <wsdl:service name=\"CalculatorService\">\n <wsdl:port binding=\"tns:CalculatorServiceSoapBinding\" name=\"CalculatorPort\">\n <soap:address location=\"http://127.0.0.1:4204/Calculator?wsdl\"/>\n </wsdl:port>\n </wsdl:service>\n </wsdl:definitions>\n\n### SOAP sum and sumResponse\n\nRequest:\n\n <?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n <soap:Body>\n <ns1:sum xmlns:ns1=\"http://superbiz.org/wsdl\">\n <arg0>4</arg0>\n <arg1>6</arg1>\n </ns1:sum>\n </soap:Body>\n </soap:Envelope>\n\nResponse:\n\n <?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n <soap:Body>\n <ns1:sumResponse xmlns:ns1=\"http://superbiz.org/wsdl\">\n <return>10001</return>\n </ns1:sumResponse>\n </soap:Body>\n </soap:Envelope>\n\n### SOAP multiply and multiplyResponse\n\nRequest:\n\n <?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n <soap:Body>\n <ns1:multiply xmlns:ns1=\"http://superbiz.org/wsdl\">\n <arg0>3</arg0>\n <arg1>4</arg1>\n </ns1:multiply>\n </soap:Body>\n </soap:Envelope>\n\nResponse:\n\n <?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n <soap:Body>\n <ns1:multiplyResponse xmlns:ns1=\"http://superbiz.org/wsdl\">\n <return>12001</return>\n </ns1:multiplyResponse>\n </soap:Body>\n </soap:Envelope>\n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/webservice-handlerchain" | |
} | |
], | |
"helloworld":[ | |
{ | |
"name":"helloworld-weblogic", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/helloworld-weblogic" | |
} | |
], | |
"hibernate":[ | |
{ | |
"name":"jpa-hibernate", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/jpa-hibernate" | |
} | |
], | |
"holder":[ | |
{ | |
"name":"webservice-holder", | |
"readme":"Title: @WebService OUT params via javax.xml.ws.Holder\n\nWith SOAP it is possible to return multiple values in a single request. This is impossible in Java as a method can only return one object.\n\nJAX-WS solves this problem with the concept of Holders. A `javax.xml.ws.Holder` is a simple wrapper object that can be passed into the `@WebService` method as a parameter. The application sets the value of the holder during the request and the server will send the value back as an OUT parameter.\n\n## Using @WebParam and javax.xml.ws.Holder\n\nThe `@WebParam` annotation allows us to declare the `sum` and `multiply` Holders as `WebParam.Mode.OUT` parameters. As mentioned, these holders are simply empty buckets the application can fill in with data to have sent to the client. The server will pass them in uninitialized.\n\n @Stateless\n @WebService(\n portName = \"CalculatorPort\",\n serviceName = \"CalculatorService\",\n targetNamespace = \"http://superbiz.org/wsdl\",\n endpointInterface = \"org.superbiz.ws.out.CalculatorWs\")\n public class Calculator implements CalculatorWs {\n\n public void sumAndMultiply(int a, int b,\n @WebParam(name = \"sum\", mode = WebParam.Mode.OUT) Holder<Integer> sum,\n @WebParam(name = \"multiply\", mode = WebParam.Mode.OUT) Holder<Integer> multiply) {\n sum.value = a + b;\n multiply.value = a * b;\n }\n }\n\nIf the Holders were specified as `WebParam.Mode.INOUT` params, then the client could use them to send data and the application as well. The `Holder` instances would then be initialized with the data from the client request. The application could check the data before eventually overriting it with the response values.\n\n## The WSDL\n\nThe above JAX-WS `@WebService` component results in the folliwing WSDL that will be created automatically. Note the `sumAndMultiplyResponse` complext type returns two elements. These match the `@WebParam` declarations and our two `Holder<Integer>` params.\n\n <?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <wsdl:definitions xmlns:wsdl=\"http://schemas.xmlsoap.org/wsdl/\"\n name=\"CalculatorService\"\n targetNamespace=\"http://superbiz.org/wsdl\"\n xmlns:soap=\"http://schemas.xmlsoap.org/wsdl/soap/\"\n xmlns:tns=\"http://superbiz.org/wsdl\"\n xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n <wsdl:types>\n <xsd:schema attributeFormDefault=\"unqualified\" elementFormDefault=\"unqualified\"\n targetNamespace=\"http://superbiz.org/wsdl\"\n xmlns:tns=\"http://superbiz.org/wsdl\"\n xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">\n <xsd:element name=\"sumAndMultiply\" type=\"tns:sumAndMultiply\"/>\n <xsd:complexType name=\"sumAndMultiply\">\n <xsd:sequence>\n <xsd:element name=\"arg0\" type=\"xsd:int\"/>\n <xsd:element name=\"arg1\" type=\"xsd:int\"/>\n </xsd:sequence>\n </xsd:complexType>\n <xsd:element name=\"sumAndMultiplyResponse\" type=\"tns:sumAndMultiplyResponse\"/>\n <xsd:complexType name=\"sumAndMultiplyResponse\">\n <xsd:sequence>\n <xsd:element minOccurs=\"0\" name=\"sum\" type=\"xsd:int\"/>\n <xsd:element minOccurs=\"0\" name=\"multiply\" type=\"xsd:int\"/>\n </xsd:sequence>\n </xsd:complexType>\n </xsd:schema>\n </wsdl:types>\n <wsdl:message name=\"sumAndMultiplyResponse\">\n <wsdl:part element=\"tns:sumAndMultiplyResponse\" name=\"parameters\"/>\n </wsdl:message>\n <wsdl:message name=\"sumAndMultiply\">\n <wsdl:part element=\"tns:sumAndMultiply\" name=\"parameters\"/>\n </wsdl:message>\n <wsdl:portType name=\"CalculatorWs\">\n <wsdl:operation name=\"sumAndMultiply\">\n <wsdl:input message=\"tns:sumAndMultiply\" name=\"sumAndMultiply\"/>\n <wsdl:output message=\"tns:sumAndMultiplyResponse\" name=\"sumAndMultiplyResponse\"/>\n </wsdl:operation>\n </wsdl:portType>\n <wsdl:binding name=\"CalculatorServiceSoapBinding\" type=\"tns:CalculatorWs\">\n <soap:binding style=\"document\" transport=\"http://schemas.xmlsoap.org/soap/http\"/>\n <wsdl:operation name=\"sumAndMultiply\">\n <soap:operation soapAction=\"\" style=\"document\"/>\n <wsdl:input name=\"sumAndMultiply\">\n <soap:body use=\"literal\"/>\n </wsdl:input>\n <wsdl:output name=\"sumAndMultiplyResponse\">\n <soap:body use=\"literal\"/>\n </wsdl:output>\n </wsdl:operation>\n </wsdl:binding>\n <wsdl:service name=\"CalculatorService\">\n <wsdl:port binding=\"tns:CalculatorServiceSoapBinding\" name=\"CalculatorPort\">\n <soap:address location=\"http://127.0.0.1:4204/Calculator?wsdl\"/>\n </wsdl:port>\n </wsdl:service>\n </wsdl:definitions>\n\n## Testing the OUT params\n\nHere we see a JAX-WS client executing the `sumAndMultiply` operation. Two empty `Holder` instances are created and passed in as parameters. The data from the `sumAndMultiplyResponse` is placed in the `Holder` instances and is then available to the client after the operation completes.\n\nThe holders themselves are not actually sent in the request unless they are configured as INOUT params via WebParam.Mode.INOUT on `@WebParam`\n\n import org.junit.BeforeClass;\n import org.junit.Test;\n\n import javax.ejb.embeddable.EJBContainer;\n import javax.xml.namespace.QName;\n import javax.xml.ws.Holder;\n import javax.xml.ws.Service;\n import java.net.URL;\n import java.util.Properties;\n\n import static org.junit.Assert.assertEquals;\n import static org.junit.Assert.assertNotNull;\n\n public class CalculatorTest {\n\n @BeforeClass\n public static void setUp() throws Exception {\n Properties properties = new Properties();\n properties.setProperty(\"openejb.embedded.remotable\", \"true\");\n //properties.setProperty(\"httpejbd.print\", \"true\");\n //properties.setProperty(\"httpejbd.indent.xml\", \"true\");\n EJBContainer.createEJBContainer(properties);\n }\n\n @Test\n public void outParams() throws Exception {\n final Service calculatorService = Service.create(\n new URL(\"http://127.0.0.1:4204/Calculator?wsdl\"),\n new QName(\"http://superbiz.org/wsdl\", \"CalculatorService\"));\n\n assertNotNull(calculatorService);\n\n final CalculatorWs calculator = calculatorService.getPort(CalculatorWs.class);\n\n final Holder<Integer> sum = new Holder<Integer>();\n final Holder<Integer> multiply = new Holder<Integer>();\n\n calculator.sumAndMultiply(4, 6, sum, multiply);\n\n assertEquals(10, (int) sum.value);\n assertEquals(24, (int) multiply.value);\n }\n }\n\n\n## Inspecting the messages\n\nThe above execution results in the following SOAP message.\n\n### SOAP sumAndMultiply <small>client request</small>\n\n <?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n <soap:Body>\n <ns1:sumAndMultiply xmlns:ns1=\"http://superbiz.org/wsdl\">\n <arg0>4</arg0>\n <arg1>6</arg1>\n </ns1:sumAndMultiply>\n </soap:Body>\n </soap:Envelope>\n\n### SOAP sumAndMultiplyResponse <small>server response</small>\n\n <?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <soap:Envelope xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\">\n <soap:Body>\n <ns1:sumAndMultiplyResponse xmlns:ns1=\"http://superbiz.org/wsdl\">\n <sum>10</sum>\n <multiply>24</multiply>\n </ns1:sumAndMultiplyResponse>\n </soap:Body>\n </soap:Envelope>\n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/webservice-holder" | |
} | |
], | |
"i18n":[ | |
{ | |
"name":"deltaspike-i18n", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/deltaspike-i18n" | |
} | |
], | |
"implementation":[ | |
{ | |
"name":"dynamic-implementation", | |
"readme":"Title: Dynamic Implementation\n\n*Help us document this example! Click the blue pencil icon in the upper right to edit this page.*\n\n## SocialBean\n\n package org.superbiz.dynamic;\n \n import org.apache.openejb.api.Proxy;\n \n import javax.ejb.Singleton;\n import javax.interceptor.Interceptors;\n \n @Singleton\n @Proxy(SocialHandler.class)\n @Interceptors(SocialInterceptor.class)\n public interface SocialBean {\n public String facebookStatus();\n \n public String twitterStatus();\n \n public String status();\n }\n\n## SocialHandler\n\n package org.superbiz.dynamic;\n \n import java.lang.reflect.InvocationHandler;\n import java.lang.reflect.Method;\n \n public class SocialHandler implements InvocationHandler {\n @Override\n public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {\n String mtd = method.getName();\n if (mtd.toLowerCase().contains(\"facebook\")) {\n return \"You think you have a life!\";\n } else if (mtd.toLowerCase().contains(\"twitter\")) {\n return \"Wow, you eat pop corn!\";\n }\n return \"Hey, you have no virtual friend!\";\n }\n }\n\n## SocialInterceptor\n\n packagenull\n }\n\n## SocialTest\n\n package org.superbiz.dynamic;\n \n import org.junit.AfterClass;\n import org.junit.BeforeClass;\n import org.junit.Test;\n \n import javax.ejb.embeddable.EJBContainer;\n \n import static junit.framework.Assert.assertTrue;\n \n public class SocialTest {\n private static SocialBean social;\n private static EJBContainer container;\n \n @BeforeClass\n public static void init() throws Exception {\n container = EJBContainer.createEJBContainer();\n social = (SocialBean) container.getContext().lookup(\"java:global/dynamic-implementation/SocialBean\");\n }\n \n @AfterClass\n public static void close() {\n container.close();\n }\n \n @Test\n public void simple() {\n assertTrue(social.facebookStatus().contains(\"think\"));\n assertTrue(social.twitterStatus().contains(\"eat\"));\n assertTrue(social.status().contains(\"virtual\"));\n }\n }\n\n# Running\n\n \n -------------------------------------------------------\n T E S T S\n -------------------------------------------------------\n Running org.superbiz.dynamic.SocialTest\n Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06\n http://tomee.apache.org/\n INFO - openejb.home = /Users/dblevins/examples/dynamic-implementation\n INFO - openejb.base = /Users/dblevins/examples/dynamic-implementation\n INFO - Using 'javax.ejb.embeddable.EJBContainer=true'\n INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)\n INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)\n INFO - Found EjbModule in classpath: /Users/dblevins/examples/dynamic-implementation/target/classes\n INFO - Beginning load: /Users/dblevins/examples/dynamic-implementation/target/classes\n INFO - Configuring enterprise application: /Users/dblevins/examples/dynamic-implementation\n INFO - Configuring Service(id=Default Singleton Container, type=Container, provider-id=Default Singleton Container)\n INFO - Auto-creating a container for bean SocialBean: Container(type=SINGLETON, id=Default Singleton Container)\n INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)\n INFO - Auto-creating a container for bean org.superbiz.dynamic.SocialTest: Container(type=MANAGED, id=Default Managed Container)\n INFO - Enterprise application \"/Users/dblevins/examples/dynamic-implementation\" loaded.\n INFO - Assembling app: /Users/dblevins/examples/dynamic-implementation\n INFO - Jndi(name=\"java:global/dynamic-implementation/SocialBean!org.superbiz.dynamic.SocialBean\")\n INFO - Jndi(name=\"java:global/dynamic-implementation/SocialBean\")\n INFO - Jndi(name=\"java:global/EjbModule236706648/org.superbiz.dynamic.SocialTest!org.superbiz.dynamic.SocialTest\")\n INFO - Jndi(name=\"java:global/EjbModule236706648/org.superbiz.dynamic.SocialTest\")\n INFO - Created Ejb(deployment-id=org.superbiz.dynamic.SocialTest, ejb-name=org.superbiz.dynamic.SocialTest, container=Default Managed Container)\n INFO - Created Ejb(deployment-id=SocialBean, ejb-name=SocialBean, container=Default Singleton Container)\n INFO - Started Ejb(deployment-id=org.superbiz.dynamic.SocialTest, ejb-name=org.superbiz.dynamic.SocialTest, container=Default Managed Container)\n INFO - Started Ejb(deployment-id=SocialBean, ejb-name=SocialBean, container=Default Singleton Container)\n INFO - Deployed Application(path=/Users/dblevins/examples/dynamic-implementation)\n INFO - Undeploying app: /Users/dblevins/examples/dynamic-implementation\n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.107 sec\n \n Results :\n \n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0\n \n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/dynamic-implementation" | |
}, | |
{ | |
"name":"dynamic-dao-implementation", | |
"readme":"Title: Dynamic DAO Implementation\n\nMany aspects of Data Access Objects (DAOs) are very repetitive and boiler plate. As a fun and experimental feature, TomEE supports dynamically implementing an interface\nthat is seen to have standard DAO-style methods.\n\nThe interface has to be annotated with @PersistenceContext to define which EntityManager to use.\n\nMethods should respect these conventions:\n\n * void save(Foo foo): persist foo\n * Foo update(Foo foo): merge foo\n * void delete(Foo foo): remove foo, if foo is detached it tries to attach it\n * Collection<Foo>|Foo namedQuery(String name[, Map<String, ?> params, int first, int max]): run the named query called name, params contains bindings, first and max are used for magination. Last three parameters are optionnals\n * Collection<Foo>|Foo nativeQuery(String name[, Map<String, ?> params, int first, int max]): run the native query called name, params contains bindings, first and max are used for magination. Last three parameters are optionnals\n * Collection<Foo>|Foo query(String value [, Map<String, ?> params, int first, int max]): run the query put as first parameter, params contains bindings, first and max are used for magination. Last three parameters are optionnals\n * Collection<Foo> findAll([int first, int max]): find all Foo, parameters are used for pagination\n * Collection<Foo> findByBar1AndBar2AndBar3(<bar 1 type> bar1, <bar 2 type> bar2, <bar3 type> bar3 [, int first, int max]): find all Foo with specified field values for bar1, bar2, bar3.\n\nDynamic finder can have as much as you want field constraints. For String like is used and for other type equals is used.\n\n# Example\n\n## User\n\n package org.superbiz.dynamic;\n \n import javax.persistence.Entity;\n import javax.persistence.GeneratedValue;\n import javax.persistence.Id;\n import javax.persistence.NamedQueries;\n import javax.persistence.NamedQuery;\n \n @Entity\n @NamedQueries({\n @NamedQuery(name = \"dynamic-ejb-impl-test.query\", query = \"SELECT u FROM User AS u WHERE u.name LIKE :name\"),\n @NamedQuery(name = \"dynamic-ejb-impl-test.all\", query = \"SELECT u FROM User AS u\")\n })\n public class User {\n @Id\n @GeneratedValue\n private long id;\n private String name;\n private int age;\n\n public long getId() {\n return id;\n }\n\n public void setId(long id) {\n this.id = id;\n }\n\n public String getName() {\n return name;\n }\n\n public void setName(String name) {\n this.name = name;\n }\n\n public int getAge() {\n return age;\n }\n\n public void setAge(int age) {\n this.age = age;\n }\n }\n\n## UserDao\n\n package org.superbiz.dynamic;\n \n \n import javax.ejb.Stateless;\n import javax.persistence.PersistenceContext;\n import java.util.Collection;\n import java.util.Map;\n \n @Stateless\n @PersistenceContext(name = \"dynamic\")\n public interface UserDao {\n User findById(long id);\n \n Collection<User> findByName(String name);\n \n Collection<User> findByNameAndAge(String name, int age);\n \n Collection<User> findAll();\n \n Collection<User> findAll(int first, int max);\n \n Collection<User> namedQuery(String name, Map<String, ?> params, int first, int max);\n \n Collection<User> namedQuery(String name, int first, int max, Map<String, ?> params);\n \n Collection<User> namedQuery(String name, Map<String, ?> params);\n \n Collection<User> namedQuery(String name);\n \n Collection<User> query(String value, Map<String, ?> params);\n \n void save(User u);\n \n void delete(User u);\n \n User update(User u);\n }\n\n## persistence.xml\n\n <persistence version=\"2.0\"\n xmlns=\"http://java.sun.com/xml/ns/persistence\"\n xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:schemaLocation=\"\n http://java.sun.com/xml/ns/persistence\n http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd\">\n <persistence-unit name=\"dynamic\" transaction-type=\"JTA\">\n <jta-data-source>jdbc/dynamicDB</jta-data-source>\n <class>org.superbiz.dynamic.User</class>\n <properties>\n <property name=\"openjpa.jdbc.SynchronizeMappings\" value=\"buildSchema(ForeignKeys=true)\"/>\n </properties>\n </persistence-unit>\n </persistence>\n \n\n## DynamicUserDaoTest\n\n package org.superbiz.dynamic;\n \n import junit.framework.Assert;\n import org.junit.BeforeClass;\n import org.junit.Test;\n \n import javax.ejb.EJBException;\n import javax.ejb.Stateless;\n import javax.ejb.embeddable.EJBContainer;\n import javax.naming.Context;\n import javax.persistence.EntityManager;\n import javax.persistence.NoResultException;\n import javax.persistence.PersistenceContext;\n import java.util.Collection;\n import java.util.HashMap;\n import java.util.Map;\n import java.util.Properties;\n \n import static junit.framework.Assert.assertEquals;\n import static junit.framework.Assert.assertNotNull;\n import static junit.framework.Assert.assertTrue;\n \n public class DynamicUserDaoTest {\n private static UserDao dao;\n private static Util util;\n \n @BeforeClass\n public static void init() throws Exception {\n final Properties p = new Properties();\n p.put(\"jdbc/dynamicDB\", \"new://Resource?type=DataSource\");\n p.put(\"jdbc/dynamicDB.JdbcDriver\", \"org.hsqldb.jdbcDriver\");\n p.put(\"jdbc/dynamicDB.JdbcUrl\", \"jdbc:hsqldb:mem:moviedb\");\n p.put(\"jdbc/dynamicDB.UserName\", \"sa\");\n p.put(\"jdbc/dynamicDB.Password\", \"\");\n \n final Context context = EJBContainer.createEJBContainer(p).getContext();\n dao = (UserDao) context.lookup(\"java:global/dynamic-dao-implementation/UserDao\");\n util = (Util) context.lookup(\"java:global/dynamic-dao-implementation/Util\");\n \n util.init(); // init database\n }\n \n @Test\n public void simple() {\n User user = dao.findById(1);\n assertNotNull(user);\n assertEquals(1, user.getId());\n }\n \n @Test\n public void findAll() {\n Collection<User> users = dao.findAll();\n assertEquals(10, users.size());\n }\n \n @Test\n public void pagination() {\n Collection<User> users = dao.findAll(0, 5);\n assertEquals(5, users.size());\n \n users = dao.findAll(6, 1);\n assertEquals(1, users.size());\n assertEquals(7, users.iterator().next().getId());\n }\n \n @Test\n public void persist() {\n User u = new User();\n dao.save(u);\n assertNotNull(u.getId());\n util.remove(u);\n }\n \n @Test\n public void remove() {\n User u = new User();\n dao.save(u);\n assertNotNull(u.getId());\n dao.delete(u);\n try {\n dao.findById(u.getId());\n Assert.fail();\n } catch (EJBException ee) {\n assertTrue(ee.getCause() instanceof NoResultException);\n }\n }\n \n @Test\n public void merge() {\n User u = new User();\n u.setAge(1);\n dao.save(u);\n assertEquals(1, u.getAge());\n assertNotNull(u.getId());\n \n u.setAge(2);\n dao.update(u);\n assertEquals(2, u.getAge());\n \n dao.delete(u);\n }\n \n @Test\n public void oneCriteria() {\n Collection<User> users = dao.findByName(\"foo\");\n assertEquals(4, users.size());\n for (User user : users) {\n assertEquals(\"foo\", user.getName());\n }\n }\n \n @Test\n public void twoCriteria() {\n Collection<User> users = dao.findByNameAndAge(\"bar-1\", 1);\n assertEquals(1, users.size());\n \n User user = users.iterator().next();\n assertEquals(\"bar-1\", user.getName());\n assertEquals(1, user.getAge());\n }\n \n @Test\n public void query() {\n Map<String, Object> params = new HashMap<String, Object>();\n params.put(\"name\", \"foo\");\n \n Collection<User> users = dao.namedQuery(\"dynamic-ejb-impl-test.query\", params, 0, 100);\n assertEquals(4, users.size());\n \n users = dao.namedQuery(\"dynamic-ejb-impl-test.query\", params);\n assertEquals(4, users.size());\n \n users = dao.namedQuery(\"dynamic-ejb-impl-test.query\", params, 0, 2);\n assertEquals(2, users.size());\n \n users = dao.namedQuery(\"dynamic-ejb-impl-test.query\", 0, 2, params);\n assertEquals(2, users.size());\n \n users = dao.namedQuery(\"dynamic-ejb-impl-test.all\");\n assertEquals(10, users.size());\n \n params.remove(\"name\");\n params.put(\"age\", 1);\n users = dao.query(\"SELECT u FROM User AS u WHERE u.age = :age\", params);\n assertEquals(3, users.size());\n }\n \n @Stateless\n public static class Util {\n @PersistenceContext\n private EntityManager em;\n \n public void remove(User o) {\n em.remove(em.find(User.class, o.getId()));\n }\n \n public void init() {\n for (int i = 0; i < 10; i++) {\n User u = new User();\n u.setAge(i % 4);\n if (i % 3 == 0) {\n u.setName(\"foo\");\n } else {\n u.setName(\"bar-\" + i);\n }\n em.persist(u);\n }\n }\n }\n }\n\n# Running\n\n \n -------------------------------------------------------\n T E S T S\n -------------------------------------------------------\n Running org.superbiz.dynamic.DynamicUserDaoTest\n Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06\n http://tomee.apache.org/\n INFO - openejb.home = /Users/dblevins/examples/dynamic-dao-implementation\n INFO - openejb.base = /Users/dblevins/examples/dynamic-dao-implementation\n INFO - Using 'javax.ejb.embeddable.EJBContainer=true'\n INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)\n INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)\n INFO - Configuring Service(id=jdbc/dynamicDB, type=Resource, provider-id=Default JDBC Database)\n INFO - Found EjbModule in classpath: /Users/dblevins/examples/dynamic-dao-implementation/target/classes\n INFO - Found EjbModule in classpath: /Users/dblevins/examples/dynamic-dao-implementation/target/test-classes\n INFO - Beginning load: /Users/dblevins/examples/dynamic-dao-implementation/target/classes\n INFO - Beginning load: /Users/dblevins/examples/dynamic-dao-implementation/target/test-classes\n INFO - Configuring enterprise application: /Users/dblevins/examples/dynamic-dao-implementation\n INFO - Configuring Service(id=Default Stateless Container, type=Container, provider-id=Default Stateless Container)\n INFO - Auto-creating a container for bean UserDao: Container(type=STATELESS, id=Default Stateless Container)\n INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)\n INFO - Auto-creating a container for bean org.superbiz.dynamic.DynamicUserDaoTest: Container(type=MANAGED, id=Default Managed Container)\n INFO - Configuring PersistenceUnit(name=dynamic)\n INFO - Auto-creating a Resource with id 'jdbc/dynamicDBNonJta' of type 'DataSource for 'dynamic'.\n INFO - Configuring Service(id=jdbc/dynamicDBNonJta, type=Resource, provider-id=jdbc/dynamicDB)\n INFO - Adjusting PersistenceUnit dynamic <non-jta-data-source> to Resource ID 'jdbc/dynamicDBNonJta' from 'null'\n INFO - Enterprise application \"/Users/dblevins/examples/dynamic-dao-implementation\" loaded.\n INFO - Assembling app: /Users/dblevins/examples/dynamic-dao-implementation\n INFO - PersistenceUnit(name=dynamic, provider=org.apache.openjpa.persistence.PersistenceProviderImpl) - provider time 417ms\n INFO - Jndi(name=\"java:global/dynamic-dao-implementation/UserDao!org.superbiz.dynamic.UserDao\")\n INFO - Jndi(name=\"java:global/dynamic-dao-implementation/UserDao\")\n INFO - Jndi(name=\"java:global/dynamic-dao-implementation/Util!org.superbiz.dynamic.DynamicUserDaoTest$Util\")\n INFO - Jndi(name=\"java:global/dynamic-dao-implementation/Util\")\n INFO - Jndi(name=\"java:global/EjbModule346613126/org.superbiz.dynamic.DynamicUserDaoTest!org.superbiz.dynamic.DynamicUserDaoTest\")\n INFO - Jndi(name=\"java:global/EjbModule346613126/org.superbiz.dynamic.DynamicUserDaoTest\")\n INFO - Created Ejb(deployment-id=UserDao, ejb-name=UserDao, container=Default Stateless Container)\n INFO - Created Ejb(deployment-id=Util, ejb-name=Util, container=Default Stateless Container)\n INFO - Created Ejb(deployment-id=org.superbiz.dynamic.DynamicUserDaoTest, ejb-name=org.superbiz.dynamic.DynamicUserDaoTest, container=Default Managed Container)\n INFO - Started Ejb(deployment-id=UserDao, ejb-name=UserDao, container=Default Stateless Container)\n INFO - Started Ejb(deployment-id=Util, ejb-name=Util, container=Default Stateless Container)\n INFO - Started Ejb(deployment-id=org.superbiz.dynamic.DynamicUserDaoTest, ejb-name=org.superbiz.dynamic.DynamicUserDaoTest, container=Default Managed Container)\n INFO - Deployed Application(path=/Users/dblevins/examples/dynamic-dao-implementation)\n WARN - Meta class \"org.superbiz.dynamic.User_\" for entity class org.superbiz.dynamic.User can not be registered with following exception \"java.security.PrivilegedActionException: java.lang.ClassNotFoundException: org.superbiz.dynamic.User_\"\n WARN - Query \"SELECT u FROM User AS u WHERE u.name LIKE :name\" is removed from cache excluded permanently. Query \"SELECT u FROM User AS u WHERE u.name LIKE :name\" is not cached because it uses pagination..\n Tests run: 9, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.471 sec\n \n Results :\n \n Tests run: 9, Failures: 0, Errors: 0, Skipped: 0\n \n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/dynamic-dao-implementation" | |
} | |
], | |
"inheritance":[ | |
{ | |
"name":"webservice-inheritance", | |
"readme":"Title: Webservice Inheritance\n\n*Help us document this example! Click the blue pencil icon in the upper right to edit this page.*\n\n## Item\n\n package org.superbiz.inheritance;\n \n import javax.persistence.Entity;\n import javax.persistence.GeneratedValue;\n import javax.persistence.GenerationType;\n import javax.persistence.Id;\n import javax.persistence.Inheritance;\n import javax.persistence.InheritanceType;\n import java.io.Serializable;\n \n @Entity\n @Inheritance(strategy = InheritanceType.JOINED)\n public class Item implements Serializable {\n @Id\n @GeneratedValue(strategy = GenerationType.AUTO)\n private Long id;\n private String brand;\n private String itemName;\n private double price;\n \n public Long getId() {\n return id;\n }\n \n public void setId(Long id) {\n this.id = id;\n }\n \n public String getBrand() {\n return brand;\n }\n \n public void setBrand(String brand) {\n this.brand = brand;\n }\n \n public String getItemName() {\n return itemName;\n }\n \n public void setItemName(String itemName) {\n this.itemName = itemName;\n }\n \n public double getPrice() {\n return price;\n }\n \n public void setPrice(double price) {\n this.price = price;\n }\n }\n\n## Tower\n\n package org.superbiz.inheritance;\n \n import javax.persistence.Entity;\n \n @Entity\n public class Tower extends Item {\n private Fit fit;\n private String tubing;\n \n public static enum Fit {\n Custom, Exact, Universal\n }\n \n public Fit getFit() {\n return fit;\n }\n \n public void setFit(Fit fit) {\n this.fit = fit;\n }\n \n public String getTubing() {\n return tubing;\n }\n \n public void setTubing(String tubing) {\n this.tubing = tubing;\n }\n \n ;\n }\n\n## Wakeboard\n\n package org.superbiz.inheritance;\n \n import javax.persistence.Entity;\n \n @Entity\n public class Wakeboard extends Wearable {\n }\n\n## WakeboardBinding\n\n package org.superbiz.inheritance;\n \n import javax.persistence.Entity;\n \n @Entity\n public class WakeboardBinding extends Wearable {\n }\n\n## WakeRiderImpl\n\n package org.superbiz.inheritance;\n \n import javax.ejb.Stateless;\n import javax.jws.WebService;\n import javax.persistence.EntityManager;\n import javax.persistence.PersistenceContext;\n import javax.persistence.PersistenceContextType;\n import javax.persistence.Query;\n import java.util.List;\n \n /**\n * This is an EJB 3 style pojo stateless session bean Every stateless session\n * bean implementation must be annotated using the annotation @Stateless This\n * EJB has a single interface: {@link WakeRiderWs} a webservice interface.\n */\n @Stateless\n @WebService(\n portName = \"InheritancePort\",\n serviceName = \"InheritanceWsService\",\n targetNamespace = \"http://superbiz.org/wsdl\",\n endpointInterface = \"org.superbiz.inheritance.WakeRiderWs\")\n public class WakeRiderImpl implements WakeRiderWs {\n \n @PersistenceContext(unitName = \"wakeboard-unit\", type = PersistenceContextType.TRANSACTION)\n private EntityManager entityManager;\n \n public void addItem(Item item) throws Exception {\n entityManager.persist(item);\n }\n \n public void deleteMovie(Item item) throws Exception {\n entityManager.remove(item);\n }\n \n public List<Item> getItems() throws Exception {\n Query query = entityManager.createQuery(\"SELECT i FROM Item i\");\n List<Item> items = query.getResultList();\n return items;\n }\n }\n\n## WakeRiderWs\n\n package org.superbiz.inheritance;\n \n import javax.jws.WebService;\n import javax.xml.bind.annotation.XmlSeeAlso;\n import java.util.List;\n \n /**\n * This is an EJB 3 webservice interface that uses inheritance.\n */\n @WebService(targetNamespace = \"http://superbiz.org/wsdl\")\n @XmlSeeAlso({Wakeboard.class, WakeboardBinding.class, Tower.class})\n public interface WakeRiderWs {\n public void addItem(Item item) throws Exception;\n \n public void deleteMovie(Item item) throws Exception;\n \n public List<Item> getItems() throws Exception;\n }\n\n## Wearable\n\n package org.superbiz.inheritance;\n \n import javax.persistence.MappedSuperclass;\n \n @MappedSuperclass\n public abstract class Wearable extends Item {\n protected String size;\n \n public String getSize() {\n return size;\n }\n \n public void setSize(String size) {\n this.size = size;\n }\n }\n\n## ejb-jar.xml\n\n <ejb-jar/>\n \n\n## persistence.xml\n\n <persistence xmlns=\"http://java.sun.com/xml/ns/persistence\" version=\"1.0\">\n \n <persistence-unit name=\"wakeboard-unit\">\n \n <jta-data-source>wakeBoardDatabase</jta-data-source>\n <non-jta-data-source>wakeBoardDatabaseUnmanaged</non-jta-data-source>\n \n <class>org.superbiz.inheritance.Item</class>\n <class>org.superbiz.inheritance.Tower</class>\n <class>org.superbiz.inheritance.Wakeboard</class>\n <class>org.superbiz.inheritance.WakeboardBinding</class>\n <class>org.superbiz.inheritance.Wearable</class>\n \n <properties>\n <property name=\"openjpa.jdbc.SynchronizeMappings\" value=\"buildSchema(ForeignKeys=true)\"/>\n </properties>\n \n </persistence-unit>\n </persistence>\n\n## InheritanceTest\n\n package org.superbiz.inheritance;\n \n import junit.framework.TestCase;\n import org.superbiz.inheritance.Tower.Fit;\n \n import javax.naming.Context;\n import javax.naming.InitialContext;\n import javax.xml.namespace.QName;\n import javax.xml.ws.Service;\n import java.net.URL;\n import java.util.List;\n import java.util.Properties;\n \n public class InheritanceTest extends TestCase {\n \n //START SNIPPET: setup\t\n private InitialContext initialContext;\n \n protected void setUp() throws Exception {\n \n Properties p = new Properties();\n p.put(Context.INITIAL_CONTEXT_FACTORY, \"org.apache.openejb.core.LocalInitialContextFactory\");\n p.put(\"wakeBoardDatabase\", \"new://Resource?type=DataSource\");\n p.put(\"wakeBoardDatabase.JdbcDriver\", \"org.hsqldb.jdbcDriver\");\n p.put(\"wakeBoardDatabase.JdbcUrl\", \"jdbc:hsqldb:mem:wakeBoarddb\");\n \n p.put(\"wakeBoardDatabaseUnmanaged\", \"new://Resource?type=DataSource\");\n p.put(\"wakeBoardDatabaseUnmanaged.JdbcDriver\", \"org.hsqldb.jdbcDriver\");\n p.put(\"wakeBoardDatabaseUnmanaged.JdbcUrl\", \"jdbc:hsqldb:mem:wakeBoarddb\");\n p.put(\"wakeBoardDatabaseUnmanaged.JtaManaged\", \"false\");\n \n p.put(\"openejb.embedded.remotable\", \"true\");\n \n initialContext = new InitialContext(p);\n }\n //END SNIPPET: setup \n \n /**\n * Create a webservice client using wsdl url\n *\n * @throws Exception\n */\n //START SNIPPET: webservice\n public void testInheritanceViaWsInterface() throws Exception {\n Service service = Service.create(\n new URL(\"http://127.0.0.1:4204/WakeRiderImpl?wsdl\"),\n new QName(\"http://superbiz.org/wsdl\", \"InheritanceWsService\"));\n assertNotNull(service);\n \n WakeRiderWs ws = service.getPort(WakeRiderWs.class);\n \n Tower tower = createTower();\n Item item = createItem();\n Wakeboard wakeBoard = createWakeBoard();\n WakeboardBinding wakeBoardbinding = createWakeboardBinding();\n \n ws.addItem(tower);\n ws.addItem(item);\n ws.addItem(wakeBoard);\n ws.addItem(wakeBoardbinding);\n \n \n List<Item> returnedItems = ws.getItems();\n \n assertEquals(\"testInheritanceViaWsInterface, nb Items\", 4, returnedItems.size());\n \n //check tower\n assertEquals(\"testInheritanceViaWsInterface, first Item\", returnedItems.get(0).getClass(), Tower.class);\n tower = (Tower) returnedItems.get(0);\n assertEquals(\"testInheritanceViaWsInterface, first Item\", tower.getBrand(), \"Tower brand\");\n assertEquals(\"testInheritanceViaWsInterface, first Item\", tower.getFit().ordinal(), Fit.Custom.ordinal());\n assertEquals(\"testInheritanceViaWsInterface, first Item\", tower.getItemName(), \"Tower item name\");\n assertEquals(\"testInheritanceViaWsInterface, first Item\", tower.getPrice(), 1.0d);\n assertEquals(\"testInheritanceViaWsInterface, first Item\", tower.getTubing(), \"Tower tubing\");\n \n //check item\n assertEquals(\"testInheritanceViaWsInterface, second Item\", returnedItems.get(1).getClass(), Item.class);\n item = (Item) returnedItems.get(1);\n assertEquals(\"testInheritanceViaWsInterface, second Item\", item.getBrand(), \"Item brand\");\n assertEquals(\"testInheritanceViaWsInterface, second Item\", item.getItemName(), \"Item name\");\n assertEquals(\"testInheritanceViaWsInterface, second Item\", item.getPrice(), 2.0d);\n \n //check wakeboard\n assertEquals(\"testInheritanceViaWsInterface, third Item\", returnedItems.get(2).getClass(), Wakeboard.class);\n wakeBoard = (Wakeboard) returnedItems.get(2);\n assertEquals(\"testInheritanceViaWsInterface, third Item\", wakeBoard.getBrand(), \"Wakeboard brand\");\n assertEquals(\"testInheritanceViaWsInterface, third Item\", wakeBoard.getItemName(), \"Wakeboard item name\");\n assertEquals(\"testInheritanceViaWsInterface, third Item\", wakeBoard.getPrice(), 3.0d);\n assertEquals(\"testInheritanceViaWsInterface, third Item\", wakeBoard.getSize(), \"WakeBoard size\");\n \n //check wakeboardbinding\n assertEquals(\"testInheritanceViaWsInterface, fourth Item\", returnedItems.get(3).getClass(), WakeboardBinding.class);\n wakeBoardbinding = (WakeboardBinding) returnedItems.get(3);\n assertEquals(\"testInheritanceViaWsInterface, fourth Item\", wakeBoardbinding.getBrand(), \"Wakeboardbinding brand\");\n assertEquals(\"testInheritanceViaWsInterface, fourth Item\", wakeBoardbinding.getItemName(), \"Wakeboardbinding item name\");\n assertEquals(\"testInheritanceViaWsInterface, fourth Item\", wakeBoardbinding.getPrice(), 4.0d);\n assertEquals(\"testInheritanceViaWsInterface, fourth Item\", wakeBoardbinding.getSize(), \"WakeBoardbinding size\");\n }\n //END SNIPPET: webservice\n \n private Tower createTower() {\n Tower tower = new Tower();\n tower.setBrand(\"Tower brand\");\n tower.setFit(Fit.Custom);\n tower.setItemName(\"Tower item name\");\n tower.setPrice(1.0f);\n tower.setTubing(\"Tower tubing\");\n return tower;\n }\n \n private Item createItem() {\n Item item = new Item();\n item.setBrand(\"Item brand\");\n item.setItemName(\"Item name\");\n item.setPrice(2.0f);\n return item;\n }\n \n private Wakeboard createWakeBoard() {\n Wakeboard wakeBoard = new Wakeboard();\n wakeBoard.setBrand(\"Wakeboard brand\");\n wakeBoard.setItemName(\"Wakeboard item name\");\n wakeBoard.setPrice(3.0f);\n wakeBoard.setSize(\"WakeBoard size\");\n return wakeBoard;\n }\n \n private WakeboardBinding createWakeboardBinding() {\n WakeboardBinding wakeBoardBinding = new WakeboardBinding();\n wakeBoardBinding.setBrand(\"Wakeboardbinding brand\");\n wakeBoardBinding.setItemName(\"Wakeboardbinding item name\");\n wakeBoardBinding.setPrice(4.0f);\n wakeBoardBinding.setSize(\"WakeBoardbinding size\");\n return wakeBoardBinding;\n }\n }\n\n# Running\n\n \n -------------------------------------------------------\n T E S T S\n -------------------------------------------------------\n Running org.superbiz.inheritance.InheritanceTest\n Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06\n http://tomee.apache.org/\n INFO - openejb.home = /Users/dblevins/examples/webservice-inheritance\n INFO - openejb.base = /Users/dblevins/examples/webservice-inheritance\n INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)\n INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)\n INFO - Configuring Service(id=wakeBoardDatabaseUnmanaged, type=Resource, provider-id=Default JDBC Database)\n INFO - Configuring Service(id=wakeBoardDatabase, type=Resource, provider-id=Default JDBC Database)\n INFO - Found EjbModule in classpath: /Users/dblevins/examples/webservice-inheritance/target/classes\n INFO - Beginning load: /Users/dblevins/examples/webservice-inheritance/target/classes\n INFO - Configuring enterprise application: /Users/dblevins/examples/webservice-inheritance/classpath.ear\n INFO - Configuring Service(id=Default Stateless Container, type=Container, provider-id=Default Stateless Container)\n INFO - Auto-creating a container for bean WakeRiderImpl: Container(type=STATELESS, id=Default Stateless Container)\n INFO - Configuring PersistenceUnit(name=wakeboard-unit)\n INFO - Enterprise application \"/Users/dblevins/examples/webservice-inheritance/classpath.ear\" loaded.\n INFO - Assembling app: /Users/dblevins/examples/webservice-inheritance/classpath.ear\n INFO - PersistenceUnit(name=wakeboard-unit, provider=org.apache.openjpa.persistence.PersistenceProviderImpl) - provider time 396ms\n INFO - Created Ejb(deployment-id=WakeRiderImpl, ejb-name=WakeRiderImpl, container=Default Stateless Container)\n INFO - Started Ejb(deployment-id=WakeRiderImpl, ejb-name=WakeRiderImpl, container=Default Stateless Container)\n INFO - Deployed Application(path=/Users/dblevins/examples/webservice-inheritance/classpath.ear)\n INFO - Initializing network services\n INFO - Creating ServerService(id=httpejbd)\n INFO - Creating ServerService(id=cxf)\n INFO - Creating ServerService(id=admin)\n INFO - Creating ServerService(id=ejbd)\n INFO - Creating ServerService(id=ejbds)\n INFO - Initializing network services\n ** Starting Services **\n NAME IP PORT \n httpejbd 127.0.0.1 4204 \n admin thread 127.0.0.1 4200 \n ejbd 127.0.0.1 4201 \n ejbd 127.0.0.1 4203 \n -------\n Ready!\n WARN - Found no persistent property in \"org.superbiz.inheritance.WakeboardBinding\"\n WARN - Found no persistent property in \"org.superbiz.inheritance.Wakeboard\"\n WARN - Found no persistent property in \"org.superbiz.inheritance.WakeboardBinding\"\n WARN - Found no persistent property in \"org.superbiz.inheritance.Wakeboard\"\n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 4.442 sec\n \n Results :\n \n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0\n \n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/webservice-inheritance" | |
} | |
], | |
"injection":[ | |
{ | |
"name":"injection-of-connectionfactory", | |
"readme":"Title: Injection Of Connectionfactory\n\n*Help us document this example! Click the blue pencil icon in the upper right to edit this page.*\n\n## Messages\n\n package org.superbiz.injection.jms;\n \n import javax.annotation.Resource;\n import javax.ejb.Stateless;\n import javax.jms.Connection;\n import javax.jms.ConnectionFactory;\n import javax.jms.DeliveryMode;\n import javax.jms.JMSException;\n import javax.jms.MessageConsumer;\n import javax.jms.MessageProducer;\n import javax.jms.Queue;\n import javax.jms.Session;\n import javax.jms.TextMessage;\n \n @Stateless\n public class Messages {\n \n @Resource\n private ConnectionFactory connectionFactory;\n \n @Resource\n private Queue chatQueue;\n \n \n public void sendMessage(String text) throws JMSException {\n \n Connection connection = null;\n Session session = null;\n \n try {\n connection = connectionFactory.createConnection();\n connection.start();\n \n // Create a Session\n session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);\n \n // Create a MessageProducer from the Session to the Topic or Queue\n MessageProducer producer = session.createProducer(chatQueue);\n producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);\n \n // Create a message\n TextMessage message = session.createTextMessage(text);\n \n // Tell the producer to send the message\n producer.send(message);\n } finally {\n // Clean up\n if (session != null) session.close();\n if (connection != null) connection.close();\n }\n }\n \n public String receiveMessage() throws JMSException {\n \n Connection connection = null;\n Session session = null;\n MessageConsumer consumer = null;\n try {\n connection = connectionFactory.createConnection();\n connection.start();\n \n // Create a Session\n session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);\n \n // Create a MessageConsumer from the Session to the Topic or Queue\n consumer = session.createConsumer(chatQueue);\n \n // Wait for a message\n TextMessage message = (TextMessage) consumer.receive(1000);\n \n return message.getText();\n } finally {\n if (consumer != null) consumer.close();\n if (session != null) session.close();\n if (connection != null) connection.close();\n }\n }\n }\n\n## MessagingBeanTest\n\n package org.superbiz.injection.jms;\n \n import junit.framework.TestCase;\n \n import javax.ejb.embeddable.EJBContainer;\n import javax.naming.Context;\n \n public class MessagingBeanTest extends TestCase {\n \n public void test() throws Exception {\n \n final Context context = EJBContainer.createEJBContainer().getContext();\n \n Messages messages = (Messages) context.lookup(\"java:global/injection-of-connectionfactory/Messages\");\n \n messages.sendMessage(\"Hello World!\");\n messages.sendMessage(\"How are you?\");\n messages.sendMessage(\"Still spinning?\");\n \n assertEquals(messages.receiveMessage(), \"Hello World!\");\n assertEquals(messages.receiveMessage(), \"How are you?\");\n assertEquals(messages.receiveMessage(), \"Still spinning?\");\n }\n }\n\n# Running\n\n \n -------------------------------------------------------\n T E S T S\n -------------------------------------------------------\n Running org.superbiz.injection.jms.MessagingBeanTest\n Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06\n http://tomee.apache.org/\n INFO - openejb.home = /Users/dblevins/examples/injection-of-connectionfactory\n INFO - openejb.base = /Users/dblevins/examples/injection-of-connectionfactory\n INFO - Using 'javax.ejb.embeddable.EJBContainer=true'\n INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)\n INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)\n INFO - Found EjbModule in classpath: /Users/dblevins/examples/injection-of-connectionfactory/target/classes\n INFO - Beginning load: /Users/dblevins/examples/injection-of-connectionfactory/target/classes\n INFO - Configuring enterprise application: /Users/dblevins/examples/injection-of-connectionfactory\n WARN - Method 'lookup' is not available for 'javax.annotation.Resource'. Probably using an older Runtime.\n INFO - Configuring Service(id=Default Stateless Container, type=Container, provider-id=Default Stateless Container)\n INFO - Auto-creating a container for bean Messages: Container(type=STATELESS, id=Default Stateless Container)\n INFO - Configuring Service(id=Default JMS Connection Factory, type=Resource, provider-id=Default JMS Connection Factory)\n INFO - Auto-creating a Resource with id 'Default JMS Connection Factory' of type 'javax.jms.ConnectionFactory for 'Messages'.\n INFO - Configuring Service(id=Default JMS Resource Adapter, type=Resource, provider-id=Default JMS Resource Adapter)\n INFO - Auto-linking resource-ref 'java:comp/env/org.superbiz.injection.jms.Messages/connectionFactory' in bean Messages to Resource(id=Default JMS Connection Factory)\n INFO - Configuring Service(id=org.superbiz.injection.jms.Messages/chatQueue, type=Resource, provider-id=Default Queue)\n INFO - Auto-creating a Resource with id 'org.superbiz.injection.jms.Messages/chatQueue' of type 'javax.jms.Queue for 'Messages'.\n INFO - Auto-linking resource-env-ref 'java:comp/env/org.superbiz.injection.jms.Messages/chatQueue' in bean Messages to Resource(id=org.superbiz.injection.jms.Messages/chatQueue)\n INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)\n INFO - Auto-creating a container for bean org.superbiz.injection.jms.MessagingBeanTest: Container(type=MANAGED, id=Default Managed Container)\n INFO - Enterprise application \"/Users/dblevins/examples/injection-of-connectionfactory\" loaded.\n INFO - Assembling app: /Users/dblevins/examples/injection-of-connectionfactory\n INFO - Jndi(name=\"java:global/injection-of-connectionfactory/Messages!org.superbiz.injection.jms.Messages\")\n INFO - Jndi(name=\"java:global/injection-of-connectionfactory/Messages\")\n INFO - Jndi(name=\"java:global/EjbModule1634151355/org.superbiz.injection.jms.MessagingBeanTest!org.superbiz.injection.jms.MessagingBeanTest\")\n INFO - Jndi(name=\"java:global/EjbModule1634151355/org.superbiz.injection.jms.MessagingBeanTest\")\n INFO - Created Ejb(deployment-id=Messages, ejb-name=Messages, container=Default Stateless Container)\n INFO - Created Ejb(deployment-id=org.superbiz.injection.jms.MessagingBeanTest, ejb-name=org.superbiz.injection.jms.MessagingBeanTest, container=Default Managed Container)\n INFO - Started Ejb(deployment-id=Messages, ejb-name=Messages, container=Default Stateless Container)\n INFO - Started Ejb(deployment-id=org.superbiz.injection.jms.MessagingBeanTest, ejb-name=org.superbiz.injection.jms.MessagingBeanTest, container=Default Managed Container)\n INFO - Deployed Application(path=/Users/dblevins/examples/injection-of-connectionfactory)\n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.562 sec\n \n Results :\n \n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0\n \n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/injection-of-connectionfactory" | |
}, | |
{ | |
"name":"testcase-injection", | |
"readme":"Title: Testcase Injection\n\n*Help us document this example! Click the blue pencil icon in the upper right to edit this page.*\n\n## Movie\n\n package org.superbiz.testinjection;\n \n import javax.persistence.Entity;\n \n @Entity\n public class Movie {\n \n private String director;\n private String title;\n private int year;\n \n public Movie() {\n }\n \n public Movie(String director, String title, int year) {\n this.director = director;\n this.title = title;\n this.year = year;\n }\n \n public String getDirector() {\n return director;\n }\n \n public void setDirector(String director) {\n this.director = director;\n }\n \n public String getTitle() {\n return title;\n }\n \n public void setTitle(String title) {\n this.title = title;\n }\n \n public int getYear() {\n return year;\n }\n \n public void setYear(int year) {\n this.year = year;\n }\n \n }\n\n## Movies\n\n package org.superbiz.testinjection;\n \n import javax.ejb.Stateful;\n import javax.ejb.TransactionAttribute;\n import javax.persistence.EntityManager;\n import javax.persistence.PersistenceContext;\n import javax.persistence.PersistenceContextType;\n import javax.persistence.Query;\n import java.util.List;\n \n import static javax.ejb.TransactionAttributeType.MANDATORY;\n \n //START SNIPPET: code\n @Stateful\n @TransactionAttribute(MANDATORY)\n public class Movies {\n \n @PersistenceContext(unitName = \"movie-unit\", type = PersistenceContextType.TRANSACTION)\n private EntityManager entityManager;\n \n public void addMovie(Movie movie) throws Exception {\n entityManager.persist(movie);\n }\n \n public void deleteMovie(Movie movie) throws Exception {\n entityManager.remove(movie);\n }\n \n public List<Movie> getMovies() throws Exception {\n Query query = entityManager.createQuery(\"SELECT m from Movie as m\");\n return query.getResultList();\n }\n }\n\n## persistence.xml\n\n <persistence xmlns=\"http://java.sun.com/xml/ns/persistence\" version=\"1.0\">\n \n <persistence-unit name=\"movie-unit\">\n <jta-data-source>movieDatabase</jta-data-source>\n <non-jta-data-source>movieDatabaseUnmanaged</non-jta-data-source>\n <class>org.superbiz.testinjection.Movie</class>\n \n <properties>\n <property name=\"openjpa.jdbc.SynchronizeMappings\" value=\"buildSchema(ForeignKeys=true)\"/>\n </properties>\n </persistence-unit>\n </persistence>\n\n## MoviesTest\n\n package org.superbiz.testinjection;\n \n import junit.framework.TestCase;\n \n import javax.annotation.Resource;\n import javax.ejb.EJB;\n import javax.ejb.embeddable.EJBContainer;\n import javax.persistence.EntityManager;\n import javax.persistence.PersistenceContext;\n import javax.transaction.UserTransaction;\n import java.util.List;\n import java.util.Properties;\n \n //START SNIPPET: code\n public class MoviesTest extends TestCase {\n \n @EJB\n private Movies movies;\n \n @Resource\n private UserTransaction userTransaction;\n \n @PersistenceContext\n private EntityManager entityManager;\n \n public void setUp() throws Exception {\n Properties p = new Properties();\n p.put(\"movieDatabase\", \"new://Resource?type=DataSource\");\n p.put(\"movieDatabase.JdbcDriver\", \"org.hsqldb.jdbcDriver\");\n p.put(\"movieDatabase.JdbcUrl\", \"jdbc:hsqldb:mem:moviedb\");\n \n EJBContainer.createEJBContainer(p).getContext().bind(\"inject\", this);\n }\n \n public void test() throws Exception {\n \n userTransaction.begin();\n \n try {\n entityManager.persist(new Movie(\"Quentin Tarantino\", \"Reservoir Dogs\", 1992));\n entityManager.persist(new Movie(\"Joel Coen\", \"Fargo\", 1996));\n entityManager.persist(new Movie(\"Joel Coen\", \"The Big Lebowski\", 1998));\n \n List<Movie> list = movies.getMovies();\n assertEquals(\"List.size()\", 3, list.size());\n \n for (Movie movie : list) {\n movies.deleteMovie(movie);\n }\n \n assertEquals(\"Movies.getMovies()\", 0, movies.getMovies().size());\n } finally {\n userTransaction.commit();\n }\n \n }\n }\n\n# Running\n\n \n -------------------------------------------------------\n T E S T S\n -------------------------------------------------------\n Running org.superbiz.testinjection.MoviesTest\n Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06\n http://tomee.apache.org/\n INFO - openejb.home = /Users/dblevins/examples/testcase-injection\n INFO - openejb.base = /Users/dblevins/examples/testcase-injection\n INFO - Using 'javax.ejb.embeddable.EJBContainer=true'\n INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)\n INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)\n INFO - Configuring Service(id=movieDatabase, type=Resource, provider-id=Default JDBC Database)\n INFO - Found EjbModule in classpath: /Users/dblevins/examples/testcase-injection/target/classes\n INFO - Beginning load: /Users/dblevins/examples/testcase-injection/target/classes\n INFO - Configuring enterprise application: /Users/dblevins/examples/testcase-injection\n WARN - Method 'lookup' is not available for 'javax.annotation.Resource'. Probably using an older Runtime.\n INFO - Configuring Service(id=Default Stateful Container, type=Container, provider-id=Default Stateful Container)\n INFO - Auto-creating a container for bean Movies: Container(type=STATEFUL, id=Default Stateful Container)\n INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)\n INFO - Auto-creating a container for bean org.superbiz.testinjection.MoviesTest: Container(type=MANAGED, id=Default Managed Container)\n INFO - Configuring PersistenceUnit(name=movie-unit)\n INFO - Auto-creating a Resource with id 'movieDatabaseNonJta' of type 'DataSource for 'movie-unit'.\n INFO - Configuring Service(id=movieDatabaseNonJta, type=Resource, provider-id=movieDatabase)\n INFO - Adjusting PersistenceUnit movie-unit <non-jta-data-source> to Resource ID 'movieDatabaseNonJta' from 'movieDatabaseUnmanaged'\n INFO - Enterprise application \"/Users/dblevins/examples/testcase-injection\" loaded.\n INFO - Assembling app: /Users/dblevins/examples/testcase-injection\n INFO - PersistenceUnit(name=movie-unit, provider=org.apache.openjpa.persistence.PersistenceProviderImpl) - provider time 408ms\n INFO - Jndi(name=\"java:global/testcase-injection/Movies!org.superbiz.testinjection.Movies\")\n INFO - Jndi(name=\"java:global/testcase-injection/Movies\")\n INFO - Jndi(name=\"java:global/EjbModule1583515396/org.superbiz.testinjection.MoviesTest!org.superbiz.testinjection.MoviesTest\")\n INFO - Jndi(name=\"java:global/EjbModule1583515396/org.superbiz.testinjection.MoviesTest\")\n INFO - Created Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container)\n INFO - Created Ejb(deployment-id=org.superbiz.testinjection.MoviesTest, ejb-name=org.superbiz.testinjection.MoviesTest, container=Default Managed Container)\n INFO - Started Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container)\n INFO - Started Ejb(deployment-id=org.superbiz.testinjection.MoviesTest, ejb-name=org.superbiz.testinjection.MoviesTest, container=Default Managed Container)\n INFO - Deployed Application(path=/Users/dblevins/examples/testcase-injection)\n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.24 sec\n \n Results :\n \n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0\n \n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/testcase-injection" | |
}, | |
{ | |
"name":"injection-of-env-entry", | |
"readme":"Title: Using EnvEntries\n\nThe `@Resource` annotation can be used to inject several things including\nDataSources, Topics, Queues, etc. Most of these are container supplied objects.\n\nIt is possible, however, to supply your own values to be injected via an `<env-entry>`\nin your `ejb-jar.xml` or `web.xml` deployment descriptor. Java EE 6 supported `<env-entry>` types\nare limited to the following:\n\n - java.lang.String\n - java.lang.Integer\n - java.lang.Short\n - java.lang.Float\n - java.lang.Double\n - java.lang.Byte\n - java.lang.Character\n - java.lang.Boolean\n - java.lang.Class\n - java.lang.Enum (any enum)\n\nSee also the [Custom Injection](../custom-injection) exmaple for a TomEE and OpenEJB feature that will let you\nuse more than just the above types as well as declare `<env-entry>` items with a plain properties file.\n\n# Using @Resource for basic properties\n\nThe use of the `@Resource` annotation isn't limited to setters. For\nexample, this annotation could have been used on the corresponding *field*\nlike so:\n\n @Resource\n private int maxLineItems;\n\nA fuller example might look like this:\n\n package org.superbiz.injection.enventry;\n \n import javax.annotation.Resource;\n import javax.ejb.Singleton;\n import java.util.Date;\n \n @Singleton\n public class Configuration {\n \n @Resource\n private String color;\n \n @Resource\n private Shape shape;\n \n @Resource\n private Class strategy;\n \n @Resource(name = \"date\")\n private long date;\n \n public String getColor() {\n return color;\n }\n \n public Shape getShape() {\n return shape;\n }\n \n public Class getStrategy() {\n return strategy;\n }\n \n public Date getDate() {\n return new Date(date);\n }\n }\n\nHere we have an `@Singleton` bean called `Confuration` that has the following properties (`<env-entry>` items)\n\n- String color\n- Shape shape\n- Class strategy\n- long date\n\n## Supplying @Resource values for <env-entry> items in ejb-jar.xml\n\nThe values for our `color`, `shape`, `strategy` and `date` properties are supplied via `<env-entry>` elements in the `ejb-jar.xml` file or the\n`web.xml` file like so:\n\n\n <ejb-jar xmlns=\"http://java.sun.com/xml/ns/javaee\" version=\"3.0\" metadata-complete=\"false\">\n <enterprise-beans>\n <session>\n <ejb-name>Configuration</ejb-name>\n <env-entry>\n <env-entry-name>org.superbiz.injection.enventry.Configuration/color</env-entry-name>\n <env-entry-type>java.lang.String</env-entry-type>\n <env-entry-value>orange</env-entry-value>\n </env-entry>\n <env-entry>\n <env-entry-name>org.superbiz.injection.enventry.Configuration/shape</env-entry-name>\n <env-entry-type>org.superbiz.injection.enventry.Shape</env-entry-type>\n <env-entry-value>TRIANGLE</env-entry-value>\n </env-entry>\n <env-entry>\n <env-entry-name>org.superbiz.injection.enventry.Configuration/strategy</env-entry-name>\n <env-entry-type>java.lang.Class</env-entry-type>\n <env-entry-value>org.superbiz.injection.enventry.Widget</env-entry-value>\n </env-entry>\n <env-entry>\n <description>The name was explicitly set in the annotation so the classname prefix isn't required</description>\n <env-entry-name>date</env-entry-name>\n <env-entry-type>java.lang.Long</env-entry-type>\n <env-entry-value>123456789</env-entry-value>\n </env-entry>\n </session>\n </enterprise-beans>\n </ejb-jar>\n\n\n### Using the @Resource 'name' attribute\n\nNote that `date` was referenced by `name` as:\n\n @Resource(name = \"date\")\n private long date;\n\nWhen the `@Resource(name)` is used, you do not need to specify the full class name of the bean and can do it briefly like so:\n\n <env-entry>\n <description>The name was explicitly set in the annotation so the classname prefix isn't required</description>\n <env-entry-name>date</env-entry-name>\n <env-entry-type>java.lang.Long</env-entry-type>\n <env-entry-value>123456789</env-entry-value>\n </env-entry>\n\nConversly, `color` was not referenced by `name`\n\n @Resource\n private String color;\n\nWhen something is not referenced by `name` in the `@Resource` annotation a default name is created. The format is essentially this:\n\n bean.getClass() + \"/\" + field.getName()\n\nSo the default `name` of the above `color` property ends up being `org.superbiz.injection.enventry.Configuration/color`. This is the name\nwe must use when we attempt to decalre a value for it in xml.\n\n <env-entry>\n <env-entry-name>org.superbiz.injection.enventry.Configuration/color</env-entry-name>\n <env-entry-type>java.lang.String</env-entry-type>\n <env-entry-value>orange</env-entry-value>\n </env-entry>\n\n### @Resource and Enum (Enumerations)\n\nThe `shape` field is actually a custom Java Enum type\n\n package org.superbiz.injection.enventry;\n\n public enum Shape {\n \n CIRCLE,\n TRIANGLE,\n SQUARE\n }\n\nAs of Java EE 6, java.lang.Enum types are allowed as `<env-entry>` items. Declaring one in xml is done using the actual enum's class name like so:\n\n <env-entry>\n <env-entry-name>org.superbiz.injection.enventry.Configuration/shape</env-entry-name>\n <env-entry-type>org.superbiz.injection.enventry.Shape</env-entry-type>\n <env-entry-value>TRIANGLE</env-entry-value>\n </env-entry>\n\nDo not use `<env-entry-type>java.lang.Enum</env-entry-type>` or it will not work!\n\n## ConfigurationTest\n\n package org.superbiz.injection.enventry;\n \n import junit.framework.TestCase;\n \n import javax.ejb.embeddable.EJBContainer;\n import javax.naming.Context;\n import java.util.Date;\n \n public class ConfigurationTest extends TestCase {\n \n \n public void test() throws Exception {\n final Context context = EJBContainer.createEJBContainer().getContext();\n \n final Configuration configuration = (Configuration) context.lookup(\"java:global/injection-of-env-entry/Configuration\");\n \n assertEquals(\"orange\", configuration.getColor());\n \n assertEquals(Shape.TRIANGLE, configuration.getShape());\n \n assertEquals(Widget.class, configuration.getStrategy());\n \n assertEquals(new Date(123456789), configuration.getDate());\n }\n }\n\n# Running\n\n \n -------------------------------------------------------\n T E S T S\n -------------------------------------------------------\n Running org.superbiz.injection.enventry.ConfigurationTest\n Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06\n http://tomee.apache.org/\n INFO - openejb.home = /Users/dblevins/examples/injection-of-env-entry\n INFO - openejb.base = /Users/dblevins/examples/injection-of-env-entry\n INFO - Using 'javax.ejb.embeddable.EJBContainer=true'\n INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)\n INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)\n INFO - Found EjbModule in classpath: /Users/dblevins/examples/injection-of-env-entry/target/classes\n INFO - Beginning load: /Users/dblevins/examples/injection-of-env-entry/target/classes\n INFO - Configuring enterprise application: /Users/dblevins/examples/injection-of-env-entry\n WARN - Method 'lookup' is not available for 'javax.annotation.Resource'. Probably using an older Runtime.\n INFO - Configuring Service(id=Default Singleton Container, type=Container, provider-id=Default Singleton Container)\n INFO - Auto-creating a container for bean Configuration: Container(type=SINGLETON, id=Default Singleton Container)\n INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)\n INFO - Auto-creating a container for bean org.superbiz.injection.enventry.ConfigurationTest: Container(type=MANAGED, id=Default Managed Container)\n INFO - Enterprise application \"/Users/dblevins/examples/injection-of-env-entry\" loaded.\n INFO - Assembling app: /Users/dblevins/examples/injection-of-env-entry\n INFO - Jndi(name=\"java:global/injection-of-env-entry/Configuration!org.superbiz.injection.enventry.Configuration\")\n INFO - Jndi(name=\"java:global/injection-of-env-entry/Configuration\")\n INFO - Jndi(name=\"java:global/EjbModule1355224018/org.superbiz.injection.enventry.ConfigurationTest!org.superbiz.injection.enventry.ConfigurationTest\")\n INFO - Jndi(name=\"java:global/EjbModule1355224018/org.superbiz.injection.enventry.ConfigurationTest\")\n INFO - Created Ejb(deployment-id=org.superbiz.injection.enventry.ConfigurationTest, ejb-name=org.superbiz.injection.enventry.ConfigurationTest, container=Default Managed Container)\n INFO - Created Ejb(deployment-id=Configuration, ejb-name=Configuration, container=Default Singleton Container)\n INFO - Started Ejb(deployment-id=org.superbiz.injection.enventry.ConfigurationTest, ejb-name=org.superbiz.injection.enventry.ConfigurationTest, container=Default Managed Container)\n INFO - Started Ejb(deployment-id=Configuration, ejb-name=Configuration, container=Default Singleton Container)\n INFO - Deployed Application(path=/Users/dblevins/examples/injection-of-env-entry)\n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.664 sec\n \n Results :\n \n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0\n \n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/injection-of-env-entry" | |
}, | |
{ | |
"name":"injection-of-entitymanager", | |
"readme":"Title: Injection Of Entitymanager\n\nThis example shows use of `@PersistenceContext` to have an `EntityManager` with an\n`EXTENDED` persistence context injected into a `@Stateful bean`. A JPA\n`@Entity` bean is used with the `EntityManager` to create, persist and merge\ndata to a database.\n\n## Creating the JPA Entity\n\nThe entity itself is simply a pojo annotated with `@Entity`. We create one called `Movie` which we can use to hold movie records.\n\n package org.superbiz.injection.jpa;\n\n import javax.persistence.Entity;\n \n @Entity\n public class Movie {\n\n @Id @GeneratedValue\n private long id;\n\n private String director;\n private String title;\n private int year;\n\n public Movie() {\n }\n\n public long getId() {\n return id;\n }\n\n public void setId(long id) {\n this.id = id;\n }\n\n public Movie(String director, String title, int year) {\n this.director = director;\n this.title = title;\n this.year = year;\n }\n\n public String getDirector() {\n return director;\n }\n\n public void setDirector(String director) {\n this.director = director;\n }\n\n public String getTitle() {\n return title;\n }\n\n public void setTitle(String title) {\n this.title = title;\n }\n\n public int getYear() {\n return year;\n }\n\n public void setYear(int year) {\n this.year = year;\n }\n }\n\n## Configure the EntityManager via a persistence.xml file\n\nThe above `Movie` entity can be created, removed, updated or deleted via an `EntityManager` object. The `EntityManager` itself is\nconfigured via a `META-INF/persistence.xml` file that is placed in the same jar as the `Movie` entity.\n\n <persistence xmlns=\"http://java.sun.com/xml/ns/persistence\" version=\"1.0\">\n\n <persistence-unit name=\"movie-unit\">\n <jta-data-source>movieDatabase</jta-data-source>\n <non-jta-data-source>movieDatabaseUnmanaged</non-jta-data-source>\n <class>org.superbiz.injection.jpa.Movie</class>\n\n <properties>\n <property name=\"openjpa.jdbc.SynchronizeMappings\" value=\"buildSchema(ForeignKeys=true)\"/>\n </properties>\n </persistence-unit>\n </persistence>\n\nNotice that the `Movie` entity is listed via a `<class>` element. This is not required, but can help when testing or when the\n`Movie` class is located in a different jar than the jar containing the `persistence.xml` file.\n\n## Injection via @PersistenceContext\n\nThe `EntityManager` itself is created by the container using the information in the `persistence.xml`, so to use it at\nruntime, we simply need to request it be injected into one of our components. We do this via `@PersistenceContext`\n\nThe `@PersistenceContext` annotation can be used on any CDI bean, EJB, Servlet, Servlet Listener, Servlet Filter, or JSF ManagedBean. If you don't use an EJB you will need to use a `UserTransaction` begin and commit transactions manually. A transaction is required for any of the create, update or delete methods of the EntityManager to work.\n\n package org.superbiz.injection.jpa;\n\n import javax.ejb.Stateful;\n import javax.persistence.EntityManager;\n import javax.persistence.PersistenceContext;\n import javax.persistence.PersistenceContextType;\n import javax.persistence.Query;\n import java.util.List;\n \n @Stateful\n public class Movies {\n \n @PersistenceContext(unitName = \"movie-unit\", type = PersistenceContextType.EXTENDED)\n private EntityManager entityManager;\n \n public void addMovie(Movie movie) throws Exception {\n entityManager.persist(movie);\n }\n \n public void deleteMovie(Movie movie) throws Exception {\n entityManager.remove(movie);\n }\n \n public List<Movie> getMovies() throws Exception {\n Query query = entityManager.createQuery(\"SELECT m from Movie as m\");\n return query.getResultList();\n }\n }\n\nThis particular `EntityManager` is injected as an `EXTENDED` persistence context, which simply means that the `EntityManager`\nis created when the `@Stateful` bean is created and destroyed when the `@Stateful` bean is destroyed. Simply put, the\ndata in the `EntityManager` is cached for the lifetime of the `@Stateful` bean.\n\nThe use of `EXTENDED` persistence contexts is **only** available to `@Stateful` beans. See the [JPA Concepts](../../jpa-concepts.html) page for an high level explanation of what a \"persistence context\" really is and how it is significant to JPA.\n\n## MoviesTest\n\nTesting JPA is quite easy, we can simply use the `EJBContainer` API to create a container in our test case.\n\n package org.superbiz.injection.jpa;\n \n import junit.framework.TestCase;\n \n import javax.ejb.embeddable.EJBContainer;\n import javax.naming.Context;\n import java.util.List;\n import java.util.Properties;\n \n //START SNIPPET: code\n public class MoviesTest extends TestCase {\n \n public void test() throws Exception {\n \n final Properties p = new Properties();\n p.put(\"movieDatabase\", \"new://Resource?type=DataSource\");\n p.put(\"movieDatabase.JdbcDriver\", \"org.hsqldb.jdbcDriver\");\n p.put(\"movieDatabase.JdbcUrl\", \"jdbc:hsqldb:mem:moviedb\");\n \n final Context context = EJBContainer.createEJBContainer(p).getContext();\n \n Movies movies = (Movies) context.lookup(\"java:global/injection-of-entitymanager/Movies\");\n \n movies.addMovie(new Movie(\"Quentin Tarantino\", \"Reservoir Dogs\", 1992));\n movies.addMovie(new Movie(\"Joel Coen\", \"Fargo\", 1996));\n movies.addMovie(new Movie(\"Joel Coen\", \"The Big Lebowski\", 1998));\n \n List<Movie> list = movies.getMovies();\n assertEquals(\"List.size()\", 3, list.size());\n \n for (Movie movie : list) {\n movies.deleteMovie(movie);\n }\n \n assertEquals(\"Movies.getMovies()\", 0, movies.getMovies().size());\n }\n }\n\n# Running\n\nWhen we run our test case we should see output similar to the following.\n \n -------------------------------------------------------\n T E S T S\n -------------------------------------------------------\n Running org.superbiz.injection.jpa.MoviesTest\n Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06\n http://tomee.apache.org/\n INFO - openejb.home = /Users/dblevins/examples/injection-of-entitymanager\n INFO - openejb.base = /Users/dblevins/examples/injection-of-entitymanager\n INFO - Using 'javax.ejb.embeddable.EJBContainer=true'\n INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)\n INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)\n INFO - Configuring Service(id=movieDatabase, type=Resource, provider-id=Default JDBC Database)\n INFO - Found EjbModule in classpath: /Users/dblevins/examples/injection-of-entitymanager/target/classes\n INFO - Beginning load: /Users/dblevins/examples/injection-of-entitymanager/target/classes\n INFO - Configuring enterprise application: /Users/dblevins/examples/injection-of-entitymanager\n INFO - Configuring Service(id=Default Stateful Container, type=Container, provider-id=Default Stateful Container)\n INFO - Auto-creating a container for bean Movies: Container(type=STATEFUL, id=Default Stateful Container)\n INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)\n INFO - Auto-creating a container for bean org.superbiz.injection.jpa.MoviesTest: Container(type=MANAGED, id=Default Managed Container)\n INFO - Configuring PersistenceUnit(name=movie-unit)\n INFO - Auto-creating a Resource with id 'movieDatabaseNonJta' of type 'DataSource for 'movie-unit'.\n INFO - Configuring Service(id=movieDatabaseNonJta, type=Resource, provider-id=movieDatabase)\n INFO - Adjusting PersistenceUnit movie-unit <non-jta-data-source> to Resource ID 'movieDatabaseNonJta' from 'movieDatabaseUnmanaged'\n INFO - Enterprise application \"/Users/dblevins/examples/injection-of-entitymanager\" loaded.\n INFO - Assembling app: /Users/dblevins/examples/injection-of-entitymanager\n INFO - PersistenceUnit(name=movie-unit, provider=org.apache.openjpa.persistence.PersistenceProviderImpl) - provider time 462ms\n INFO - Jndi(name=\"java:global/injection-of-entitymanager/Movies!org.superbiz.injection.jpa.Movies\")\n INFO - Jndi(name=\"java:global/injection-of-entitymanager/Movies\")\n INFO - Jndi(name=\"java:global/EjbModule1461341140/org.superbiz.injection.jpa.MoviesTest!org.superbiz.injection.jpa.MoviesTest\")\n INFO - Jndi(name=\"java:global/EjbModule1461341140/org.superbiz.injection.jpa.MoviesTest\")\n INFO - Created Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container)\n INFO - Created Ejb(deployment-id=org.superbiz.injection.jpa.MoviesTest, ejb-name=org.superbiz.injection.jpa.MoviesTest, container=Default Managed Container)\n INFO - Started Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container)\n INFO - Started Ejb(deployment-id=org.superbiz.injection.jpa.MoviesTest, ejb-name=org.superbiz.injection.jpa.MoviesTest, container=Default Managed Container)\n INFO - Deployed Application(path=/Users/dblevins/examples/injection-of-entitymanager)\n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.301 sec\n \n Results :\n \n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0\n \n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/injection-of-entitymanager" | |
}, | |
{ | |
"name":"injection-of-datasource", | |
"readme":"Title: Injection Of Datasource\n\n*Help us document this example! Click the blue pencil icon in the upper right to edit this page.*\n\n## Movie\n\n package org.superbiz.injection;\n \n /**\n * @version $Revision: 607077 $ $Date: 2007-12-27 06:55:23 -0800 (Thu, 27 Dec 2007) $\n */\n public class Movie {\n private String director;\n private String title;\n private int year;\n \n public Movie() {\n }\n \n public Movie(String director, String title, int year) {\n this.director = director;\n this.title = title;\n this.year = year;\n }\n \n public String getDirector() {\n return director;\n }\n \n public void setDirector(String director) {\n this.director = director;\n }\n \n public String getTitle() {\n return title;\n }\n \n public void setTitle(String title) {\n this.title = title;\n }\n \n public int getYear() {\n return year;\n }\n \n public void setYear(int year) {\n this.year = year;\n }\n \n }\n\n## Movies\n\n package org.superbiz.injection;\n \n import javax.annotation.PostConstruct;\n import javax.annotation.Resource;\n import javax.ejb.Stateful;\n import javax.sql.DataSource;\n import java.sql.Connection;\n import java.sql.PreparedStatement;\n import java.sql.ResultSet;\n import java.util.ArrayList;\n import java.util.List;\n \n @Stateful\n public class Movies {\n \n /**\n * The field name \"movieDatabase\" matches the DataSource we\n * configure in the TestCase via :\n * p.put(\"movieDatabase\", \"new://Resource?type=DataSource\");\n * <p/>\n * This would also match an equivalent delcaration in an openejb.xml:\n * <Resource id=\"movieDatabase\" type=\"DataSource\"/>\n * <p/>\n * If you'd like the freedom to change the field name without\n * impact on your configuration you can set the \"name\" attribute\n * of the @Resource annotation to \"movieDatabase\" instead.\n */\n @Resource\n private DataSource movieDatabase;\n \n @PostConstruct\n private void construct() throws Exception {\n Connection connection = movieDatabase.getConnection();\n try {\n PreparedStatement stmt = connection.prepareStatement(\"CREATE TABLE movie ( director VARCHAR(255), title VARCHAR(255), year integer)\");\n stmt.execute();\n } finally {\n connection.close();\n }\n }\n \n public void addMovie(Movie movie) throws Exception {\n Connection conn = movieDatabase.getConnection();\n try {\n PreparedStatement sql = conn.prepareStatement(\"INSERT into movie (director, title, year) values (?, ?, ?)\");\n sql.setString(1, movie.getDirector());\n sql.setString(2, movie.getTitle());\n sql.setInt(3, movie.getYear());\n sql.execute();\n } finally {\n conn.close();\n }\n }\n \n public void deleteMovie(Movie movie) throws Exception {\n Connection conn = movieDatabase.getConnection();\n try {\n PreparedStatement sql = conn.prepareStatement(\"DELETE from movie where director = ? AND title = ? AND year = ?\");\n sql.setString(1, movie.getDirector());\n sql.setString(2, movie.getTitle());\n sql.setInt(3, movie.getYear());\n sql.execute();\n } finally {\n conn.close();\n }\n }\n \n public List<Movie> getMovies() throws Exception {\n ArrayList<Movie> movies = new ArrayList<Movie>();\n Connection conn = movieDatabase.getConnection();\n try {\n PreparedStatement sql = conn.prepareStatement(\"SELECT director, title, year from movie\");\n ResultSet set = sql.executeQuery();\n while (set.next()) {\n Movie movie = new Movie();\n movie.setDirector(set.getString(\"director\"));\n movie.setTitle(set.getString(\"title\"));\n movie.setYear(set.getInt(\"year\"));\n movies.add(movie);\n }\n } finally {\n conn.close();\n }\n return movies;\n }\n }\n\n## MoviesTest\n\n package org.superbiz.injection;\n \n import junit.framework.TestCase;\n \n import javax.ejb.embeddable.EJBContainer;\n import javax.naming.Context;\n import java.util.List;\n import java.util.Properties;\n \n //START SNIPPET: code\n public class MoviesTest extends TestCase {\n \n public void test() throws Exception {\n \n Properties p = new Properties();\n p.put(\"movieDatabase\", \"new://Resource?type=DataSource\");\n p.put(\"movieDatabase.JdbcDriver\", \"org.hsqldb.jdbcDriver\");\n p.put(\"movieDatabase.JdbcUrl\", \"jdbc:hsqldb:mem:moviedb\");\n \n Context context = EJBContainer.createEJBContainer(p).getContext();\n \n Movies movies = (Movies) context.lookup(\"java:global/injection-of-datasource/Movies\");\n \n movies.addMovie(new Movie(\"Quentin Tarantino\", \"Reservoir Dogs\", 1992));\n movies.addMovie(new Movie(\"Joel Coen\", \"Fargo\", 1996));\n movies.addMovie(new Movie(\"Joel Coen\", \"The Big Lebowski\", 1998));\n \n List<Movie> list = movies.getMovies();\n assertEquals(\"List.size()\", 3, list.size());\n \n for (Movie movie : list) {\n movies.deleteMovie(movie);\n }\n \n assertEquals(\"Movies.getMovies()\", 0, movies.getMovies().size());\n }\n }\n\n# Running\n\n \n -------------------------------------------------------\n T E S T S\n -------------------------------------------------------\n Running org.superbiz.injection.MoviesTest\n Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06\n http://tomee.apache.org/\n INFO - openejb.home = /Users/dblevins/examples/injection-of-datasource\n INFO - openejb.base = /Users/dblevins/examples/injection-of-datasource\n INFO - Using 'javax.ejb.embeddable.EJBContainer=true'\n INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)\n INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)\n INFO - Configuring Service(id=movieDatabase, type=Resource, provider-id=Default JDBC Database)\n INFO - Found EjbModule in classpath: /Users/dblevins/examples/injection-of-datasource/target/classes\n INFO - Beginning load: /Users/dblevins/examples/injection-of-datasource/target/classes\n INFO - Configuring enterprise application: /Users/dblevins/examples/injection-of-datasource\n WARN - Method 'lookup' is not available for 'javax.annotation.Resource'. Probably using an older Runtime.\n INFO - Configuring Service(id=Default Stateful Container, type=Container, provider-id=Default Stateful Container)\n INFO - Auto-creating a container for bean Movies: Container(type=STATEFUL, id=Default Stateful Container)\n INFO - Auto-linking resource-ref 'java:comp/env/org.superbiz.injection.Movies/movieDatabase' in bean Movies to Resource(id=movieDatabase)\n INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)\n INFO - Auto-creating a container for bean org.superbiz.injection.MoviesTest: Container(type=MANAGED, id=Default Managed Container)\n INFO - Enterprise application \"/Users/dblevins/examples/injection-of-datasource\" loaded.\n INFO - Assembling app: /Users/dblevins/examples/injection-of-datasource\n INFO - Jndi(name=\"java:global/injection-of-datasource/Movies!org.superbiz.injection.Movies\")\n INFO - Jndi(name=\"java:global/injection-of-datasource/Movies\")\n INFO - Jndi(name=\"java:global/EjbModule1508028338/org.superbiz.injection.MoviesTest!org.superbiz.injection.MoviesTest\")\n INFO - Jndi(name=\"java:global/EjbModule1508028338/org.superbiz.injection.MoviesTest\")\n INFO - Created Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container)\n INFO - Created Ejb(deployment-id=org.superbiz.injection.MoviesTest, ejb-name=org.superbiz.injection.MoviesTest, container=Default Managed Container)\n INFO - Started Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container)\n INFO - Started Ejb(deployment-id=org.superbiz.injection.MoviesTest, ejb-name=org.superbiz.injection.MoviesTest, container=Default Managed Container)\n INFO - Deployed Application(path=/Users/dblevins/examples/injection-of-datasource)\n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.276 sec\n \n Results :\n \n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0\n \n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/injection-of-datasource" | |
}, | |
{ | |
"name":"injection-of-ejbs", | |
"readme":"Title: Injection Of Ejbs\n\nThis example shows how to use the @EJB annotation on a bean class to refer to other beans.\n\nThis functionality is often referred as dependency injection (see\nhttp://www.martinfowler.com/articles/injection.html), and has been recently introduced in\nJava EE 5.\n\nIn this particular example, we will create two session stateless beans\n\n * a DataStore session bean\n * a DataReader session bean\n\nThe DataReader bean uses the DataStore to retrieve some informations, and\nwe will see how we can, inside the DataReader bean, get a reference to the\nDataStore bean using the @EJB annotation, thus avoiding the use of the\nJNDI API.\n\n## DataReader\n\n package org.superbiz.injection;\n \n import javax.ejb.EJB;\n import javax.ejb.Stateless;\n \n /**\n * This is an EJB 3.1 style pojo stateless session bean\n * Every stateless session bean implementation must be annotated\n * using the annotation @Stateless\n * This EJB has 2 business interfaces: DataReaderRemote, a remote business\n * interface, and DataReaderLocal, a local business interface\n * <p/>\n * The instance variables 'dataStoreRemote' is annotated with the @EJB annotation:\n * this means that the application server, at runtime, will inject in this instance\n * variable a reference to the EJB DataStoreRemote\n * <p/>\n * The instance variables 'dataStoreLocal' is annotated with the @EJB annotation:\n * this means that the application server, at runtime, will inject in this instance\n * variable a reference to the EJB DataStoreLocal\n */\n //START SNIPPET: code\n @Stateless\n public class DataReader {\n \n @EJB\n private DataStoreRemote dataStoreRemote;\n @EJB\n private DataStoreLocal dataStoreLocal;\n @EJB\n private DataStore dataStore;\n \n public String readDataFromLocalStore() {\n return \"LOCAL:\" + dataStoreLocal.getData();\n }\n \n public String readDataFromLocalBeanStore() {\n return \"LOCALBEAN:\" + dataStore.getData();\n }\n \n public String readDataFromRemoteStore() {\n return \"REMOTE:\" + dataStoreRemote.getData();\n }\n }\n\n## DataStore\n\n package org.superbiz.injection;\n \n import javax.ejb.LocalBean;\n import javax.ejb.Stateless;\n \n /**\n * This is an EJB 3 style pojo stateless session bean\n * Every stateless session bean implementation must be annotated\n * using the annotation @Stateless\n * This EJB has 2 business interfaces: DataStoreRemote, a remote business\n * interface, and DataStoreLocal, a local business interface\n */\n //START SNIPPET: code\n @Stateless\n @LocalBean\n public class DataStore implements DataStoreLocal, DataStoreRemote {\n \n public String getData() {\n return \"42\";\n }\n }\n\n## DataStoreLocal\n\n package org.superbiz.injection;\n \n import javax.ejb.Local;\n \n /**\n * This is an EJB 3 local business interface\n * A local business interface may be annotated with the @Local\n * annotation, but it's optional. A business interface which is\n * not annotated with @Local or @Remote is assumed to be Local\n */\n //START SNIPPET: code\n @Local\n public interface DataStoreLocal {\n \n public String getData();\n }\n\n## DataStoreRemote\n\n package org.superbiz.injection;\n \n import javax.ejb.Remote;\n \n /**\n * This is an EJB 3 remote business interface\n * A remote business interface must be annotated with the @Remote\n * annotation\n */\n //START SNIPPET: code\n @Remote\n public interface DataStoreRemote {\n \n public String getData();\n }\n\n## EjbDependencyTest\n\n package org.superbiz.injection;\n \n import junit.framework.TestCase;\n \n import javax.ejb.embeddable.EJBContainer;\n import javax.naming.Context;\n \n /**\n * A test case for DataReaderImpl ejb, testing both the remote and local interface\n */\n //START SNIPPET: code\n public class EjbDependencyTest extends TestCase {\n \n public void test() throws Exception {\n final Context context = EJBContainer.createEJBContainer().getContext();\n \n DataReader dataReader = (DataReader) context.lookup(\"java:global/injection-of-ejbs/DataReader\");\n \n assertNotNull(dataReader);\n \n assertEquals(\"LOCAL:42\", dataReader.readDataFromLocalStore());\n assertEquals(\"REMOTE:42\", dataReader.readDataFromRemoteStore());\n assertEquals(\"LOCALBEAN:42\", dataReader.readDataFromLocalBeanStore());\n }\n }\n\n# Running\n\n \n -------------------------------------------------------\n T E S T S\n -------------------------------------------------------\n Running org.superbiz.injection.EjbDependencyTest\n Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06\n http://tomee.apache.org/\n INFO - openejb.home = /Users/dblevins/examples/injection-of-ejbs\n INFO - openejb.base = /Users/dblevins/examples/injection-of-ejbs\n INFO - Using 'javax.ejb.embeddable.EJBContainer=true'\n INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)\n INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)\n INFO - Found EjbModule in classpath: /Users/dblevins/examples/injection-of-ejbs/target/classes\n INFO - Beginning load: /Users/dblevins/examples/injection-of-ejbs/target/classes\n INFO - Configuring enterprise application: /Users/dblevins/examples/injection-of-ejbs\n INFO - Configuring Service(id=Default Stateless Container, type=Container, provider-id=Default Stateless Container)\n INFO - Auto-creating a container for bean DataReader: Container(type=STATELESS, id=Default Stateless Container)\n INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)\n INFO - Auto-creating a container for bean org.superbiz.injection.EjbDependencyTest: Container(type=MANAGED, id=Default Managed Container)\n INFO - Enterprise application \"/Users/dblevins/examples/injection-of-ejbs\" loaded.\n INFO - Assembling app: /Users/dblevins/examples/injection-of-ejbs\n INFO - Jndi(name=\"java:global/injection-of-ejbs/DataReader!org.superbiz.injection.DataReader\")\n INFO - Jndi(name=\"java:global/injection-of-ejbs/DataReader\")\n INFO - Jndi(name=\"java:global/injection-of-ejbs/DataStore!org.superbiz.injection.DataStore\")\n INFO - Jndi(name=\"java:global/injection-of-ejbs/DataStore!org.superbiz.injection.DataStoreLocal\")\n INFO - Jndi(name=\"java:global/injection-of-ejbs/DataStore!org.superbiz.injection.DataStoreRemote\")\n INFO - Jndi(name=\"java:global/injection-of-ejbs/DataStore\")\n INFO - Jndi(name=\"java:global/EjbModule355598874/org.superbiz.injection.EjbDependencyTest!org.superbiz.injection.EjbDependencyTest\")\n INFO - Jndi(name=\"java:global/EjbModule355598874/org.superbiz.injection.EjbDependencyTest\")\n INFO - Created Ejb(deployment-id=DataReader, ejb-name=DataReader, container=Default Stateless Container)\n INFO - Created Ejb(deployment-id=DataStore, ejb-name=DataStore, container=Default Stateless Container)\n INFO - Created Ejb(deployment-id=org.superbiz.injection.EjbDependencyTest, ejb-name=org.superbiz.injection.EjbDependencyTest, container=Default Managed Container)\n INFO - Started Ejb(deployment-id=DataReader, ejb-name=DataReader, container=Default Stateless Container)\n INFO - Started Ejb(deployment-id=DataStore, ejb-name=DataStore, container=Default Stateless Container)\n INFO - Started Ejb(deployment-id=org.superbiz.injection.EjbDependencyTest, ejb-name=org.superbiz.injection.EjbDependencyTest, container=Default Managed Container)\n INFO - Deployed Application(path=/Users/dblevins/examples/injection-of-ejbs)\n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.225 sec\n \n Results :\n \n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0\n \n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/injection-of-ejbs" | |
}, | |
{ | |
"name":"custom-injection", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/custom-injection" | |
} | |
], | |
"interceptor":[ | |
{ | |
"name":"interceptors", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/interceptors" | |
}, | |
{ | |
"name":"cdi-interceptors", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/cdi-interceptors" | |
}, | |
{ | |
"name":"simple-cdi-interceptor", | |
"readme":"#Simple CDI Interceptor\n\nLet's write a simple application that would allow us to book tickets for a movie show. As with all applications, logging is one cross-cutting concern that we have. \n\n(Relevant snippets are inlined but you can check out the complete code, from the links provided)\n\nHow do we mark which methods are to be intercepted ? Wouldn't it be handy to annotate a method like \n\n @Log\n public void aMethod(){...} \n\nLet's create an annotation that would \"mark\" a method for interception. \n\n @InterceptorBinding\n @Target({ TYPE, METHOD })\n @Retention(RUNTIME)\n public @interface Log {\n }\n\nSure, you haven't missed the @InterceptorBinding annotation above ! Now that our custom annotation is created, lets attach it (or to use a better term for it, \"bind it\" )\nto an interceptor. \n\nSo here's our logging interceptor. An @AroundInvoke method and we are almost done.\n\n @Interceptor\n @Log //binding the interceptor here. now any method annotated with @Log would be intercepted by logMethodEntry\n public class LoggingInterceptor {\n @AroundInvoke\n public Object logMethodEntry(InvocationContext ctx) throws Exception {\n System.out.println(\"Entering method: \" + ctx.getMethod().getName());\n //or logger.info statement \n return ctx.proceed();\n }\n }\n\nNow the @Log annotation we created is bound to this interceptor.\n\nThat done, let's annotate at class-level or method-level and have fun intercepting ! \n\n @Log\n @Stateful\n public class BookShow implements Serializable {\n private static final long serialVersionUID = 6350400892234496909L;\n public List<String> getMoviesList() {\n List<String> moviesAvailable = new ArrayList<String>();\n moviesAvailable.add(\"12 Angry Men\");\n moviesAvailable.add(\"Kings speech\");\n return moviesAvailable;\n }\n public Integer getDiscountedPrice(int ticketPrice) {\n return ticketPrice - 50;\n }\n // assume more methods are present\n }\n\nThe `@Log` annotation applied at class level denotes that all the methods should be intercepted with `LoggingInterceptor`.\n\nBefore we say \"all done\" there's one last thing we are left with ! To enable the interceptors ! \n\nLets quickly put up a [beans.xml file]\n\n <beans>\n <interceptors>\n <class>org.superbiz.cdi.bookshow.interceptors.LoggingInterceptor\n </class>\n </interceptors>\n </beans>\n\n in META-INF\n\n\nThose lines in beans.xml not only \"enable\" the interceptors, but also define the \"order of execution\" of the interceptors.\nBut we'll see that in another example on multiple-cdi-interceptors.\n\nFire up the test, and we should see a 'Entering method: getMoviesList' printed in the console.\n\n#Tests\n Apache OpenEJB 4.0.0-beta-2 build: 20111103-01:00\n http://tomee.apache.org/\n INFO - openejb.home = /media/fthree/Workspace/open4/openejb/examples/cdi-simple-interceptors\n INFO - openejb.base = /media/fthree/Workspace/open4/openejb/examples/cdi-simple-interceptors\n INFO - Using 'javax.ejb.embeddable.EJBContainer=true' \n INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)\n INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)\n INFO - Found EjbModule in classpath: /media/fthree/Workspace/open4/openejb/examples/cdi-simple-interceptors/target/classes\n INFO - Beginning load: /media/fthree/Workspace/open4/openejb/examples/cdi-simple-interceptors/target/classes\n INFO - Configuring enterprise application: /media/fthree/Workspace/open4/openejb/examples/cdi-simple-interceptors\n INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)\n INFO - Auto-creating a container for bean cdi-simple-interceptors.Comp: Container(type=MANAGED, id=Default Managed Container)\n INFO - Configuring Service(id=Default Stateful Container, type=Container, provider-id=Default Stateful Container)\n INFO - Auto-creating a container for bean BookShow: Container(type=STATEFUL, id=Default Stateful Container)\n INFO - Enterprise application \"/media/fthree/Workspace/open4/openejb/examples/cdi-simple-interceptors\" loaded.\n INFO - Assembling app: /media/fthree/Workspace/open4/openejb/examples/cdi-simple-interceptors\n INFO - Jndi(name=\"java:global/cdi-simple-interceptors/BookShow!org.superbiz.cdi.bookshow.beans.BookShow\")\n INFO - Jndi(name=\"java:global/cdi-simple-interceptors/BookShow\")\n INFO - Created Ejb(deployment-id=BookShow, ejb-name=BookShow, container=Default Stateful Container)\n INFO - Started Ejb(deployment-id=BookShow, ejb-name=BookShow, container=Default Stateful Container)\n INFO - Deployed Application(path=/media/fthree/Workspace/open4/openejb/examples/cdi-simple-interceptors)\n Entering method: getMoviesList\n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/simple-cdi-interceptor" | |
} | |
], | |
"interfaces":[ | |
{ | |
"name":"component-interfaces", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/component-interfaces" | |
} | |
], | |
"jaas":[ | |
{ | |
"name":"cdi-ejbcontext-jaas", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/cdi-ejbcontext-jaas" | |
}, | |
{ | |
"name":"rest-jaas", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/rest-jaas" | |
} | |
], | |
"javamail":[ | |
{ | |
"name":"javamail", | |
"readme":"Title: Javamail API\n\nThis is just a simple example to demonstrate a very basic usage of the API. It should be enough to get you started using the java mail packages.\n\n#The Code\n\n## A simple REST service using the Javamail API\n\nHere we see a very simple RESTful endpoint that can be called with a message to send by Email. It would not be hard to modify the application to provide\nmore useful configuration options. As is, this will not send anything, but if you change the parameters to match your mail server then you'll see the message being sent.\nYou can find much more detailed information on the [Javamail API here](https://java.net/projects/javamail/pages/Home#Samples)\n\n package org.superbiz.rest;\n\n import javax.mail.Authenticator;\n import javax.mail.Message;\n import javax.mail.MessagingException;\n import javax.mail.PasswordAuthentication;\n import javax.mail.Session;\n import javax.mail.Transport;\n import javax.mail.internet.InternetAddress;\n import javax.mail.internet.MimeMessage;\n import javax.ws.rs.POST;\n import javax.ws.rs.Path;\n import java.util.Date;\n import java.util.Properties;\n\n @Path(\"/email\")\n public class EmailService {\n\n @POST\n public String lowerCase(final String message) {\n\n try {\n\n //Create some properties and get the default Session\n final Properties props = new Properties();\n props.put(\"mail.smtp.host\", \"your.mailserver.host\");\n props.put(\"mail.debug\", \"true\");\n\n final Session session = Session.getInstance(props, new Authenticator() {\n @Override\n protected PasswordAuthentication getPasswordAuthentication() {\n return new PasswordAuthentication(\"MyUsername\", \"MyPassword\");\n }\n });\n\n //Set this just to see some internal logging\n session.setDebug(true);\n\n //Create a message\n final MimeMessage msg = new MimeMessage(session);\n msg.setFrom(new InternetAddress(\"your@email.address\"));\n final InternetAddress[] address = {new InternetAddress(\"general@tomitribe.com\")};\n msg.setRecipients(Message.RecipientType.TO, address);\n msg.setSubject(\"JavaMail API test\");\n msg.setSentDate(new Date());\n msg.setText(message, \"UTF-8\");\n\n\n Transport.send(msg);\n } catch (MessagingException e) {\n return \"Failed to send message: \" + e.getMessage();\n }\n\n return \"Sent\";\n }\n }\n\n# Testing\n\n## Test for the JAXRS service\n\nThe test uses the OpenEJB ApplicationComposer to make it trivial.\n\nThe idea is first to activate the jaxrs services. This is done using @EnableServices annotation.\n\nThen we create on the fly the application simply returning an object representing the web.xml. Here we simply\nuse it to define the context root but you can use it to define your REST Application too. And to complete the\napplication definition we add @Classes annotation to define the set of classes to use in this app.\n\nFinally to test it we use cxf client API to call the REST service post() method.\n\n package org.superbiz.rest;\n\n import org.apache.cxf.jaxrs.client.WebClient;\n import org.apache.openejb.jee.WebApp;\n import org.apache.openejb.junit.ApplicationComposer;\n import org.apache.openejb.testing.Classes;\n import org.apache.openejb.testing.EnableServices;\n import org.apache.openejb.testing.Module;\n import org.junit.Test;\n import org.junit.runner.RunWith;\n\n import java.io.IOException;\n\n import static org.junit.Assert.assertEquals;\n\n @EnableServices(value = \"jaxrs\")\n @RunWith(ApplicationComposer.class)\n public class EmailServiceTest {\n\n @Module\n @Classes(EmailService.class)\n public WebApp app() {\n return new WebApp().contextRoot(\"test\");\n }\n\n @Test\n public void post() throws IOException {\n final String message = WebClient.create(\"http://localhost:4204\").path(\"/test/email/\").post(\"Hello Tomitribe\", String.class);\n assertEquals(\"Failed to send message: Unknown SMTP host: your.mailserver.host\", message);\n }\n }\n\n#Running\n\nRunning the example is fairly simple. In the \"javamail-api\" directory run:\n\n $ mvn clean install\n\nWhich should create output like the following.\n\n INFO - Cannot find the configuration file [conf/openejb.xml]. Will attempt to create one for the beans deployed.\n INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)\n INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)\n INFO - Creating TransactionManager(id=Default Transaction Manager)\n INFO - Creating SecurityService(id=Default Security Service)\n INFO - Initializing network services\n INFO - Creating ServerService(id=cxf-rs)\n INFO - Creating ServerService(id=httpejbd)\n INFO - Created ServicePool 'httpejbd' with (10) core threads, limited to (200) threads with a queue of (9)\n INFO - Initializing network services\n INFO - ** Bound Services **\n INFO - NAME IP PORT\n INFO - httpejbd 127.0.0.1 4204\n INFO - -------\n INFO - Ready!\n INFO - Configuring enterprise application: D:\\github\\tomee\\examples\\javamail\\EmailServiceTest\n INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)\n INFO - Auto-creating a container for bean org.superbiz.rest.EmailServiceTest: Container(type=MANAGED, id=Default Managed Container)\n INFO - Creating Container(id=Default Managed Container)\n INFO - Using directory D:\\windows\\tmp for stateful session passivation\n INFO - Configuring Service(id=comp/DefaultManagedExecutorService, type=Resource, provider-id=Default Executor Service)\n INFO - Auto-creating a Resource with id 'comp/DefaultManagedExecutorService' of type 'javax.enterprise.concurrent.ManagedExecutorService for 'test'.\n INFO - Configuring Service(id=comp/DefaultManagedScheduledExecutorService, type=Resource, provider-id=Default Scheduled Executor Service)\n INFO - Auto-creating a Resource with id 'comp/DefaultManagedScheduledExecutorService' of type 'javax.enterprise.concurrent.ManagedScheduledExecutorService for 'test'.\n INFO - Configuring Service(id=comp/DefaultManagedThreadFactory, type=Resource, provider-id=Default Managed Thread Factory)\n INFO - Auto-creating a Resource with id 'comp/DefaultManagedThreadFactory' of type 'javax.enterprise.concurrent.ManagedThreadFactory for 'test'.\n INFO - Enterprise application \"D:\\github\\tomee\\examples\\javamail\\EmailServiceTest\" loaded.\n INFO - Creating dedicated application classloader for EmailServiceTest\n INFO - Assembling app: D:\\github\\tomee\\examples\\javamail\\EmailServiceTest\n INFO - Using providers:\n INFO - org.apache.johnzon.jaxrs.JohnzonProvider@2687f956\n INFO - org.apache.cxf.jaxrs.provider.JAXBElementProvider@1ded7b14\n INFO - org.apache.johnzon.jaxrs.JsrProvider@29be7749\n INFO - org.apache.johnzon.jaxrs.WadlDocumentMessageBodyWriter@5f84abe8\n INFO - org.apache.openejb.server.cxf.rs.EJBAccessExceptionMapper@4650a407\n INFO - org.apache.cxf.jaxrs.validation.ValidationExceptionMapper@30135202\n INFO - REST Application: http://127.0.0.1:4204/test/ -> org.apache.openejb.server.rest.InternalApplication\n INFO - Service URI: http://127.0.0.1:4204/test/email -> Pojo org.superbiz.rest.EmailService\n INFO - POST http://127.0.0.1:4204/test/email/ -> String lowerCase(String)\n INFO - Deployed Application(path=D:\\github\\tomee\\examples\\javamail\\EmailServiceTest)\n DEBUG: JavaMail version 1.4ea\n DEBUG: java.io.FileNotFoundException: D:\\java\\jdk8\\jre\\lib\\javamail.providers (The system cannot find the file specified)\n DEBUG: !anyLoaded\n DEBUG: not loading resource: /META-INF/javamail.providers\n DEBUG: successfully loaded resource: /META-INF/javamail.default.providers\n DEBUG: Tables of loaded providers\n DEBUG: Providers Listed By Class Name: {com.sun.mail.smtp.SMTPSSLTransport=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc], com.sun.mail.smtp.SMTPTransport=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc], com.sun.mail.imap.IMAPSSLStore=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc], com.sun.mail.pop3.POP3SSLStore=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, Inc], com.sun.mail.imap.IMAPStore=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], com.sun.mail.pop3.POP3Store=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsystems, Inc]}\n DEBUG: Providers Listed By Protocol: {imaps=javax.mail.Provider[STORE,imaps,com.sun.mail.imap.IMAPSSLStore,Sun Microsystems, Inc], imap=javax.mail.Provider[STORE,imap,com.sun.mail.imap.IMAPStore,Sun Microsystems, Inc], smtps=javax.mail.Provider[TRANSPORT,smtps,com.sun.mail.smtp.SMTPSSLTransport,Sun Microsystems, Inc], pop3=javax.mail.Provider[STORE,pop3,com.sun.mail.pop3.POP3Store,Sun Microsystems, Inc], pop3s=javax.mail.Provider[STORE,pop3s,com.sun.mail.pop3.POP3SSLStore,Sun Microsystems, Inc], smtp=javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]}\n DEBUG: successfully loaded resource: /META-INF/javamail.default.address.map\n DEBUG: !anyLoaded\n DEBUG: not loading resource: /META-INF/javamail.address.map\n DEBUG: java.io.FileNotFoundException: D:\\java\\jdk8\\jre\\lib\\javamail.address.map (The system cannot find the file specified)\n DEBUG: setDebug: JavaMail version 1.4ea\n DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]\n DEBUG SMTP: useEhlo true, useAuth false\n DEBUG SMTP: trying to connect to host \"your.mailserver.host\", port 25, isSSL false\n INFO - Undeploying app: D:\\github\\tomee\\examples\\javamail\\EmailServiceTest\n INFO - Stopping network services\n INFO - Stopping server services\n\n\n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/javamail" | |
} | |
], | |
"jaxws":[ | |
{ | |
"name":"applicationcomposer-jaxws-cdi", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/applicationcomposer-jaxws-cdi" | |
}, | |
{ | |
"name":"change-jaxws-url", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/change-jaxws-url" | |
} | |
], | |
"jersey":[ | |
{ | |
"name":"tomee-jersey-eclipselink", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/tomee-jersey-eclipselink" | |
} | |
], | |
"jmx":[ | |
{ | |
"name":"resources-jmx-example", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/resources-jmx-example" | |
} | |
], | |
"jpa":[ | |
{ | |
"name":"jpa-eclipselink", | |
"readme":"Title: JPA Eclipselink\n\nThis example shows how to configure `persistence.xml` to work with Eclipselink. It uses an `@Entity` class and a `@Stateful` bean to add and delete entities from a database.\n\n## Creating the JPA Entity\n\nThe entity itself is simply a pojo annotated with `@Entity`. We create one pojo called `Movie` which we can use to hold movie records.\n\n package org.superbiz.eclipselink;\n \n import javax.persistence.Entity;\n import javax.persistence.GeneratedValue;\n import javax.persistence.GenerationType;\n import javax.persistence.Id;\n \n @Entity\n public class Movie {\n \n @Id\n @GeneratedValue(strategy = GenerationType.AUTO)\n private long id;\n \n private String director;\n private String title;\n private int year;\n \n public Movie() {\n }\n \n public Movie(String director, String title, int year) {\n this.director = director;\n this.title = title;\n this.year = year;\n }\n \n public String getDirector() {\n return director;\n }\n \n public void setDirector(String director) {\n this.director = director;\n }\n \n public String getTitle() {\n return title;\n }\n \n public void setTitle(String title) {\n this.title = title;\n }\n \n public int getYear() {\n return year;\n }\n \n public void setYear(int year) {\n this.year = year;\n }\n \n }\n\n## Database Operations\n\nThis is the bean responsible for database operations; it allows us to persist or delete entities.\nFor more information we recommend you to see [injection-of-entitymanager](http://tomee.apache.org/examples-trunk/injection-of-entitymanager/README.html)\n\n\n package org.superbiz.eclipselink;\n \n import javax.ejb.Stateful;\n import javax.persistence.EntityManager;\n import javax.persistence.PersistenceContext;\n import javax.persistence.PersistenceContextType;\n import javax.persistence.Query;\n import java.util.List;\n \n @Stateful\n public class Movies {\n \n @PersistenceContext(unitName = \"movie-unit\", type = PersistenceContextType.EXTENDED)\n private EntityManager entityManager;\n \n public void addMovie(Movie movie) throws Exception {\n entityManager.persist(movie);\n }\n \n public void deleteMovie(Movie movie) throws Exception {\n entityManager.remove(movie);\n }\n \n public List<Movie> getMovies() throws Exception {\n Query query = entityManager.createQuery(\"SELECT m from Movie as m\");\n return query.getResultList();\n }\n }\n\n## Persistence.xml with EclipseLink configuration\n\nThis operation is too easy, just set the `provider` to `org.eclipse.persistence.jpa.PersistenceProvider` and add additional properties to the persistence unit. \nThe example has followed a strategy that allows the creation of tables in a HSQL database.\nFor a complete list of persistence unit properties see [here](http://www.eclipse.org/eclipselink/api/2.4/org/eclipse/persistence/config/PersistenceUnitProperties.html)\n\n <persistence version=\"1.0\"\n xmlns=\"http://java.sun.com/xml/ns/persistence\"\n xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:schemaLocation=\"http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd\">\n <persistence-unit name=\"movie-unit\">\n <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>\n <jta-data-source>movieDatabase</jta-data-source>\n <non-jta-data-source>movieDatabaseUnmanaged</non-jta-data-source>\n <properties>\n <property name=\"eclipselink.target-database\" value=\"org.eclipse.persistence.platform.database.HSQLPlatform\"/>\n <property name=\"eclipselink.ddl-generation\" value=\"create-tables\"/>\n <property name=\"eclipselink.ddl-generation.output-mode\" value=\"database\"/>\n </properties>\n </persistence-unit>\n </persistence>\n \n\n## MoviesTest\n\nTesting JPA is quite easy, we can simply use the `EJBContainer` API to create a container in our test case.\n\n package org.superbiz.eclipselink;\n \n import junit.framework.TestCase;\n \n import javax.ejb.embeddable.EJBContainer;\n import javax.naming.Context;\n import java.util.List;\n import java.util.Properties;\n \n /**\n * @version $Revision: 607077 $ $Date: 2007-12-27 06:55:23 -0800 (Thu, 27 Dec 2007) $\n */\n public class MoviesTest extends TestCase {\n \n public void test() throws Exception {\n Properties p = new Properties();\n p.put(\"movieDatabase\", \"new://Resource?type=DataSource\");\n p.put(\"movieDatabase.JdbcDriver\", \"org.hsqldb.jdbcDriver\");\n p.put(\"movieDatabase.JdbcUrl\", \"jdbc:hsqldb:mem:moviedb\");\n \n final Context context = EJBContainer.createEJBContainer(p).getContext();\n \n Movies movies = (Movies) context.lookup(\"java:global/jpa-eclipselink/Movies\");\n \n movies.addMovie(new Movie(\"Quentin Tarantino\", \"Reservoir Dogs\", 1992));\n movies.addMovie(new Movie(\"Joel Coen\", \"Fargo\", 1996));\n movies.addMovie(new Movie(\"Joel Coen\", \"The Big Lebowski\", 1998));\n \n List<Movie> list = movies.getMovies();\n assertEquals(\"List.size()\", 3, list.size());\n \n for (Movie movie : list) {\n movies.deleteMovie(movie);\n }\n \n assertEquals(\"Movies.getMovies()\", 0, movies.getMovies().size());\n }\n }\n\n# Running\n\nWhen we run our test case we should see output similar to the following. \n\n -------------------------------------------------------\n T E S T S\n -------------------------------------------------------\n Running org.superbiz.eclipselink.MoviesTest\n Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06\n http://tomee.apache.org/\n INFO - openejb.home = /Users/dblevins/examples/jpa-eclipselink\n INFO - openejb.base = /Users/dblevins/examples/jpa-eclipselink\n INFO - Using 'javax.ejb.embeddable.EJBContainer=true'\n INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)\n INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)\n INFO - Configuring Service(id=movieDatabase, type=Resource, provider-id=Default JDBC Database)\n INFO - Found EjbModule in classpath: /Users/dblevins/examples/jpa-eclipselink/target/classes\n INFO - Beginning load: /Users/dblevins/examples/jpa-eclipselink/target/classes\n INFO - Configuring enterprise application: /Users/dblevins/examples/jpa-eclipselink\n INFO - Configuring Service(id=Default Stateful Container, type=Container, provider-id=Default Stateful Container)\n INFO - Auto-creating a container for bean Movies: Container(type=STATEFUL, id=Default Stateful Container)\n INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)\n INFO - Auto-creating a container for bean org.superbiz.eclipselink.MoviesTest: Container(type=MANAGED, id=Default Managed Container)\n INFO - Configuring PersistenceUnit(name=movie-unit, provider=org.eclipse.persistence.jpa.PersistenceProvider)\n INFO - Auto-creating a Resource with id 'movieDatabaseNonJta' of type 'DataSource for 'movie-unit'.\n INFO - Configuring Service(id=movieDatabaseNonJta, type=Resource, provider-id=movieDatabase)\n INFO - Adjusting PersistenceUnit movie-unit <non-jta-data-source> to Resource ID 'movieDatabaseNonJta' from 'movieDatabaseUnmanaged'\n INFO - Enterprise application \"/Users/dblevins/examples/jpa-eclipselink\" loaded.\n INFO - Assembling app: /Users/dblevins/examples/jpa-eclipselink\n INFO - PersistenceUnit(name=movie-unit, provider=org.eclipse.persistence.jpa.PersistenceProvider) - provider time 511ms\n INFO - Jndi(name=\"java:global/jpa-eclipselink/Movies!org.superbiz.eclipselink.Movies\")\n INFO - Jndi(name=\"java:global/jpa-eclipselink/Movies\")\n INFO - Jndi(name=\"java:global/EjbModule225280863/org.superbiz.eclipselink.MoviesTest!org.superbiz.eclipselink.MoviesTest\")\n INFO - Jndi(name=\"java:global/EjbModule225280863/org.superbiz.eclipselink.MoviesTest\")\n INFO - Created Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container)\n INFO - Created Ejb(deployment-id=org.superbiz.eclipselink.MoviesTest, ejb-name=org.superbiz.eclipselink.MoviesTest, container=Default Managed Container)\n INFO - Started Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container)\n INFO - Started Ejb(deployment-id=org.superbiz.eclipselink.MoviesTest, ejb-name=org.superbiz.eclipselink.MoviesTest, container=Default Managed Container)\n INFO - Deployed Application(path=/Users/dblevins/examples/jpa-eclipselink)\n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 3.188 sec\n \n Results :\n \n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0\n ", | |
"url":"https://github.com/apache/tomee/tree/master/examples/jpa-eclipselink" | |
}, | |
{ | |
"name":"groovy-jpa", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/groovy-jpa" | |
}, | |
{ | |
"name":"jpa-enumerated", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/jpa-enumerated" | |
}, | |
{ | |
"name":"jpa-hibernate", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/jpa-hibernate" | |
}, | |
{ | |
"name":"arquillian-jpa", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/arquillian-jpa" | |
}, | |
{ | |
"name":"multi-jpa-provider-testing", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/multi-jpa-provider-testing" | |
} | |
], | |
"jsf":[ | |
{ | |
"name":"jsf-managedBean-and-ejb", | |
"readme":"Title: JSF Application that uses managed-bean and ejb\n\nThis is a simple web-app showing how to use dependency injection in JSF managed beans using TomEE.\n\nIt contains a Local Stateless session bean `CalculatorImpl` which adds two numbers and returns the result.\nThe application also contains a JSF managed bean `CalculatorBean`, which uses the EJB to add two numbers\nand display the results to the user. The EJB is injected in the managed bean using `@EJB` annotation.\n\n\n## A little note on the setup:\n\nYou could run this in the latest Apache TomEE [snapshot](https://repository.apache.org/content/repositories/snapshots/org/apache/openejb/apache-tomee/)\n\nAs for the libraries, myfaces-api and myfaces-impl are provided in tomee/lib and hence they should not be a part of the\nwar. In maven terms, they would be with scope 'provided'\n\nAlso note that we use servlet 2.5 declaration in web.xml\n \n <web-app xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xmlns=\"http://java.sun.com/xml/ns/javaee\"\n xmlns:web=\"http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd\"\n xsi:schemaLocation=\"http://java.sun.com/xml/ns/javaee\n http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd\"\n version=\"2.5\">\n\nAnd we use 2.0 version of faces-config\n\n <faces-config xmlns=\"http://java.sun.com/xml/ns/javaee\"\n xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:schemaLocation=\"http://java.sun.com/xml/ns/javaee\n http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd\"\n version=\"2.0\">\n\n\nThe complete source code is provided below but let's break down to look at some smaller snippets and see how it works.\n\nWe'll first declare the `FacesServlet` in the `web.xml`\n\n <servlet>\n <servlet-name>Faces Servlet</servlet-name>\n <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>\n <load-on-startup>1</load-on-startup>\n </servlet>\n\n`FacesServlet` acts as the master controller.\n\nWe'll then create the `calculator.xhtml` file.\n\n <h:outputText value='Enter first number'/>\n <h:inputText value='#{calculatorBean.x}'/>\n <h:outputText value='Enter second number'/>\n <h:inputText value='#{calculatorBean.y}'/>\n <h:commandButton action=\"#{calculatorBean.add}\" value=\"Add\"/>\n\n\nNotice how we've use the bean here.\nBy default it is the simple class name of the managed bean.\n\nWhen a request comes in, the bean is instantiated and placed in the appropriate scope.\nBy default, the bean is placed in the request scope.\n\n <h:inputText value='#{calculatorBean.x}'/>\n\nHere, getX() method of calculatorBean is invoked and the resulting value is displayed.\nx being a Double, we rightly should see 0.0 displayed.\n\nWhen you change the value and submit the form, these entered values are bound using the setters\nin the bean and then the commandButton-action method is invoked.\n\nIn this case, `CalculatorBean#add()` is invoked.\n\n`Calculator#add()` delegates the work to the ejb, gets the result, stores it\nand then instructs what view is to be rendered.\n\nYou're right. The return value \"success\" is checked up in faces-config navigation-rules\nand the respective page is rendered.\n\nIn our case, `result.xhtml` page is rendered.\n\nThe request scoped `calculatorBean` is available here, and we use EL to display the values.\n\n## Source\n\n## Calculator\n\n package org.superbiz.jsf;\n \n import javax.ejb.Local;\n \n @Local\n public interface Calculator {\n public double add(double x, double y);\n }\n\n\n## CalculatorBean\n\n package org.superbiz.jsf;\n \n import javax.ejb.EJB;\n import javax.faces.bean.ManagedBean;\n\n @ManagedBean\n public class CalculatorBean {\n @EJB\n Calculator calculator;\n private double x;\n private double y;\n private double result;\n \n public double getX() {\n return x;\n }\n \n public void setX(double x) {\n this.x = x;\n }\n \n public double getY() {\n return y;\n }\n \n public void setY(double y) {\n this.y = y;\n }\n \n public double getResult() {\n return result;\n }\n \n public void setResult(double result) {\n this.result = result;\n }\n \n public String add() {\n result = calculator.add(x, y);\n return \"success\";\n }\n }\n\n## CalculatorImpl\n\n package org.superbiz.jsf;\n \n import javax.ejb.Stateless;\n \n @Stateless\n public class CalculatorImpl implements Calculator {\n \n public double add(double x, double y) {\n return x + y;\n }\n }\n\n\n# web.xml\n\n <?xml version=\"1.0\"?>\n\n <web-app xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xmlns=\"http://java.sun.com/xml/ns/javaee\"\n xmlns:web=\"http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd\"\n xsi:schemaLocation=\"http://java.sun.com/xml/ns/javaee\n http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd\"\n version=\"2.5\">\n\n <description>MyProject web.xml</description>\n\n <!-- Faces Servlet -->\n <servlet>\n <servlet-name>Faces Servlet</servlet-name>\n <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>\n <load-on-startup>1</load-on-startup>\n </servlet>\n\n <!-- Faces Servlet Mapping -->\n <servlet-mapping>\n <servlet-name>Faces Servlet</servlet-name>\n <url-pattern>*.jsf</url-pattern>\n </servlet-mapping>\n\n <!-- Welcome files -->\n <welcome-file-list>\n <welcome-file>index.jsp</welcome-file>\n <welcome-file>index.html</welcome-file>\n </welcome-file-list>\n </web-app>\n\n \n##Calculator.xhtml\n\n <?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\"\n xmlns:f=\"http://java.sun.com/jsf/core\"\n xmlns:h=\"http://java.sun.com/jsf/html\">\n\n\n <h:body bgcolor=\"white\">\n <f:view>\n <h:form>\n <h:panelGrid columns=\"2\">\n <h:outputText value='Enter first number'/>\n <h:inputText value='#{calculatorBean.x}'/>\n <h:outputText value='Enter second number'/>\n <h:inputText value='#{calculatorBean.y}'/>\n <h:commandButton action=\"#{calculatorBean.add}\" value=\"Add\"/>\n </h:panelGrid>\n </h:form>\n </f:view>\n </h:body>\n </html>\n\n \n##Result.xhtml\n\n <?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\"\n xmlns:f=\"http://java.sun.com/jsf/core\"\n xmlns:h=\"http://java.sun.com/jsf/html\">\n\n <h:body>\n <f:view>\n <h:form id=\"mainForm\">\n <h2><h:outputText value=\"Result of adding #{calculatorBean.x} and #{calculatorBean.y} is #{calculatorBean.result }\"/></h2>\n <h:commandLink action=\"back\">\n <h:outputText value=\"Home\"/>\n </h:commandLink>\n </h:form>\n </f:view>\n </h:body>\n </html>\n \n#faces-config.xml\n\n <?xml version=\"1.0\"?>\n <faces-config xmlns=\"http://java.sun.com/xml/ns/javaee\"\n xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:schemaLocation=\"http://java.sun.com/xml/ns/javaee\n http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd\"\n version=\"2.0\">\n\n <navigation-rule>\n <from-view-id>/calculator.xhtml</from-view-id>\n <navigation-case>\n <from-outcome>success</from-outcome>\n <to-view-id>/result.xhtml</to-view-id>\n </navigation-case>\n </navigation-rule>\n\n <navigation-rule>\n <from-view-id>/result.xhtml</from-view-id>\n <navigation-case>\n <from-outcome>back</from-outcome>\n <to-view-id>/calculator.xhtml</to-view-id>\n </navigation-case>\n </navigation-rule>\n </faces-config>\n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/jsf-managedBean-and-ejb" | |
}, | |
{ | |
"name":"jsf-cdi-and-ejb", | |
"readme":"Title: JSF-CDI-EJB\n\nThe simple application contains a CDI managed bean `CalculatorBean`, which uses the `Calculator` EJB to add two numbers\nand display the results to the user. The EJB is injected in the managed bean using @Inject annotation.\n\nYou could run this in the latest Apache TomEE [snapshot](https://repository.apache.org/content/repositories/snapshots/org/apache/openejb/apache-tomee/)\n\nThe complete source code is below but lets break down to look at some smaller snippets and see how it works.\n\n\nA little note on the setup:\n\nAs for the libraries, myfaces-api and myfaces-impl are provided in tomee/lib and hence they should not be a part of the\nwar. In maven terms, they would be with scope 'provided'\n\nAlso note that we use servlet 2.5 declaration in web.xml\n<web-app xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xmlns=\"http://java.sun.com/xml/ns/javaee\"\n xmlns:web=\"http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd\"\n xsi:schemaLocation=\"http://java.sun.com/xml/ns/javaee\n http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd\"\n version=\"2.5\">\n\nAnd we use 2.0 version of faces-config\n\n <faces-config xmlns=\"http://java.sun.com/xml/ns/javaee\"\n xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:schemaLocation=\"http://java.sun.com/xml/ns/javaee\n http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd\"\n version=\"2.0\">\n\nTo make this a cdi-aware-archive (i.e bean archive) an empty beans.xml is added in WEB-INF\n\n <?xml version=\"1.0\" encoding=\"UTF-8\"?>\n\n <beans xmlns=\"http://java.sun.com/xml/ns/javaee\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:schemaLocation=\"http://java.sun.com/xml/ns/javaee\n http://java.sun.com/xml/ns/javaee/beans_1_0.xsd\">\n </beans>\n\nWe'll first declare the FacesServlet in the web.xml\n\n <servlet>\n <servlet-name>Faces Servlet</servlet-name>\n <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>\n <load-on-startup>1</load-on-startup>\n </servlet>\n\nFacesServlet acts as the master controller.\n\nWe'll then create the calculator.xhtml file.\n\n <h:outputText value='Enter first number'/>\n <h:inputText value='#{calculatorBean.x}'/>\n <h:outputText value='Enter second number'/>\n <h:inputText value='#{calculatorBean.y}'/>\n <h:commandButton action=\"#{calculatorBean.add}\" value=\"Add\"/>\n\nNotice how we've used the bean here. By default, the bean name would be the simple name of the bean\nclass with the first letter in lower case.\n\nWe've annotated the `CalculatorBean` with `@RequestScoped`.\nSo when a request comes in, the bean is instantiated and placed in the request scope.\n\n<h:inputText value='#{calculatorBean.x}'/>\n\nHere, getX() method of calculatorBean is invoked and the resulting value is displayed.\nx being a Double, we rightly should see 0.0 displayed.\n\nWhen you change the value and submit the form, these entered values are bound using the setters\nin the bean and then the commandButton-action method is invoked.\n\nIn this case, CalculatorBean#add() is invoked.\n\nCalculator#add() delegates the work to the ejb, gets the result, stores it\nand then returns what view is to be rendered.\n\nThe return value \"success\" is checked up in faces-config navigation-rules\nand the respective page is rendered.\n\nIn our case, 'result.xhtml' page is rendered where\nuse EL and display the result from the request-scoped `calculatorBean`.\n\n#Source Code\n\n## CalculatorBean\n\n import javax.enterprise.context.RequestScoped;\n import javax.inject.Named;\n import javax.inject.Inject;\n\n @RequestScoped\n @Named\n public class CalculatorBean {\n @Inject\n Calculator calculator;\n private double x;\n private double y;\n private double result;\n \n public double getX() {\n return x;\n }\n \n public void setX(double x) {\n this.x = x;\n }\n \n public double getY() {\n return y;\n }\n \n public void setY(double y) {\n this.y = y;\n }\n \n public double getResult() {\n return result;\n }\n \n public void setResult(double result) {\n this.result = result;\n }\n \n public String add() {\n result = calculator.add(x, y);\n return \"success\";\n }\n }\n\n## Calculator\n\n package org.superbiz.jsf;\n \n import javax.ejb.Stateless;\n \n @Stateless\n public class Calculator{\n \n public double add(double x, double y) {\n return x + y;\n }\n }\n\n\n#web.xml\n\n<?xml version=\"1.0\"?>\n\n<web-app xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xmlns=\"http://java.sun.com/xml/ns/javaee\"\n xmlns:web=\"http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd\"\n xsi:schemaLocation=\"http://java.sun.com/xml/ns/javaee\n http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd\"\n version=\"2.5\">\n\n <description>MyProject web.xml</description>\n\n <!-- Faces Servlet -->\n <servlet>\n <servlet-name>Faces Servlet</servlet-name>\n <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>\n <load-on-startup>1</load-on-startup>\n </servlet>\n\n <!-- Faces Servlet Mapping -->\n <servlet-mapping>\n <servlet-name>Faces Servlet</servlet-name>\n <url-pattern>*.jsf</url-pattern>\n </servlet-mapping>\n\n <!-- Welcome files -->\n <welcome-file-list>\n <welcome-file>index.jsp</welcome-file>\n <welcome-file>index.html</welcome-file>\n </welcome-file-list>\n\n</web-app>\n\n\n#Calculator.xhtml\n\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n\"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\"\n xmlns:f=\"http://java.sun.com/jsf/core\"\n xmlns:h=\"http://java.sun.com/jsf/html\">\n\n\n<h:body bgcolor=\"white\">\n <f:view>\n <h:form>\n <h:panelGrid columns=\"2\">\n <h:outputText value='Enter first number'/>\n <h:inputText value='#{calculatorBean.x}'/>\n <h:outputText value='Enter second number'/>\n <h:inputText value='#{calculatorBean.y}'/>\n <h:commandButton action=\"#{calculatorBean.add}\" value=\"Add\"/>\n </h:panelGrid>\n </h:form>\n </f:view>\n</h:body>\n</html>\n\n\n #Result.xhtml\n\n<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n<html xmlns=\"http://www.w3.org/1999/xhtml\"\n xmlns:f=\"http://java.sun.com/jsf/core\"\n xmlns:h=\"http://java.sun.com/jsf/html\">\n\n<h:body>\n<f:view>\n <h:form id=\"mainForm\">\n <h2><h:outputText value=\"Result of adding #{calculatorBean.x} and #{calculatorBean.y} is #{calculatorBean.result }\"/></h2>\n <h:commandLink action=\"back\">\n <h:outputText value=\"Home\"/>\n </h:commandLink>\n </h:form>\n</f:view>\n</h:body>\n</html>\n\n #faces-config.xml\n\n <?xml version=\"1.0\"?>\n <faces-config xmlns=\"http://java.sun.com/xml/ns/javaee\"\n xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:schemaLocation=\"http://java.sun.com/xml/ns/javaee\n http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd\"\n version=\"2.0\">\n\n <navigation-rule>\n <from-view-id>/calculator.xhtml</from-view-id>\n <navigation-case>\n <from-outcome>success</from-outcome>\n <to-view-id>/result.xhtml</to-view-id>\n </navigation-case>\n </navigation-rule>\n\n <navigation-rule>\n <from-view-id>/result.xhtml</from-view-id>\n <navigation-case>\n <from-outcome>back</from-outcome>\n <to-view-id>/calculator.xhtml</to-view-id>\n </navigation-case>\n </navigation-rule>\n </faces-config>", | |
"url":"https://github.com/apache/tomee/tree/master/examples/jsf-cdi-and-ejb" | |
} | |
], | |
"json":[ | |
{ | |
"name":"rest-xml-json", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/rest-xml-json" | |
} | |
], | |
"lookup":[ | |
{ | |
"name":"lookup-of-ejbs", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/lookup-of-ejbs" | |
}, | |
{ | |
"name":"client-resource-lookup-preview", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/client-resource-lookup-preview" | |
}, | |
{ | |
"name":"lookup-of-ejbs-with-descriptor", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/lookup-of-ejbs-with-descriptor" | |
} | |
], | |
"managedBean":[ | |
{ | |
"name":"jsf-managedBean-and-ejb", | |
"readme":"Title: JSF Application that uses managed-bean and ejb\n\nThis is a simple web-app showing how to use dependency injection in JSF managed beans using TomEE.\n\nIt contains a Local Stateless session bean `CalculatorImpl` which adds two numbers and returns the result.\nThe application also contains a JSF managed bean `CalculatorBean`, which uses the EJB to add two numbers\nand display the results to the user. The EJB is injected in the managed bean using `@EJB` annotation.\n\n\n## A little note on the setup:\n\nYou could run this in the latest Apache TomEE [snapshot](https://repository.apache.org/content/repositories/snapshots/org/apache/openejb/apache-tomee/)\n\nAs for the libraries, myfaces-api and myfaces-impl are provided in tomee/lib and hence they should not be a part of the\nwar. In maven terms, they would be with scope 'provided'\n\nAlso note that we use servlet 2.5 declaration in web.xml\n \n <web-app xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xmlns=\"http://java.sun.com/xml/ns/javaee\"\n xmlns:web=\"http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd\"\n xsi:schemaLocation=\"http://java.sun.com/xml/ns/javaee\n http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd\"\n version=\"2.5\">\n\nAnd we use 2.0 version of faces-config\n\n <faces-config xmlns=\"http://java.sun.com/xml/ns/javaee\"\n xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:schemaLocation=\"http://java.sun.com/xml/ns/javaee\n http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd\"\n version=\"2.0\">\n\n\nThe complete source code is provided below but let's break down to look at some smaller snippets and see how it works.\n\nWe'll first declare the `FacesServlet` in the `web.xml`\n\n <servlet>\n <servlet-name>Faces Servlet</servlet-name>\n <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>\n <load-on-startup>1</load-on-startup>\n </servlet>\n\n`FacesServlet` acts as the master controller.\n\nWe'll then create the `calculator.xhtml` file.\n\n <h:outputText value='Enter first number'/>\n <h:inputText value='#{calculatorBean.x}'/>\n <h:outputText value='Enter second number'/>\n <h:inputText value='#{calculatorBean.y}'/>\n <h:commandButton action=\"#{calculatorBean.add}\" value=\"Add\"/>\n\n\nNotice how we've use the bean here.\nBy default it is the simple class name of the managed bean.\n\nWhen a request comes in, the bean is instantiated and placed in the appropriate scope.\nBy default, the bean is placed in the request scope.\n\n <h:inputText value='#{calculatorBean.x}'/>\n\nHere, getX() method of calculatorBean is invoked and the resulting value is displayed.\nx being a Double, we rightly should see 0.0 displayed.\n\nWhen you change the value and submit the form, these entered values are bound using the setters\nin the bean and then the commandButton-action method is invoked.\n\nIn this case, `CalculatorBean#add()` is invoked.\n\n`Calculator#add()` delegates the work to the ejb, gets the result, stores it\nand then instructs what view is to be rendered.\n\nYou're right. The return value \"success\" is checked up in faces-config navigation-rules\nand the respective page is rendered.\n\nIn our case, `result.xhtml` page is rendered.\n\nThe request scoped `calculatorBean` is available here, and we use EL to display the values.\n\n## Source\n\n## Calculator\n\n package org.superbiz.jsf;\n \n import javax.ejb.Local;\n \n @Local\n public interface Calculator {\n public double add(double x, double y);\n }\n\n\n## CalculatorBean\n\n package org.superbiz.jsf;\n \n import javax.ejb.EJB;\n import javax.faces.bean.ManagedBean;\n\n @ManagedBean\n public class CalculatorBean {\n @EJB\n Calculator calculator;\n private double x;\n private double y;\n private double result;\n \n public double getX() {\n return x;\n }\n \n public void setX(double x) {\n this.x = x;\n }\n \n public double getY() {\n return y;\n }\n \n public void setY(double y) {\n this.y = y;\n }\n \n public double getResult() {\n return result;\n }\n \n public void setResult(double result) {\n this.result = result;\n }\n \n public String add() {\n result = calculator.add(x, y);\n return \"success\";\n }\n }\n\n## CalculatorImpl\n\n package org.superbiz.jsf;\n \n import javax.ejb.Stateless;\n \n @Stateless\n public class CalculatorImpl implements Calculator {\n \n public double add(double x, double y) {\n return x + y;\n }\n }\n\n\n# web.xml\n\n <?xml version=\"1.0\"?>\n\n <web-app xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xmlns=\"http://java.sun.com/xml/ns/javaee\"\n xmlns:web=\"http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd\"\n xsi:schemaLocation=\"http://java.sun.com/xml/ns/javaee\n http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd\"\n version=\"2.5\">\n\n <description>MyProject web.xml</description>\n\n <!-- Faces Servlet -->\n <servlet>\n <servlet-name>Faces Servlet</servlet-name>\n <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>\n <load-on-startup>1</load-on-startup>\n </servlet>\n\n <!-- Faces Servlet Mapping -->\n <servlet-mapping>\n <servlet-name>Faces Servlet</servlet-name>\n <url-pattern>*.jsf</url-pattern>\n </servlet-mapping>\n\n <!-- Welcome files -->\n <welcome-file-list>\n <welcome-file>index.jsp</welcome-file>\n <welcome-file>index.html</welcome-file>\n </welcome-file-list>\n </web-app>\n\n \n##Calculator.xhtml\n\n <?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\"\n xmlns:f=\"http://java.sun.com/jsf/core\"\n xmlns:h=\"http://java.sun.com/jsf/html\">\n\n\n <h:body bgcolor=\"white\">\n <f:view>\n <h:form>\n <h:panelGrid columns=\"2\">\n <h:outputText value='Enter first number'/>\n <h:inputText value='#{calculatorBean.x}'/>\n <h:outputText value='Enter second number'/>\n <h:inputText value='#{calculatorBean.y}'/>\n <h:commandButton action=\"#{calculatorBean.add}\" value=\"Add\"/>\n </h:panelGrid>\n </h:form>\n </f:view>\n </h:body>\n </html>\n\n \n##Result.xhtml\n\n <?xml version=\"1.0\" encoding=\"UTF-8\"?>\n <!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\"\n \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n <html xmlns=\"http://www.w3.org/1999/xhtml\"\n xmlns:f=\"http://java.sun.com/jsf/core\"\n xmlns:h=\"http://java.sun.com/jsf/html\">\n\n <h:body>\n <f:view>\n <h:form id=\"mainForm\">\n <h2><h:outputText value=\"Result of adding #{calculatorBean.x} and #{calculatorBean.y} is #{calculatorBean.result }\"/></h2>\n <h:commandLink action=\"back\">\n <h:outputText value=\"Home\"/>\n </h:commandLink>\n </h:form>\n </f:view>\n </h:body>\n </html>\n \n#faces-config.xml\n\n <?xml version=\"1.0\"?>\n <faces-config xmlns=\"http://java.sun.com/xml/ns/javaee\"\n xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:schemaLocation=\"http://java.sun.com/xml/ns/javaee\n http://java.sun.com/xml/ns/javaee/web-facesconfig_2_0.xsd\"\n version=\"2.0\">\n\n <navigation-rule>\n <from-view-id>/calculator.xhtml</from-view-id>\n <navigation-case>\n <from-outcome>success</from-outcome>\n <to-view-id>/result.xhtml</to-view-id>\n </navigation-case>\n </navigation-rule>\n\n <navigation-rule>\n <from-view-id>/result.xhtml</from-view-id>\n <navigation-case>\n <from-outcome>back</from-outcome>\n <to-view-id>/calculator.xhtml</to-view-id>\n </navigation-case>\n </navigation-rule>\n </faces-config>\n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/jsf-managedBean-and-ejb" | |
} | |
], | |
"mbean":[ | |
{ | |
"name":"dynamic-proxy-to-access-mbean", | |
"readme":"Title: dynamic-proxy-to-access-mbean\n\n*Help us document this example! Click the blue pencil icon in the upper right to edit this page.*\n\n## Example\n\nAcessing MBean is something simple through the JMX API but it is often technical and not very interesting.\n\nThis example simplify this work simply doing it generically in a proxy.\n\nSo from an user side you simple declare an interface to access your MBeans.\n\nNote: the example implementation uses a local MBeanServer but enhancing the example API\nit is easy to imagine a remote connection with user/password if needed.\n\n## ObjectName API (annotation)\n\nSimply an annotation to get the object\n\n package org.superbiz.dynamic.mbean;\n\n import java.lang.annotation.Retention;\n import java.lang.annotation.Target;\n\n import static java.lang.annotation.ElementType.TYPE;\n import static java.lang.annotation.ElementType.METHOD;\n import static java.lang.annotation.RetentionPolicy.RUNTIME;\n\n @Target({TYPE, METHOD})\n @Retention(RUNTIME)\n public @interface ObjectName {\n String value();\n\n // for remote usage only\n String url() default \"\";\n String user() default \"\";\n String password() default \"\";\n }\n\n## DynamicMBeanHandler (thr proxy implementation)\n\n package org.superbiz.dynamic.mbean;\n\n import javax.annotation.PreDestroy;\n import javax.management.Attribute;\n import javax.management.MBeanAttributeInfo;\n import javax.management.MBeanInfo;\n import javax.management.MBeanServer;\n import javax.management.MBeanServerConnection;\n import javax.management.ObjectName;\n import javax.management.remote.JMXConnector;\n import javax.management.remote.JMXConnectorFactory;\n import javax.management.remote.JMXServiceURL;\n import java.io.IOException;\n import java.lang.management.ManagementFactory;\n import java.lang.reflect.InvocationHandler;\n import java.lang.reflect.Method;\n import java.util.HashMap;\n import java.util.Map;\n import java.util.concurrent.ConcurrentHashMap;\n\n /**\n * Need a @PreDestroy method to disconnect the remote host when used in remote mode.\n */\n public class DynamicMBeanHandler implements InvocationHandler {\n private final Map<Method, ConnectionInfo> infos = new ConcurrentHashMap<Method, ConnectionInfo>();\n\n @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {\n final String methodName = method.getName();\n if (method.getDeclaringClass().equals(Object.class) && \"toString\".equals(methodName)) {\n return getClass().getSimpleName() + \" Proxy\";\n }\n if (method.getAnnotation(PreDestroy.class) != null) {\n return destroy();\n }\n\n final ConnectionInfo info = getConnectionInfo(method);\n final MBeanInfo infos = info.getMBeanInfo();\n if (methodName.startsWith(\"set\") && methodName.length() > 3 && args != null && args.length == 1\n && (Void.TYPE.equals(method.getReturnType()) || Void.class.equals(method.getReturnType()))) {\n final String attributeName = attributeName(infos, methodName, method.getParameterTypes()[0]);\n info.setAttribute(new Attribute(attributeName, args[0]));\n return null;\n } else if (methodName.startsWith(\"get\") && (args == null || args.length == 0) && methodName.length() > 3) {\n final String attributeName = attributeName(infos, methodName, method.getReturnType());\n return info.getAttribute(attributeName);\n }\n // operation\n return info.invoke(methodName, args, getSignature(method));\n }\n\n public Object destroy() {\n for (ConnectionInfo info : infos.values()) {\n info.clean();\n }\n infos.clear();\n return null;\n }\n\n private String[] getSignature(Method method) {\n String[] args = new String[method.getParameterTypes().length];\n for (int i = 0; i < method.getParameterTypes().length; i++) {\n args[i] = method.getParameterTypes()[i].getName();\n }\n return args; // note: null should often work...\n }\n\n private String attributeName(MBeanInfo infos, String methodName, Class<?> type) {\n String found = null;\n String foundBackUp = null; // without checking the type\n final String attributeName = methodName.substring(3, methodName.length());\n final String lowerName = Character.toLowerCase(methodName.charAt(3)) + methodName.substring(4, methodName.length());\n\n for (MBeanAttributeInfo attribute : infos.getAttributes()) {\n final String name = attribute.getName();\n if (attributeName.equals(name)) {\n foundBackUp = attributeName;\n if (attribute.getType().equals(type.getName())) {\n found = name;\n }\n } else if (found == null && ((lowerName.equals(name) && !attributeName.equals(name))\n || lowerName.equalsIgnoreCase(name))) {\n foundBackUp = name;\n if (attribute.getType().equals(type.getName())) {\n found = name;\n }\n }\n }\n\n if (found == null && foundBackUp == null) {\n throw new UnsupportedOperationException(\"cannot find attribute \" + attributeName);\n }\n\n if (found != null) {\n return found;\n }\n return foundBackUp;\n }\n\n private synchronized ConnectionInfo getConnectionInfo(Method method) throws Exception {\n if (!infos.containsKey(method)) {\n synchronized (infos) {\n if (!infos.containsKey(method)) { // double check for synchro\n org.superbiz.dynamic.mbean.ObjectName on = method.getAnnotation(org.superbiz.dynamic.mbean.ObjectName.class);\n if (on == null) {\n Class<?> current = method.getDeclaringClass();\n do {\n on = method.getDeclaringClass().getAnnotation(org.superbiz.dynamic.mbean.ObjectName.class);\n current = current.getSuperclass();\n } while (on == null && current != null);\n if (on == null) {\n throw new UnsupportedOperationException(\"class or method should define the objectName to use for invocation: \" + method.toGenericString());\n }\n }\n final ConnectionInfo info;\n if (on.url().isEmpty()) {\n info = new LocalConnectionInfo();\n ((LocalConnectionInfo) info).server = ManagementFactory.getPlatformMBeanServer(); // could use an id...\n } else {\n info = new RemoteConnectionInfo();\n final Map<String, String[]> environment = new HashMap<String, String[]>();\n if (!on.user().isEmpty()) {\n environment.put(JMXConnector.CREDENTIALS, new String[]{ on.user(), on.password() });\n }\n // ((RemoteConnectionInfo) info).connector = JMXConnectorFactory.newJMXConnector(new JMXServiceURL(on.url()), environment);\n ((RemoteConnectionInfo) info).connector = JMXConnectorFactory.connect(new JMXServiceURL(on.url()), environment);\n\n }\n info.objectName = new ObjectName(on.value());\n\n infos.put(method, info);\n }\n }\n }\n return infos.get(method);\n }\n\n private abstract static class ConnectionInfo {\n protected ObjectName objectName;\n\n public abstract void setAttribute(Attribute attribute) throws Exception;\n public abstract Object getAttribute(String attribute) throws Exception;\n public abstract Object invoke(String operationName, Object params[], String signature[]) throws Exception;\n public abstract MBeanInfo getMBeanInfo() throws Exception;\n public abstract void clean();\n }\n\n private static class LocalConnectionInfo extends ConnectionInfo {\n private MBeanServer server;\n\n @Override public void setAttribute(Attribute attribute) throws Exception {\n server.setAttribute(objectName, attribute);\n }\n\n @Override public Object getAttribute(String attribute) throws Exception {\n return server.getAttribute(objectName, attribute);\n }\n\n @Override\n public Object invoke(String operationName, Object[] params, String[] signature) throws Exception {\n return server.invoke(objectName, operationName, params, signature);\n }\n\n @Override public MBeanInfo getMBeanInfo() throws Exception {\n return server.getMBeanInfo(objectName);\n }\n\n @Override public void clean() {\n // no-op\n }\n }\n\n private static class RemoteConnectionInfo extends ConnectionInfo {\n private JMXConnector connector;\n private MBeanServerConnection connection;\n\n private void before() throws IOException {\n connection = connector.getMBeanServerConnection();\n }\n\n private void after() throws IOException {\n // no-op\n }\n\n @Override public void setAttribute(Attribute attribute) throws Exception {\n before();\n connection.setAttribute(objectName, attribute);\n after();\n }\n\n @Override public Object getAttribute(String attribute) throws Exception {\n before();\n try {\n return connection.getAttribute(objectName, attribute);\n } finally {\n after();\n }\n }\n\n @Override\n public Object invoke(String operationName, Object[] params, String[] signature) throws Exception {\n before();\n try {\n return connection.invoke(objectName, operationName, params, signature);\n } finally {\n after();\n }\n }\n\n @Override public MBeanInfo getMBeanInfo() throws Exception {\n before();\n try {\n return connection.getMBeanInfo(objectName);\n } finally {\n after();\n }\n }\n\n @Override public void clean() {\n try {\n connector.close();\n } catch (IOException e) {\n // no-op\n }\n }\n }\n }\n\n## Dynamic Proxies \n\n### DynamicMBeanClient (the dynamic JMX client)\n\n\tpackage org.superbiz.dynamic.mbean;\n\n\timport org.apache.openejb.api.Proxy;\n\timport org.superbiz.dynamic.mbean.DynamicMBeanHandler;\n\timport org.superbiz.dynamic.mbean.ObjectName;\n\n\timport javax.ejb.Singleton;\n\n\t/**\n\t * @author rmannibucau\n\t */\n\t@Singleton\n\t@Proxy(DynamicMBeanHandler.class)\n\t@ObjectName(DynamicMBeanClient.OBJECT_NAME)\n\tpublic interface DynamicMBeanClient {\n\t\tstatic final String OBJECT_NAME = \"test:group=DynamicMBeanClientTest\";\n\n\t\tint getCounter();\n\t\tvoid setCounter(int i);\n\t\tint length(String aString);\n\t}\n\n### DynamicMBeanClient (the dynamic JMX client)\n package org.superbiz.dynamic.mbean;\n\n import org.apache.openejb.api.Proxy;\n\n import javax.annotation.PreDestroy;\n import javax.ejb.Singleton;\n\n\n @Singleton\n @Proxy(DynamicMBeanHandler.class)\n @ObjectName(value = DynamicRemoteMBeanClient.OBJECT_NAME, url = \"service:jmx:rmi:///jndi/rmi://localhost:8243/jmxrmi\")\n public interface DynamicRemoteMBeanClient {\n static final String OBJECT_NAME = \"test:group=DynamicMBeanClientTest\";\n\n int getCounter();\n void setCounter(int i);\n int length(String aString);\n\n @PreDestroy void clean();\n }\n\n## The MBean used for the test\n\n### SimpleMBean\n\n\tpackage org.superbiz.dynamic.mbean.simple;\n\n\tpublic interface SimpleMBean {\n\t\tint length(String s);\n\n\t\tint getCounter();\n\t\tvoid setCounter(int c);\n\t}\n\n## Simple\n\n\tpackage org.superbiz.dynamic.mbean.simple;\n\n\tpublic class Simple implements SimpleMBean {\n\t\tprivate int counter = 0;\n\n\t\t@Override public int length(String s) {\n\t\t if (s == null) {\n\t\t return 0;\n\t\t }\n\t\t return s.length();\n\t\t}\n\n\t\t@Override public int getCounter() {\n\t\t return counter;\n\t\t}\n\n\t\t@Override public void setCounter(int c) {\n\t\t counter = c;\n\t\t}\n\t}\n\n## DynamicMBeanClientTest (The test)\n\n package org.superbiz.dynamic.mbean;\n\n import org.junit.After;\n import org.junit.AfterClass;\n import org.junit.Before;\n import org.junit.BeforeClass;\n import org.junit.Test;\n import org.superbiz.dynamic.mbean.simple.Simple;\n\n import javax.ejb.EJB;\n import javax.ejb.embeddable.EJBContainer;\n import javax.management.Attribute;\n import javax.management.ObjectName;\n import java.lang.management.ManagementFactory;\n\n import static junit.framework.Assert.assertEquals;\n\n public class DynamicMBeanClientTest {\n private static ObjectName objectName;\n private static EJBContainer container;\n\n @EJB private DynamicMBeanClient localClient;\n @EJB private DynamicRemoteMBeanClient remoteClient;\n\n @BeforeClass public static void start() {\n container = EJBContainer.createEJBContainer();\n }\n\n @Before public void injectAndRegisterMBean() throws Exception {\n container.getContext().bind(\"inject\", this);\n objectName = new ObjectName(DynamicMBeanClient.OBJECT_NAME);\n ManagementFactory.getPlatformMBeanServer().registerMBean(new Simple(), objectName);\n }\n\n @After public void unregisterMBean() throws Exception {\n if (objectName != null) {\n ManagementFactory.getPlatformMBeanServer().unregisterMBean(objectName);\n }\n }\n\n @Test public void localGet() throws Exception {\n assertEquals(0, localClient.getCounter());\n ManagementFactory.getPlatformMBeanServer().setAttribute(objectName, new Attribute(\"Counter\", 5));\n assertEquals(5, localClient.getCounter());\n }\n\n @Test public void localSet() throws Exception {\n assertEquals(0, ((Integer) ManagementFactory.getPlatformMBeanServer().getAttribute(objectName, \"Counter\")).intValue());\n localClient.setCounter(8);\n assertEquals(8, ((Integer) ManagementFactory.getPlatformMBeanServer().getAttribute(objectName, \"Counter\")).intValue());\n }\n\n @Test public void localOperation() {\n assertEquals(7, localClient.length(\"openejb\"));\n }\n\n @Test public void remoteGet() throws Exception {\n assertEquals(0, remoteClient.getCounter());\n ManagementFactory.getPlatformMBeanServer().setAttribute(objectName, new Attribute(\"Counter\", 5));\n assertEquals(5, remoteClient.getCounter());\n }\n\n @Test public void remoteSet() throws Exception {\n assertEquals(0, ((Integer) ManagementFactory.getPlatformMBeanServer().getAttribute(objectName, \"Counter\")).intValue());\n remoteClient.setCounter(8);\n assertEquals(8, ((Integer) ManagementFactory.getPlatformMBeanServer().getAttribute(objectName, \"Counter\")).intValue());\n }\n\n @Test public void remoteOperation() {\n assertEquals(7, remoteClient.length(\"openejb\"));\n }\n\n @AfterClass public static void close() {\n if (container != null) {\n container.close();\n }\n }\n }\n\n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/dynamic-proxy-to-access-mbean" | |
}, | |
{ | |
"name":"mbean-auto-registration", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/mbean-auto-registration" | |
} | |
], | |
"mdb":[ | |
{ | |
"name":"simple-mdb-and-cdi", | |
"readme":"Title: Simple MDB and CDI\n\n*Help us document this example! Click the blue pencil icon in the upper right to edit this page.*\n\n## ChatBean\n\n package org.superbiz.mdb;\n \n import javax.annotation.Resource;\n import javax.ejb.MessageDriven;\n import javax.inject.Inject;\n import javax.jms.Connection;\n import javax.jms.ConnectionFactory;\n import javax.jms.DeliveryMode;\n import javax.jms.JMSException;\n import javax.jms.Message;\n import javax.jms.MessageListener;\n import javax.jms.MessageProducer;\n import javax.jms.Queue;\n import javax.jms.Session;\n import javax.jms.TextMessage;\n \n @MessageDriven\n public class ChatBean implements MessageListener {\n \n @Resource\n private ConnectionFactory connectionFactory;\n \n @Resource(name = \"AnswerQueue\")\n private Queue answerQueue;\n \n @Inject\n private ChatRespondCreator responder;\n \n public void onMessage(Message message) {\n try {\n \n final TextMessage textMessage = (TextMessage) message;\n final String question = textMessage.getText();\n final String response = responder.respond(question);\n \n if (response != null) {\n respond(response);\n }\n } catch (JMSException e) {\n throw new IllegalStateException(e);\n }\n }\n \n private void respond(String text) throws JMSException {\n \n Connection connection = null;\n Session session = null;\n \n try {\n connection = connectionFactory.createConnection();\n connection.start();\n \n // Create a Session\n session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);\n \n // Create a MessageProducer from the Session to the Topic or Queue\n MessageProducer producer = session.createProducer(answerQueue);\n producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);\n \n // Create a message\n TextMessage message = session.createTextMessage(text);\n \n // Tell the producer to send the message\n producer.send(message);\n } finally {\n // Clean up\n if (session != null) session.close();\n if (connection != null) connection.close();\n }\n }\n }\n\n## ChatRespondCreator\n\n package org.superbiz.mdb;\n \n public class ChatRespondCreator {\n public String respond(String question) {\n if (\"Hello World!\".equals(question)) {\n return \"Hello, Test Case!\";\n } else if (\"How are you?\".equals(question)) {\n return \"I'm doing well.\";\n } else if (\"Still spinning?\".equals(question)) {\n return \"Once every day, as usual.\";\n }\n return null;\n }\n }\n\n## beans.xml\n\n <!--\n \n Licensed to the Apache Software Foundation (ASF) under one or more\n contributor license agreements. See the NOTICE file distributed with\n this work for additional information regarding copyright ownership.\n The ASF licenses this file to You under the Apache License, Version 2.0\n (the \"License\"); you may not use this file except in compliance with\n the License. You may obtain a copy of the License at\n \n http://www.apache.org/licenses/LICENSE-2.0\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n -->\n \n <beans/>\n \n\n## ChatBeanTest\n\n package org.superbiz.mdb;\n \n import junit.framework.TestCase;\n \n import javax.annotation.Resource;\n import javax.ejb.embeddable.EJBContainer;\n import javax.jms.Connection;\n import javax.jms.ConnectionFactory;\n import javax.jms.JMSException;\n import javax.jms.MessageConsumer;\n import javax.jms.MessageProducer;\n import javax.jms.Queue;\n import javax.jms.Session;\n import javax.jms.TextMessage;\n \n public class ChatBeanTest extends TestCase {\n \n @Resource\n private ConnectionFactory connectionFactory;\n \n @Resource(name = \"ChatBean\")\n private Queue questionQueue;\n \n @Resource(name = \"AnswerQueue\")\n private Queue answerQueue;\n \n public void test() throws Exception {\n EJBContainer.createEJBContainer().getContext().bind(\"inject\", this);\n \n \n final Connection connection = connectionFactory.createConnection();\n \n connection.start();\n \n final Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);\n \n final MessageProducer questions = session.createProducer(questionQueue);\n \n final MessageConsumer answers = session.createConsumer(answerQueue);\n \n \n sendText(\"Hello World!\", questions, session);\n \n assertEquals(\"Hello, Test Case!\", receiveText(answers));\n \n \n sendText(\"How are you?\", questions, session);\n \n assertEquals(\"I'm doing well.\", receiveText(answers));\n \n \n sendText(\"Still spinning?\", questions, session);\n \n assertEquals(\"Once every day, as usual.\", receiveText(answers));\n }\n \n private void sendText(String text, MessageProducer questions, Session session) throws JMSException {\n \n questions.send(session.createTextMessage(text));\n }\n \n private String receiveText(MessageConsumer answers) throws JMSException {\n \n return ((TextMessage) answers.receive(1000)).getText();\n }\n }\n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/simple-mdb-and-cdi" | |
}, | |
{ | |
"name":"simple-mdb", | |
"readme":"Title: Simple MDB\n\nBelow is a fun app, a chat application that uses JMS. We create a message driven bean, by marking our class with `@MessageDriven`. A message driven bean has some similarities with a stateless session bean, in the part that it is pooled too.\n\nWell, lets tell our chat-app to listen for incoming messages. That we do by implementing `MessageListener` and overriding the `onMessage(Message message)`.\n\nThen this app \"listens\" for incoming messages, and the messages picked up are processed by `onMessage(Message message)` method.\n\nThat finishes our message driven bean implementation. The \"processing\" part could be anything that fits your business-requirement.\n\nIn this case, it is to respond to the user. The `respond` method shows how a Message can be sent.\n\nThis sequence diagram shows how a message is sent.\n\n<img src=\"../../resources/mdb-flow.png\" alt=\"\"/>\n\n## ChatBean\n\n package org.superbiz.mdb;\n \n import javax.annotation.Resource;\n import javax.ejb.MessageDriven;\n import javax.jms.Connection;\n import javax.jms.ConnectionFactory;\n import javax.jms.DeliveryMode;\n import javax.jms.JMSException;\n import javax.jms.Message;\n import javax.jms.MessageListener;\n import javax.jms.MessageProducer;\n import javax.jms.Queue;\n import javax.jms.Session;\n import javax.jms.TextMessage;\n \n @MessageDriven\n public class ChatBean implements MessageListener {\n \n @Resource\n private ConnectionFactory connectionFactory;\n \n @Resource(name = \"AnswerQueue\")\n private Queue answerQueue;\n \n public void onMessage(Message message) {\n try {\n \n final TextMessage textMessage = (TextMessage) message;\n final String question = textMessage.getText();\n \n if (\"Hello World!\".equals(question)) {\n \n respond(\"Hello, Test Case!\");\n } else if (\"How are you?\".equals(question)) {\n \n respond(\"I'm doing well.\");\n } else if (\"Still spinning?\".equals(question)) {\n \n respond(\"Once every day, as usual.\");\n }\n } catch (JMSException e) {\n throw new IllegalStateException(e);\n }\n }\n \n private void respond(String text) throws JMSException {\n \n Connection connection = null;\n Session session = null;\n \n try {\n connection = connectionFactory.createConnection();\n connection.start();\n \n // Create a Session\n session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);\n \n // Create a MessageProducer from the Session to the Topic or Queue\n MessageProducer producer = session.createProducer(answerQueue);\n producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);\n \n // Create a message\n TextMessage message = session.createTextMessage(text);\n \n // Tell the producer to send the message\n producer.send(message);\n } finally {\n // Clean up\n if (session != null) session.close();\n if (connection != null) connection.close();\n }\n }\n }\n\n## ChatBeanTest\n\n package org.superbiz.mdb;\n \n import junit.framework.TestCase;\n \n import javax.annotation.Resource;\n import javax.ejb.embeddable.EJBContainer;\n import javax.jms.Connection;\n import javax.jms.ConnectionFactory;\n import javax.jms.JMSException;\n import javax.jms.MessageConsumer;\n import javax.jms.MessageProducer;\n import javax.jms.Queue;\n import javax.jms.Session;\n import javax.jms.TextMessage;\n \n public class ChatBeanTest extends TestCase {\n \n @Resource\n private ConnectionFactory connectionFactory;\n \n @Resource(name = \"ChatBean\")\n private Queue questionQueue;\n \n @Resource(name = \"AnswerQueue\")\n private Queue answerQueue;\n \n public void test() throws Exception {\n EJBContainer.createEJBContainer().getContext().bind(\"inject\", this);\n \n \n final Connection connection = connectionFactory.createConnection();\n \n connection.start();\n \n final Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);\n \n final MessageProducer questions = session.createProducer(questionQueue);\n \n final MessageConsumer answers = session.createConsumer(answerQueue);\n \n \n sendText(\"Hello World!\", questions, session);\n \n assertEquals(\"Hello, Test Case!\", receiveText(answers));\n \n \n sendText(\"How are you?\", questions, session);\n \n assertEquals(\"I'm doing well.\", receiveText(answers));\n \n \n sendText(\"Still spinning?\", questions, session);\n \n assertEquals(\"Once every day, as usual.\", receiveText(answers));\n }\n \n private void sendText(String text, MessageProducer questions, Session session) throws JMSException {\n \n questions.send(session.createTextMessage(text));\n }\n \n private String receiveText(MessageConsumer answers) throws JMSException {\n \n return ((TextMessage) answers.receive(1000)).getText();\n }\n }\n\n# Running\n\n \n -------------------------------------------------------\n T E S T S\n -------------------------------------------------------\n Running org.superbiz.mdb.ChatBeanTest\n Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06\n http://tomee.apache.org/\n INFO - openejb.home = /Users/dblevins/examples/simple-mdb\n INFO - openejb.base = /Users/dblevins/examples/simple-mdb\n INFO - Using 'javax.ejb.embeddable.EJBContainer=true'\n INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)\n INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)\n INFO - Found EjbModule in classpath: /Users/dblevins/examples/simple-mdb/target/classes\n INFO - Beginning load: /Users/dblevins/examples/simple-mdb/target/classes\n INFO - Configuring enterprise application: /Users/dblevins/examples/simple-mdb\n WARN - Method 'lookup' is not available for 'javax.annotation.Resource'. Probably using an older Runtime.\n INFO - Auto-configuring a message driven bean ChatBean destination ChatBean to be destinationType javax.jms.Queue\n INFO - Configuring Service(id=Default MDB Container, type=Container, provider-id=Default MDB Container)\n INFO - Auto-creating a container for bean ChatBean: Container(type=MESSAGE, id=Default MDB Container)\n INFO - Configuring Service(id=Default JMS Resource Adapter, type=Resource, provider-id=Default JMS Resource Adapter)\n INFO - Configuring Service(id=Default JMS Connection Factory, type=Resource, provider-id=Default JMS Connection Factory)\n INFO - Auto-creating a Resource with id 'Default JMS Connection Factory' of type 'javax.jms.ConnectionFactory for 'ChatBean'.\n INFO - Auto-linking resource-ref 'java:comp/env/org.superbiz.mdb.ChatBean/connectionFactory' in bean ChatBean to Resource(id=Default JMS Connection Factory)\n INFO - Configuring Service(id=AnswerQueue, type=Resource, provider-id=Default Queue)\n INFO - Auto-creating a Resource with id 'AnswerQueue' of type 'javax.jms.Queue for 'ChatBean'.\n INFO - Auto-linking resource-env-ref 'java:comp/env/AnswerQueue' in bean ChatBean to Resource(id=AnswerQueue)\n INFO - Configuring Service(id=ChatBean, type=Resource, provider-id=Default Queue)\n INFO - Auto-creating a Resource with id 'ChatBean' of type 'javax.jms.Queue for 'ChatBean'.\n INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)\n INFO - Auto-creating a container for bean org.superbiz.mdb.ChatBeanTest: Container(type=MANAGED, id=Default Managed Container)\n INFO - Auto-linking resource-ref 'java:comp/env/org.superbiz.mdb.ChatBeanTest/connectionFactory' in bean org.superbiz.mdb.ChatBeanTest to Resource(id=Default JMS Connection Factory)\n INFO - Auto-linking resource-env-ref 'java:comp/env/AnswerQueue' in bean org.superbiz.mdb.ChatBeanTest to Resource(id=AnswerQueue)\n INFO - Auto-linking resource-env-ref 'java:comp/env/ChatBean' in bean org.superbiz.mdb.ChatBeanTest to Resource(id=ChatBean)\n INFO - Enterprise application \"/Users/dblevins/examples/simple-mdb\" loaded.\n INFO - Assembling app: /Users/dblevins/examples/simple-mdb\n INFO - Jndi(name=\"java:global/EjbModule1515710343/org.superbiz.mdb.ChatBeanTest!org.superbiz.mdb.ChatBeanTest\")\n INFO - Jndi(name=\"java:global/EjbModule1515710343/org.superbiz.mdb.ChatBeanTest\")\n INFO - Created Ejb(deployment-id=org.superbiz.mdb.ChatBeanTest, ejb-name=org.superbiz.mdb.ChatBeanTest, container=Default Managed Container)\n INFO - Created Ejb(deployment-id=ChatBean, ejb-name=ChatBean, container=Default MDB Container)\n INFO - Started Ejb(deployment-id=org.superbiz.mdb.ChatBeanTest, ejb-name=org.superbiz.mdb.ChatBeanTest, container=Default Managed Container)\n INFO - Started Ejb(deployment-id=ChatBean, ejb-name=ChatBean, container=Default MDB Container)\n INFO - Deployed Application(path=/Users/dblevins/examples/simple-mdb)\n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.547 sec\n \n Results :\n \n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0\n \n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/simple-mdb" | |
}, | |
{ | |
"name":"simple-mdb-with-descriptor", | |
"readme":"Title: Simple MDB with Descriptor\n\n*Help us document this example! Click the blue pencil icon in the upper right to edit this page.*\n\n## ChatBean\n\n package org.superbiz.mdbdesc;\n \n import javax.jms.Connection;\n import javax.jms.ConnectionFactory;\n import javax.jms.DeliveryMode;\n import javax.jms.JMSException;\n import javax.jms.Message;\n import javax.jms.MessageListener;\n import javax.jms.MessageProducer;\n import javax.jms.Queue;\n import javax.jms.Session;\n import javax.jms.TextMessage;\n \n public class ChatBean implements MessageListener {\n \n private ConnectionFactory connectionFactory;\n \n private Queue answerQueue;\n \n public void onMessage(Message message) {\n try {\n \n final TextMessage textMessage = (TextMessage) message;\n final String question = textMessage.getText();\n \n if (\"Hello World!\".equals(question)) {\n \n respond(\"Hello, Test Case!\");\n } else if (\"How are you?\".equals(question)) {\n \n respond(\"I'm doing well.\");\n } else if (\"Still spinning?\".equals(question)) {\n \n respond(\"Once every day, as usual.\");\n }\n } catch (JMSException e) {\n throw new IllegalStateException(e);\n }\n }\n \n private void respond(String text) throws JMSException {\n \n Connection connection = null;\n Session session = null;\n \n try {\n connection = connectionFactory.createConnection();\n connection.start();\n \n // Create a Session\n session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);\n \n // Create a MessageProducer from the Session to the Topic or Queue\n MessageProducer producer = session.createProducer(answerQueue);\n producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);\n \n // Create a message\n TextMessage message = session.createTextMessage(text);\n \n // Tell the producer to send the message\n producer.send(message);\n } finally {\n // Clean up\n if (session != null) session.close();\n if (connection != null) connection.close();\n }\n }\n }\n\n## ejb-jar.xml\n\n <ejb-jar xmlns=\"http://java.sun.com/xml/ns/javaee\" metadata-complete=\"true\">\n <enterprise-beans>\n \n <message-driven>\n \n <ejb-name>ChatBean</ejb-name>\n <ejb-class>org.superbiz.mdbdesc.ChatBean</ejb-class>\n \n <messaging-type>javax.jms.MessageListener</messaging-type>\n \n <activation-config>\n <activation-config-property>\n <activation-config-property-name>destination</activation-config-property-name>\n <activation-config-property-value>ChatBean</activation-config-property-value>\n </activation-config-property>\n <activation-config-property>\n <activation-config-property-name>destinationType</activation-config-property-name>\n <activation-config-property-value>javax.jms.Queue</activation-config-property-value>\n </activation-config-property>\n </activation-config>\n \n <resource-ref>\n <res-ref-name>java:comp/env/org.superbiz.mdbdesc.ChatBean/connectionFactory</res-ref-name>\n <res-type>javax.jms.ConnectionFactory</res-type>\n <injection-target>\n <injection-target-class>org.superbiz.mdbdesc.ChatBean</injection-target-class>\n <injection-target-name>connectionFactory</injection-target-name>\n </injection-target>\n </resource-ref>\n \n <resource-env-ref>\n <resource-env-ref-name>java:comp/env/AnswerQueue</resource-env-ref-name>\n <resource-env-ref-type>javax.jms.Queue</resource-env-ref-type>\n <mapped-name>AnswerQueue</mapped-name>\n <injection-target>\n <injection-target-class>org.superbiz.mdbdesc.ChatBean</injection-target-class>\n <injection-target-name>answerQueue</injection-target-name>\n </injection-target>\n </resource-env-ref>\n \n </message-driven>\n \n </enterprise-beans>\n </ejb-jar>\n \n\n## ChatBeanTest\n\n package org.superbiz.mdb;\n \n import junit.framework.TestCase;\n \n import javax.annotation.Resource;\n import javax.ejb.embeddable.EJBContainer;\n import javax.jms.Connection;\n import javax.jms.ConnectionFactory;\n import javax.jms.JMSException;\n import javax.jms.MessageConsumer;\n import javax.jms.MessageProducer;\n import javax.jms.Queue;\n import javax.jms.Session;\n import javax.jms.TextMessage;\n \n public class ChatBeanTest extends TestCase {\n \n @Resource\n private ConnectionFactory connectionFactory;\n \n @Resource(name = \"ChatBean\")\n private Queue questionQueue;\n \n @Resource(name = \"AnswerQueue\")\n private Queue answerQueue;\n \n public void test() throws Exception {\n \n EJBContainer.createEJBContainer().getContext().bind(\"inject\", this);\n \n final Connection connection = connectionFactory.createConnection();\n \n connection.start();\n \n final Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);\n \n final MessageProducer questions = session.createProducer(questionQueue);\n \n final MessageConsumer answers = session.createConsumer(answerQueue);\n \n \n sendText(\"Hello World!\", questions, session);\n \n assertEquals(\"Hello, Test Case!\", receiveText(answers));\n \n \n sendText(\"How are you?\", questions, session);\n \n assertEquals(\"I'm doing well.\", receiveText(answers));\n \n \n sendText(\"Still spinning?\", questions, session);\n \n assertEquals(\"Once every day, as usual.\", receiveText(answers));\n }\n \n private void sendText(String text, MessageProducer questions, Session session) throws JMSException {\n \n questions.send(session.createTextMessage(text));\n }\n \n private String receiveText(MessageConsumer answers) throws JMSException {\n \n return ((TextMessage) answers.receive(1000)).getText();\n }\n }\n\n# Running\n\n \n -------------------------------------------------------\n T E S T S\n -------------------------------------------------------\n Running org.superbiz.mdb.ChatBeanTest\n Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06\n http://tomee.apache.org/\n INFO - openejb.home = /Users/dblevins/examples/simple-mdb-with-descriptor\n INFO - openejb.base = /Users/dblevins/examples/simple-mdb-with-descriptor\n INFO - Using 'javax.ejb.embeddable.EJBContainer=true'\n INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)\n INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)\n INFO - Found EjbModule in classpath: /Users/dblevins/examples/simple-mdb-with-descriptor/target/classes\n INFO - Beginning load: /Users/dblevins/examples/simple-mdb-with-descriptor/target/classes\n INFO - Configuring enterprise application: /Users/dblevins/examples/simple-mdb-with-descriptor\n WARN - Method 'lookup' is not available for 'javax.annotation.Resource'. Probably using an older Runtime.\n INFO - Configuring Service(id=Default MDB Container, type=Container, provider-id=Default MDB Container)\n INFO - Auto-creating a container for bean ChatBean: Container(type=MESSAGE, id=Default MDB Container)\n INFO - Configuring Service(id=Default JMS Resource Adapter, type=Resource, provider-id=Default JMS Resource Adapter)\n INFO - Configuring Service(id=Default JMS Connection Factory, type=Resource, provider-id=Default JMS Connection Factory)\n INFO - Auto-creating a Resource with id 'Default JMS Connection Factory' of type 'javax.jms.ConnectionFactory for 'ChatBean'.\n INFO - Auto-linking resource-ref 'java:comp/env/org.superbiz.mdbdesc.ChatBean/connectionFactory' in bean ChatBean to Resource(id=Default JMS Connection Factory)\n INFO - Configuring Service(id=AnswerQueue, type=Resource, provider-id=Default Queue)\n INFO - Auto-creating a Resource with id 'AnswerQueue' of type 'javax.jms.Queue for 'ChatBean'.\n INFO - Auto-linking resource-env-ref 'java:comp/env/AnswerQueue' in bean ChatBean to Resource(id=AnswerQueue)\n INFO - Configuring Service(id=ChatBean, type=Resource, provider-id=Default Queue)\n INFO - Auto-creating a Resource with id 'ChatBean' of type 'javax.jms.Queue for 'ChatBean'.\n INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)\n INFO - Auto-creating a container for bean org.superbiz.mdb.ChatBeanTest: Container(type=MANAGED, id=Default Managed Container)\n INFO - Auto-linking resource-ref 'java:comp/env/org.superbiz.mdb.ChatBeanTest/connectionFactory' in bean org.superbiz.mdb.ChatBeanTest to Resource(id=Default JMS Connection Factory)\n INFO - Auto-linking resource-env-ref 'java:comp/env/AnswerQueue' in bean org.superbiz.mdb.ChatBeanTest to Resource(id=AnswerQueue)\n INFO - Auto-linking resource-env-ref 'java:comp/env/ChatBean' in bean org.superbiz.mdb.ChatBeanTest to Resource(id=ChatBean)\n INFO - Enterprise application \"/Users/dblevins/examples/simple-mdb-with-descriptor\" loaded.\n INFO - Assembling app: /Users/dblevins/examples/simple-mdb-with-descriptor\n INFO - Jndi(name=\"java:global/EjbModule1842275169/org.superbiz.mdb.ChatBeanTest!org.superbiz.mdb.ChatBeanTest\")\n INFO - Jndi(name=\"java:global/EjbModule1842275169/org.superbiz.mdb.ChatBeanTest\")\n INFO - Created Ejb(deployment-id=org.superbiz.mdb.ChatBeanTest, ejb-name=org.superbiz.mdb.ChatBeanTest, container=Default Managed Container)\n INFO - Created Ejb(deployment-id=ChatBean, ejb-name=ChatBean, container=Default MDB Container)\n INFO - Started Ejb(deployment-id=org.superbiz.mdb.ChatBeanTest, ejb-name=org.superbiz.mdb.ChatBeanTest, container=Default Managed Container)\n INFO - Started Ejb(deployment-id=ChatBean, ejb-name=ChatBean, container=Default MDB Container)\n INFO - Deployed Application(path=/Users/dblevins/examples/simple-mdb-with-descriptor)\n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.914 sec\n \n Results :\n \n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0\n \n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/simple-mdb-with-descriptor" | |
} | |
], | |
"meta":[ | |
{ | |
"name":"spring-data-proxy-meta", | |
"readme":"# Spring Data With Meta sample #\n\nThis example simply simplifies the usage of spring-data sample\nproviding a meta annotation @SpringRepository to do all the dynamic procy EJB job.\n\nIt replaces @Proxy and @Stateless annotations.\n\nIsn't it more comfortable?\n\nTo do it we defined a meta annotation \"Metatype\" and used it.\n\nThe proxy implementation is the same than for spring-data sample.\n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/spring-data-proxy-meta" | |
}, | |
{ | |
"name":"testing-security-meta", | |
"readme":"Title: Testing Security Meta\n\n*Help us document this example! Click the blue pencil icon in the upper right to edit this page.*\n\n## AddPermission\n\n package org.superbiz.injection.secure.api;\n \n import javax.annotation.security.RolesAllowed;\n import java.lang.annotation.ElementType;\n import java.lang.annotation.Retention;\n import java.lang.annotation.RetentionPolicy;\n import java.lang.annotation.Target;\n \n \n @Metatype\n @Target(ElementType.METHOD)\n @Retention(RetentionPolicy.RUNTIME)\n \n public @interface AddPermission {\n public static interface $ {\n \n @AddPermission\n @RolesAllowed({\"Employee\", \"Manager\"})\n public void method();\n }\n }\n\n## DeletePermission\n\n package org.superbiz.injection.secure.api;\n \n import javax.annotation.security.RolesAllowed;\n import java.lang.annotation.ElementType;\n import java.lang.annotation.Retention;\n import java.lang.annotation.RetentionPolicy;\n import java.lang.annotation.Target;\n \n \n @Metatype\n @Target(ElementType.METHOD)\n @Retention(RetentionPolicy.RUNTIME)\n \n public @interface DeletePermission {\n public static interface $ {\n \n @DeletePermission\n @RolesAllowed(\"Manager\")\n public void method();\n }\n }\n\n## Metatype\n\n package org.superbiz.injection.secure.api;\n \n import java.lang.annotation.ElementType;\n import java.lang.annotation.Retention;\n import java.lang.annotation.RetentionPolicy;\n import java.lang.annotation.Target;\n \n @Metatype\n @Target(ElementType.ANNOTATION_TYPE)\n @Retention(RetentionPolicy.RUNTIME)\n public @interface Metatype {\n }\n\n## MovieUnit\n\n package org.superbiz.injection.secure.api;\n \n import javax.persistence.PersistenceContext;\n import javax.persistence.PersistenceContextType;\n import java.lang.annotation.ElementType;\n import java.lang.annotation.Retention;\n import java.lang.annotation.RetentionPolicy;\n import java.lang.annotation.Target;\n \n \n @Metatype\n @Target({ElementType.METHOD, ElementType.FIELD})\n @Retention(RetentionPolicy.RUNTIME)\n \n @PersistenceContext(name = \"movie-unit\", unitName = \"movie-unit\", type = PersistenceContextType.EXTENDED)\n public @interface MovieUnit {\n }\n\n## ReadPermission\n\n package org.superbiz.injection.secure.api;\n \n import javax.annotation.security.PermitAll;\n import javax.ejb.TransactionAttribute;\n import javax.ejb.TransactionAttributeType;\n import java.lang.annotation.ElementType;\n import java.lang.annotation.Retention;\n import java.lang.annotation.RetentionPolicy;\n import java.lang.annotation.Target;\n \n \n @Metatype\n @Target(ElementType.METHOD)\n @Retention(RetentionPolicy.RUNTIME)\n \n public @interface ReadPermission {\n public static interface $ {\n \n @ReadPermission\n @PermitAll\n @TransactionAttribute(TransactionAttributeType.SUPPORTS)\n public void method();\n }\n }\n\n## RunAsEmployee\n\n package org.superbiz.injection.secure.api;\n \n import javax.annotation.security.RunAs;\n import java.lang.annotation.ElementType;\n import java.lang.annotation.Retention;\n import java.lang.annotation.RetentionPolicy;\n import java.lang.annotation.Target;\n \n \n @Metatype\n @Target({ElementType.TYPE, ElementType.METHOD})\n @Retention(RetentionPolicy.RUNTIME)\n \n @RunAs(\"Employee\")\n public @interface RunAsEmployee {\n }\n\n## RunAsManager\n\n package org.superbiz.injection.secure.api;\n \n import javax.annotation.security.RunAs;\n import java.lang.annotation.ElementType;\n import java.lang.annotation.Retention;\n import java.lang.annotation.RetentionPolicy;\n import java.lang.annotation.Target;\n \n \n @Metatype\n @Target({ElementType.TYPE, ElementType.METHOD})\n @Retention(RetentionPolicy.RUNTIME)\n \n @RunAs(\"Manager\")\n public @interface RunAsManager {\n }\n\n## Movie\n\n package org.superbiz.injection.secure;\n \n import javax.persistence.Entity;\n \n @Entity\n public class Movie {\n \n private String director;\n private String title;\n private int year;\n \n public Movie() {\n }\n \n public Movie(String director, String title, int year) {\n this.director = director;\n this.title = title;\n this.year = year;\n }\n \n public String getDirector() {\n return director;\n }\n \n public void setDirector(String director) {\n this.director = director;\n }\n \n public String getTitle() {\n return title;\n }\n \n public void setTitle(String title) {\n this.title = title;\n }\n \n public int getYear() {\n return year;\n }\n \n public void setYear(int year) {\n this.year = year;\n }\n \n }\n\n## Movies\n\n package org.superbiz.injection.secure;\n \n //START SNIPPET: code\n \n import org.superbiz.injection.secure.api.AddPermission;\n import org.superbiz.injection.secure.api.DeletePermission;\n import org.superbiz.injection.secure.api.MovieUnit;\n import org.superbiz.injection.secure.api.ReadPermission;\n \n import javax.ejb.Stateful;\n import javax.persistence.EntityManager;\n import javax.persistence.Query;\n import java.util.List;\n \n @Stateful\n public class Movies {\n \n @MovieUnit\n private EntityManager entityManager;\n \n @AddPermission\n public void addMovie(Movie movie) throws Exception {\n entityManager.persist(movie);\n }\n \n @DeletePermission\n public void deleteMovie(Movie movie) throws Exception {\n entityManager.remove(movie);\n }\n \n @ReadPermission\n public List<Movie> getMovies() throws Exception {\n Query query = entityManager.createQuery(\"SELECT m from Movie as m\");\n return query.getResultList();\n }\n }\n\n## persistence.xml\n\n <persistence xmlns=\"http://java.sun.com/xml/ns/persistence\" version=\"1.0\">\n \n <persistence-unit name=\"movie-unit\">\n <jta-data-source>movieDatabase</jta-data-source>\n <non-jta-data-source>movieDatabaseUnmanaged</non-jta-data-source>\n <class>org.superbiz.injection.secure.Movie</class>\n \n <properties>\n <property name=\"openjpa.jdbc.SynchronizeMappings\" value=\"buildSchema(ForeignKeys=true)\"/>\n </properties>\n </persistence-unit>\n </persistence>\n\n## MovieTest\n\n package org.superbiz.injection.secure;\n \n import junit.framework.TestCase;\n import org.superbiz.injection.secure.api.RunAsEmployee;\n import org.superbiz.injection.secure.api.RunAsManager;\n \n import javax.ejb.EJB;\n import javax.ejb.EJBAccessException;\n import javax.ejb.Stateless;\n import javax.ejb.embeddable.EJBContainer;\n import java.util.List;\n import java.util.Properties;\n import java.util.concurrent.Callable;\n \n //START SNIPPET: code\n \n public class MovieTest extends TestCase {\n \n @EJB\n private Movies movies;\n \n @EJB(beanName = \"ManagerBean\")\n private Caller manager;\n \n @EJB(beanName = \"EmployeeBean\")\n private Caller employee;\n \n protected void setUp() throws Exception {\n Properties p = new Properties();\n p.put(\"movieDatabase\", \"new://Resource?type=DataSource\");\n p.put(\"movieDatabase.JdbcDriver\", \"org.hsqldb.jdbcDriver\");\n p.put(\"movieDatabase.JdbcUrl\", \"jdbc:hsqldb:mem:moviedb\");\n \n EJBContainer.createEJBContainer(p).getContext().bind(\"inject\", this);\n }\n \n public void testAsManager() throws Exception {\n manager.call(new Callable() {\n public Object call() throws Exception {\n \n movies.addMovie(new Movie(\"Quentin Tarantino\", \"Reservoir Dogs\", 1992));\n movies.addMovie(new Movie(\"Joel Coen\", \"Fargo\", 1996));\n movies.addMovie(new Movie(\"Joel Coen\", \"The Big Lebowski\", 1998));\n \n List<Movie> list = movies.getMovies();\n assertEquals(\"List.size()\", 3, list.size());\n \n for (Movie movie : list) {\n movies.deleteMovie(movie);\n }\n \n assertEquals(\"Movies.getMovies()\", 0, movies.getMovies().size());\n return null;\n }\n });\n }\n \n public void testAsEmployee() throws Exception {\n employee.call(new Callable() {\n public Object call() throws Exception {\n \n movies.addMovie(new Movie(\"Quentin Tarantino\", \"Reservoir Dogs\", 1992));\n movies.addMovie(new Movie(\"Joel Coen\", \"Fargo\", 1996));\n movies.addMovie(new Movie(\"Joel Coen\", \"The Big Lebowski\", 1998));\n \n List<Movie> list = movies.getMovies();\n assertEquals(\"List.size()\", 3, list.size());\n \n for (Movie movie : list) {\n try {\n movies.deleteMovie(movie);\n fail(\"Employees should not be allowed to delete\");\n } catch (EJBAccessException e) {\n // Good, Employees cannot delete things\n }\n }\n \n // The list should still be three movies long\n assertEquals(\"Movies.getMovies()\", 3, movies.getMovies().size());\n return null;\n }\n });\n }\n \n public void testUnauthenticated() throws Exception {\n try {\n movies.addMovie(new Movie(\"Quentin Tarantino\", \"Reservoir Dogs\", 1992));\n fail(\"Unauthenticated users should not be able to add movies\");\n } catch (EJBAccessException e) {\n // Good, guests cannot add things\n }\n \n try {\n movies.deleteMovie(null);\n fail(\"Unauthenticated users should not be allowed to delete\");\n } catch (EJBAccessException e) {\n // Good, Unauthenticated users cannot delete things\n }\n \n try {\n // Read access should be allowed\n \n List<Movie> list = movies.getMovies();\n } catch (EJBAccessException e) {\n fail(\"Read access should be allowed\");\n }\n }\n \n public interface Caller {\n public <V> V call(Callable<V> callable) throws Exception;\n }\n \n /**\n * This little bit of magic allows our test code to execute in\n * the desired security scope.\n */\n \n @Stateless\n @RunAsManager\n public static class ManagerBean implements Caller {\n \n public <V> V call(Callable<V> callable) throws Exception {\n return callable.call();\n }\n }\n \n @Stateless\n @RunAsEmployee\n public static class EmployeeBean implements Caller {\n \n public <V> V call(Callable<V> callable) throws Exception {\n return callable.call();\n }\n }\n }\n\n# Running\n\n \n -------------------------------------------------------\n T E S T S\n -------------------------------------------------------\n Running org.superbiz.injection.secure.MovieTest\n Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06\n http://tomee.apache.org/\n INFO - openejb.home = /Users/dblevins/examples/testing-security-meta\n INFO - openejb.base = /Users/dblevins/examples/testing-security-meta\n INFO - Using 'javax.ejb.embeddable.EJBContainer=true'\n INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)\n INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)\n INFO - Configuring Service(id=movieDatabase, type=Resource, provider-id=Default JDBC Database)\n INFO - Found EjbModule in classpath: /Users/dblevins/examples/testing-security-meta/target/classes\n INFO - Found EjbModule in classpath: /Users/dblevins/examples/testing-security-meta/target/test-classes\n INFO - Beginning load: /Users/dblevins/examples/testing-security-meta/target/classes\n INFO - Beginning load: /Users/dblevins/examples/testing-security-meta/target/test-classes\n INFO - Configuring enterprise application: /Users/dblevins/examples/testing-security-meta\n INFO - Configuring Service(id=Default Stateful Container, type=Container, provider-id=Default Stateful Container)\n INFO - Auto-creating a container for bean Movies: Container(type=STATEFUL, id=Default Stateful Container)\n INFO - Configuring Service(id=Default Stateless Container, type=Container, provider-id=Default Stateless Container)\n INFO - Auto-creating a container for bean ManagerBean: Container(type=STATELESS, id=Default Stateless Container)\n INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)\n INFO - Auto-creating a container for bean org.superbiz.injection.secure.MovieTest: Container(type=MANAGED, id=Default Managed Container)\n INFO - Configuring PersistenceUnit(name=movie-unit)\n INFO - Auto-creating a Resource with id 'movieDatabaseNonJta' of type 'DataSource for 'movie-unit'.\n INFO - Configuring Service(id=movieDatabaseNonJta, type=Resource, provider-id=movieDatabase)\n INFO - Adjusting PersistenceUnit movie-unit <non-jta-data-source> to Resource ID 'movieDatabaseNonJta' from 'movieDatabaseUnmanaged'\n INFO - Enterprise application \"/Users/dblevins/examples/testing-security-meta\" loaded.\n INFO - Assembling app: /Users/dblevins/examples/testing-security-meta\n INFO - PersistenceUnit(name=movie-unit, provider=org.apache.openjpa.persistence.PersistenceProviderImpl) - provider time 419ms\n INFO - Jndi(name=\"java:global/testing-security-meta/Movies!org.superbiz.injection.secure.Movies\")\n INFO - Jndi(name=\"java:global/testing-security-meta/Movies\")\n INFO - Jndi(name=\"java:global/testing-security-meta/ManagerBean!org.superbiz.injection.secure.MovieTest$Caller\")\n INFO - Jndi(name=\"java:global/testing-security-meta/ManagerBean\")\n INFO - Jndi(name=\"java:global/testing-security-meta/EmployeeBean!org.superbiz.injection.secure.MovieTest$Caller\")\n INFO - Jndi(name=\"java:global/testing-security-meta/EmployeeBean\")\n INFO - Jndi(name=\"java:global/EjbModule53489605/org.superbiz.injection.secure.MovieTest!org.superbiz.injection.secure.MovieTest\")\n INFO - Jndi(name=\"java:global/EjbModule53489605/org.superbiz.injection.secure.MovieTest\")\n INFO - Created Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container)\n INFO - Created Ejb(deployment-id=ManagerBean, ejb-name=ManagerBean, container=Default Stateless Container)\n INFO - Created Ejb(deployment-id=EmployeeBean, ejb-name=EmployeeBean, container=Default Stateless Container)\n INFO - Created Ejb(deployment-id=org.superbiz.injection.secure.MovieTest, ejb-name=org.superbiz.injection.secure.MovieTest, container=Default Managed Container)\n INFO - Started Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container)\n INFO - Started Ejb(deployment-id=ManagerBean, ejb-name=ManagerBean, container=Default Stateless Container)\n INFO - Started Ejb(deployment-id=EmployeeBean, ejb-name=EmployeeBean, container=Default Stateless Container)\n INFO - Started Ejb(deployment-id=org.superbiz.injection.secure.MovieTest, ejb-name=org.superbiz.injection.secure.MovieTest, container=Default Managed Container)\n INFO - Deployed Application(path=/Users/dblevins/examples/testing-security-meta)\n INFO - EJBContainer already initialized. Call ejbContainer.close() to allow reinitialization\n INFO - EJBContainer already initialized. Call ejbContainer.close() to allow reinitialization\n Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.754 sec\n \n Results :\n \n Tests run: 3, Failures: 0, Errors: 0, Skipped: 0\n \n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/testing-security-meta" | |
}, | |
{ | |
"name":"schedule-methods-meta", | |
"readme":"Title: Schedule Methods Meta\n\n*Help us document this example! Click the blue pencil icon in the upper right to edit this page.*\n\n## BiAnnually\n\n package org.superbiz.corn.meta.api;\n \n import javax.ejb.Schedule;\n import java.lang.annotation.ElementType;\n import java.lang.annotation.Retention;\n import java.lang.annotation.RetentionPolicy;\n import java.lang.annotation.Target;\n \n @Metatype\n @Target(ElementType.METHOD)\n @Retention(RetentionPolicy.RUNTIME)\n \n public @interface BiAnnually {\n public static interface $ {\n \n @BiAnnually\n @Schedule(second = \"0\", minute = \"0\", hour = \"0\", dayOfMonth = \"1\", month = \"1,6\")\n public void method();\n }\n }\n\n## BiMonthly\n\n package org.superbiz.corn.meta.api;\n \n import javax.ejb.Schedule;\n import java.lang.annotation.ElementType;\n import java.lang.annotation.Retention;\n import java.lang.annotation.RetentionPolicy;\n import java.lang.annotation.Target;\n \n @Metatype\n @Target(ElementType.METHOD)\n @Retention(RetentionPolicy.RUNTIME)\n \n public @interface BiMonthly {\n public static interface $ {\n \n @BiMonthly\n @Schedule(second = \"0\", minute = \"0\", hour = \"0\", dayOfMonth = \"1,15\")\n public void method();\n }\n }\n\n## Daily\n\n package org.superbiz.corn.meta.api;\n \n import javax.ejb.Schedule;\n import java.lang.annotation.ElementType;\n import java.lang.annotation.Retention;\n import java.lang.annotation.RetentionPolicy;\n import java.lang.annotation.Target;\n \n @Metatype\n @Target(ElementType.METHOD)\n @Retention(RetentionPolicy.RUNTIME)\n \n public @interface Daily {\n public static interface $ {\n \n @Daily\n @Schedule(second = \"0\", minute = \"0\", hour = \"0\", dayOfMonth = \"*\")\n public void method();\n }\n }\n\n## HarvestTime\n\n package org.superbiz.corn.meta.api;\n \n import javax.ejb.Schedule;\n import javax.ejb.Schedules;\n import java.lang.annotation.ElementType;\n import java.lang.annotation.Retention;\n import java.lang.annotation.RetentionPolicy;\n import java.lang.annotation.Target;\n \n @Metatype\n @Target(ElementType.METHOD)\n @Retention(RetentionPolicy.RUNTIME)\n \n public @interface HarvestTime {\n public static interface $ {\n \n @HarvestTime\n @Schedules({\n @Schedule(month = \"9\", dayOfMonth = \"20-Last\", minute = \"0\", hour = \"8\"),\n @Schedule(month = \"10\", dayOfMonth = \"1-10\", minute = \"0\", hour = \"8\")\n })\n public void method();\n }\n }\n\n## Hourly\n\n package org.superbiz.corn.meta.api;\n \n import javax.ejb.Schedule;\n import java.lang.annotation.ElementType;\n import java.lang.annotation.Retention;\n import java.lang.annotation.RetentionPolicy;\n import java.lang.annotation.Target;\n \n @Metatype\n @Target(ElementType.METHOD)\n @Retention(RetentionPolicy.RUNTIME)\n \n public @interface Hourly {\n public static interface $ {\n \n @Hourly\n @Schedule(second = \"0\", minute = \"0\", hour = \"*\")\n public void method();\n }\n }\n\n## Metatype\n\n package org.superbiz.corn.meta.api;\n \n import java.lang.annotation.ElementType;\n import java.lang.annotation.Retention;\n import java.lang.annotation.RetentionPolicy;\n import java.lang.annotation.Target;\n \n @Metatype\n @Target(ElementType.ANNOTATION_TYPE)\n @Retention(RetentionPolicy.RUNTIME)\n public @interface Metatype {\n }\n\n## Organic\n\n package org.superbiz.corn.meta.api;\n \n import javax.ejb.Lock;\n import javax.ejb.LockType;\n import javax.ejb.Singleton;\n import java.lang.annotation.ElementType;\n import java.lang.annotation.Retention;\n import java.lang.annotation.RetentionPolicy;\n import java.lang.annotation.Target;\n \n @Metatype\n @Target(ElementType.TYPE)\n @Retention(RetentionPolicy.RUNTIME)\n \n @Singleton\n @Lock(LockType.READ)\n public @interface Organic {\n }\n\n## PlantingTime\n\n package org.superbiz.corn.meta.api;\n \n import javax.ejb.Schedule;\n import javax.ejb.Schedules;\n import java.lang.annotation.ElementType;\n import java.lang.annotation.Retention;\n import java.lang.annotation.RetentionPolicy;\n import java.lang.annotation.Target;\n \n @Metatype\n @Target(ElementType.METHOD)\n @Retention(RetentionPolicy.RUNTIME)\n \n public @interface PlantingTime {\n public static interface $ {\n \n @PlantingTime\n @Schedules({\n @Schedule(month = \"5\", dayOfMonth = \"20-Last\", minute = \"0\", hour = \"8\"),\n @Schedule(month = \"6\", dayOfMonth = \"1-10\", minute = \"0\", hour = \"8\")\n })\n public void method();\n }\n }\n\n## Secondly\n\n package org.superbiz.corn.meta.api;\n \n import javax.ejb.Schedule;\n import java.lang.annotation.ElementType;\n import java.lang.annotation.Retention;\n import java.lang.annotation.RetentionPolicy;\n import java.lang.annotation.Target;\n \n @Metatype\n @Target(ElementType.METHOD)\n @Retention(RetentionPolicy.RUNTIME)\n \n public @interface Secondly {\n public static interface $ {\n \n @Secondly\n @Schedule(second = \"*\", minute = \"*\", hour = \"*\")\n public void method();\n }\n }\n\n## FarmerBrown\n\n package org.superbiz.corn.meta;\n \n import org.superbiz.corn.meta.api.HarvestTime;\n import org.superbiz.corn.meta.api.Organic;\n import org.superbiz.corn.meta.api.PlantingTime;\n import org.superbiz.corn.meta.api.Secondly;\n \n import java.util.concurrent.atomic.AtomicInteger;\n \n /**\n * This is where we schedule all of Farmer Brown's corn jobs\n *\n * @version $Revision$ $Date$\n */\n @Organic\n public class FarmerBrown {\n \n private final AtomicInteger checks = new AtomicInteger();\n \n @PlantingTime\n private void plantTheCorn() {\n // Dig out the planter!!!\n }\n \n @HarvestTime\n private void harvestTheCorn() {\n // Dig out the combine!!!\n }\n \n @Secondly\n private void checkOnTheDaughters() {\n checks.incrementAndGet();\n }\n \n public int getChecks() {\n return checks.get();\n }\n }\n\n## FarmerBrownTest\n\n package org.superbiz.corn.meta;\n \n import junit.framework.TestCase;\n \n import javax.ejb.embeddable.EJBContainer;\n import javax.naming.Context;\n \n import static java.util.concurrent.TimeUnit.SECONDS;\n \n /**\n * @version $Revision$ $Date$\n */\n public class FarmerBrownTest extends TestCase {\n \n public void test() throws Exception {\n \n final Context context = EJBContainer.createEJBContainer().getContext();\n \n final FarmerBrown farmerBrown = (FarmerBrown) context.lookup(\"java:global/schedule-methods-meta/FarmerBrown\");\n \n // Give Farmer brown a chance to do some work\n Thread.sleep(SECONDS.toMillis(5));\n \n assertTrue(farmerBrown.getChecks() > 4);\n }\n }\n\n# Running\n\n \n -------------------------------------------------------\n T E S T S\n -------------------------------------------------------\n Running org.superbiz.corn.meta.FarmerBrownTest\n Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06\n http://tomee.apache.org/\n INFO - openejb.home = /Users/dblevins/examples/schedule-methods-meta\n INFO - openejb.base = /Users/dblevins/examples/schedule-methods-meta\n INFO - Using 'javax.ejb.embeddable.EJBContainer=true'\n INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)\n INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)\n INFO - Found EjbModule in classpath: /Users/dblevins/examples/schedule-methods-meta/target/classes\n INFO - Beginning load: /Users/dblevins/examples/schedule-methods-meta/target/classes\n INFO - Configuring enterprise application: /Users/dblevins/examples/schedule-methods-meta\n INFO - Configuring Service(id=Default Singleton Container, type=Container, provider-id=Default Singleton Container)\n INFO - Auto-creating a container for bean FarmerBrown: Container(type=SINGLETON, id=Default Singleton Container)\n INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)\n INFO - Auto-creating a container for bean org.superbiz.corn.meta.FarmerBrownTest: Container(type=MANAGED, id=Default Managed Container)\n INFO - Enterprise application \"/Users/dblevins/examples/schedule-methods-meta\" loaded.\n INFO - Assembling app: /Users/dblevins/examples/schedule-methods-meta\n INFO - Jndi(name=\"java:global/schedule-methods-meta/FarmerBrown!org.superbiz.corn.meta.FarmerBrown\")\n INFO - Jndi(name=\"java:global/schedule-methods-meta/FarmerBrown\")\n INFO - Jndi(name=\"java:global/EjbModule1809441479/org.superbiz.corn.meta.FarmerBrownTest!org.superbiz.corn.meta.FarmerBrownTest\")\n INFO - Jndi(name=\"java:global/EjbModule1809441479/org.superbiz.corn.meta.FarmerBrownTest\")\n INFO - Created Ejb(deployment-id=org.superbiz.corn.meta.FarmerBrownTest, ejb-name=org.superbiz.corn.meta.FarmerBrownTest, container=Default Managed Container)\n INFO - Created Ejb(deployment-id=FarmerBrown, ejb-name=FarmerBrown, container=Default Singleton Container)\n INFO - Started Ejb(deployment-id=org.superbiz.corn.meta.FarmerBrownTest, ejb-name=org.superbiz.corn.meta.FarmerBrownTest, container=Default Managed Container)\n INFO - Started Ejb(deployment-id=FarmerBrown, ejb-name=FarmerBrown, container=Default Singleton Container)\n INFO - Deployed Application(path=/Users/dblevins/examples/schedule-methods-meta)\n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 6.166 sec\n \n Results :\n \n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0\n \n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/schedule-methods-meta" | |
}, | |
{ | |
"name":"access-timeout-meta", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/access-timeout-meta" | |
}, | |
{ | |
"name":"movies-complete-meta", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/movies-complete-meta" | |
} | |
], | |
"methods":[ | |
{ | |
"name":"schedule-methods", | |
"readme":"Title: Schedule Methods\n\n*Help us document this example! Click the blue pencil icon in the upper right to edit this page.*\n\n## FarmerBrown\n\n package org.superbiz.corn;\n \n import javax.ejb.Lock;\n import javax.ejb.LockType;\n import javax.ejb.Schedule;\n import javax.ejb.Schedules;\n import javax.ejb.Singleton;\n import java.util.concurrent.atomic.AtomicInteger;\n \n /**\n * This is where we schedule all of Farmer Brown's corn jobs\n *\n * @version $Revision$ $Date$\n */\n @Singleton\n @Lock(LockType.READ) // allows timers to execute in parallel\n public class FarmerBrown {\n \n private final AtomicInteger checks = new AtomicInteger();\n \n @Schedules({\n @Schedule(month = \"5\", dayOfMonth = \"20-Last\", minute = \"0\", hour = \"8\"),\n @Schedule(month = \"6\", dayOfMonth = \"1-10\", minute = \"0\", hour = \"8\")\n })\n private void plantTheCorn() {\n // Dig out the planter!!!\n }\n \n @Schedules({\n @Schedule(month = \"9\", dayOfMonth = \"20-Last\", minute = \"0\", hour = \"8\"),\n @Schedule(month = \"10\", dayOfMonth = \"1-10\", minute = \"0\", hour = \"8\")\n })\n private void harvestTheCorn() {\n // Dig out the combine!!!\n }\n \n @Schedule(second = \"*\", minute = \"*\", hour = \"*\")\n private void checkOnTheDaughters() {\n checks.incrementAndGet();\n }\n \n public int getChecks() {\n return checks.get();\n }\n }\n\n## FarmerBrownTest\n\n package org.superbiz.corn;\n \n import junit.framework.TestCase;\n \n import javax.ejb.embeddable.EJBContainer;\n import javax.naming.Context;\n \n import static java.util.concurrent.TimeUnit.SECONDS;\n \n /**\n * @version $Revision$ $Date$\n */\n public class FarmerBrownTest extends TestCase {\n \n public void test() throws Exception {\n \n final Context context = EJBContainer.createEJBContainer().getContext();\n \n final FarmerBrown farmerBrown = (FarmerBrown) context.lookup(\"java:global/schedule-methods/FarmerBrown\");\n \n // Give Farmer brown a chance to do some work\n Thread.sleep(SECONDS.toMillis(5));\n \n assertTrue(farmerBrown.getChecks() > 4);\n }\n }\n\n# Running\n\n \n -------------------------------------------------------\n T E S T S\n -------------------------------------------------------\n Running org.superbiz.corn.FarmerBrownTest\n Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06\n http://tomee.apache.org/\n INFO - openejb.home = /Users/dblevins/examples/schedule-methods\n INFO - openejb.base = /Users/dblevins/examples/schedule-methods\n INFO - Using 'javax.ejb.embeddable.EJBContainer=true'\n INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)\n INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)\n INFO - Found EjbModule in classpath: /Users/dblevins/examples/schedule-methods/target/classes\n INFO - Beginning load: /Users/dblevins/examples/schedule-methods/target/classes\n INFO - Configuring enterprise application: /Users/dblevins/examples/schedule-methods\n INFO - Configuring Service(id=Default Singleton Container, type=Container, provider-id=Default Singleton Container)\n INFO - Auto-creating a container for bean FarmerBrown: Container(type=SINGLETON, id=Default Singleton Container)\n INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)\n INFO - Auto-creating a container for bean org.superbiz.corn.FarmerBrownTest: Container(type=MANAGED, id=Default Managed Container)\n INFO - Enterprise application \"/Users/dblevins/examples/schedule-methods\" loaded.\n INFO - Assembling app: /Users/dblevins/examples/schedule-methods\n INFO - Jndi(name=\"java:global/schedule-methods/FarmerBrown!org.superbiz.corn.FarmerBrown\")\n INFO - Jndi(name=\"java:global/schedule-methods/FarmerBrown\")\n INFO - Jndi(name=\"java:global/EjbModule660493198/org.superbiz.corn.FarmerBrownTest!org.superbiz.corn.FarmerBrownTest\")\n INFO - Jndi(name=\"java:global/EjbModule660493198/org.superbiz.corn.FarmerBrownTest\")\n INFO - Created Ejb(deployment-id=org.superbiz.corn.FarmerBrownTest, ejb-name=org.superbiz.corn.FarmerBrownTest, container=Default Managed Container)\n INFO - Created Ejb(deployment-id=FarmerBrown, ejb-name=FarmerBrown, container=Default Singleton Container)\n INFO - Started Ejb(deployment-id=org.superbiz.corn.FarmerBrownTest, ejb-name=org.superbiz.corn.FarmerBrownTest, container=Default Managed Container)\n INFO - Started Ejb(deployment-id=FarmerBrown, ejb-name=FarmerBrown, container=Default Singleton Container)\n INFO - Deployed Application(path=/Users/dblevins/examples/schedule-methods)\n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 6.121 sec\n \n Results :\n \n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0\n \n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/schedule-methods" | |
}, | |
{ | |
"name":"schedule-methods-meta", | |
"readme":"Title: Schedule Methods Meta\n\n*Help us document this example! Click the blue pencil icon in the upper right to edit this page.*\n\n## BiAnnually\n\n package org.superbiz.corn.meta.api;\n \n import javax.ejb.Schedule;\n import java.lang.annotation.ElementType;\n import java.lang.annotation.Retention;\n import java.lang.annotation.RetentionPolicy;\n import java.lang.annotation.Target;\n \n @Metatype\n @Target(ElementType.METHOD)\n @Retention(RetentionPolicy.RUNTIME)\n \n public @interface BiAnnually {\n public static interface $ {\n \n @BiAnnually\n @Schedule(second = \"0\", minute = \"0\", hour = \"0\", dayOfMonth = \"1\", month = \"1,6\")\n public void method();\n }\n }\n\n## BiMonthly\n\n package org.superbiz.corn.meta.api;\n \n import javax.ejb.Schedule;\n import java.lang.annotation.ElementType;\n import java.lang.annotation.Retention;\n import java.lang.annotation.RetentionPolicy;\n import java.lang.annotation.Target;\n \n @Metatype\n @Target(ElementType.METHOD)\n @Retention(RetentionPolicy.RUNTIME)\n \n public @interface BiMonthly {\n public static interface $ {\n \n @BiMonthly\n @Schedule(second = \"0\", minute = \"0\", hour = \"0\", dayOfMonth = \"1,15\")\n public void method();\n }\n }\n\n## Daily\n\n package org.superbiz.corn.meta.api;\n \n import javax.ejb.Schedule;\n import java.lang.annotation.ElementType;\n import java.lang.annotation.Retention;\n import java.lang.annotation.RetentionPolicy;\n import java.lang.annotation.Target;\n \n @Metatype\n @Target(ElementType.METHOD)\n @Retention(RetentionPolicy.RUNTIME)\n \n public @interface Daily {\n public static interface $ {\n \n @Daily\n @Schedule(second = \"0\", minute = \"0\", hour = \"0\", dayOfMonth = \"*\")\n public void method();\n }\n }\n\n## HarvestTime\n\n package org.superbiz.corn.meta.api;\n \n import javax.ejb.Schedule;\n import javax.ejb.Schedules;\n import java.lang.annotation.ElementType;\n import java.lang.annotation.Retention;\n import java.lang.annotation.RetentionPolicy;\n import java.lang.annotation.Target;\n \n @Metatype\n @Target(ElementType.METHOD)\n @Retention(RetentionPolicy.RUNTIME)\n \n public @interface HarvestTime {\n public static interface $ {\n \n @HarvestTime\n @Schedules({\n @Schedule(month = \"9\", dayOfMonth = \"20-Last\", minute = \"0\", hour = \"8\"),\n @Schedule(month = \"10\", dayOfMonth = \"1-10\", minute = \"0\", hour = \"8\")\n })\n public void method();\n }\n }\n\n## Hourly\n\n package org.superbiz.corn.meta.api;\n \n import javax.ejb.Schedule;\n import java.lang.annotation.ElementType;\n import java.lang.annotation.Retention;\n import java.lang.annotation.RetentionPolicy;\n import java.lang.annotation.Target;\n \n @Metatype\n @Target(ElementType.METHOD)\n @Retention(RetentionPolicy.RUNTIME)\n \n public @interface Hourly {\n public static interface $ {\n \n @Hourly\n @Schedule(second = \"0\", minute = \"0\", hour = \"*\")\n public void method();\n }\n }\n\n## Metatype\n\n package org.superbiz.corn.meta.api;\n \n import java.lang.annotation.ElementType;\n import java.lang.annotation.Retention;\n import java.lang.annotation.RetentionPolicy;\n import java.lang.annotation.Target;\n \n @Metatype\n @Target(ElementType.ANNOTATION_TYPE)\n @Retention(RetentionPolicy.RUNTIME)\n public @interface Metatype {\n }\n\n## Organic\n\n package org.superbiz.corn.meta.api;\n \n import javax.ejb.Lock;\n import javax.ejb.LockType;\n import javax.ejb.Singleton;\n import java.lang.annotation.ElementType;\n import java.lang.annotation.Retention;\n import java.lang.annotation.RetentionPolicy;\n import java.lang.annotation.Target;\n \n @Metatype\n @Target(ElementType.TYPE)\n @Retention(RetentionPolicy.RUNTIME)\n \n @Singleton\n @Lock(LockType.READ)\n public @interface Organic {\n }\n\n## PlantingTime\n\n package org.superbiz.corn.meta.api;\n \n import javax.ejb.Schedule;\n import javax.ejb.Schedules;\n import java.lang.annotation.ElementType;\n import java.lang.annotation.Retention;\n import java.lang.annotation.RetentionPolicy;\n import java.lang.annotation.Target;\n \n @Metatype\n @Target(ElementType.METHOD)\n @Retention(RetentionPolicy.RUNTIME)\n \n public @interface PlantingTime {\n public static interface $ {\n \n @PlantingTime\n @Schedules({\n @Schedule(month = \"5\", dayOfMonth = \"20-Last\", minute = \"0\", hour = \"8\"),\n @Schedule(month = \"6\", dayOfMonth = \"1-10\", minute = \"0\", hour = \"8\")\n })\n public void method();\n }\n }\n\n## Secondly\n\n package org.superbiz.corn.meta.api;\n \n import javax.ejb.Schedule;\n import java.lang.annotation.ElementType;\n import java.lang.annotation.Retention;\n import java.lang.annotation.RetentionPolicy;\n import java.lang.annotation.Target;\n \n @Metatype\n @Target(ElementType.METHOD)\n @Retention(RetentionPolicy.RUNTIME)\n \n public @interface Secondly {\n public static interface $ {\n \n @Secondly\n @Schedule(second = \"*\", minute = \"*\", hour = \"*\")\n public void method();\n }\n }\n\n## FarmerBrown\n\n package org.superbiz.corn.meta;\n \n import org.superbiz.corn.meta.api.HarvestTime;\n import org.superbiz.corn.meta.api.Organic;\n import org.superbiz.corn.meta.api.PlantingTime;\n import org.superbiz.corn.meta.api.Secondly;\n \n import java.util.concurrent.atomic.AtomicInteger;\n \n /**\n * This is where we schedule all of Farmer Brown's corn jobs\n *\n * @version $Revision$ $Date$\n */\n @Organic\n public class FarmerBrown {\n \n private final AtomicInteger checks = new AtomicInteger();\n \n @PlantingTime\n private void plantTheCorn() {\n // Dig out the planter!!!\n }\n \n @HarvestTime\n private void harvestTheCorn() {\n // Dig out the combine!!!\n }\n \n @Secondly\n private void checkOnTheDaughters() {\n checks.incrementAndGet();\n }\n \n public int getChecks() {\n return checks.get();\n }\n }\n\n## FarmerBrownTest\n\n package org.superbiz.corn.meta;\n \n import junit.framework.TestCase;\n \n import javax.ejb.embeddable.EJBContainer;\n import javax.naming.Context;\n \n import static java.util.concurrent.TimeUnit.SECONDS;\n \n /**\n * @version $Revision$ $Date$\n */\n public class FarmerBrownTest extends TestCase {\n \n public void test() throws Exception {\n \n final Context context = EJBContainer.createEJBContainer().getContext();\n \n final FarmerBrown farmerBrown = (FarmerBrown) context.lookup(\"java:global/schedule-methods-meta/FarmerBrown\");\n \n // Give Farmer brown a chance to do some work\n Thread.sleep(SECONDS.toMillis(5));\n \n assertTrue(farmerBrown.getChecks() > 4);\n }\n }\n\n# Running\n\n \n -------------------------------------------------------\n T E S T S\n -------------------------------------------------------\n Running org.superbiz.corn.meta.FarmerBrownTest\n Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06\n http://tomee.apache.org/\n INFO - openejb.home = /Users/dblevins/examples/schedule-methods-meta\n INFO - openejb.base = /Users/dblevins/examples/schedule-methods-meta\n INFO - Using 'javax.ejb.embeddable.EJBContainer=true'\n INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)\n INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)\n INFO - Found EjbModule in classpath: /Users/dblevins/examples/schedule-methods-meta/target/classes\n INFO - Beginning load: /Users/dblevins/examples/schedule-methods-meta/target/classes\n INFO - Configuring enterprise application: /Users/dblevins/examples/schedule-methods-meta\n INFO - Configuring Service(id=Default Singleton Container, type=Container, provider-id=Default Singleton Container)\n INFO - Auto-creating a container for bean FarmerBrown: Container(type=SINGLETON, id=Default Singleton Container)\n INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)\n INFO - Auto-creating a container for bean org.superbiz.corn.meta.FarmerBrownTest: Container(type=MANAGED, id=Default Managed Container)\n INFO - Enterprise application \"/Users/dblevins/examples/schedule-methods-meta\" loaded.\n INFO - Assembling app: /Users/dblevins/examples/schedule-methods-meta\n INFO - Jndi(name=\"java:global/schedule-methods-meta/FarmerBrown!org.superbiz.corn.meta.FarmerBrown\")\n INFO - Jndi(name=\"java:global/schedule-methods-meta/FarmerBrown\")\n INFO - Jndi(name=\"java:global/EjbModule1809441479/org.superbiz.corn.meta.FarmerBrownTest!org.superbiz.corn.meta.FarmerBrownTest\")\n INFO - Jndi(name=\"java:global/EjbModule1809441479/org.superbiz.corn.meta.FarmerBrownTest\")\n INFO - Created Ejb(deployment-id=org.superbiz.corn.meta.FarmerBrownTest, ejb-name=org.superbiz.corn.meta.FarmerBrownTest, container=Default Managed Container)\n INFO - Created Ejb(deployment-id=FarmerBrown, ejb-name=FarmerBrown, container=Default Singleton Container)\n INFO - Started Ejb(deployment-id=org.superbiz.corn.meta.FarmerBrownTest, ejb-name=org.superbiz.corn.meta.FarmerBrownTest, container=Default Managed Container)\n INFO - Started Ejb(deployment-id=FarmerBrown, ejb-name=FarmerBrown, container=Default Singleton Container)\n INFO - Deployed Application(path=/Users/dblevins/examples/schedule-methods-meta)\n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 6.166 sec\n \n Results :\n \n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0\n \n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/schedule-methods-meta" | |
}, | |
{ | |
"name":"async-methods", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/async-methods" | |
} | |
], | |
"mockito":[ | |
{ | |
"name":"rest-applicationcomposer-mockito", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/rest-applicationcomposer-mockito" | |
} | |
], | |
"moviefun":[ | |
{ | |
"name":"moviefun", | |
"readme":"Title: Movies Complete\n\n*Help us document this example! Click the blue pencil icon in the upper right to edit this page.*\n\n## AddInterceptor\n\n package org.superbiz.injection.tx;\n \n import javax.interceptor.AroundInvoke;\n import javax.interceptor.InvocationContext;\n \n /**\n * @version $Revision$ $Date$\n */\n public class AddInterceptor {\n \n @AroundInvoke\n public Object invoke(InvocationContext context) throws Exception {\n // Log Add\n return context.proceed();\n }\n }\n\n## DeleteInterceptor\n\n package org.superbiz.injection.tx;\n \n import javax.interceptor.AroundInvoke;\n import javax.interceptor.InvocationContext;\n \n /**\n * @version $Revision$ $Date$\n */\n public class DeleteInterceptor {\n \n @AroundInvoke\n public Object invoke(InvocationContext context) throws Exception {\n // Log Delete\n return context.proceed();\n }\n }\n\n## Movie\n\n package org.superbiz.injection.tx;\n \n import javax.persistence.Entity;\n \n @Entity\n public class Movie {\n \n private String director;\n private String title;\n private int year;\n \n public Movie() {\n }\n \n public Movie(String director, String title, int year) {\n this.director = director;\n this.title = title;\n this.year = year;\n }\n \n public String getDirector() {\n return director;\n }\n \n public void setDirector(String director) {\n this.director = director;\n }\n \n public String getTitle() {\n return title;\n }\n \n public void setTitle(String title) {\n this.title = title;\n }\n \n public int getYear() {\n return year;\n }\n \n public void setYear(int year) {\n this.year = year;\n }\n \n }\n\n## Movies\n\n package org.superbiz.injection.tx;\n \n import javax.annotation.security.PermitAll;\n import javax.annotation.security.RolesAllowed;\n import javax.ejb.Stateful;\n import javax.ejb.TransactionAttribute;\n import javax.ejb.TransactionAttributeType;\n import javax.interceptor.Interceptors;\n import javax.persistence.EntityManager;\n import javax.persistence.PersistenceContext;\n import javax.persistence.PersistenceContextType;\n import javax.persistence.Query;\n import java.util.List;\n \n //START SNIPPET: code\n @Stateful\n public class Movies {\n \n @PersistenceContext(unitName = \"movie-unit\", type = PersistenceContextType.TRANSACTION)\n private EntityManager entityManager;\n \n @RolesAllowed({\"Employee\", \"Manager\"})\n @TransactionAttribute(TransactionAttributeType.REQUIRED)\n @Interceptors(AddInterceptor.class)\n public void addMovie(Movie movie) throws Exception {\n entityManager.persist(movie);\n }\n \n @RolesAllowed({\"Manager\"})\n @TransactionAttribute(TransactionAttributeType.MANDATORY)\n @Interceptors(DeleteInterceptor.class)\n public void deleteMovie(Movie movie) throws Exception {\n entityManager.remove(movie);\n }\n \n @PermitAll\n @TransactionAttribute(TransactionAttributeType.SUPPORTS)\n public List<Movie> getMovies() throws Exception {\n Query query = entityManager.createQuery(\"SELECT m from Movie as m\");\n return query.getResultList();\n }\n }\n\n## ReadInterceptor\n\n package org.superbiz.injection.tx;\n \n import javax.interceptor.AroundInvoke;\n import javax.interceptor.InvocationContext;\n \n /**\n * @version $Revision$ $Date$\n */\n public class ReadInterceptor {\n \n @AroundInvoke\n public Object invoke(InvocationContext context) throws Exception {\n // Log Delete\n return context.proceed();\n }\n }\n\n## persistence.xml\n\n <persistence xmlns=\"http://java.sun.com/xml/ns/persistence\" version=\"1.0\">\n \n <persistence-unit name=\"movie-unit\">\n <jta-data-source>movieDatabase</jta-data-source>\n <non-jta-data-source>movieDatabaseUnmanaged</non-jta-data-source>\n <class>org.superbiz.injection.tx.Movie</class>\n \n <properties>\n <property name=\"openjpa.jdbc.SynchronizeMappings\" value=\"buildSchema(ForeignKeys=true)\"/>\n </properties>\n </persistence-unit>\n </persistence>\n\n## MoviesTest\n\n package org.superbiz.injection.tx;\n \n import junit.framework.TestCase;\n \n import javax.annotation.security.RunAs;\n import javax.ejb.EJB;\n import javax.ejb.Stateless;\n import javax.ejb.TransactionAttribute;\n import javax.ejb.TransactionAttributeType;\n import javax.ejb.embeddable.EJBContainer;\n import java.util.List;\n import java.util.Properties;\n import java.util.concurrent.Callable;\n \n import static javax.ejb.TransactionAttributeType.REQUIRES_NEW;\n \n /**\n * See the transaction-rollback example as it does the same thing\n * via UserTransaction and shows more techniques for rollback \n */\n //START SNIPPET: code\n public class MoviesTest extends TestCase {\n \n @EJB\n private Movies movies;\n \n @EJB(beanName = \"TransactionBean\")\n private Caller transactionalCaller;\n \n @EJB(beanName = \"NoTransactionBean\")\n private Caller nonTransactionalCaller;\n \n protected void setUp() throws Exception {\n final Properties p = new Properties();\n p.put(\"movieDatabase\", \"new://Resource?type=DataSource\");\n p.put(\"movieDatabase.JdbcDriver\", \"org.hsqldb.jdbcDriver\");\n p.put(\"movieDatabase.JdbcUrl\", \"jdbc:hsqldb:mem:moviedb\");\n \n EJBContainer.createEJBContainer(p).getContext().bind(\"inject\", this);\n }\n \n private void doWork() throws Exception {\n \n movies.addMovie(new Movie(\"Quentin Tarantino\", \"Reservoir Dogs\", 1992));\n movies.addMovie(new Movie(\"Joel Coen\", \"Fargo\", 1996));\n movies.addMovie(new Movie(\"Joel Coen\", \"The Big Lebowski\", 1998));\n \n List<Movie> list = movies.getMovies();\n assertEquals(\"List.size()\", 3, list.size());\n \n for (Movie movie : list) {\n movies.deleteMovie(movie);\n }\n \n assertEquals(\"Movies.getMovies()\", 0, movies.getMovies().size());\n }\n \n public void testWithTransaction() throws Exception {\n transactionalCaller.call(new Callable() {\n public Object call() throws Exception {\n doWork();\n return null;\n }\n });\n }\n \n public void testWithoutTransaction() throws Exception {\n try {\n nonTransactionalCaller.call(new Callable() {\n public Object call() throws Exception {\n doWork();\n return null;\n }\n });\n fail(\"The Movies bean should be using TransactionAttributeType.MANDATORY\");\n } catch (javax.ejb.EJBException e) {\n // good, our Movies bean is using TransactionAttributeType.MANDATORY as we want\n }\n }\n \n \n public static interface Caller {\n public <V> V call(Callable<V> callable) throws Exception;\n }\n \n /**\n * This little bit of magic allows our test code to execute in\n * the scope of a container controlled transaction.\n */\n @Stateless\n @RunAs(\"Manager\")\n @TransactionAttribute(REQUIRES_NEW)\n public static class TransactionBean implements Caller {\n \n public <V> V call(Callable<V> callable) throws Exception {\n return callable.call();\n }\n }\n \n @Stateless\n @RunAs(\"Manager\")\n @TransactionAttribute(TransactionAttributeType.NEVER)\n public static class NoTransactionBean implements Caller {\n \n public <V> V call(Callable<V> callable) throws Exception {\n return callable.call();\n }\n }\n }\n\n# Running\n\n \n -------------------------------------------------------\n T E S T S\n -------------------------------------------------------\n Running org.superbiz.injection.tx.MoviesTest\n Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06\n http://tomee.apache.org/\n INFO - openejb.home = /Users/dblevins/examples/movies-complete\n INFO - openejb.base = /Users/dblevins/examples/movies-complete\n INFO - Using 'javax.ejb.embeddable.EJBContainer=true'\n INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)\n INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)\n INFO - Configuring Service(id=movieDatabase, type=Resource, provider-id=Default JDBC Database)\n INFO - Found EjbModule in classpath: /Users/dblevins/examples/movies-complete/target/classes\n INFO - Found EjbModule in classpath: /Users/dblevins/examples/movies-complete/target/test-classes\n INFO - Beginning load: /Users/dblevins/examples/movies-complete/target/classes\n INFO - Beginning load: /Users/dblevins/examples/movies-complete/target/test-classes\n INFO - Configuring enterprise application: /Users/dblevins/examples/movies-complete\n INFO - Configuring Service(id=Default Stateful Container, type=Container, provider-id=Default Stateful Container)\n INFO - Auto-creating a container for bean Movies: Container(type=STATEFUL, id=Default Stateful Container)\n INFO - Configuring Service(id=Default Stateless Container, type=Container, provider-id=Default Stateless Container)\n INFO - Auto-creating a container for bean TransactionBean: Container(type=STATELESS, id=Default Stateless Container)\n INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)\n INFO - Auto-creating a container for bean org.superbiz.injection.tx.MoviesTest: Container(type=MANAGED, id=Default Managed Container)\n INFO - Configuring PersistenceUnit(name=movie-unit)\n INFO - Auto-creating a Resource with id 'movieDatabaseNonJta' of type 'DataSource for 'movie-unit'.\n INFO - Configuring Service(id=movieDatabaseNonJta, type=Resource, provider-id=movieDatabase)\n INFO - Adjusting PersistenceUnit movie-unit <non-jta-data-source> to Resource ID 'movieDatabaseNonJta' from 'movieDatabaseUnmanaged'\n INFO - Enterprise application \"/Users/dblevins/examples/movies-complete\" loaded.\n INFO - Assembling app: /Users/dblevins/examples/movies-complete\n INFO - PersistenceUnit(name=movie-unit, provider=org.apache.openjpa.persistence.PersistenceProviderImpl) - provider time 402ms\n INFO - Jndi(name=\"java:global/movies-complete/Movies!org.superbiz.injection.tx.Movies\")\n INFO - Jndi(name=\"java:global/movies-complete/Movies\")\n INFO - Jndi(name=\"java:global/movies-complete/TransactionBean!org.superbiz.injection.tx.MoviesTest$Caller\")\n INFO - Jndi(name=\"java:global/movies-complete/TransactionBean\")\n INFO - Jndi(name=\"java:global/movies-complete/NoTransactionBean!org.superbiz.injection.tx.MoviesTest$Caller\")\n INFO - Jndi(name=\"java:global/movies-complete/NoTransactionBean\")\n INFO - Jndi(name=\"java:global/EjbModule1013462002/org.superbiz.injection.tx.MoviesTest!org.superbiz.injection.tx.MoviesTest\")\n INFO - Jndi(name=\"java:global/EjbModule1013462002/org.superbiz.injection.tx.MoviesTest\")\n INFO - Created Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container)\n INFO - Created Ejb(deployment-id=NoTransactionBean, ejb-name=NoTransactionBean, container=Default Stateless Container)\n INFO - Created Ejb(deployment-id=TransactionBean, ejb-name=TransactionBean, container=Default Stateless Container)\n INFO - Created Ejb(deployment-id=org.superbiz.injection.tx.MoviesTest, ejb-name=org.superbiz.injection.tx.MoviesTest, container=Default Managed Container)\n INFO - Started Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container)\n INFO - Started Ejb(deployment-id=NoTransactionBean, ejb-name=NoTransactionBean, container=Default Stateless Container)\n INFO - Started Ejb(deployment-id=TransactionBean, ejb-name=TransactionBean, container=Default Stateless Container)\n INFO - Started Ejb(deployment-id=org.superbiz.injection.tx.MoviesTest, ejb-name=org.superbiz.injection.tx.MoviesTest, container=Default Managed Container)\n INFO - Deployed Application(path=/Users/dblevins/examples/movies-complete)\n INFO - EJBContainer already initialized. Call ejbContainer.close() to allow reinitialization\n Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.418 sec\n \n Results :\n \n Tests run: 2, Failures: 0, Errors: 0, Skipped: 0\n \n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/moviefun" | |
}, | |
{ | |
"name":"moviefun-rest", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/moviefun-rest" | |
} | |
], | |
"movies":[ | |
{ | |
"name":"movies-complete", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/movies-complete" | |
}, | |
{ | |
"name":"movies-complete-meta", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/movies-complete-meta" | |
} | |
], | |
"mtom":[ | |
{ | |
"name":"mtom", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/mtom" | |
} | |
], | |
"multi":[ | |
{ | |
"name":"multi-jpa-provider-testing", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/multi-jpa-provider-testing" | |
} | |
], | |
"multiple":[ | |
{ | |
"name":"multiple-tomee-arquillian", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/multiple-tomee-arquillian" | |
}, | |
{ | |
"name":"multiple-arquillian-adapters", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/multiple-arquillian-adapters" | |
} | |
], | |
"myfaces":[ | |
{ | |
"name":"myfaces-codi-demo", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/myfaces-codi-demo" | |
} | |
], | |
"of":[ | |
{ | |
"name":"injection-of-connectionfactory", | |
"readme":"Title: Injection Of Connectionfactory\n\n*Help us document this example! Click the blue pencil icon in the upper right to edit this page.*\n\n## Messages\n\n package org.superbiz.injection.jms;\n \n import javax.annotation.Resource;\n import javax.ejb.Stateless;\n import javax.jms.Connection;\n import javax.jms.ConnectionFactory;\n import javax.jms.DeliveryMode;\n import javax.jms.JMSException;\n import javax.jms.MessageConsumer;\n import javax.jms.MessageProducer;\n import javax.jms.Queue;\n import javax.jms.Session;\n import javax.jms.TextMessage;\n \n @Stateless\n public class Messages {\n \n @Resource\n private ConnectionFactory connectionFactory;\n \n @Resource\n private Queue chatQueue;\n \n \n public void sendMessage(String text) throws JMSException {\n \n Connection connection = null;\n Session session = null;\n \n try {\n connection = connectionFactory.createConnection();\n connection.start();\n \n // Create a Session\n session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);\n \n // Create a MessageProducer from the Session to the Topic or Queue\n MessageProducer producer = session.createProducer(chatQueue);\n producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);\n \n // Create a message\n TextMessage message = session.createTextMessage(text);\n \n // Tell the producer to send the message\n producer.send(message);\n } finally {\n // Clean up\n if (session != null) session.close();\n if (connection != null) connection.close();\n }\n }\n \n public String receiveMessage() throws JMSException {\n \n Connection connection = null;\n Session session = null;\n MessageConsumer consumer = null;\n try {\n connection = connectionFactory.createConnection();\n connection.start();\n \n // Create a Session\n session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);\n \n // Create a MessageConsumer from the Session to the Topic or Queue\n consumer = session.createConsumer(chatQueue);\n \n // Wait for a message\n TextMessage message = (TextMessage) consumer.receive(1000);\n \n return message.getText();\n } finally {\n if (consumer != null) consumer.close();\n if (session != null) session.close();\n if (connection != null) connection.close();\n }\n }\n }\n\n## MessagingBeanTest\n\n package org.superbiz.injection.jms;\n \n import junit.framework.TestCase;\n \n import javax.ejb.embeddable.EJBContainer;\n import javax.naming.Context;\n \n public class MessagingBeanTest extends TestCase {\n \n public void test() throws Exception {\n \n final Context context = EJBContainer.createEJBContainer().getContext();\n \n Messages messages = (Messages) context.lookup(\"java:global/injection-of-connectionfactory/Messages\");\n \n messages.sendMessage(\"Hello World!\");\n messages.sendMessage(\"How are you?\");\n messages.sendMessage(\"Still spinning?\");\n \n assertEquals(messages.receiveMessage(), \"Hello World!\");\n assertEquals(messages.receiveMessage(), \"How are you?\");\n assertEquals(messages.receiveMessage(), \"Still spinning?\");\n }\n }\n\n# Running\n\n \n -------------------------------------------------------\n T E S T S\n -------------------------------------------------------\n Running org.superbiz.injection.jms.MessagingBeanTest\n Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06\n http://tomee.apache.org/\n INFO - openejb.home = /Users/dblevins/examples/injection-of-connectionfactory\n INFO - openejb.base = /Users/dblevins/examples/injection-of-connectionfactory\n INFO - Using 'javax.ejb.embeddable.EJBContainer=true'\n INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)\n INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)\n INFO - Found EjbModule in classpath: /Users/dblevins/examples/injection-of-connectionfactory/target/classes\n INFO - Beginning load: /Users/dblevins/examples/injection-of-connectionfactory/target/classes\n INFO - Configuring enterprise application: /Users/dblevins/examples/injection-of-connectionfactory\n WARN - Method 'lookup' is not available for 'javax.annotation.Resource'. Probably using an older Runtime.\n INFO - Configuring Service(id=Default Stateless Container, type=Container, provider-id=Default Stateless Container)\n INFO - Auto-creating a container for bean Messages: Container(type=STATELESS, id=Default Stateless Container)\n INFO - Configuring Service(id=Default JMS Connection Factory, type=Resource, provider-id=Default JMS Connection Factory)\n INFO - Auto-creating a Resource with id 'Default JMS Connection Factory' of type 'javax.jms.ConnectionFactory for 'Messages'.\n INFO - Configuring Service(id=Default JMS Resource Adapter, type=Resource, provider-id=Default JMS Resource Adapter)\n INFO - Auto-linking resource-ref 'java:comp/env/org.superbiz.injection.jms.Messages/connectionFactory' in bean Messages to Resource(id=Default JMS Connection Factory)\n INFO - Configuring Service(id=org.superbiz.injection.jms.Messages/chatQueue, type=Resource, provider-id=Default Queue)\n INFO - Auto-creating a Resource with id 'org.superbiz.injection.jms.Messages/chatQueue' of type 'javax.jms.Queue for 'Messages'.\n INFO - Auto-linking resource-env-ref 'java:comp/env/org.superbiz.injection.jms.Messages/chatQueue' in bean Messages to Resource(id=org.superbiz.injection.jms.Messages/chatQueue)\n INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)\n INFO - Auto-creating a container for bean org.superbiz.injection.jms.MessagingBeanTest: Container(type=MANAGED, id=Default Managed Container)\n INFO - Enterprise application \"/Users/dblevins/examples/injection-of-connectionfactory\" loaded.\n INFO - Assembling app: /Users/dblevins/examples/injection-of-connectionfactory\n INFO - Jndi(name=\"java:global/injection-of-connectionfactory/Messages!org.superbiz.injection.jms.Messages\")\n INFO - Jndi(name=\"java:global/injection-of-connectionfactory/Messages\")\n INFO - Jndi(name=\"java:global/EjbModule1634151355/org.superbiz.injection.jms.MessagingBeanTest!org.superbiz.injection.jms.MessagingBeanTest\")\n INFO - Jndi(name=\"java:global/EjbModule1634151355/org.superbiz.injection.jms.MessagingBeanTest\")\n INFO - Created Ejb(deployment-id=Messages, ejb-name=Messages, container=Default Stateless Container)\n INFO - Created Ejb(deployment-id=org.superbiz.injection.jms.MessagingBeanTest, ejb-name=org.superbiz.injection.jms.MessagingBeanTest, container=Default Managed Container)\n INFO - Started Ejb(deployment-id=Messages, ejb-name=Messages, container=Default Stateless Container)\n INFO - Started Ejb(deployment-id=org.superbiz.injection.jms.MessagingBeanTest, ejb-name=org.superbiz.injection.jms.MessagingBeanTest, container=Default Managed Container)\n INFO - Deployed Application(path=/Users/dblevins/examples/injection-of-connectionfactory)\n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.562 sec\n \n Results :\n \n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0\n \n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/injection-of-connectionfactory" | |
}, | |
{ | |
"name":"injection-of-env-entry", | |
"readme":"Title: Using EnvEntries\n\nThe `@Resource` annotation can be used to inject several things including\nDataSources, Topics, Queues, etc. Most of these are container supplied objects.\n\nIt is possible, however, to supply your own values to be injected via an `<env-entry>`\nin your `ejb-jar.xml` or `web.xml` deployment descriptor. Java EE 6 supported `<env-entry>` types\nare limited to the following:\n\n - java.lang.String\n - java.lang.Integer\n - java.lang.Short\n - java.lang.Float\n - java.lang.Double\n - java.lang.Byte\n - java.lang.Character\n - java.lang.Boolean\n - java.lang.Class\n - java.lang.Enum (any enum)\n\nSee also the [Custom Injection](../custom-injection) exmaple for a TomEE and OpenEJB feature that will let you\nuse more than just the above types as well as declare `<env-entry>` items with a plain properties file.\n\n# Using @Resource for basic properties\n\nThe use of the `@Resource` annotation isn't limited to setters. For\nexample, this annotation could have been used on the corresponding *field*\nlike so:\n\n @Resource\n private int maxLineItems;\n\nA fuller example might look like this:\n\n package org.superbiz.injection.enventry;\n \n import javax.annotation.Resource;\n import javax.ejb.Singleton;\n import java.util.Date;\n \n @Singleton\n public class Configuration {\n \n @Resource\n private String color;\n \n @Resource\n private Shape shape;\n \n @Resource\n private Class strategy;\n \n @Resource(name = \"date\")\n private long date;\n \n public String getColor() {\n return color;\n }\n \n public Shape getShape() {\n return shape;\n }\n \n public Class getStrategy() {\n return strategy;\n }\n \n public Date getDate() {\n return new Date(date);\n }\n }\n\nHere we have an `@Singleton` bean called `Confuration` that has the following properties (`<env-entry>` items)\n\n- String color\n- Shape shape\n- Class strategy\n- long date\n\n## Supplying @Resource values for <env-entry> items in ejb-jar.xml\n\nThe values for our `color`, `shape`, `strategy` and `date` properties are supplied via `<env-entry>` elements in the `ejb-jar.xml` file or the\n`web.xml` file like so:\n\n\n <ejb-jar xmlns=\"http://java.sun.com/xml/ns/javaee\" version=\"3.0\" metadata-complete=\"false\">\n <enterprise-beans>\n <session>\n <ejb-name>Configuration</ejb-name>\n <env-entry>\n <env-entry-name>org.superbiz.injection.enventry.Configuration/color</env-entry-name>\n <env-entry-type>java.lang.String</env-entry-type>\n <env-entry-value>orange</env-entry-value>\n </env-entry>\n <env-entry>\n <env-entry-name>org.superbiz.injection.enventry.Configuration/shape</env-entry-name>\n <env-entry-type>org.superbiz.injection.enventry.Shape</env-entry-type>\n <env-entry-value>TRIANGLE</env-entry-value>\n </env-entry>\n <env-entry>\n <env-entry-name>org.superbiz.injection.enventry.Configuration/strategy</env-entry-name>\n <env-entry-type>java.lang.Class</env-entry-type>\n <env-entry-value>org.superbiz.injection.enventry.Widget</env-entry-value>\n </env-entry>\n <env-entry>\n <description>The name was explicitly set in the annotation so the classname prefix isn't required</description>\n <env-entry-name>date</env-entry-name>\n <env-entry-type>java.lang.Long</env-entry-type>\n <env-entry-value>123456789</env-entry-value>\n </env-entry>\n </session>\n </enterprise-beans>\n </ejb-jar>\n\n\n### Using the @Resource 'name' attribute\n\nNote that `date` was referenced by `name` as:\n\n @Resource(name = \"date\")\n private long date;\n\nWhen the `@Resource(name)` is used, you do not need to specify the full class name of the bean and can do it briefly like so:\n\n <env-entry>\n <description>The name was explicitly set in the annotation so the classname prefix isn't required</description>\n <env-entry-name>date</env-entry-name>\n <env-entry-type>java.lang.Long</env-entry-type>\n <env-entry-value>123456789</env-entry-value>\n </env-entry>\n\nConversly, `color` was not referenced by `name`\n\n @Resource\n private String color;\n\nWhen something is not referenced by `name` in the `@Resource` annotation a default name is created. The format is essentially this:\n\n bean.getClass() + \"/\" + field.getName()\n\nSo the default `name` of the above `color` property ends up being `org.superbiz.injection.enventry.Configuration/color`. This is the name\nwe must use when we attempt to decalre a value for it in xml.\n\n <env-entry>\n <env-entry-name>org.superbiz.injection.enventry.Configuration/color</env-entry-name>\n <env-entry-type>java.lang.String</env-entry-type>\n <env-entry-value>orange</env-entry-value>\n </env-entry>\n\n### @Resource and Enum (Enumerations)\n\nThe `shape` field is actually a custom Java Enum type\n\n package org.superbiz.injection.enventry;\n\n public enum Shape {\n \n CIRCLE,\n TRIANGLE,\n SQUARE\n }\n\nAs of Java EE 6, java.lang.Enum types are allowed as `<env-entry>` items. Declaring one in xml is done using the actual enum's class name like so:\n\n <env-entry>\n <env-entry-name>org.superbiz.injection.enventry.Configuration/shape</env-entry-name>\n <env-entry-type>org.superbiz.injection.enventry.Shape</env-entry-type>\n <env-entry-value>TRIANGLE</env-entry-value>\n </env-entry>\n\nDo not use `<env-entry-type>java.lang.Enum</env-entry-type>` or it will not work!\n\n## ConfigurationTest\n\n package org.superbiz.injection.enventry;\n \n import junit.framework.TestCase;\n \n import javax.ejb.embeddable.EJBContainer;\n import javax.naming.Context;\n import java.util.Date;\n \n public class ConfigurationTest extends TestCase {\n \n \n public void test() throws Exception {\n final Context context = EJBContainer.createEJBContainer().getContext();\n \n final Configuration configuration = (Configuration) context.lookup(\"java:global/injection-of-env-entry/Configuration\");\n \n assertEquals(\"orange\", configuration.getColor());\n \n assertEquals(Shape.TRIANGLE, configuration.getShape());\n \n assertEquals(Widget.class, configuration.getStrategy());\n \n assertEquals(new Date(123456789), configuration.getDate());\n }\n }\n\n# Running\n\n \n -------------------------------------------------------\n T E S T S\n -------------------------------------------------------\n Running org.superbiz.injection.enventry.ConfigurationTest\n Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06\n http://tomee.apache.org/\n INFO - openejb.home = /Users/dblevins/examples/injection-of-env-entry\n INFO - openejb.base = /Users/dblevins/examples/injection-of-env-entry\n INFO - Using 'javax.ejb.embeddable.EJBContainer=true'\n INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)\n INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)\n INFO - Found EjbModule in classpath: /Users/dblevins/examples/injection-of-env-entry/target/classes\n INFO - Beginning load: /Users/dblevins/examples/injection-of-env-entry/target/classes\n INFO - Configuring enterprise application: /Users/dblevins/examples/injection-of-env-entry\n WARN - Method 'lookup' is not available for 'javax.annotation.Resource'. Probably using an older Runtime.\n INFO - Configuring Service(id=Default Singleton Container, type=Container, provider-id=Default Singleton Container)\n INFO - Auto-creating a container for bean Configuration: Container(type=SINGLETON, id=Default Singleton Container)\n INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)\n INFO - Auto-creating a container for bean org.superbiz.injection.enventry.ConfigurationTest: Container(type=MANAGED, id=Default Managed Container)\n INFO - Enterprise application \"/Users/dblevins/examples/injection-of-env-entry\" loaded.\n INFO - Assembling app: /Users/dblevins/examples/injection-of-env-entry\n INFO - Jndi(name=\"java:global/injection-of-env-entry/Configuration!org.superbiz.injection.enventry.Configuration\")\n INFO - Jndi(name=\"java:global/injection-of-env-entry/Configuration\")\n INFO - Jndi(name=\"java:global/EjbModule1355224018/org.superbiz.injection.enventry.ConfigurationTest!org.superbiz.injection.enventry.ConfigurationTest\")\n INFO - Jndi(name=\"java:global/EjbModule1355224018/org.superbiz.injection.enventry.ConfigurationTest\")\n INFO - Created Ejb(deployment-id=org.superbiz.injection.enventry.ConfigurationTest, ejb-name=org.superbiz.injection.enventry.ConfigurationTest, container=Default Managed Container)\n INFO - Created Ejb(deployment-id=Configuration, ejb-name=Configuration, container=Default Singleton Container)\n INFO - Started Ejb(deployment-id=org.superbiz.injection.enventry.ConfigurationTest, ejb-name=org.superbiz.injection.enventry.ConfigurationTest, container=Default Managed Container)\n INFO - Started Ejb(deployment-id=Configuration, ejb-name=Configuration, container=Default Singleton Container)\n INFO - Deployed Application(path=/Users/dblevins/examples/injection-of-env-entry)\n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.664 sec\n \n Results :\n \n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0\n \n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/injection-of-env-entry" | |
}, | |
{ | |
"name":"injection-of-entitymanager", | |
"readme":"Title: Injection Of Entitymanager\n\nThis example shows use of `@PersistenceContext` to have an `EntityManager` with an\n`EXTENDED` persistence context injected into a `@Stateful bean`. A JPA\n`@Entity` bean is used with the `EntityManager` to create, persist and merge\ndata to a database.\n\n## Creating the JPA Entity\n\nThe entity itself is simply a pojo annotated with `@Entity`. We create one called `Movie` which we can use to hold movie records.\n\n package org.superbiz.injection.jpa;\n\n import javax.persistence.Entity;\n \n @Entity\n public class Movie {\n\n @Id @GeneratedValue\n private long id;\n\n private String director;\n private String title;\n private int year;\n\n public Movie() {\n }\n\n public long getId() {\n return id;\n }\n\n public void setId(long id) {\n this.id = id;\n }\n\n public Movie(String director, String title, int year) {\n this.director = director;\n this.title = title;\n this.year = year;\n }\n\n public String getDirector() {\n return director;\n }\n\n public void setDirector(String director) {\n this.director = director;\n }\n\n public String getTitle() {\n return title;\n }\n\n public void setTitle(String title) {\n this.title = title;\n }\n\n public int getYear() {\n return year;\n }\n\n public void setYear(int year) {\n this.year = year;\n }\n }\n\n## Configure the EntityManager via a persistence.xml file\n\nThe above `Movie` entity can be created, removed, updated or deleted via an `EntityManager` object. The `EntityManager` itself is\nconfigured via a `META-INF/persistence.xml` file that is placed in the same jar as the `Movie` entity.\n\n <persistence xmlns=\"http://java.sun.com/xml/ns/persistence\" version=\"1.0\">\n\n <persistence-unit name=\"movie-unit\">\n <jta-data-source>movieDatabase</jta-data-source>\n <non-jta-data-source>movieDatabaseUnmanaged</non-jta-data-source>\n <class>org.superbiz.injection.jpa.Movie</class>\n\n <properties>\n <property name=\"openjpa.jdbc.SynchronizeMappings\" value=\"buildSchema(ForeignKeys=true)\"/>\n </properties>\n </persistence-unit>\n </persistence>\n\nNotice that the `Movie` entity is listed via a `<class>` element. This is not required, but can help when testing or when the\n`Movie` class is located in a different jar than the jar containing the `persistence.xml` file.\n\n## Injection via @PersistenceContext\n\nThe `EntityManager` itself is created by the container using the information in the `persistence.xml`, so to use it at\nruntime, we simply need to request it be injected into one of our components. We do this via `@PersistenceContext`\n\nThe `@PersistenceContext` annotation can be used on any CDI bean, EJB, Servlet, Servlet Listener, Servlet Filter, or JSF ManagedBean. If you don't use an EJB you will need to use a `UserTransaction` begin and commit transactions manually. A transaction is required for any of the create, update or delete methods of the EntityManager to work.\n\n package org.superbiz.injection.jpa;\n\n import javax.ejb.Stateful;\n import javax.persistence.EntityManager;\n import javax.persistence.PersistenceContext;\n import javax.persistence.PersistenceContextType;\n import javax.persistence.Query;\n import java.util.List;\n \n @Stateful\n public class Movies {\n \n @PersistenceContext(unitName = \"movie-unit\", type = PersistenceContextType.EXTENDED)\n private EntityManager entityManager;\n \n public void addMovie(Movie movie) throws Exception {\n entityManager.persist(movie);\n }\n \n public void deleteMovie(Movie movie) throws Exception {\n entityManager.remove(movie);\n }\n \n public List<Movie> getMovies() throws Exception {\n Query query = entityManager.createQuery(\"SELECT m from Movie as m\");\n return query.getResultList();\n }\n }\n\nThis particular `EntityManager` is injected as an `EXTENDED` persistence context, which simply means that the `EntityManager`\nis created when the `@Stateful` bean is created and destroyed when the `@Stateful` bean is destroyed. Simply put, the\ndata in the `EntityManager` is cached for the lifetime of the `@Stateful` bean.\n\nThe use of `EXTENDED` persistence contexts is **only** available to `@Stateful` beans. See the [JPA Concepts](../../jpa-concepts.html) page for an high level explanation of what a \"persistence context\" really is and how it is significant to JPA.\n\n## MoviesTest\n\nTesting JPA is quite easy, we can simply use the `EJBContainer` API to create a container in our test case.\n\n package org.superbiz.injection.jpa;\n \n import junit.framework.TestCase;\n \n import javax.ejb.embeddable.EJBContainer;\n import javax.naming.Context;\n import java.util.List;\n import java.util.Properties;\n \n //START SNIPPET: code\n public class MoviesTest extends TestCase {\n \n public void test() throws Exception {\n \n final Properties p = new Properties();\n p.put(\"movieDatabase\", \"new://Resource?type=DataSource\");\n p.put(\"movieDatabase.JdbcDriver\", \"org.hsqldb.jdbcDriver\");\n p.put(\"movieDatabase.JdbcUrl\", \"jdbc:hsqldb:mem:moviedb\");\n \n final Context context = EJBContainer.createEJBContainer(p).getContext();\n \n Movies movies = (Movies) context.lookup(\"java:global/injection-of-entitymanager/Movies\");\n \n movies.addMovie(new Movie(\"Quentin Tarantino\", \"Reservoir Dogs\", 1992));\n movies.addMovie(new Movie(\"Joel Coen\", \"Fargo\", 1996));\n movies.addMovie(new Movie(\"Joel Coen\", \"The Big Lebowski\", 1998));\n \n List<Movie> list = movies.getMovies();\n assertEquals(\"List.size()\", 3, list.size());\n \n for (Movie movie : list) {\n movies.deleteMovie(movie);\n }\n \n assertEquals(\"Movies.getMovies()\", 0, movies.getMovies().size());\n }\n }\n\n# Running\n\nWhen we run our test case we should see output similar to the following.\n \n -------------------------------------------------------\n T E S T S\n -------------------------------------------------------\n Running org.superbiz.injection.jpa.MoviesTest\n Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06\n http://tomee.apache.org/\n INFO - openejb.home = /Users/dblevins/examples/injection-of-entitymanager\n INFO - openejb.base = /Users/dblevins/examples/injection-of-entitymanager\n INFO - Using 'javax.ejb.embeddable.EJBContainer=true'\n INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)\n INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)\n INFO - Configuring Service(id=movieDatabase, type=Resource, provider-id=Default JDBC Database)\n INFO - Found EjbModule in classpath: /Users/dblevins/examples/injection-of-entitymanager/target/classes\n INFO - Beginning load: /Users/dblevins/examples/injection-of-entitymanager/target/classes\n INFO - Configuring enterprise application: /Users/dblevins/examples/injection-of-entitymanager\n INFO - Configuring Service(id=Default Stateful Container, type=Container, provider-id=Default Stateful Container)\n INFO - Auto-creating a container for bean Movies: Container(type=STATEFUL, id=Default Stateful Container)\n INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)\n INFO - Auto-creating a container for bean org.superbiz.injection.jpa.MoviesTest: Container(type=MANAGED, id=Default Managed Container)\n INFO - Configuring PersistenceUnit(name=movie-unit)\n INFO - Auto-creating a Resource with id 'movieDatabaseNonJta' of type 'DataSource for 'movie-unit'.\n INFO - Configuring Service(id=movieDatabaseNonJta, type=Resource, provider-id=movieDatabase)\n INFO - Adjusting PersistenceUnit movie-unit <non-jta-data-source> to Resource ID 'movieDatabaseNonJta' from 'movieDatabaseUnmanaged'\n INFO - Enterprise application \"/Users/dblevins/examples/injection-of-entitymanager\" loaded.\n INFO - Assembling app: /Users/dblevins/examples/injection-of-entitymanager\n INFO - PersistenceUnit(name=movie-unit, provider=org.apache.openjpa.persistence.PersistenceProviderImpl) - provider time 462ms\n INFO - Jndi(name=\"java:global/injection-of-entitymanager/Movies!org.superbiz.injection.jpa.Movies\")\n INFO - Jndi(name=\"java:global/injection-of-entitymanager/Movies\")\n INFO - Jndi(name=\"java:global/EjbModule1461341140/org.superbiz.injection.jpa.MoviesTest!org.superbiz.injection.jpa.MoviesTest\")\n INFO - Jndi(name=\"java:global/EjbModule1461341140/org.superbiz.injection.jpa.MoviesTest\")\n INFO - Created Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container)\n INFO - Created Ejb(deployment-id=org.superbiz.injection.jpa.MoviesTest, ejb-name=org.superbiz.injection.jpa.MoviesTest, container=Default Managed Container)\n INFO - Started Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container)\n INFO - Started Ejb(deployment-id=org.superbiz.injection.jpa.MoviesTest, ejb-name=org.superbiz.injection.jpa.MoviesTest, container=Default Managed Container)\n INFO - Deployed Application(path=/Users/dblevins/examples/injection-of-entitymanager)\n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.301 sec\n \n Results :\n \n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0\n \n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/injection-of-entitymanager" | |
}, | |
{ | |
"name":"injection-of-datasource", | |
"readme":"Title: Injection Of Datasource\n\n*Help us document this example! Click the blue pencil icon in the upper right to edit this page.*\n\n## Movie\n\n package org.superbiz.injection;\n \n /**\n * @version $Revision: 607077 $ $Date: 2007-12-27 06:55:23 -0800 (Thu, 27 Dec 2007) $\n */\n public class Movie {\n private String director;\n private String title;\n private int year;\n \n public Movie() {\n }\n \n public Movie(String director, String title, int year) {\n this.director = director;\n this.title = title;\n this.year = year;\n }\n \n public String getDirector() {\n return director;\n }\n \n public void setDirector(String director) {\n this.director = director;\n }\n \n public String getTitle() {\n return title;\n }\n \n public void setTitle(String title) {\n this.title = title;\n }\n \n public int getYear() {\n return year;\n }\n \n public void setYear(int year) {\n this.year = year;\n }\n \n }\n\n## Movies\n\n package org.superbiz.injection;\n \n import javax.annotation.PostConstruct;\n import javax.annotation.Resource;\n import javax.ejb.Stateful;\n import javax.sql.DataSource;\n import java.sql.Connection;\n import java.sql.PreparedStatement;\n import java.sql.ResultSet;\n import java.util.ArrayList;\n import java.util.List;\n \n @Stateful\n public class Movies {\n \n /**\n * The field name \"movieDatabase\" matches the DataSource we\n * configure in the TestCase via :\n * p.put(\"movieDatabase\", \"new://Resource?type=DataSource\");\n * <p/>\n * This would also match an equivalent delcaration in an openejb.xml:\n * <Resource id=\"movieDatabase\" type=\"DataSource\"/>\n * <p/>\n * If you'd like the freedom to change the field name without\n * impact on your configuration you can set the \"name\" attribute\n * of the @Resource annotation to \"movieDatabase\" instead.\n */\n @Resource\n private DataSource movieDatabase;\n \n @PostConstruct\n private void construct() throws Exception {\n Connection connection = movieDatabase.getConnection();\n try {\n PreparedStatement stmt = connection.prepareStatement(\"CREATE TABLE movie ( director VARCHAR(255), title VARCHAR(255), year integer)\");\n stmt.execute();\n } finally {\n connection.close();\n }\n }\n \n public void addMovie(Movie movie) throws Exception {\n Connection conn = movieDatabase.getConnection();\n try {\n PreparedStatement sql = conn.prepareStatement(\"INSERT into movie (director, title, year) values (?, ?, ?)\");\n sql.setString(1, movie.getDirector());\n sql.setString(2, movie.getTitle());\n sql.setInt(3, movie.getYear());\n sql.execute();\n } finally {\n conn.close();\n }\n }\n \n public void deleteMovie(Movie movie) throws Exception {\n Connection conn = movieDatabase.getConnection();\n try {\n PreparedStatement sql = conn.prepareStatement(\"DELETE from movie where director = ? AND title = ? AND year = ?\");\n sql.setString(1, movie.getDirector());\n sql.setString(2, movie.getTitle());\n sql.setInt(3, movie.getYear());\n sql.execute();\n } finally {\n conn.close();\n }\n }\n \n public List<Movie> getMovies() throws Exception {\n ArrayList<Movie> movies = new ArrayList<Movie>();\n Connection conn = movieDatabase.getConnection();\n try {\n PreparedStatement sql = conn.prepareStatement(\"SELECT director, title, year from movie\");\n ResultSet set = sql.executeQuery();\n while (set.next()) {\n Movie movie = new Movie();\n movie.setDirector(set.getString(\"director\"));\n movie.setTitle(set.getString(\"title\"));\n movie.setYear(set.getInt(\"year\"));\n movies.add(movie);\n }\n } finally {\n conn.close();\n }\n return movies;\n }\n }\n\n## MoviesTest\n\n package org.superbiz.injection;\n \n import junit.framework.TestCase;\n \n import javax.ejb.embeddable.EJBContainer;\n import javax.naming.Context;\n import java.util.List;\n import java.util.Properties;\n \n //START SNIPPET: code\n public class MoviesTest extends TestCase {\n \n public void test() throws Exception {\n \n Properties p = new Properties();\n p.put(\"movieDatabase\", \"new://Resource?type=DataSource\");\n p.put(\"movieDatabase.JdbcDriver\", \"org.hsqldb.jdbcDriver\");\n p.put(\"movieDatabase.JdbcUrl\", \"jdbc:hsqldb:mem:moviedb\");\n \n Context context = EJBContainer.createEJBContainer(p).getContext();\n \n Movies movies = (Movies) context.lookup(\"java:global/injection-of-datasource/Movies\");\n \n movies.addMovie(new Movie(\"Quentin Tarantino\", \"Reservoir Dogs\", 1992));\n movies.addMovie(new Movie(\"Joel Coen\", \"Fargo\", 1996));\n movies.addMovie(new Movie(\"Joel Coen\", \"The Big Lebowski\", 1998));\n \n List<Movie> list = movies.getMovies();\n assertEquals(\"List.size()\", 3, list.size());\n \n for (Movie movie : list) {\n movies.deleteMovie(movie);\n }\n \n assertEquals(\"Movies.getMovies()\", 0, movies.getMovies().size());\n }\n }\n\n# Running\n\n \n -------------------------------------------------------\n T E S T S\n -------------------------------------------------------\n Running org.superbiz.injection.MoviesTest\n Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06\n http://tomee.apache.org/\n INFO - openejb.home = /Users/dblevins/examples/injection-of-datasource\n INFO - openejb.base = /Users/dblevins/examples/injection-of-datasource\n INFO - Using 'javax.ejb.embeddable.EJBContainer=true'\n INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)\n INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)\n INFO - Configuring Service(id=movieDatabase, type=Resource, provider-id=Default JDBC Database)\n INFO - Found EjbModule in classpath: /Users/dblevins/examples/injection-of-datasource/target/classes\n INFO - Beginning load: /Users/dblevins/examples/injection-of-datasource/target/classes\n INFO - Configuring enterprise application: /Users/dblevins/examples/injection-of-datasource\n WARN - Method 'lookup' is not available for 'javax.annotation.Resource'. Probably using an older Runtime.\n INFO - Configuring Service(id=Default Stateful Container, type=Container, provider-id=Default Stateful Container)\n INFO - Auto-creating a container for bean Movies: Container(type=STATEFUL, id=Default Stateful Container)\n INFO - Auto-linking resource-ref 'java:comp/env/org.superbiz.injection.Movies/movieDatabase' in bean Movies to Resource(id=movieDatabase)\n INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)\n INFO - Auto-creating a container for bean org.superbiz.injection.MoviesTest: Container(type=MANAGED, id=Default Managed Container)\n INFO - Enterprise application \"/Users/dblevins/examples/injection-of-datasource\" loaded.\n INFO - Assembling app: /Users/dblevins/examples/injection-of-datasource\n INFO - Jndi(name=\"java:global/injection-of-datasource/Movies!org.superbiz.injection.Movies\")\n INFO - Jndi(name=\"java:global/injection-of-datasource/Movies\")\n INFO - Jndi(name=\"java:global/EjbModule1508028338/org.superbiz.injection.MoviesTest!org.superbiz.injection.MoviesTest\")\n INFO - Jndi(name=\"java:global/EjbModule1508028338/org.superbiz.injection.MoviesTest\")\n INFO - Created Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container)\n INFO - Created Ejb(deployment-id=org.superbiz.injection.MoviesTest, ejb-name=org.superbiz.injection.MoviesTest, container=Default Managed Container)\n INFO - Started Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container)\n INFO - Started Ejb(deployment-id=org.superbiz.injection.MoviesTest, ejb-name=org.superbiz.injection.MoviesTest, container=Default Managed Container)\n INFO - Deployed Application(path=/Users/dblevins/examples/injection-of-datasource)\n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.276 sec\n \n Results :\n \n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0\n \n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/injection-of-datasource" | |
}, | |
{ | |
"name":"injection-of-ejbs", | |
"readme":"Title: Injection Of Ejbs\n\nThis example shows how to use the @EJB annotation on a bean class to refer to other beans.\n\nThis functionality is often referred as dependency injection (see\nhttp://www.martinfowler.com/articles/injection.html), and has been recently introduced in\nJava EE 5.\n\nIn this particular example, we will create two session stateless beans\n\n * a DataStore session bean\n * a DataReader session bean\n\nThe DataReader bean uses the DataStore to retrieve some informations, and\nwe will see how we can, inside the DataReader bean, get a reference to the\nDataStore bean using the @EJB annotation, thus avoiding the use of the\nJNDI API.\n\n## DataReader\n\n package org.superbiz.injection;\n \n import javax.ejb.EJB;\n import javax.ejb.Stateless;\n \n /**\n * This is an EJB 3.1 style pojo stateless session bean\n * Every stateless session bean implementation must be annotated\n * using the annotation @Stateless\n * This EJB has 2 business interfaces: DataReaderRemote, a remote business\n * interface, and DataReaderLocal, a local business interface\n * <p/>\n * The instance variables 'dataStoreRemote' is annotated with the @EJB annotation:\n * this means that the application server, at runtime, will inject in this instance\n * variable a reference to the EJB DataStoreRemote\n * <p/>\n * The instance variables 'dataStoreLocal' is annotated with the @EJB annotation:\n * this means that the application server, at runtime, will inject in this instance\n * variable a reference to the EJB DataStoreLocal\n */\n //START SNIPPET: code\n @Stateless\n public class DataReader {\n \n @EJB\n private DataStoreRemote dataStoreRemote;\n @EJB\n private DataStoreLocal dataStoreLocal;\n @EJB\n private DataStore dataStore;\n \n public String readDataFromLocalStore() {\n return \"LOCAL:\" + dataStoreLocal.getData();\n }\n \n public String readDataFromLocalBeanStore() {\n return \"LOCALBEAN:\" + dataStore.getData();\n }\n \n public String readDataFromRemoteStore() {\n return \"REMOTE:\" + dataStoreRemote.getData();\n }\n }\n\n## DataStore\n\n package org.superbiz.injection;\n \n import javax.ejb.LocalBean;\n import javax.ejb.Stateless;\n \n /**\n * This is an EJB 3 style pojo stateless session bean\n * Every stateless session bean implementation must be annotated\n * using the annotation @Stateless\n * This EJB has 2 business interfaces: DataStoreRemote, a remote business\n * interface, and DataStoreLocal, a local business interface\n */\n //START SNIPPET: code\n @Stateless\n @LocalBean\n public class DataStore implements DataStoreLocal, DataStoreRemote {\n \n public String getData() {\n return \"42\";\n }\n }\n\n## DataStoreLocal\n\n package org.superbiz.injection;\n \n import javax.ejb.Local;\n \n /**\n * This is an EJB 3 local business interface\n * A local business interface may be annotated with the @Local\n * annotation, but it's optional. A business interface which is\n * not annotated with @Local or @Remote is assumed to be Local\n */\n //START SNIPPET: code\n @Local\n public interface DataStoreLocal {\n \n public String getData();\n }\n\n## DataStoreRemote\n\n package org.superbiz.injection;\n \n import javax.ejb.Remote;\n \n /**\n * This is an EJB 3 remote business interface\n * A remote business interface must be annotated with the @Remote\n * annotation\n */\n //START SNIPPET: code\n @Remote\n public interface DataStoreRemote {\n \n public String getData();\n }\n\n## EjbDependencyTest\n\n package org.superbiz.injection;\n \n import junit.framework.TestCase;\n \n import javax.ejb.embeddable.EJBContainer;\n import javax.naming.Context;\n \n /**\n * A test case for DataReaderImpl ejb, testing both the remote and local interface\n */\n //START SNIPPET: code\n public class EjbDependencyTest extends TestCase {\n \n public void test() throws Exception {\n final Context context = EJBContainer.createEJBContainer().getContext();\n \n DataReader dataReader = (DataReader) context.lookup(\"java:global/injection-of-ejbs/DataReader\");\n \n assertNotNull(dataReader);\n \n assertEquals(\"LOCAL:42\", dataReader.readDataFromLocalStore());\n assertEquals(\"REMOTE:42\", dataReader.readDataFromRemoteStore());\n assertEquals(\"LOCALBEAN:42\", dataReader.readDataFromLocalBeanStore());\n }\n }\n\n# Running\n\n \n -------------------------------------------------------\n T E S T S\n -------------------------------------------------------\n Running org.superbiz.injection.EjbDependencyTest\n Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06\n http://tomee.apache.org/\n INFO - openejb.home = /Users/dblevins/examples/injection-of-ejbs\n INFO - openejb.base = /Users/dblevins/examples/injection-of-ejbs\n INFO - Using 'javax.ejb.embeddable.EJBContainer=true'\n INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)\n INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)\n INFO - Found EjbModule in classpath: /Users/dblevins/examples/injection-of-ejbs/target/classes\n INFO - Beginning load: /Users/dblevins/examples/injection-of-ejbs/target/classes\n INFO - Configuring enterprise application: /Users/dblevins/examples/injection-of-ejbs\n INFO - Configuring Service(id=Default Stateless Container, type=Container, provider-id=Default Stateless Container)\n INFO - Auto-creating a container for bean DataReader: Container(type=STATELESS, id=Default Stateless Container)\n INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)\n INFO - Auto-creating a container for bean org.superbiz.injection.EjbDependencyTest: Container(type=MANAGED, id=Default Managed Container)\n INFO - Enterprise application \"/Users/dblevins/examples/injection-of-ejbs\" loaded.\n INFO - Assembling app: /Users/dblevins/examples/injection-of-ejbs\n INFO - Jndi(name=\"java:global/injection-of-ejbs/DataReader!org.superbiz.injection.DataReader\")\n INFO - Jndi(name=\"java:global/injection-of-ejbs/DataReader\")\n INFO - Jndi(name=\"java:global/injection-of-ejbs/DataStore!org.superbiz.injection.DataStore\")\n INFO - Jndi(name=\"java:global/injection-of-ejbs/DataStore!org.superbiz.injection.DataStoreLocal\")\n INFO - Jndi(name=\"java:global/injection-of-ejbs/DataStore!org.superbiz.injection.DataStoreRemote\")\n INFO - Jndi(name=\"java:global/injection-of-ejbs/DataStore\")\n INFO - Jndi(name=\"java:global/EjbModule355598874/org.superbiz.injection.EjbDependencyTest!org.superbiz.injection.EjbDependencyTest\")\n INFO - Jndi(name=\"java:global/EjbModule355598874/org.superbiz.injection.EjbDependencyTest\")\n INFO - Created Ejb(deployment-id=DataReader, ejb-name=DataReader, container=Default Stateless Container)\n INFO - Created Ejb(deployment-id=DataStore, ejb-name=DataStore, container=Default Stateless Container)\n INFO - Created Ejb(deployment-id=org.superbiz.injection.EjbDependencyTest, ejb-name=org.superbiz.injection.EjbDependencyTest, container=Default Managed Container)\n INFO - Started Ejb(deployment-id=DataReader, ejb-name=DataReader, container=Default Stateless Container)\n INFO - Started Ejb(deployment-id=DataStore, ejb-name=DataStore, container=Default Stateless Container)\n INFO - Started Ejb(deployment-id=org.superbiz.injection.EjbDependencyTest, ejb-name=org.superbiz.injection.EjbDependencyTest, container=Default Managed Container)\n INFO - Deployed Application(path=/Users/dblevins/examples/injection-of-ejbs)\n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.225 sec\n \n Results :\n \n Tests run: 1, Failures: 0, Errors: 0, Skipped: 0\n \n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/injection-of-ejbs" | |
}, | |
{ | |
"name":"lookup-of-ejbs", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/lookup-of-ejbs" | |
}, | |
{ | |
"name":"lookup-of-ejbs-with-descriptor", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/lookup-of-ejbs-with-descriptor" | |
} | |
], | |
"on":[ | |
{ | |
"name":"rest-on-ejb", | |
"readme":"Title: REST on EJB\n\n*Help us document this example! Click the blue pencil icon in the upper right to edit this page.*\n\n## User\n\n package org.superbiz.rest;\n \n import javax.persistence.Entity;\n import javax.persistence.GeneratedValue;\n import javax.persistence.Id;\n import javax.persistence.NamedQueries;\n import javax.persistence.NamedQuery;\n import javax.xml.bind.annotation.XmlRootElement;\n \n @Entity\n @NamedQueries({\n @NamedQuery(name = \"user.list\", query = \"select u from User u\")\n }\n\n## UserService\n\n package org.superbiz.rest;\n \n import javax.ejb.Lock;\n import javax.ejb.LockType;\n import javax.ejb.Singleton;\n import javax.persistence.EntityManager;\n import javax.persistence.PersistenceContext;\n import javax.ws.rs.DELETE;\n import javax.ws.rs.DefaultValue;\n import javax.ws.rs.GET;\n import javax.ws.rs.POST;\n import javax.ws.rs.PUT;\n import javax.ws.rs.Path;\n import javax.ws.rs.PathParam;\n import javax.ws.rs.Produces;\n import javax.ws.rs.QueryParam;\n import javax.ws.rs.core.MediaType;\n import javax.ws.rs.core.Response;\n import java.util.ArrayList;\n import java.util.List;\n \n /**\n * Outputs are copied because of the enhancement of OpenJPA.\n *\n */\n @Singleton\n @Lock(LockType.WRITE)\n @Path(\"/user\")\n @Produces(MediaType.APPLICATION_XML)\n public class UserService {\n @PersistenceContext\n private EntityManager em;\n \n @Path(\"/create\")\n @PUT\n public User create(@QueryParam(\"name\") String name,\n @QueryParam(\"pwd\") String pwd,\n @QueryParam(\"mail\") String mail) {\n User user = new User();\n user.setFullname(name);\n user.setPassword(pwd);\n user.setEmail(mail);\n em.persist(user);\n return user;\n }\n \n @Path(\"/list\")\n @GET\n public List<User> list(@QueryParam(\"first\") @DefaultValue(\"0\") int first,\n @QueryParam(\"max\") @DefaultValue(\"20\") int max) {\n List<User> users = new ArrayList<User>();\n List<User> found = em.createNamedQuery(\"user.list\", User.class).setFirstResult(first).setMaxResults(max).getResultList();\n for (User u : found) {\n users.add(u.copy());\n }\n return users;\n }\n \n @Path(\"/show/{id}\")\n @GET\n public User find(@PathParam(\"id\") long id) {\n User user = em.find(User.class, id);\n if (user == null) {\n return null;\n }\n return user.copy();\n }\n \n @Path(\"/delete/{id}\")\n @DELETE\n public void delete(@PathParam(\"id\") long id) {\n User user = em.find(User.class, id);\n if (user != null) {\n em.remove(user);\n }\n }\n \n @Path(\"/update/{id}\")\n @POST\n public Response update(@PathParam(\"id\") long id,\n @QueryParam(\"name\") String name,\n @QueryParam(\"pwd\") String pwd,\n @QueryParam(\"mail\") String mail) {\n User user = em.find(User.class, id);\n if (user == null) {\n throw new IllegalArgumentException(\"user id \" + id + \" not found\");\n }\n \n user.setFullname(name);\n user.setPassword(pwd);\n user.setEmail(mail);\n em.merge(user);\n \n return Response.ok(user.copy()).build();\n }\n }\n\n## persistence.xml\n\n <persistence version=\"2.0\"\n xmlns=\"http://java.sun.com/xml/ns/persistence\"\n xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n xsi:schemaLocation=\"http://java.sun.com/xml/ns/persistence\n http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd\">\n <persistence-unit name=\"user\">\n <jta-data-source>My DataSource</jta-data-source>\n <non-jta-data-source>My Unmanaged DataSource</non-jta-data-source>\n <class>org.superbiz.rest.User</class>\n <properties>\n <property name=\"openjpa.jdbc.SynchronizeMappings\" value=\"buildSchema(ForeignKeys=true)\"/>\n </properties>\n </persistence-unit>\n </persistence>\n\n## UserServiceTest\n\n package org.superbiz.rest;\n \n import org.apache.cxf.jaxrs.client.WebClient;\n import org.apache.openejb.OpenEjbContainer;\n import org.junit.AfterClass;\n import org.junit.BeforeClass;\n import org.junit.Test;\n \n import javax.ejb.embeddable.EJBContainer;\n import javax.naming.Context;\n import javax.naming.NamingException;\n import javax.ws.rs.core.Response;\n import javax.xml.bind.JAXBContext;\n import javax.xml.bind.Unmarshaller;\n import java.io.InputStream;\n import java.util.ArrayList;\n import java.util.List;\n import java.util.Properties;\n \n import static junit.framework.Assert.assertEquals;\n import static junit.framework.Assert.assertNull;\n import static junit.framework.Assert.fail;\n \n public class UserServiceTest {\n private static Context context;\n private static UserService service;\n private static List<User> users = new ArrayList<User>();\n \n @BeforeClass\n public static void start() throws NamingException {\n Properties properties = new Properties();\n properties.setProperty(OpenEjbContainer.OPENEJB_EMBEDDED_REMOTABLE, \"true\");\n context = EJBContainer.createEJBContainer(properties).getContext();\n \n // create some records\n service = (UserService) context.lookup(\"java:global/rest-on-ejb/UserService\");\n users.add(service.create(\"foo\", \"foopwd\", \"foo@foo.com\"));\n users.add(service.create(\"bar\", \"barpwd\", \"bar@bar.com\"));\n }\n \n @AfterClass\n public static void close() throws NamingException {\n if (context != null) {\n context.close();\n }\n }\n \n @Test\n public void create() {\n int expected = service.list(0, 100).size() + 1;\n Response response = WebClient.create(\"http://localhost:4204\")\n .path(\"/user/create\")\n .query(\"name\", \"dummy\")\n .query(\"pwd\", \"unbreakable\")\n .query(\"mail\", \"foo@bar.fr\")\n .put(null);\n List<User> list = service.list(0, 100);\n for (User u : list) {\n if (!users.contains(u)) {\n service.delete(u.getId());\n return;\n }\n }\n fail(\"user was not added\");\n }\n \n @Test\n public void delete() throws Exception {\n User user = service.create(\"todelete\", \"dontforget\", \"delete@me.com\");\n \n WebClient.create(\"http://localhost:4204\").path(\"/user/delete/\" + user.getId()).delete();\n \n user = service.find(user.getId());\n assertNull(user);\n }\n \n @Test\n public void show() {\n User user = WebClient.create(\"http://localhost:4204\")\n .path(\"/user/show/\" + users.iterator().next().getId())\n .get(User.class);\n assertEquals(\"foo\", user.getFullname());\n assertEquals(\"foopwd\", user.getPassword());\n assertEquals(\"foo@foo.com\", user.getEmail());\n }\n \n @Test\n public void list() throws Exception {\n String users = WebClient.create(\"http://localhost:4204\")\n .path(\"/user/list\")\n .get(String.class);\n assertEquals(\n \"<users>\" +\n \"<user>\" +\n \"<email>foo@foo.com</email>\" +\n \"<fullname>foo</fullname>\" +\n \"<id>1</id>\" +\n \"<password>foopwd</password>\" +\n \"</user>\" +\n \"<user>\" +\n \"<email>bar@bar.com</email>\" +\n \"<fullname>bar</fullname>\" +\n \"<id>2</id>\" +\n \"<password>barpwd</password>\" +\n \"</user>\" +\n \"</users>\", users);\n }\n \n @Test\n public void update() throws Exception {\n User created = service.create(\"name\", \"pwd\", \"mail\");\n Response response = WebClient.create(\"http://localhost:4204\")\n .path(\"/user/update/\" + created.getId())\n .query(\"name\", \"corrected\")\n .query(\"pwd\", \"userpwd\")\n .query(\"mail\", \"it@is.ok\")\n .post(null);\n \n JAXBContext ctx = JAXBContext.newInstance(User.class);\n Unmarshaller unmarshaller = ctx.createUnmarshaller();\n User modified = (User) unmarshaller.unmarshal(InputStream.class.cast(response.getEntity()));\n \n assertEquals(\"corrected\", modified.getFullname());\n assertEquals(\"userpwd\", modified.getPassword());\n assertEquals(\"it@is.ok\", modified.getEmail());\n }\n }\n\n# Running\n\n \n -------------------------------------------------------\n T E S T S\n -------------------------------------------------------\n Running org.superbiz.rest.UserServiceTest\n Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06\n http://tomee.apache.org/\n INFO - openejb.home = /Users/dblevins/examples/rest-on-ejb\n INFO - openejb.base = /Users/dblevins/examples/rest-on-ejb\n INFO - Using 'javax.ejb.embeddable.EJBContainer=true'\n INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service)\n INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager)\n INFO - Found EjbModule in classpath: /Users/dblevins/examples/rest-on-ejb/target/classes\n INFO - Beginning load: /Users/dblevins/examples/rest-on-ejb/target/classes\n INFO - Configuring enterprise application: /Users/dblevins/examples/rest-on-ejb\n INFO - Configuring Service(id=Default Singleton Container, type=Container, provider-id=Default Singleton Container)\n INFO - Auto-creating a container for bean UserService: Container(type=SINGLETON, id=Default Singleton Container)\n INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container)\n INFO - Auto-creating a container for bean org.superbiz.rest.UserServiceTest: Container(type=MANAGED, id=Default Managed Container)\n INFO - Configuring PersistenceUnit(name=user)\n INFO - Configuring Service(id=Default JDBC Database, type=Resource, provider-id=Default JDBC Database)\n INFO - Auto-creating a Resource with id 'Default JDBC Database' of type 'DataSource for 'user'.\n INFO - Configuring Service(id=Default Unmanaged JDBC Database, type=Resource, provider-id=Default Unmanaged JDBC Database)\n INFO - Auto-creating a Resource with id 'Default Unmanaged JDBC Database' of type 'DataSource for 'user'.\n INFO - Adjusting PersistenceUnit user <jta-data-source> to Resource ID 'Default JDBC Database' from 'My DataSource'\n INFO - Adjusting PersistenceUnit user <non-jta-data-source> to Resource ID 'Default Unmanaged JDBC Database' from 'My Unmanaged DataSource'\n INFO - Enterprise application \"/Users/dblevins/examples/rest-on-ejb\" loaded.\n INFO - Assembling app: /Users/dblevins/examples/rest-on-ejb\n INFO - PersistenceUnit(name=user, provider=org.apache.openjpa.persistence.PersistenceProviderImpl) - provider time 407ms\n INFO - Jndi(name=\"java:global/rest-on-ejb/UserService!org.superbiz.rest.UserService\")\n INFO - Jndi(name=\"java:global/rest-on-ejb/UserService\")\n INFO - Jndi(name=\"java:global/EjbModule1789767313/org.superbiz.rest.UserServiceTest!org.superbiz.rest.UserServiceTest\")\n INFO - Jndi(name=\"java:global/EjbModule1789767313/org.superbiz.rest.UserServiceTest\")\n INFO - Created Ejb(deployment-id=org.superbiz.rest.UserServiceTest, ejb-name=org.superbiz.rest.UserServiceTest, container=Default Managed Container)\n INFO - Created Ejb(deployment-id=UserService, ejb-name=UserService, container=Default Singleton Container)\n INFO - Started Ejb(deployment-id=org.superbiz.rest.UserServiceTest, ejb-name=org.superbiz.rest.UserServiceTest, container=Default Managed Container)\n INFO - Started Ejb(deployment-id=UserService, ejb-name=UserService, container=Default Singleton Container)\n INFO - Deployed Application(path=/Users/dblevins/examples/rest-on-ejb)\n INFO - Initializing network services\n INFO - Creating ServerService(id=httpejbd)\n INFO - Creating ServerService(id=admin)\n INFO - Creating ServerService(id=ejbd)\n INFO - Creating ServerService(id=ejbds)\n INFO - Creating ServerService(id=cxf-rs)\n INFO - Initializing network services\n ** Starting Services **\n NAME IP PORT \n httpejbd 127.0.0.1 4204 \n admin thread 127.0.0.1 4200 \n ejbd 127.0.0.1 4201 \n ejbd 127.0.0.1 4203 \n -------\n Ready!\n WARN - Query \"select u from User u\" is removed from cache excluded permanently. Query \"select u from User u\" is not cached because it uses pagination..\n Tests run: 5, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 3.102 sec\n \n Results :\n \n Tests run: 5, Failures: 0, Errors: 0, Skipped: 0\n \n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/rest-on-ejb" | |
} | |
], | |
"parent":[ | |
{ | |
"name":"polling-parent", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/polling-parent" | |
} | |
], | |
"password":[ | |
{ | |
"name":"datasource-ciphered-password", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/datasource-ciphered-password" | |
} | |
], | |
"persistence":[ | |
{ | |
"name":"reload-persistence-unit-properties", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/reload-persistence-unit-properties" | |
}, | |
{ | |
"name":"persistence-fragment", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/persistence-fragment" | |
} | |
], | |
"pojo":[ | |
{ | |
"name":"pojo-webservice", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/pojo-webservice" | |
} | |
], | |
"polling":[ | |
{ | |
"name":"polling-parent", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/polling-parent" | |
} | |
], | |
"postconstruct":[ | |
{ | |
"name":"async-postconstruct", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/async-postconstruct" | |
} | |
], | |
"produces":[ | |
{ | |
"name":"cdi-produces-disposes", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/cdi-produces-disposes" | |
}, | |
{ | |
"name":"cdi-produces-field", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/cdi-produces-field" | |
} | |
], | |
"projectstage":[ | |
{ | |
"name":"projectstage-demo", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/projectstage-demo" | |
} | |
], | |
"properties":[ | |
{ | |
"name":"reload-persistence-unit-properties", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/reload-persistence-unit-properties" | |
} | |
], | |
"provider":[ | |
{ | |
"name":"multi-jpa-provider-testing", | |
"readme":"No README.md yet, be the first to contribute one!", | |
"url":"https://github.com/apache/tomee/tree/master/examples/multi-jpa-provider-testing" | |
} | |
], | |
"proxy":[ | |
{ | |
"name":"spring-data-proxy", | |
"readme":"# Spring Data sample #\n\nThis example uses OpenEJB hooks to replace an EJB implementation by a proxy\nto uses Spring Data in your preferred container.\n\nIt is pretty simple: simply provide to OpenEJB an InvocationHandler using delegating to spring data\nand that's it!\n\nIt is what is done in org.superbiz.dynamic.SpringDataProxy.\n\nIt contains a little trick: even if it is not annotated \"implementingInterfaceClass\" attribute\nis injected by OpenEJB to get the interface.\n\nThen we simply create the Spring Data repository and delegate to it.\n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/spring-data-proxy" | |
}, | |
{ | |
"name":"spring-data-proxy-meta", | |
"readme":"# Spring Data With Meta sample #\n\nThis example simply simplifies the usage of spring-data sample\nproviding a meta annotation @SpringRepository to do all the dynamic procy EJB job.\n\nIt replaces @Proxy and @Stateless annotations.\n\nIsn't it more comfortable?\n\nTo do it we defined a meta annotation \"Metatype\" and used it.\n\nThe proxy implementation is the same than for spring-data sample.\n", | |
"url":"https://github.com/apache/tomee/tree/master/examples/spring-data-proxy-meta" | |
}, | |
{ | |
"name":"dynamic-proxy-to-access-mbean", | |
"readme":"Title: dynamic-proxy-to-access-mbean\n\n*Help us document this example! Click the blue pencil icon in the upper right to edit this page.*\n\n## Example\n\nAcessing MBean is something simple through the JMX API but it is often technical and not very interesting.\n\nThis example simplify this work simply doing it generically in a proxy.\n\nSo from an user side you simple declare an interface to access your MBeans.\n\nNote: the example implementation uses a local MBeanServer but enhancing the example API\nit is easy to imagine a remote connection with user/password if needed.\n\n## ObjectName API (annotation)\n\nSimply an annotation to get the object\n\n package org.superbiz.dynamic.mbean;\n\n import java.lang.annotation.Retention;\n import java.lang.annotation.Target;\n\n import static java.lang.annotation.ElementType.TYPE;\n import static java.lang.annotation.ElementType.METHOD;\n import static java.lang.annotation.RetentionPolicy.RUNTIME;\n\n @Target({TYPE, METHOD})\n @Retention(RUNTIME)\n public @interface ObjectName {\n String value();\n\n // for remote usage only\n String url() default \"\";\n String user() default \"\";\n String password() default \"\";\n }\n\n## DynamicMBeanHandler (thr proxy implementation)\n\n package org.superbiz.dynamic.mbean;\n\n import javax.annotation.PreDestroy;\n import javax.management.Attribute;\n import javax.management.MBeanAttributeInfo;\n import javax.management.MBeanInfo;\n import javax.management.MBeanServer;\n import javax.management.MBeanServerConnection;\n import javax.management.ObjectName;\n import javax.management.remote.JMXConnector;\n import javax.management.remote.JMXConnectorFactory;\n import javax.management.remote.JMXServiceURL;\n import java.io.IOException;\n import java.lang.management.ManagementFactory;\n import java.lang.reflect.InvocationHandler;\n import java.lang.reflect.Method;\n import java.util.HashMap;\n import java.util.Map;\n import java.util.concurrent.ConcurrentHashMap;\n\n /**\n * Need a @PreDestroy method to disconnect the remote host when used in remote mode.\n */\n public class DynamicMBeanHandler implements InvocationHandler {\n private final Map<Method, ConnectionInfo> infos = new ConcurrentHashMap<Method, ConnectionInfo>();\n\n @Override public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {\n final String methodName = method.getName();\n if (method.getDeclaringClass().equals(Object.class) && \"toString\".equals(methodName)) {\n return getClass().getSimpleName() + \" Proxy\";\n }\n if (method.getAnnotation(PreDestroy.class) != null) {\n return destroy();\n }\n\n final ConnectionInfo info = getConnectionInfo(method);\n final MBeanInfo infos = info.getMBeanInfo();\n if (methodName.startsWith(\"set\") && methodName.length() > 3 && args != null && args.length == 1\n && (Void.TYPE.equals(method.getReturnType()) || Void.class.equals(method.getReturnType()))) {\n final String attributeName = attributeName(infos, methodName, method.getParameterTypes()[0]);\n info.setAttribute(new Attribute(attributeName, args[0]));\n return null;\n } else if (methodName.startsWith(\"get\") && (args == null || args.length == 0) && methodName.length() > 3) {\n final String attributeName = attributeName(infos, methodName, method.getReturnType());\n return info.getAttribute(attributeName);\n }\n // operation\n return info.invoke(methodName, args, getSignature(method));\n }\n\n public Object destroy() {\n for (ConnectionInfo info : infos.values()) {\n info.clean();\n }\n infos.clear();\n return null;\n }\n\n private String[] getSignature(Method method) {\n String[] args = new String[method.getParameterTypes().length];\n for (int i = 0; i < method.getParameterTypes().length; i++) {\n args[i] = method.getParameterTypes()[i].getName();\n }\n return args; // note: null should often work...\n }\n\n private String attributeName(MBeanInfo infos, String methodName, Class<?> type) {\n String found = null;\n String foundBackUp = null; // without checking the type\n final String attributeName = methodName.substring(3, methodName.length());\n final String lowerName = Character.toLowerCase(methodName.charAt(3)) + methodName.substring(4, methodName.length());\n\n for (MBeanAttributeInfo attribute : infos.getAttributes()) {\n final String name = attribute.getName();\n if (attributeName.equals(name)) {\n foundBackUp = attributeName;\n if (attribute.getType().equals(type.getName())) {\n found = name;\n }\n } else if (found == null && ((lowerName.equals(name) && !attributeName.equals(name))\n || lowerName.equalsIgnoreCase(name))) {\n foundBackUp = name;\n if (attribute.getType().equals(type.getName())) {\n found = name;\n }\n }\n }\n\n if (found == null && foundBackUp == null) {\n throw new UnsupportedOperationException(\"cannot find attribute \" + attributeName);\n }\n\n if (found != null) {\n return found;\n }\n return foundBackUp;\n }\n\n private synchronized ConnectionInfo getConnectionInfo(Method method) throws Exception {\n if (!infos.containsKey(method)) {\n synchronized (infos) {\n if (!infos.containsKey(method)) { // double check for synchro\n org.superbiz.dynamic.mbean.ObjectName on = method.getAnnotation(org.superbiz.dynamic.mbean.ObjectName.class);\n if (on == null) {\n Class<?> current = method.getDeclaringClass();\n do {\n on = method.getDeclaringClass().getAnnotation(org.superbiz.dynamic.mbean.ObjectName.class);\n current = current.getSuperclass();\n } while (on == null && current != null);\n if (on == null) {\n throw new UnsupportedOperationException(\"class or method should define the objectName to use for invocation: \" + method.toGenericString());\n }\n }\n final ConnectionInfo info;\n if (on.url().isEmpty()) {\n info = new LocalConnectionInfo();\n ((LocalConnectionInfo) info).server = ManagementFactory.getPlatformMBeanServer(); // could use an id...\n } else {\n info = new RemoteConnectionInfo();\n final Map<String, String[]> environment = new HashMap<String, String[]>();\n if (!on.user().isEmpty()) {\n environment.put(JMXConnector.CREDENTIALS, new String[]{ on.user(), on.password() });\n }\n // ((RemoteConnectionInfo) info).connector = JMXConnectorFactory.newJMXConnector(new JMXServiceURL(on.url()), environment);\n ((RemoteConnectionInfo) info).connector = JMXConnectorFactory.connect(new JMXServiceURL(on.url()), environment);\n\n }\n info.objectName = new ObjectName(on.value());\n\n infos.put(method, info);\n }\n }\n }\n return infos.get(method);\n }\n\n private abstract static class ConnectionInfo {\n protected ObjectName objectName;\n\n public abstract void setAttribute(Attribute attribute) throws Exception;\n public abstract Object getAttribute(String attribute) throws Exception;\n public abstract Object invoke(String operationName, Object params[], String signature[]) throws Exception;\n public abstract MBeanInfo getMBeanInfo() throws Exception;\n public abstract void clean();\n }\n\n private static class LocalConnectionInfo extends ConnectionInfo {\n private MBeanServer server;\n\n @Override public void setAttribute(Attribute attribute) throws Exception {\n server.setAttribute(objectName, attribute);\n }\n\n @Override public Object getAttribute(String attribute) throws Exception {\n return server.getAttribute(objectName, attribute);\n }\n\n @Override\n public Object invoke(String operationName, Object[] params, String[] signature) throws Exception {\n return server.invoke(objectName, operationName, params, signature);\n }\n\n @Override public MBeanInfo getMBeanInfo() throws Exception {\n return server.getMBeanInfo(objectName);\n }\n\n @Override public void clean() {\n // no-op\n }\n }\n\n private static class RemoteConnectionInfo extends ConnectionInfo {\n private JMXConnector connector;\n private MBeanServerConnection connection;\n\n private void before() throws IOException {\n connection = connector.getMBeanServerConnection();\n }\n\n private void after() throws IOException {\n // no-op\n }\n\n @Override public void setAttribute(Attribute attribute) throws Exception {\n before();\n connection.setAttribute(objectName, attribute);\n after();\n }\n\n @Override public Object getAttribute(String attribute) throws Exception {\n before();\n try {\n return connection.getAttribute(objectName, attribute);\n } finally {\n after();\n }\n }\n\n @Override\n public Object invoke(String operationName, Object[] params, String[] signature) throws Exception {\n before();\n try {\n return connection.invoke(objectName, operationName, params, signature);\n } finally {\n after();\n }\n }\n\n @Override public MBeanInfo getMBeanInfo() throws Exception {\n before();\n try {\n return connection.getMBeanInfo(objectName);\n } finally {\n after();\n }\n }\n\n @Override public void clean() {\n try {\n connector.close();\n } catch (IOException e) {\n // no-op\n }\n }\n }\n }\n\n## Dynamic Proxies \n\n### DynamicMBeanClient (the dynamic JMX client)\n\n\tpackage org.superbiz.dynamic.mbean;\n\n\timport org.apache.openejb.api.Proxy;\n\timport org.superbiz.dynamic.mbean.DynamicMBeanHandler;\n\timport org.superbiz.dynamic.mbean.ObjectName;\n\n\timport javax.ejb.Singleton;\n\n\t/**\n\t * @author rmannibucau\n\t */\n\t@Singleton\n\t@Proxy(DynamicMBeanHandler.class)\n\t@ObjectName(DynamicMBeanClient.OBJECT_NAME)\n\tpublic interface DynamicMBeanClient {\n\t\tstatic final String OBJECT_NAME = \"test:group=DynamicMBeanClientTest\";\n\n\t\tint getCounter();\n\t\tvoid setCounter(int i);\n\t\tint length(String aString);\n\t}\n\n### DynamicMBeanClient (the dynamic JMX client)\n package org.superbiz.dynamic.mbean;\n\n import org.apache.openejb.api.Proxy;\n\n import javax.annotation.PreDestroy;\n import javax.ejb.Singleton;\n\n\n @Singleton\n @Proxy(DynamicMBeanHandler.class)\n @ObjectName(value = DynamicRemoteMBeanClient.OBJECT_NAME, url = \"service:jmx:rmi:///jndi/rmi://localhost:8243/jmxrmi\")\n public interface DynamicRemoteMBeanClient {\n static final String OBJECT_NAME = \"test:group=DynamicMBeanClientTest\";\n\n int getCounter();\n void setCounter(int i);\n int length(String aString);\n\n @PreDestroy void clean();\n }\n\n## The MBean used for the test\n\n### SimpleMBean\n\n\tpackage org.superbiz.dynamic.mbean.simple;\n\n\tpublic interface SimpleMBean {\n\t\tint length(String s);\n\n\t\tint getCounter();\n\t\tvoid setCounter(int c);\n\t}\n\n## Simple\n\n\tpackage org.superbiz.dynamic.mbean.simple;\n\n\tpublic class Simple implements SimpleMBean {\n\t\tprivate int counter = 0;\n\n\t\t@Override public int length(String s) {\n\t\t if (s == null) {\n\t\t return 0;\n\t\t }\n\t\t return s.length();\n\t\t}\n\n\t\t@Override public int getCounter() {\n\t\t return counter;\n\t\t}\n\n\t\t@Override public void setCounter(int c) {\n\t\t counter = c;\n\t\t}\n\t}\n\n## DynamicMBeanClientTest (The test)\n\n package org.superbiz.dynamic.mbean;\n\n import org.junit.After;\n import org.junit.AfterClass;\n import org.junit.Before;\n import org.junit.BeforeClass;\n import org.junit.Test;\n import org.superbiz.dynamic.mbean.simple.Simple;\n\n import javax.ejb.EJB;\n import javax.ejb.embeddable.EJBContainer;\n import javax.management.Attribute;\n import javax.management.ObjectName;\n import java.lang.management.ManagementFactory;\n\n import static junit.framework.Assert.assertEquals;\n\n public class DynamicMBeanClientTest {\n private static ObjectName objectName;\n private static EJBContainer container;\n\n @EJB private DynamicMBeanClient localClient;\n @EJB private DynamicRemoteMBeanClient remoteClient;\n\n @BeforeClass public static void start() {\n container = EJBContainer.createEJBContainer();\n }\n\n @Before public void injectAndRegisterMBean() throws Exception {\n container.getContext().bind(\"inject\", this);\n objectName = new ObjectName(DynamicMBeanClient.OBJECT_NAME);\n ManagementFactory.getPlatformMBeanServer().registerMBean(new Simple(), objectName);\n }\n\n @After public void unregisterMBean() throws Exception {\n if (objectName != null) {\n ManagementFactory.getPlatformMBeanServer().unregisterMBean(objectName);\n }\n }\n\n @Test public void localGet() throws Exception {\n assertEquals(0, localClien |