http://git-wip-us.apache.org/repos/asf/tomee-site-generator/blob/972cc356/src/main/jbake/content/examples/testing-security-2.adoc ---------------------------------------------------------------------- diff --git a/src/main/jbake/content/examples/testing-security-2.adoc b/src/main/jbake/content/examples/testing-security-2.adoc new file mode 100755 index 0000000..c8a2491 --- /dev/null +++ b/src/main/jbake/content/examples/testing-security-2.adoc @@ -0,0 +1,306 @@ += Testing Security 2 +:jbake-date: 2016-09-06 +:jbake-type: page +:jbake-tomeepdf: +:jbake-status: published + +Example testing-security-2 can be browsed at https://github.com/apache/tomee/tree/master/examples/testing-security-2 + + +*Help us document this example! Click the blue pencil icon in the upper right to edit this page.* + +== Movie + + +[source,java] +---- +package org.superbiz.injection.secure; + +import javax.persistence.Entity; + +@Entity +public class Movie { + + private String director; + private String title; + private int year; + + public Movie() { + } + + public Movie(String director, String title, int year) { + this.director = director; + this.title = title; + this.year = year; + } + + public String getDirector() { + return director; + } + + public void setDirector(String director) { + this.director = director; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public int getYear() { + return year; + } + + public void setYear(int year) { + this.year = year; + } + +} +---- + + +== Movies + + +[source,java] +---- +package org.superbiz.injection.secure; + +//START SNIPPET: code + +import javax.annotation.security.PermitAll; +import javax.annotation.security.RolesAllowed; +import javax.ejb.Stateful; +import javax.ejb.TransactionAttribute; +import javax.ejb.TransactionAttributeType; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import javax.persistence.PersistenceContextType; +import javax.persistence.Query; +import java.util.List; + +@Stateful +public class Movies { + + @PersistenceContext(unitName = "movie-unit", type = PersistenceContextType.EXTENDED) + private EntityManager entityManager; + + @RolesAllowed({"Employee", "Manager"}) + public void addMovie(Movie movie) throws Exception { + entityManager.persist(movie); + } + + @RolesAllowed({"Manager"}) + public void deleteMovie(Movie movie) throws Exception { + entityManager.remove(movie); + } + + @PermitAll + @TransactionAttribute(TransactionAttributeType.SUPPORTS) + public List<Movie> getMovies() throws Exception { + Query query = entityManager.createQuery("SELECT m from Movie as m"); + return query.getResultList(); + } +} +---- + + +== persistence.xml + + +[source,xml] +---- +<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0"> + + <persistence-unit name="movie-unit"> + <jta-data-source>movieDatabase</jta-data-source> + <non-jta-data-source>movieDatabaseUnmanaged</non-jta-data-source> + <class>org.superbiz.injection.secure.Movie</class> + + <properties> + <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/> + </properties> + </persistence-unit> +</persistence> +---- + + +== MovieTest + + +[source,java] +---- +package org.superbiz.injection.secure; + +import junit.framework.TestCase; + +import javax.ejb.EJB; +import javax.ejb.EJBAccessException; +import javax.ejb.embeddable.EJBContainer; +import javax.naming.Context; +import javax.naming.InitialContext; +import java.util.List; +import java.util.Properties; + +//START SNIPPET: code +public class MovieTest extends TestCase { + + @EJB + private Movies movies; + + protected void setUp() throws Exception { + + // Uncomment this line to set the login/logout functionality on Debug + //System.setProperty("log4j.category.OpenEJB.security", "debug"); + + Properties p = new Properties(); + p.put("movieDatabase", "new://Resource?type=DataSource"); + p.put("movieDatabase.JdbcDriver", "org.hsqldb.jdbcDriver"); + p.put("movieDatabase.JdbcUrl", "jdbc:hsqldb:mem:moviedb"); + + EJBContainer.createEJBContainer(p).getContext().bind("inject", this); + } + + public void testAsManager() throws Exception { + Properties p = new Properties(); + p.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.core.LocalInitialContextFactory"); + p.put(Context.SECURITY_PRINCIPAL, "jane"); + p.put(Context.SECURITY_CREDENTIALS, "waterfall"); + + InitialContext context = new InitialContext(p); + + try { + movies.addMovie(new Movie("Quentin Tarantino", "Reservoir Dogs", 1992)); + movies.addMovie(new Movie("Joel Coen", "Fargo", 1996)); + movies.addMovie(new Movie("Joel Coen", "The Big Lebowski", 1998)); + + List<Movie> list = movies.getMovies(); + assertEquals("List.size()", 3, list.size()); + + for (Movie movie : list) { + movies.deleteMovie(movie); + } + + assertEquals("Movies.getMovies()", 0, movies.getMovies().size()); + } finally { + context.close(); + } + } + + public void testAsEmployee() throws Exception { + Properties p = new Properties(); + p.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.core.LocalInitialContextFactory"); + p.put(Context.SECURITY_PRINCIPAL, "joe"); + p.put(Context.SECURITY_CREDENTIALS, "cool"); + + InitialContext context = new InitialContext(p); + + try { + movies.addMovie(new Movie("Quentin Tarantino", "Reservoir Dogs", 1992)); + movies.addMovie(new Movie("Joel Coen", "Fargo", 1996)); + movies.addMovie(new Movie("Joel Coen", "The Big Lebowski", 1998)); + + List<Movie> list = movies.getMovies(); + assertEquals("List.size()", 3, list.size()); + + for (Movie movie : list) { + try { + movies.deleteMovie(movie); + fail("Employees should not be allowed to delete"); + } catch (EJBAccessException e) { + // Good, Employees cannot delete things + } + } + + // The list should still be three movies long + assertEquals("Movies.getMovies()", 3, movies.getMovies().size()); + } finally { + context.close(); + } + } + + public void testUnauthenticated() throws Exception { + try { + movies.addMovie(new Movie("Quentin Tarantino", "Reservoir Dogs", 1992)); + fail("Unauthenticated users should not be able to add movies"); + } catch (EJBAccessException e) { + // Good, guests cannot add things + } + + try { + movies.deleteMovie(null); + fail("Unauthenticated users should not be allowed to delete"); + } catch (EJBAccessException e) { + // Good, Unauthenticated users cannot delete things + } + + try { + // Read access should be allowed + + List<Movie> list = movies.getMovies(); + } catch (EJBAccessException e) { + fail("Read access should be allowed"); + } + } +} +---- + + += Running + + + +[source] +---- +------------------------------------------------------- + T E S T S +------------------------------------------------------- +Running org.superbiz.injection.secure.MovieTest +Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06 +http://tomee.apache.org/ +INFO - openejb.home = /Users/dblevins/examples/testing-security-2 +INFO - openejb.base = /Users/dblevins/examples/testing-security-2 +INFO - Using 'javax.ejb.embeddable.EJBContainer=true' +INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service) +INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager) +INFO - Configuring Service(id=movieDatabase, type=Resource, provider-id=Default JDBC Database) +INFO - Found EjbModule in classpath: /Users/dblevins/examples/testing-security-2/target/classes +INFO - Beginning load: /Users/dblevins/examples/testing-security-2/target/classes +INFO - Configuring enterprise application: /Users/dblevins/examples/testing-security-2 +INFO - Configuring Service(id=Default Stateful Container, type=Container, provider-id=Default Stateful Container) +INFO - Auto-creating a container for bean Movies: Container(type=STATEFUL, id=Default Stateful Container) +INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container) +INFO - Auto-creating a container for bean org.superbiz.injection.secure.MovieTest: Container(type=MANAGED, id=Default Managed Container) +INFO - Configuring PersistenceUnit(name=movie-unit) +INFO - Auto-creating a Resource with id 'movieDatabaseNonJta' of type 'DataSource for 'movie-unit'. +INFO - Configuring Service(id=movieDatabaseNonJta, type=Resource, provider-id=movieDatabase) +INFO - Adjusting PersistenceUnit movie-unit <non-jta-data-source> to Resource ID 'movieDatabaseNonJta' from 'movieDatabaseUnmanaged' +INFO - Enterprise application "/Users/dblevins/examples/testing-security-2" loaded. +INFO - Assembling app: /Users/dblevins/examples/testing-security-2 +INFO - PersistenceUnit(name=movie-unit, provider=org.apache.openjpa.persistence.PersistenceProviderImpl) - provider time 413ms +INFO - Jndi(name="java:global/testing-security-2/Movies!org.superbiz.injection.secure.Movies") +INFO - Jndi(name="java:global/testing-security-2/Movies") +INFO - Jndi(name="java:global/EjbModule1634151355/org.superbiz.injection.secure.MovieTest!org.superbiz.injection.secure.MovieTest") +INFO - Jndi(name="java:global/EjbModule1634151355/org.superbiz.injection.secure.MovieTest") +INFO - Created Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container) +INFO - Created Ejb(deployment-id=org.superbiz.injection.secure.MovieTest, ejb-name=org.superbiz.injection.secure.MovieTest, container=Default Managed Container) +INFO - Started Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container) +INFO - Started Ejb(deployment-id=org.superbiz.injection.secure.MovieTest, ejb-name=org.superbiz.injection.secure.MovieTest, container=Default Managed Container) +INFO - Deployed Application(path=/Users/dblevins/examples/testing-security-2) +INFO - Logging in +INFO - Logging out +INFO - EJBContainer already initialized. Call ejbContainer.close() to allow reinitialization +INFO - Logging in +INFO - Logging out +INFO - EJBContainer already initialized. Call ejbContainer.close() to allow reinitialization +Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.546 sec + +Results : + +Tests run: 3, Failures: 0, Errors: 0, Skipped: 0 +---- + +
http://git-wip-us.apache.org/repos/asf/tomee-site-generator/blob/972cc356/src/main/jbake/content/examples/testing-security-3.adoc ---------------------------------------------------------------------- diff --git a/src/main/jbake/content/examples/testing-security-3.adoc b/src/main/jbake/content/examples/testing-security-3.adoc new file mode 100755 index 0000000..7a1fdbe --- /dev/null +++ b/src/main/jbake/content/examples/testing-security-3.adoc @@ -0,0 +1,381 @@ += Testing Security 3 +:jbake-date: 2016-09-06 +:jbake-type: page +:jbake-tomeepdf: +:jbake-status: published + +Example testing-security-3 can be browsed at https://github.com/apache/tomee/tree/master/examples/testing-security-3 + + +*Help us document this example! Click the blue pencil icon in the upper right to edit this page.* + +== Movie + + +[source,java] +---- +package org.superbiz.injection.secure; + +import javax.persistence.Entity; + +@Entity +public class Movie { + + private String director; + private String title; + private int year; + + public Movie() { + } + + public Movie(String director, String title, int year) { + this.director = director; + this.title = title; + this.year = year; + } + + public String getDirector() { + return director; + } + + public void setDirector(String director) { + this.director = director; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public int getYear() { + return year; + } + + public void setYear(int year) { + this.year = year; + } + +} +---- + + +== Movies + + +[source,java] +---- +package org.superbiz.injection.secure; + +//START SNIPPET: code + +import javax.annotation.security.PermitAll; +import javax.annotation.security.RolesAllowed; +import javax.ejb.Stateful; +import javax.ejb.TransactionAttribute; +import javax.ejb.TransactionAttributeType; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import javax.persistence.PersistenceContextType; +import javax.persistence.Query; +import java.util.List; + +@Stateful +public class Movies { + + @PersistenceContext(unitName = "movie-unit", type = PersistenceContextType.EXTENDED) + private EntityManager entityManager; + + @RolesAllowed({"Employee", "Manager"}) + public void addMovie(Movie movie) throws Exception { + entityManager.persist(movie); + } + + @RolesAllowed({"Manager"}) + public void deleteMovie(Movie movie) throws Exception { + entityManager.remove(movie); + } + + @PermitAll + @TransactionAttribute(TransactionAttributeType.SUPPORTS) + public List<Movie> getMovies() throws Exception { + Query query = entityManager.createQuery("SELECT m from Movie as m"); + return query.getResultList(); + } +} +---- + + +== MyLoginProvider + + +[source,java] +---- +package org.superbiz.injection.secure; + +import org.apache.openejb.core.security.jaas.LoginProvider; + +import javax.security.auth.login.FailedLoginException; +import java.util.Arrays; +import java.util.List; + +public class MyLoginProvider implements LoginProvider { + + + @Override + public List<String> authenticate(String user, String password) throws FailedLoginException { + if ("paul".equals(user) && "michelle".equals(password)) { + return Arrays.asList("Manager", "rockstar", "beatle"); + } + + if ("eddie".equals(user) && "jump".equals(password)) { + return Arrays.asList("Employee", "rockstar", "vanhalen"); + } + + throw new FailedLoginException("Bad user or password!"); + } +} +---- + + +== org.apache.openejb.core.security.jaas.LoginProvider + + org.superbiz.injection.secure.MyLoginProvider + +== persistence.xml + + +[source,xml] +---- +<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0"> + + <persistence-unit name="movie-unit"> + <jta-data-source>movieDatabase</jta-data-source> + <non-jta-data-source>movieDatabaseUnmanaged</non-jta-data-source> + <class>org.superbiz.injection.secure.Movie</class> + + <properties> + <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/> + </properties> + </persistence-unit> +</persistence> +---- + + +== MovieTest + + +[source,java] +---- +package org.superbiz.injection.secure; + +import junit.framework.TestCase; + +import javax.ejb.EJB; +import javax.ejb.EJBAccessException; +import javax.ejb.embeddable.EJBContainer; +import javax.naming.Context; +import javax.naming.InitialContext; +import javax.naming.NamingException; +import java.util.List; +import java.util.Properties; + +public class MovieTest extends TestCase { + + @EJB + private Movies movies; + + private Context getContext(String user, String pass) throws NamingException { + Properties p = new Properties(); + p.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.core.LocalInitialContextFactory"); + p.setProperty("openejb.authentication.realmName", "ServiceProviderLogin"); + p.put(Context.SECURITY_PRINCIPAL, user); + p.put(Context.SECURITY_CREDENTIALS, pass); + + return new InitialContext(p); + } + + protected void setUp() throws Exception { + Properties p = new Properties(); + p.put("movieDatabase", "new://Resource?type=DataSource"); + p.put("movieDatabase.JdbcDriver", "org.hsqldb.jdbcDriver"); + p.put("movieDatabase.JdbcUrl", "jdbc:hsqldb:mem:moviedb"); + + EJBContainer.createEJBContainer(p).getContext().bind("inject", this); + } + + public void testAsManager() throws Exception { + final Context context = getContext("paul", "michelle"); + + try { + movies.addMovie(new Movie("Quentin Tarantino", "Reservoir Dogs", 1992)); + movies.addMovie(new Movie("Joel Coen", "Fargo", 1996)); + movies.addMovie(new Movie("Joel Coen", "The Big Lebowski", 1998)); + + List<Movie> list = movies.getMovies(); + assertEquals("List.size()", 3, list.size()); + + for (Movie movie : list) { + movies.deleteMovie(movie); + } + + assertEquals("Movies.getMovies()", 0, movies.getMovies().size()); + } finally { + context.close(); + } + } + + public void testAsEmployee() throws Exception { + final Context context = getContext("eddie", "jump"); + + try { + movies.addMovie(new Movie("Quentin Tarantino", "Reservoir Dogs", 1992)); + movies.addMovie(new Movie("Joel Coen", "Fargo", 1996)); + movies.addMovie(new Movie("Joel Coen", "The Big Lebowski", 1998)); + + List<Movie> list = movies.getMovies(); + assertEquals("List.size()", 3, list.size()); + + for (Movie movie : list) { + try { + movies.deleteMovie(movie); + fail("Employees should not be allowed to delete"); + } catch (EJBAccessException e) { + // Good, Employees cannot delete things + } + } + + // The list should still be three movies long + assertEquals("Movies.getMovies()", 3, movies.getMovies().size()); + } finally { + context.close(); + } + } + + public void testUnauthenticated() throws Exception { + try { + movies.addMovie(new Movie("Quentin Tarantino", "Reservoir Dogs", 1992)); + fail("Unauthenticated users should not be able to add movies"); + } catch (EJBAccessException e) { + // Good, guests cannot add things + } + + try { + movies.deleteMovie(null); + fail("Unauthenticated users should not be allowed to delete"); + } catch (EJBAccessException e) { + // Good, Unauthenticated users cannot delete things + } + + try { + // Read access should be allowed + + List<Movie> list = movies.getMovies(); + + } catch (EJBAccessException e) { + fail("Read access should be allowed"); + } + + } + + public void testLoginFailure() throws NamingException { + try { + getContext("eddie", "panama"); + fail("supposed to have a login failure here"); + } catch (javax.naming.AuthenticationException e) { + //expected + } + + try { + getContext("jimmy", "foxylady"); + fail("supposed to have a login failure here"); + } catch (javax.naming.AuthenticationException e) { + //expected + } + } +} +---- + + += Running + + + +[source] +---- +------------------------------------------------------- + T E S T S +------------------------------------------------------- +Running org.superbiz.injection.secure.MovieTest +INFO - ******************************************************************************** +INFO - OpenEJB http://tomee.apache.org/ +INFO - Startup: Fri Jul 20 08:42:53 EDT 2012 +INFO - Copyright 1999-2012 (C) Apache OpenEJB Project, All Rights Reserved. +INFO - Version: 4.1.0 +INFO - Build date: 20120720 +INFO - Build time: 08:33 +INFO - ******************************************************************************** +INFO - openejb.home = /home/boto/dev/ws/openejb_trunk/openejb/examples/testing-security-3 +INFO - openejb.base = /home/boto/dev/ws/openejb_trunk/openejb/examples/testing-security-3 +INFO - Created new singletonService org.apache.openejb.cdi.ThreadSingletonServiceImpl@38ee6681 +INFO - Succeeded in installing singleton service +INFO - Using 'javax.ejb.embeddable.EJBContainer=true' +INFO - Cannot find the configuration file [conf/openejb.xml]. Will attempt to create one for the beans deployed. +INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service) +INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager) +INFO - Configuring Service(id=movieDatabase, type=Resource, provider-id=Default JDBC Database) +INFO - Creating TransactionManager(id=Default Transaction Manager) +INFO - Creating SecurityService(id=Default Security Service) +INFO - Creating Resource(id=movieDatabase) +INFO - Beginning load: /home/boto/dev/ws/openejb_trunk/openejb/examples/testing-security-3/target/classes +INFO - Configuring enterprise application: /home/boto/dev/ws/openejb_trunk/openejb/examples/testing-security-3 +INFO - Auto-deploying ejb Movies: EjbDeployment(deployment-id=Movies) +INFO - Configuring Service(id=Default Stateful Container, type=Container, provider-id=Default Stateful Container) +INFO - Auto-creating a container for bean Movies: Container(type=STATEFUL, id=Default Stateful Container) +INFO - Creating Container(id=Default Stateful Container) +INFO - Using directory /tmp for stateful session passivation +INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container) +INFO - Auto-creating a container for bean org.superbiz.injection.secure.MovieTest: Container(type=MANAGED, id=Default Managed Container) +INFO - Creating Container(id=Default Managed Container) +INFO - Using directory /tmp for stateful session passivation +INFO - Configuring PersistenceUnit(name=movie-unit) +INFO - Auto-creating a Resource with id 'movieDatabaseNonJta' of type 'DataSource for 'movie-unit'. +INFO - Configuring Service(id=movieDatabaseNonJta, type=Resource, provider-id=movieDatabase) +INFO - Creating Resource(id=movieDatabaseNonJta) +INFO - Adjusting PersistenceUnit movie-unit <non-jta-data-source> to Resource ID 'movieDatabaseNonJta' from 'movieDatabaseUnmanaged' +INFO - Enterprise application "/home/boto/dev/ws/openejb_trunk/openejb/examples/testing-security-3" loaded. +INFO - Assembling app: /home/boto/dev/ws/openejb_trunk/openejb/examples/testing-security-3 +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 +INFO - PersistenceUnit(name=movie-unit, provider=org.apache.openjpa.persistence.PersistenceProviderImpl) - provider time 268ms +INFO - Jndi(name="java:global/testing-security-3/Movies!org.superbiz.injection.secure.Movies") +INFO - Jndi(name="java:global/testing-security-3/Movies") +INFO - Existing thread singleton service in SystemInstance() org.apache.openejb.cdi.ThreadSingletonServiceImpl@38ee6681 +INFO - OpenWebBeans Container is starting... +INFO - Adding OpenWebBeansPlugin : [CdiPlugin] +INFO - All injection points are validated successfully. +INFO - OpenWebBeans Container has started, it took 170 ms. +INFO - Created Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container) +INFO - Started Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container) +INFO - Deployed Application(path=/home/boto/dev/ws/openejb_trunk/openejb/examples/testing-security-3) +20-Jul-2012 8:42:55 AM null openjpa.Runtime +INFO: Starting OpenJPA 2.2.0 +20-Jul-2012 8:42:56 AM null openjpa.jdbc.JDBC +INFO: Using dictionary class "org.apache.openjpa.jdbc.sql.HSQLDictionary" (HSQL Database Engine 2.2.8 ,HSQL Database Engine Driver 2.2.8). +20-Jul-2012 8:42:57 AM null openjpa.Enhance +INFO: Creating subclass and redefining methods for "[class org.superbiz.injection.secure.Movie]". This means that your application will be less efficient than it would if you ran the OpenJPA enhancer. +INFO - Logging in +INFO - Logging out +INFO - EJBContainer already initialized. Call ejbContainer.close() to allow reinitialization +INFO - Logging in +INFO - Logging out +INFO - EJBContainer already initialized. Call ejbContainer.close() to allow reinitialization +Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 6.069 sec + +Results : + +Tests run: 3, Failures: 0, Errors: 0, Skipped: 0 +---- + + http://git-wip-us.apache.org/repos/asf/tomee-site-generator/blob/972cc356/src/main/jbake/content/examples/testing-security-4.adoc ---------------------------------------------------------------------- diff --git a/src/main/jbake/content/examples/testing-security-4.adoc b/src/main/jbake/content/examples/testing-security-4.adoc new file mode 100755 index 0000000..69af878 --- /dev/null +++ b/src/main/jbake/content/examples/testing-security-4.adoc @@ -0,0 +1,9 @@ += testing-security-4 +:jbake-date: 2016-09-06 +:jbake-type: page +:jbake-tomeepdf: +:jbake-status: published + +Example testing-security-4 can be browsed at https://github.com/apache/tomee/tree/master/examples/testing-security-4 + +No README.md yet, be the first to contribute one! http://git-wip-us.apache.org/repos/asf/tomee-site-generator/blob/972cc356/src/main/jbake/content/examples/testing-security-meta.adoc ---------------------------------------------------------------------- diff --git a/src/main/jbake/content/examples/testing-security-meta.adoc b/src/main/jbake/content/examples/testing-security-meta.adoc new file mode 100755 index 0000000..5f234d6 --- /dev/null +++ b/src/main/jbake/content/examples/testing-security-meta.adoc @@ -0,0 +1,517 @@ += Testing Security Meta +:jbake-date: 2016-09-06 +:jbake-type: page +:jbake-tomeepdf: +:jbake-status: published + +Example testing-security-meta can be browsed at https://github.com/apache/tomee/tree/master/examples/testing-security-meta + + +*Help us document this example! Click the blue pencil icon in the upper right to edit this page.* + +== AddPermission + + +[source,java] +---- +package org.superbiz.injection.secure.api; + +import javax.annotation.security.RolesAllowed; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + + +@Metatype +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) + +public @interface AddPermission { + public static interface $ { + + @AddPermission + @RolesAllowed({"Employee", "Manager"}) + public void method(); + } +} +---- + + +== DeletePermission + + +[source,java] +---- +package org.superbiz.injection.secure.api; + +import javax.annotation.security.RolesAllowed; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + + +@Metatype +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) + +public @interface DeletePermission { + public static interface $ { + + @DeletePermission + @RolesAllowed("Manager") + public void method(); + } +} +---- + + +== Metatype + + +[source,java] +---- +package org.superbiz.injection.secure.api; + +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + +@Metatype +@Target(ElementType.ANNOTATION_TYPE) +@Retention(RetentionPolicy.RUNTIME) +public @interface Metatype { +} +---- + + +== MovieUnit + + +[source,java] +---- +package org.superbiz.injection.secure.api; + +import javax.persistence.PersistenceContext; +import javax.persistence.PersistenceContextType; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + + +@Metatype +@Target({ElementType.METHOD, ElementType.FIELD}) +@Retention(RetentionPolicy.RUNTIME) + +@PersistenceContext(name = "movie-unit", unitName = "movie-unit", type = PersistenceContextType.EXTENDED) +public @interface MovieUnit { +} +---- + + +== ReadPermission + + +[source,java] +---- +package org.superbiz.injection.secure.api; + +import javax.annotation.security.PermitAll; +import javax.ejb.TransactionAttribute; +import javax.ejb.TransactionAttributeType; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + + +@Metatype +@Target(ElementType.METHOD) +@Retention(RetentionPolicy.RUNTIME) + +public @interface ReadPermission { + public static interface $ { + + @ReadPermission + @PermitAll + @TransactionAttribute(TransactionAttributeType.SUPPORTS) + public void method(); + } +} +---- + + +== RunAsEmployee + + +[source,java] +---- +package org.superbiz.injection.secure.api; + +import javax.annotation.security.RunAs; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + + +@Metatype +@Target({ElementType.TYPE, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) + +@RunAs("Employee") +public @interface RunAsEmployee { +} +---- + + +== RunAsManager + + +[source,java] +---- +package org.superbiz.injection.secure.api; + +import javax.annotation.security.RunAs; +import java.lang.annotation.ElementType; +import java.lang.annotation.Retention; +import java.lang.annotation.RetentionPolicy; +import java.lang.annotation.Target; + + +@Metatype +@Target({ElementType.TYPE, ElementType.METHOD}) +@Retention(RetentionPolicy.RUNTIME) + +@RunAs("Manager") +public @interface RunAsManager { +} +---- + + +== Movie + + +[source,java] +---- +package org.superbiz.injection.secure; + +import javax.persistence.Entity; + +@Entity +public class Movie { + + private String director; + private String title; + private int year; + + public Movie() { + } + + public Movie(String director, String title, int year) { + this.director = director; + this.title = title; + this.year = year; + } + + public String getDirector() { + return director; + } + + public void setDirector(String director) { + this.director = director; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public int getYear() { + return year; + } + + public void setYear(int year) { + this.year = year; + } + +} +---- + + +== Movies + + +[source,java] +---- +package org.superbiz.injection.secure; + +//START SNIPPET: code + +import org.superbiz.injection.secure.api.AddPermission; +import org.superbiz.injection.secure.api.DeletePermission; +import org.superbiz.injection.secure.api.MovieUnit; +import org.superbiz.injection.secure.api.ReadPermission; + +import javax.ejb.Stateful; +import javax.persistence.EntityManager; +import javax.persistence.Query; +import java.util.List; + +@Stateful +public class Movies { + + @MovieUnit + private EntityManager entityManager; + + @AddPermission + public void addMovie(Movie movie) throws Exception { + entityManager.persist(movie); + } + + @DeletePermission + public void deleteMovie(Movie movie) throws Exception { + entityManager.remove(movie); + } + + @ReadPermission + public List<Movie> getMovies() throws Exception { + Query query = entityManager.createQuery("SELECT m from Movie as m"); + return query.getResultList(); + } +} +---- + + +== persistence.xml + + +[source,xml] +---- +<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0"> + + <persistence-unit name="movie-unit"> + <jta-data-source>movieDatabase</jta-data-source> + <non-jta-data-source>movieDatabaseUnmanaged</non-jta-data-source> + <class>org.superbiz.injection.secure.Movie</class> + + <properties> + <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/> + </properties> + </persistence-unit> +</persistence> +---- + + +== MovieTest + + +[source,java] +---- +package org.superbiz.injection.secure; + +import junit.framework.TestCase; +import org.superbiz.injection.secure.api.RunAsEmployee; +import org.superbiz.injection.secure.api.RunAsManager; + +import javax.ejb.EJB; +import javax.ejb.EJBAccessException; +import javax.ejb.Stateless; +import javax.ejb.embeddable.EJBContainer; +import java.util.List; +import java.util.Properties; +import java.util.concurrent.Callable; + +//START SNIPPET: code + +public class MovieTest extends TestCase { + + @EJB + private Movies movies; + + @EJB(beanName = "ManagerBean") + private Caller manager; + + @EJB(beanName = "EmployeeBean") + private Caller employee; + + protected void setUp() throws Exception { + Properties p = new Properties(); + p.put("movieDatabase", "new://Resource?type=DataSource"); + p.put("movieDatabase.JdbcDriver", "org.hsqldb.jdbcDriver"); + p.put("movieDatabase.JdbcUrl", "jdbc:hsqldb:mem:moviedb"); + + EJBContainer.createEJBContainer(p).getContext().bind("inject", this); + } + + public void testAsManager() throws Exception { + manager.call(new Callable() { + public Object call() throws Exception { + + movies.addMovie(new Movie("Quentin Tarantino", "Reservoir Dogs", 1992)); + movies.addMovie(new Movie("Joel Coen", "Fargo", 1996)); + movies.addMovie(new Movie("Joel Coen", "The Big Lebowski", 1998)); + + List<Movie> list = movies.getMovies(); + assertEquals("List.size()", 3, list.size()); + + for (Movie movie : list) { + movies.deleteMovie(movie); + } + + assertEquals("Movies.getMovies()", 0, movies.getMovies().size()); + return null; + } + }); + } + + public void testAsEmployee() throws Exception { + employee.call(new Callable() { + public Object call() throws Exception { + + movies.addMovie(new Movie("Quentin Tarantino", "Reservoir Dogs", 1992)); + movies.addMovie(new Movie("Joel Coen", "Fargo", 1996)); + movies.addMovie(new Movie("Joel Coen", "The Big Lebowski", 1998)); + + List<Movie> list = movies.getMovies(); + assertEquals("List.size()", 3, list.size()); + + for (Movie movie : list) { + try { + movies.deleteMovie(movie); + fail("Employees should not be allowed to delete"); + } catch (EJBAccessException e) { + // Good, Employees cannot delete things + } + } + + // The list should still be three movies long + assertEquals("Movies.getMovies()", 3, movies.getMovies().size()); + return null; + } + }); + } + + public void testUnauthenticated() throws Exception { + try { + movies.addMovie(new Movie("Quentin Tarantino", "Reservoir Dogs", 1992)); + fail("Unauthenticated users should not be able to add movies"); + } catch (EJBAccessException e) { + // Good, guests cannot add things + } + + try { + movies.deleteMovie(null); + fail("Unauthenticated users should not be allowed to delete"); + } catch (EJBAccessException e) { + // Good, Unauthenticated users cannot delete things + } + + try { + // Read access should be allowed + + List<Movie> list = movies.getMovies(); + } catch (EJBAccessException e) { + fail("Read access should be allowed"); + } + } + + public interface Caller { + public <V> V call(Callable<V> callable) throws Exception; + } + + /** + * This little bit of magic allows our test code to execute in + * the desired security scope. + */ + + @Stateless + @RunAsManager + public static class ManagerBean implements Caller { + + public <V> V call(Callable<V> callable) throws Exception { + return callable.call(); + } + } + + @Stateless + @RunAsEmployee + public static class EmployeeBean implements Caller { + + public <V> V call(Callable<V> callable) throws Exception { + return callable.call(); + } + } +} +---- + + += Running + + + +[source] +---- +------------------------------------------------------- + T E S T S +------------------------------------------------------- +Running org.superbiz.injection.secure.MovieTest +Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06 +http://tomee.apache.org/ +INFO - openejb.home = /Users/dblevins/examples/testing-security-meta +INFO - openejb.base = /Users/dblevins/examples/testing-security-meta +INFO - Using 'javax.ejb.embeddable.EJBContainer=true' +INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service) +INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager) +INFO - Configuring Service(id=movieDatabase, type=Resource, provider-id=Default JDBC Database) +INFO - Found EjbModule in classpath: /Users/dblevins/examples/testing-security-meta/target/classes +INFO - Found EjbModule in classpath: /Users/dblevins/examples/testing-security-meta/target/test-classes +INFO - Beginning load: /Users/dblevins/examples/testing-security-meta/target/classes +INFO - Beginning load: /Users/dblevins/examples/testing-security-meta/target/test-classes +INFO - Configuring enterprise application: /Users/dblevins/examples/testing-security-meta +INFO - Configuring Service(id=Default Stateful Container, type=Container, provider-id=Default Stateful Container) +INFO - Auto-creating a container for bean Movies: Container(type=STATEFUL, id=Default Stateful Container) +INFO - Configuring Service(id=Default Stateless Container, type=Container, provider-id=Default Stateless Container) +INFO - Auto-creating a container for bean ManagerBean: Container(type=STATELESS, id=Default Stateless Container) +INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container) +INFO - Auto-creating a container for bean org.superbiz.injection.secure.MovieTest: Container(type=MANAGED, id=Default Managed Container) +INFO - Configuring PersistenceUnit(name=movie-unit) +INFO - Auto-creating a Resource with id 'movieDatabaseNonJta' of type 'DataSource for 'movie-unit'. +INFO - Configuring Service(id=movieDatabaseNonJta, type=Resource, provider-id=movieDatabase) +INFO - Adjusting PersistenceUnit movie-unit <non-jta-data-source> to Resource ID 'movieDatabaseNonJta' from 'movieDatabaseUnmanaged' +INFO - Enterprise application "/Users/dblevins/examples/testing-security-meta" loaded. +INFO - Assembling app: /Users/dblevins/examples/testing-security-meta +INFO - PersistenceUnit(name=movie-unit, provider=org.apache.openjpa.persistence.PersistenceProviderImpl) - provider time 419ms +INFO - Jndi(name="java:global/testing-security-meta/Movies!org.superbiz.injection.secure.Movies") +INFO - Jndi(name="java:global/testing-security-meta/Movies") +INFO - Jndi(name="java:global/testing-security-meta/ManagerBean!org.superbiz.injection.secure.MovieTest$Caller") +INFO - Jndi(name="java:global/testing-security-meta/ManagerBean") +INFO - Jndi(name="java:global/testing-security-meta/EmployeeBean!org.superbiz.injection.secure.MovieTest$Caller") +INFO - Jndi(name="java:global/testing-security-meta/EmployeeBean") +INFO - Jndi(name="java:global/EjbModule53489605/org.superbiz.injection.secure.MovieTest!org.superbiz.injection.secure.MovieTest") +INFO - Jndi(name="java:global/EjbModule53489605/org.superbiz.injection.secure.MovieTest") +INFO - Created Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container) +INFO - Created Ejb(deployment-id=ManagerBean, ejb-name=ManagerBean, container=Default Stateless Container) +INFO - Created Ejb(deployment-id=EmployeeBean, ejb-name=EmployeeBean, container=Default Stateless Container) +INFO - Created Ejb(deployment-id=org.superbiz.injection.secure.MovieTest, ejb-name=org.superbiz.injection.secure.MovieTest, container=Default Managed Container) +INFO - Started Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container) +INFO - Started Ejb(deployment-id=ManagerBean, ejb-name=ManagerBean, container=Default Stateless Container) +INFO - Started Ejb(deployment-id=EmployeeBean, ejb-name=EmployeeBean, container=Default Stateless Container) +INFO - Started Ejb(deployment-id=org.superbiz.injection.secure.MovieTest, ejb-name=org.superbiz.injection.secure.MovieTest, container=Default Managed Container) +INFO - Deployed Application(path=/Users/dblevins/examples/testing-security-meta) +INFO - EJBContainer already initialized. Call ejbContainer.close() to allow reinitialization +INFO - EJBContainer already initialized. Call ejbContainer.close() to allow reinitialization +Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.754 sec + +Results : + +Tests run: 3, Failures: 0, Errors: 0, Skipped: 0 +---- + + http://git-wip-us.apache.org/repos/asf/tomee-site-generator/blob/972cc356/src/main/jbake/content/examples/testing-security.adoc ---------------------------------------------------------------------- diff --git a/src/main/jbake/content/examples/testing-security.adoc b/src/main/jbake/content/examples/testing-security.adoc new file mode 100755 index 0000000..657ea8b --- /dev/null +++ b/src/main/jbake/content/examples/testing-security.adoc @@ -0,0 +1,336 @@ += Testing Security +:jbake-date: 2016-09-06 +:jbake-type: page +:jbake-tomeepdf: +:jbake-status: published + +Example testing-security can be browsed at https://github.com/apache/tomee/tree/master/examples/testing-security + + +*Help us document this example! Click the blue pencil icon in the upper right to edit this page.* + +== Movie + + +[source,java] +---- +package org.superbiz.injection.secure; + +import javax.persistence.Entity; + +@Entity +public class Movie { + + private String director; + private String title; + private int year; + + public Movie() { + } + + public Movie(String director, String title, int year) { + this.director = director; + this.title = title; + this.year = year; + } + + public String getDirector() { + return director; + } + + public void setDirector(String director) { + this.director = director; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public int getYear() { + return year; + } + + public void setYear(int year) { + this.year = year; + } + +} +---- + + +== Movies + + +[source,java] +---- +package org.superbiz.injection.secure; + +//START SNIPPET: code + +import javax.annotation.security.PermitAll; +import javax.annotation.security.RolesAllowed; +import javax.ejb.Stateful; +import javax.ejb.TransactionAttribute; +import javax.ejb.TransactionAttributeType; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import javax.persistence.PersistenceContextType; +import javax.persistence.Query; +import java.util.List; + +@Stateful +public class Movies { + + @PersistenceContext(unitName = "movie-unit", type = PersistenceContextType.EXTENDED) + private EntityManager entityManager; + + @RolesAllowed({"Employee", "Manager"}) + public void addMovie(Movie movie) throws Exception { + entityManager.persist(movie); + } + + @RolesAllowed({"Manager"}) + public void deleteMovie(Movie movie) throws Exception { + entityManager.remove(movie); + } + + @PermitAll + @TransactionAttribute(TransactionAttributeType.SUPPORTS) + public List<Movie> getMovies() throws Exception { + Query query = entityManager.createQuery("SELECT m from Movie as m"); + return query.getResultList(); + } +} +---- + + +== persistence.xml + + +[source,xml] +---- +<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0"> + + <persistence-unit name="movie-unit"> + <jta-data-source>movieDatabase</jta-data-source> + <non-jta-data-source>movieDatabaseUnmanaged</non-jta-data-source> + <class>org.superbiz.injection.secure.Movie</class> + + <properties> + <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/> + </properties> + </persistence-unit> +</persistence> +---- + + +== MovieTest + + +[source,java] +---- +package org.superbiz.injection.secure; + +import junit.framework.TestCase; + +import javax.annotation.security.RunAs; +import javax.ejb.EJB; +import javax.ejb.EJBAccessException; +import javax.ejb.Stateless; +import javax.ejb.embeddable.EJBContainer; +import java.util.List; +import java.util.Properties; +import java.util.concurrent.Callable; + +//START SNIPPET: code + +public class MovieTest extends TestCase { + + @EJB + private Movies movies; + + @EJB(name = "ManagerBean") + private Caller manager; + + @EJB(name = "EmployeeBean") + private Caller employee; + + protected void setUp() throws Exception { + Properties p = new Properties(); + p.put("movieDatabase", "new://Resource?type=DataSource"); + p.put("movieDatabase.JdbcDriver", "org.hsqldb.jdbcDriver"); + p.put("movieDatabase.JdbcUrl", "jdbc:hsqldb:mem:moviedb"); + + EJBContainer.createEJBContainer(p).getContext().bind("inject", this); + } + + public void testAsManager() throws Exception { + manager.call(new Callable() { + public Object call() throws Exception { + + movies.addMovie(new Movie("Quentin Tarantino", "Reservoir Dogs", 1992)); + movies.addMovie(new Movie("Joel Coen", "Fargo", 1996)); + movies.addMovie(new Movie("Joel Coen", "The Big Lebowski", 1998)); + + List<Movie> list = movies.getMovies(); + assertEquals("List.size()", 3, list.size()); + + for (Movie movie : list) { + movies.deleteMovie(movie); + } + + assertEquals("Movies.getMovies()", 0, movies.getMovies().size()); + return null; + } + }); + } + + public void testAsEmployee() throws Exception { + employee.call(new Callable() { + public Object call() throws Exception { + + movies.addMovie(new Movie("Quentin Tarantino", "Reservoir Dogs", 1992)); + movies.addMovie(new Movie("Joel Coen", "Fargo", 1996)); + movies.addMovie(new Movie("Joel Coen", "The Big Lebowski", 1998)); + + List<Movie> list = movies.getMovies(); + assertEquals("List.size()", 3, list.size()); + + for (Movie movie : list) { + try { + movies.deleteMovie(movie); + fail("Employees should not be allowed to delete"); + } catch (EJBAccessException e) { + // Good, Employees cannot delete things + } + } + + // The list should still be three movies long + assertEquals("Movies.getMovies()", 3, movies.getMovies().size()); + return null; + } + }); + } + + public void testUnauthenticated() throws Exception { + try { + movies.addMovie(new Movie("Quentin Tarantino", "Reservoir Dogs", 1992)); + fail("Unauthenticated users should not be able to add movies"); + } catch (EJBAccessException e) { + // Good, guests cannot add things + } + + try { + movies.deleteMovie(null); + fail("Unauthenticated users should not be allowed to delete"); + } catch (EJBAccessException e) { + // Good, Unauthenticated users cannot delete things + } + + try { + // Read access should be allowed + + List<Movie> list = movies.getMovies(); + } catch (EJBAccessException e) { + fail("Read access should be allowed"); + } + } + + + public static interface Caller { + public <V> V call(Callable<V> callable) throws Exception; + } + + /** + * This little bit of magic allows our test code to execute in + * the desired security scope. + */ + + @Stateless + @RunAs("Manager") + public static class ManagerBean implements Caller { + + public <V> V call(Callable<V> callable) throws Exception { + return callable.call(); + } + } + + @Stateless + @RunAs("Employee") + public static class EmployeeBean implements Caller { + + public <V> V call(Callable<V> callable) throws Exception { + return callable.call(); + } + } +} +---- + + += Running + + + +[source] +---- +------------------------------------------------------- + T E S T S +------------------------------------------------------- +Running org.superbiz.injection.secure.MovieTest +Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06 +http://tomee.apache.org/ +INFO - openejb.home = /Users/dblevins/examples/testing-security +INFO - openejb.base = /Users/dblevins/examples/testing-security +INFO - Using 'javax.ejb.embeddable.EJBContainer=true' +INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service) +INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager) +INFO - Configuring Service(id=movieDatabase, type=Resource, provider-id=Default JDBC Database) +INFO - Found EjbModule in classpath: /Users/dblevins/examples/testing-security/target/classes +INFO - Found EjbModule in classpath: /Users/dblevins/examples/testing-security/target/test-classes +INFO - Beginning load: /Users/dblevins/examples/testing-security/target/classes +INFO - Beginning load: /Users/dblevins/examples/testing-security/target/test-classes +INFO - Configuring enterprise application: /Users/dblevins/examples/testing-security +INFO - Configuring Service(id=Default Stateful Container, type=Container, provider-id=Default Stateful Container) +INFO - Auto-creating a container for bean Movies: Container(type=STATEFUL, id=Default Stateful Container) +INFO - Configuring Service(id=Default Stateless Container, type=Container, provider-id=Default Stateless Container) +INFO - Auto-creating a container for bean ManagerBean: Container(type=STATELESS, id=Default Stateless Container) +INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container) +INFO - Auto-creating a container for bean org.superbiz.injection.secure.MovieTest: Container(type=MANAGED, id=Default Managed Container) +INFO - Configuring PersistenceUnit(name=movie-unit) +INFO - Auto-creating a Resource with id 'movieDatabaseNonJta' of type 'DataSource for 'movie-unit'. +INFO - Configuring Service(id=movieDatabaseNonJta, type=Resource, provider-id=movieDatabase) +INFO - Adjusting PersistenceUnit movie-unit <non-jta-data-source> to Resource ID 'movieDatabaseNonJta' from 'movieDatabaseUnmanaged' +INFO - Enterprise application "/Users/dblevins/examples/testing-security" loaded. +INFO - Assembling app: /Users/dblevins/examples/testing-security +INFO - PersistenceUnit(name=movie-unit, provider=org.apache.openjpa.persistence.PersistenceProviderImpl) - provider time 405ms +INFO - Jndi(name="java:global/testing-security/Movies!org.superbiz.injection.secure.Movies") +INFO - Jndi(name="java:global/testing-security/Movies") +INFO - Jndi(name="java:global/testing-security/ManagerBean!org.superbiz.injection.secure.MovieTest$Caller") +INFO - Jndi(name="java:global/testing-security/ManagerBean") +INFO - Jndi(name="java:global/testing-security/EmployeeBean!org.superbiz.injection.secure.MovieTest$Caller") +INFO - Jndi(name="java:global/testing-security/EmployeeBean") +INFO - Jndi(name="java:global/EjbModule26174809/org.superbiz.injection.secure.MovieTest!org.superbiz.injection.secure.MovieTest") +INFO - Jndi(name="java:global/EjbModule26174809/org.superbiz.injection.secure.MovieTest") +INFO - Created Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container) +INFO - Created Ejb(deployment-id=ManagerBean, ejb-name=ManagerBean, container=Default Stateless Container) +INFO - Created Ejb(deployment-id=EmployeeBean, ejb-name=EmployeeBean, container=Default Stateless Container) +INFO - Created Ejb(deployment-id=org.superbiz.injection.secure.MovieTest, ejb-name=org.superbiz.injection.secure.MovieTest, container=Default Managed Container) +INFO - Started Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container) +INFO - Started Ejb(deployment-id=ManagerBean, ejb-name=ManagerBean, container=Default Stateless Container) +INFO - Started Ejb(deployment-id=EmployeeBean, ejb-name=EmployeeBean, container=Default Stateless Container) +INFO - Started Ejb(deployment-id=org.superbiz.injection.secure.MovieTest, ejb-name=org.superbiz.injection.secure.MovieTest, container=Default Managed Container) +INFO - Deployed Application(path=/Users/dblevins/examples/testing-security) +INFO - EJBContainer already initialized. Call ejbContainer.close() to allow reinitialization +INFO - EJBContainer already initialized. Call ejbContainer.close() to allow reinitialization +Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.574 sec + +Results : + +Tests run: 3, Failures: 0, Errors: 0, Skipped: 0 +---- + + http://git-wip-us.apache.org/repos/asf/tomee-site-generator/blob/972cc356/src/main/jbake/content/examples/testing-transactions-bmt.adoc ---------------------------------------------------------------------- diff --git a/src/main/jbake/content/examples/testing-transactions-bmt.adoc b/src/main/jbake/content/examples/testing-transactions-bmt.adoc new file mode 100755 index 0000000..010f218 --- /dev/null +++ b/src/main/jbake/content/examples/testing-transactions-bmt.adoc @@ -0,0 +1,280 @@ += Testing Transactions BMT +:jbake-date: 2016-09-06 +:jbake-type: page +:jbake-tomeepdf: +:jbake-status: published + +Example testing-transactions-bmt can be browsed at https://github.com/apache/tomee/tree/master/examples/testing-transactions-bmt + + +Shows how to begin, commit and rollback transactions using a UserTransaction via a Stateful Bean. + +== Movie + + +[source,java] +---- +package org.superbiz.injection.tx; + +import javax.persistence.Entity; +import javax.persistence.GeneratedValue; +import javax.persistence.Id; + +@Entity +public class Movie { + + @Id + @GeneratedValue + private Long id; + private String director; + private String title; + private int year; + + public Movie(String director, String title, int year) { + this.director = director; + this.title = title; + this.year = year; + } + + public Movie() { + + } + + public Long getId() { + return id; + } + + public void setId(Long id) { + this.id = id; + } + + public String getDirector() { + return director; + } + + public void setDirector(String director) { + this.director = director; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public int getYear() { + return year; + } + + public void setYear(int year) { + this.year = year; + } +} +---- + + +== Movies + + +[source,java] +---- +package org.superbiz.injection.tx; + +import javax.annotation.Resource; +import javax.ejb.Stateful; +import javax.ejb.TransactionManagement; +import javax.ejb.TransactionManagementType; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import javax.persistence.PersistenceContextType; +import javax.persistence.Query; +import javax.transaction.UserTransaction; + +@Stateful(name = "Movies") +@TransactionManagement(TransactionManagementType.BEAN) +public class Movies { + + @PersistenceContext(unitName = "movie-unit", type = PersistenceContextType.TRANSACTION) + private EntityManager entityManager; + + @Resource + private UserTransaction userTransaction; + + public void addMovie(Movie movie) throws Exception { + try { + userTransaction.begin(); + entityManager.persist(movie); + + //For some dummy reason, this db can have only 5 titles. :O) + if (countMovies() > 5) { + userTransaction.rollback(); + } else { + userTransaction.commit(); + } + + + } catch (Exception e) { + e.printStackTrace(); + userTransaction.rollback(); + } + } + + public Long countMovies() throws Exception { + Query query = entityManager.createQuery("SELECT COUNT(m) FROM Movie m"); + return Long.class.cast(query.getSingleResult()); + } +} +---- + + + +== persistence.xml + + +[source,xml] +---- +<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0"> + + <persistence-unit name="movie-unit"> + <jta-data-source>movieDatabase</jta-data-source> + <non-jta-data-source>movieDatabaseUnmanaged</non-jta-data-source> + <class>org.superbiz.injection.tx.Movie</class> + + <properties> + <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/> + </properties> + </persistence-unit> +</persistence> +---- + + +== MoviesTest + + +[source,java] +---- +package org.superbiz.injection.tx; + +import org.junit.Assert; +import org.junit.Test; + +import javax.ejb.EJB; +import javax.ejb.embeddable.EJBContainer; +import java.util.Properties; + +public class MoviesTest { + + @EJB + private Movies movies; + + @Test + public void testMe() throws Exception { + final Properties p = new Properties(); + p.put("movieDatabase", "new://Resource?type=DataSource"); + p.put("movieDatabase.JdbcDriver", "org.hsqldb.jdbcDriver"); + p.put("movieDatabase.JdbcUrl", "jdbc:hsqldb:mem:moviedb"); + + EJBContainer.createEJBContainer(p).getContext().bind("inject", this); + + movies.addMovie(new Movie("Asif Kapadia", "Senna", 2010)); + movies.addMovie(new Movie("José Padilha", "Tropa de Elite", 2007)); + movies.addMovie(new Movie("Andy Wachowski/Lana Wachowski", "The Matrix", 1999)); + movies.addMovie(new Movie("Quentin Tarantino", "Reservoir Dogs", 1992)); + movies.addMovie(new Movie("Joel Coen", "Fargo", 1996)); + movies.addMovie(new Movie("Joel Coen", "The Big Lebowski", 1998)); + + Assert.assertEquals(5L, movies.countMovies().longValue()); + } + +} +---- + + + += Running + + +[source] +---- +------------------------------------------------------- + T E S T S +------------------------------------------------------- +Running org.superbiz.injection.tx.MoviesTest +INFO - ******************************************************************************** +INFO - OpenEJB http://tomee.apache.org/ +INFO - Startup: Sat Jul 21 16:39:28 EDT 2012 +INFO - Copyright 1999-2012 (C) Apache OpenEJB Project, All Rights Reserved. +INFO - Version: 4.1.0 +INFO - Build date: 20120721 +INFO - Build time: 12:06 +INFO - ******************************************************************************** +INFO - openejb.home = /home/boto/dev/ws/openejb_trunk/openejb/examples/testing-transactions-bmt +INFO - openejb.base = /home/boto/dev/ws/openejb_trunk/openejb/examples/testing-transactions-bmt +INFO - Created new singletonService org.apache.openejb.cdi.ThreadSingletonServiceImpl@3f3f210f +INFO - Succeeded in installing singleton service +INFO - Using 'javax.ejb.embeddable.EJBContainer=true' +INFO - Cannot find the configuration file [conf/openejb.xml]. Will attempt to create one for the beans deployed. +INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service) +INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager) +INFO - Configuring Service(id=movieDatabase, type=Resource, provider-id=Default JDBC Database) +INFO - Creating TransactionManager(id=Default Transaction Manager) +INFO - Creating SecurityService(id=Default Security Service) +INFO - Creating Resource(id=movieDatabase) +INFO - Beginning load: /home/boto/dev/ws/openejb_trunk/openejb/examples/testing-transactions-bmt/target/classes +INFO - Configuring enterprise application: /home/boto/dev/ws/openejb_trunk/openejb/examples/testing-transactions-bmt +WARNING - Method 'lookup' is not available for 'javax.annotation.Resource'. Probably using an older Runtime. +INFO - Auto-deploying ejb Movies: EjbDeployment(deployment-id=Movies) +INFO - Configuring Service(id=Default Stateful Container, type=Container, provider-id=Default Stateful Container) +INFO - Auto-creating a container for bean Movies: Container(type=STATEFUL, id=Default Stateful Container) +INFO - Creating Container(id=Default Stateful Container) +INFO - Using directory /tmp for stateful session passivation +INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container) +INFO - Auto-creating a container for bean org.superbiz.injection.tx.MoviesTest: Container(type=MANAGED, id=Default Managed Container) +INFO - Creating Container(id=Default Managed Container) +INFO - Using directory /tmp for stateful session passivation +INFO - Configuring PersistenceUnit(name=movie-unit) +INFO - Auto-creating a Resource with id 'movieDatabaseNonJta' of type 'DataSource for 'movie-unit'. +INFO - Configuring Service(id=movieDatabaseNonJta, type=Resource, provider-id=movieDatabase) +INFO - Creating Resource(id=movieDatabaseNonJta) +INFO - Adjusting PersistenceUnit movie-unit <non-jta-data-source> to Resource ID 'movieDatabaseNonJta' from 'movieDatabaseUnmanaged' +INFO - Enterprise application "/home/boto/dev/ws/openejb_trunk/openejb/examples/testing-transactions-bmt" loaded. +INFO - Assembling app: /home/boto/dev/ws/openejb_trunk/openejb/examples/testing-transactions-bmt +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 +INFO - PersistenceUnit(name=movie-unit, provider=org.apache.openjpa.persistence.PersistenceProviderImpl) - provider time 399ms +INFO - Jndi(name="java:global/testing-transactions-bmt/Movies!org.superbiz.injection.tx.Movies") +INFO - Jndi(name="java:global/testing-transactions-bmt/Movies") +INFO - Existing thread singleton service in SystemInstance() org.apache.openejb.cdi.ThreadSingletonServiceImpl@3f3f210f +INFO - OpenWebBeans Container is starting... +INFO - Adding OpenWebBeansPlugin : [CdiPlugin] +INFO - All injection points are validated successfully. +INFO - OpenWebBeans Container has started, it took 157 ms. +INFO - Created Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container) +INFO - Started Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container) +INFO - Deployed Application(path=/home/boto/dev/ws/openejb_trunk/openejb/examples/testing-transactions-bmt) +INFO - Started user transaction org.apache.geronimo.transaction.manager.TransactionImpl@709a1411 +21-Jul-2012 4:39:32 PM null openjpa.Runtime +INFO: Starting OpenJPA 2.2.0 +21-Jul-2012 4:39:32 PM null openjpa.jdbc.JDBC +INFO: Using dictionary class "org.apache.openjpa.jdbc.sql.HSQLDictionary" (HSQL Database Engine 2.2.8 ,HSQL Database Engine Driver 2.2.8). +21-Jul-2012 4:39:33 PM null openjpa.Enhance +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. +INFO - Committing user transaction org.apache.geronimo.transaction.manager.TransactionImpl@709a1411 +INFO - Started user transaction org.apache.geronimo.transaction.manager.TransactionImpl@2bb64b70 +INFO - Committing user transaction org.apache.geronimo.transaction.manager.TransactionImpl@2bb64b70 +INFO - Started user transaction org.apache.geronimo.transaction.manager.TransactionImpl@627b5c +INFO - Committing user transaction org.apache.geronimo.transaction.manager.TransactionImpl@627b5c +INFO - Started user transaction org.apache.geronimo.transaction.manager.TransactionImpl@2f031310 +INFO - Committing user transaction org.apache.geronimo.transaction.manager.TransactionImpl@2f031310 +INFO - Started user transaction org.apache.geronimo.transaction.manager.TransactionImpl@4df2a9da +INFO - Committing user transaction org.apache.geronimo.transaction.manager.TransactionImpl@4df2a9da +INFO - Started user transaction org.apache.geronimo.transaction.manager.TransactionImpl@3fa9b4a4 +INFO - Rolling back user transaction org.apache.geronimo.transaction.manager.TransactionImpl@3fa9b4a4 +Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 7.471 sec + +Results : + +Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 +---- + http://git-wip-us.apache.org/repos/asf/tomee-site-generator/blob/972cc356/src/main/jbake/content/examples/testing-transactions.adoc ---------------------------------------------------------------------- diff --git a/src/main/jbake/content/examples/testing-transactions.adoc b/src/main/jbake/content/examples/testing-transactions.adoc new file mode 100755 index 0000000..a32ce8f --- /dev/null +++ b/src/main/jbake/content/examples/testing-transactions.adoc @@ -0,0 +1,279 @@ += Testing Transactions +:jbake-date: 2016-09-06 +:jbake-type: page +:jbake-tomeepdf: +:jbake-status: published + +Example testing-transactions can be browsed at https://github.com/apache/tomee/tree/master/examples/testing-transactions + + +*Help us document this example! Click the blue pencil icon in the upper right to edit this page.* + +== Movie + + +[source,java] +---- +package org.superbiz.injection.tx; + +import javax.persistence.Entity; + +@Entity +public class Movie { + + private String director; + private String title; + private int year; + + public Movie() { + } + + public Movie(String director, String title, int year) { + this.director = director; + this.title = title; + this.year = year; + } + + public String getDirector() { + return director; + } + + public void setDirector(String director) { + this.director = director; + } + + public String getTitle() { + return title; + } + + public void setTitle(String title) { + this.title = title; + } + + public int getYear() { + return year; + } + + public void setYear(int year) { + this.year = year; + } + +} +---- + + +== Movies + + +[source,java] +---- +package org.superbiz.injection.tx; + +import javax.ejb.Stateful; +import javax.ejb.TransactionAttribute; +import javax.persistence.EntityManager; +import javax.persistence.PersistenceContext; +import javax.persistence.PersistenceContextType; +import javax.persistence.Query; +import java.util.List; + +import static javax.ejb.TransactionAttributeType.MANDATORY; + +//START SNIPPET: code +@Stateful(name = "Movies") +@TransactionAttribute(MANDATORY) +public class Movies { + + @PersistenceContext(unitName = "movie-unit", type = PersistenceContextType.TRANSACTION) + private EntityManager entityManager; + + public void addMovie(Movie movie) throws Exception { + entityManager.persist(movie); + } + + public void deleteMovie(Movie movie) throws Exception { + entityManager.remove(movie); + } + + public List<Movie> getMovies() throws Exception { + Query query = entityManager.createQuery("SELECT m from Movie as m"); + return query.getResultList(); + } +} +---- + + +== persistence.xml + + +[source,xml] +---- +<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0"> + + <persistence-unit name="movie-unit"> + <jta-data-source>movieDatabase</jta-data-source> + <non-jta-data-source>movieDatabaseUnmanaged</non-jta-data-source> + <class>org.superbiz.injection.tx.Movie</class> + + <properties> + <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/> + </properties> + </persistence-unit> +</persistence> +---- + + +== MoviesTest + + +[source,java] +---- +package org.superbiz.injection.tx; + +import junit.framework.TestCase; + +import javax.ejb.EJB; +import javax.ejb.Stateless; +import javax.ejb.TransactionAttribute; +import javax.ejb.embeddable.EJBContainer; +import java.util.List; +import java.util.Properties; +import java.util.concurrent.Callable; + +import static javax.ejb.TransactionAttributeType.REQUIRES_NEW; + +/** + * See the transaction-rollback example as it does the same thing + * via UserTransaction and shows more techniques for rollback + */ +//START SNIPPET: code +public class MoviesTest extends TestCase { + + @EJB + private Movies movies; + + @EJB + private Caller transactionalCaller; + + protected void setUp() throws Exception { + final Properties p = new Properties(); + p.put("movieDatabase", "new://Resource?type=DataSource"); + p.put("movieDatabase.JdbcDriver", "org.hsqldb.jdbcDriver"); + p.put("movieDatabase.JdbcUrl", "jdbc:hsqldb:mem:moviedb"); + + EJBContainer.createEJBContainer(p).getContext().bind("inject", this); + } + + private void doWork() throws Exception { + + movies.addMovie(new Movie("Quentin Tarantino", "Reservoir Dogs", 1992)); + movies.addMovie(new Movie("Joel Coen", "Fargo", 1996)); + movies.addMovie(new Movie("Joel Coen", "The Big Lebowski", 1998)); + + List<Movie> list = movies.getMovies(); + assertEquals("List.size()", 3, list.size()); + + for (Movie movie : list) { + movies.deleteMovie(movie); + } + + assertEquals("Movies.getMovies()", 0, movies.getMovies().size()); + } + + public void testWithTransaction() throws Exception { + transactionalCaller.call(new Callable() { + public Object call() throws Exception { + doWork(); + return null; + } + }); + } + + public void testWithoutTransaction() throws Exception { + try { + doWork(); + fail("The Movies bean should be using TransactionAttributeType.MANDATORY"); + } catch (javax.ejb.EJBTransactionRequiredException e) { + // good, our Movies bean is using TransactionAttributeType.MANDATORY as we want + } + } + + + public static interface Caller { + public <V> V call(Callable<V> callable) throws Exception; + } + + /** + * This little bit of magic allows our test code to execute in + * the scope of a container controlled transaction. + */ + @Stateless + @TransactionAttribute(REQUIRES_NEW) + public static class TransactionBean implements Caller { + + public <V> V call(Callable<V> callable) throws Exception { + return callable.call(); + } + } +} +---- + + += Running + + + +[source] +---- +------------------------------------------------------- + T E S T S +------------------------------------------------------- +Running org.superbiz.injection.tx.MoviesTest +Apache OpenEJB 4.0.0-beta-1 build: 20111002-04:06 +http://tomee.apache.org/ +INFO - openejb.home = /Users/dblevins/examples/testing-transactions +INFO - openejb.base = /Users/dblevins/examples/testing-transactions +INFO - Using 'javax.ejb.embeddable.EJBContainer=true' +INFO - Configuring Service(id=Default Security Service, type=SecurityService, provider-id=Default Security Service) +INFO - Configuring Service(id=Default Transaction Manager, type=TransactionManager, provider-id=Default Transaction Manager) +INFO - Configuring Service(id=movieDatabase, type=Resource, provider-id=Default JDBC Database) +INFO - Found EjbModule in classpath: /Users/dblevins/examples/testing-transactions/target/classes +INFO - Found EjbModule in classpath: /Users/dblevins/examples/testing-transactions/target/test-classes +INFO - Beginning load: /Users/dblevins/examples/testing-transactions/target/classes +INFO - Beginning load: /Users/dblevins/examples/testing-transactions/target/test-classes +INFO - Configuring enterprise application: /Users/dblevins/examples/testing-transactions +INFO - Configuring Service(id=Default Stateful Container, type=Container, provider-id=Default Stateful Container) +INFO - Auto-creating a container for bean Movies: Container(type=STATEFUL, id=Default Stateful Container) +INFO - Configuring Service(id=Default Stateless Container, type=Container, provider-id=Default Stateless Container) +INFO - Auto-creating a container for bean TransactionBean: Container(type=STATELESS, id=Default Stateless Container) +INFO - Configuring Service(id=Default Managed Container, type=Container, provider-id=Default Managed Container) +INFO - Auto-creating a container for bean org.superbiz.injection.tx.MoviesTest: Container(type=MANAGED, id=Default Managed Container) +INFO - Configuring PersistenceUnit(name=movie-unit) +INFO - Auto-creating a Resource with id 'movieDatabaseNonJta' of type 'DataSource for 'movie-unit'. +INFO - Configuring Service(id=movieDatabaseNonJta, type=Resource, provider-id=movieDatabase) +INFO - Adjusting PersistenceUnit movie-unit <non-jta-data-source> to Resource ID 'movieDatabaseNonJta' from 'movieDatabaseUnmanaged' +INFO - Enterprise application "/Users/dblevins/examples/testing-transactions" loaded. +INFO - Assembling app: /Users/dblevins/examples/testing-transactions +INFO - PersistenceUnit(name=movie-unit, provider=org.apache.openjpa.persistence.PersistenceProviderImpl) - provider time 406ms +INFO - Jndi(name="java:global/testing-transactions/Movies!org.superbiz.injection.tx.Movies") +INFO - Jndi(name="java:global/testing-transactions/Movies") +INFO - Jndi(name="java:global/testing-transactions/TransactionBean!org.superbiz.injection.tx.MoviesTest$Caller") +INFO - Jndi(name="java:global/testing-transactions/TransactionBean") +INFO - Jndi(name="java:global/EjbModule2036741132/org.superbiz.injection.tx.MoviesTest!org.superbiz.injection.tx.MoviesTest") +INFO - Jndi(name="java:global/EjbModule2036741132/org.superbiz.injection.tx.MoviesTest") +INFO - Created Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container) +INFO - Created Ejb(deployment-id=TransactionBean, ejb-name=TransactionBean, container=Default Stateless Container) +INFO - Created Ejb(deployment-id=org.superbiz.injection.tx.MoviesTest, ejb-name=org.superbiz.injection.tx.MoviesTest, container=Default Managed Container) +INFO - Started Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container) +INFO - Started Ejb(deployment-id=TransactionBean, ejb-name=TransactionBean, container=Default Stateless Container) +INFO - Started Ejb(deployment-id=org.superbiz.injection.tx.MoviesTest, ejb-name=org.superbiz.injection.tx.MoviesTest, container=Default Managed Container) +INFO - Deployed Application(path=/Users/dblevins/examples/testing-transactions) +INFO - EJBContainer already initialized. Call ejbContainer.close() to allow reinitialization +Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.403 sec + +Results : + +Tests run: 2, Failures: 0, Errors: 0, Skipped: 0 +---- + + http://git-wip-us.apache.org/repos/asf/tomee-site-generator/blob/972cc356/src/main/jbake/content/examples/tomee-jersey-eclipselink.adoc ---------------------------------------------------------------------- diff --git a/src/main/jbake/content/examples/tomee-jersey-eclipselink.adoc b/src/main/jbake/content/examples/tomee-jersey-eclipselink.adoc new file mode 100755 index 0000000..adb73b0 --- /dev/null +++ b/src/main/jbake/content/examples/tomee-jersey-eclipselink.adoc @@ -0,0 +1,9 @@ += tomee-jersey-eclipselink +:jbake-date: 2016-09-06 +:jbake-type: page +:jbake-tomeepdf: +:jbake-status: published + +Example tomee-jersey-eclipselink can be browsed at https://github.com/apache/tomee/tree/master/examples/tomee-jersey-eclipselink + +No README.md yet, be the first to contribute one!