| |
| <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> |
| <HTML> |
| <HEAD> |
| <!-- $PAGETITLE --> |
| <TITLE>OpenEJB - Testing Security Example</TITLE> |
| <LINK href="http://openejb.apache.org/all.css" rel="stylesheet" type="text/css"> |
| <!--[if IE]><link rel="stylesheet" type="text/css" media="screen, projection" href="openejb.apache.org/ie.css"><![endif]--> |
| |
| <LINK rel="SHORTCUT ICON" href="http://openejb.apache.org/images/favicon.ico"> |
| <META http-equiv="Content-Type" content="text/html;charset=UTF-8"> |
| </HEAD> |
| <BODY> |
| |
| <!-- Delay the loading of the external javascript file needed for labels (as it takes too long to load and visibly holds loading of the page body) --> |
| <!-- To do this without javascript errors over undefined functions, we need to declare stubs here (that are overrided later by the proper implementations) --> |
| <SCRIPT language="JavaScript" type="text/javascript"> |
| function doAddLabel(hideTextfieldAfterAddParam) |
| { |
| // stub |
| } |
| |
| function onAddLabel() |
| { |
| // stub |
| } |
| |
| function showLabelsInput() |
| { |
| // stub |
| } |
| </SCRIPT> |
| |
| <A name="top"></A> |
| <TABLE class="frameTable" cellpadding="0" cellspacing="0" border="0"> |
| <TR class="Row1"> |
| <TD class="Col1"><IMG alt="" src="http://openejb.apache.org/images/dotTrans.gif"></TD> |
| <TD class="Col2"><IMG alt="" src="http://openejb.apache.org/images/dotTrans.gif"></TD> |
| <TD class="Col3"><IMG alt="" src="http://openejb.apache.org/images/dotTrans.gif"></TD> |
| <TD class="Col4"><IMG alt="" src="http://openejb.apache.org/images/dotTrans.gif"></TD> |
| <TD class="Col5"><IMG alt="" src="http://openejb.apache.org/images/dotTrans.gif"></TD> |
| </TR> |
| <TR class="Row2"> |
| <TD class="Col1"><IMG alt="" src="http://openejb.apache.org/images/dotTrans.gif"></TD> |
| <TD class="Col2"> </TD> |
| <TD class="Col3" id="breadcrumbs"> |
| <!-- $TOP_NAV_BAR --> |
| <A href="../OPENEJB/index.html" title="Index">Home</A> | <A href="../OPENEJB/download.html" title="Download">Download</A> | <A href="../OPENEJB/mailing-lists.html" title="Mailing Lists">Lists</A> | <A href="http://issues.apache.org/jira/browse/OPENEJB" class="external-link" rel="nofollow">Issues</A> |
| |
| </TD> |
| <TD class="Col4"><IMG alt="" src="http://openejb.apache.org/images/dotTrans.gif"></TD> |
| <TD class="Col5"> </TD> |
| </TR> |
| <TR class="Row3"> |
| <TD class="Col1"><IMG alt="" class="Row3Img" id="thinLine" src="http://openejb.apache.org/images/line_sm.gif"></TD> |
| <TD class="Col2"><IMG alt="" class="Row3Img" src="http://openejb.apache.org/images/dotTrans.gif"></TD> |
| <TD class="Col3"><IMG alt="" class="Row3Img" src="http://openejb.apache.org/images/dotTrans.gif"></TD> |
| <TD class="Col4"><IMG alt="" src="http://openejb.apache.org/images/dotTrans.gif"></TD> |
| <TD class="Col5"><IMG alt="" class="Row3Img" src="http://openejb.apache.org/images/dotTrans.gif"></TD> |
| </TR> |
| <TR class="Row4"> |
| <TD class="Col1"> |
| <SPAN id="Navigation"> |
| |
| <H3><A name="Navigation-Overview"></A>Overview</H3> |
| |
| <UL class="alternate" type="square"> |
| <LI><A href="../OPENEJB/index.html" title="Index">Home</A></LI> |
| <LI><A href="../OPENEJB/news.html" title="News">News</A></LI> |
| <LI><A href="../OPENEJB/faq.html" title="FAQ">FAQ</A></LI> |
| <LI><A href="../OPENEJB/download.html" title="Download">Download</A></LI> |
| <LI><A href="index.html" title="Index">Documentation</A></LI> |
| <LI><A href="../OPENEJB/examples.html" title="Examples">Examples</A></LI> |
| <LI><A href="http://cwiki.apache.org/confluence/display/OPENEJB/Lightening%20Demos" class="external-link" rel="nofollow">Lightning Demos</A></LI> |
| <LI><A href="../OPENEJB/mailing-lists.html" title="Mailing Lists">Mailing Lists</A></LI> |
| <LI><A href="../OPENEJB/source-code.html" title="Source Code">Source Code</A></LI> |
| <LI><A href="http://blogs.apache.org/openejb" class="external-link" rel="nofollow">Project Blog</A></LI> |
| </UL> |
| |
| |
| <H3><A name="Navigation-Servers"></A>Servers</H3> |
| |
| <UL class="alternate" type="square"> |
| <LI><A href="../OPENEJB/local-server.html" title="Local Server">Local</A></LI> |
| <LI><A href="../OPENEJB/remote-server.html" title="Remote Server">Remote</A></LI> |
| </UL> |
| |
| |
| <H3><A name="Navigation-Integrations"></A>Integrations</H3> |
| |
| <UL class="alternate" type="square"> |
| <LI><A href="tomcat.html" title="Tomcat">Tomcat</A></LI> |
| <LI><A href="../OPENEJB/geronimo.html" title="Geronimo">Geronimo</A></LI> |
| <LI><A href="../OPENEJB/webobjects.html" title="WebObjects">WebObjects</A></LI> |
| </UL> |
| |
| |
| <H3><A name="Navigation-Community"></A>Community</H3> |
| |
| <UL class="alternate" type="square"> |
| <LI><A href="../OPENEJB/team.html" title="Team">Team</A></LI> |
| <LI><A href="../OPENEJB/articles.html" title="Articles">Articles</A></LI> |
| <LI><A href="http://webchat.freenode.net/?channels=openejb" class="external-link" rel="nofollow">IRC</A></LI> |
| </UL> |
| |
| |
| <H3><A name="Navigation-RelatedProjects"></A>Related Projects</H3> |
| |
| <UL class="alternate" type="square"> |
| <LI><A href="http://activemq.apache.org/" class="external-link" rel="nofollow">ActiveMQ</A></LI> |
| <LI><A href="http://openjpa.apache.org/" class="external-link" rel="nofollow">OpenJPA</A></LI> |
| <LI><A href="http://cxf.apache.org/" class="external-link" rel="nofollow">CXF</A></LI> |
| </UL> |
| |
| |
| <H3><A name="Navigation-Index"></A>Index</H3> |
| <UL class="alternate" type="square"> |
| <LI><A href="../OPENEJB/space-index.html" title="Space Index">Site Index</A></LI> |
| <LI><A href="space-index.html" title="Space Index">Doc Index</A></LI> |
| </UL> |
| |
| <H3> |
| <A name="Navigation-Feeds"></A> |
| Feeds |
| </H3> |
| |
| <UL class="feeds"> |
| <LI> |
| <A href="http://cwiki.apache.org/confluence/spaces/rss.action?key=OPENEJB&newPages=false"> |
| <IMG src="http://openejb.apache.org/images/rss.gif"></A> |
| <A class="feedsText" href="http://cwiki.apache.org/confluence/spaces/rss.action?key=OPENEJB&newPages=false">Site</A> |
| </LI> |
| |
| <LI><A href="http://cwiki.apache.org/confluence/spaces/blogrss.action?key=OPENEJB"> |
| <IMG src="http://openejb.apache.org/images/rss.gif"></A> |
| <A class="feedsText" href="http://cwiki.apache.org/confluence/spaces/blogrss.action?key=OPENEJB">News</A> |
| </LI> |
| </UL> |
| </SPAN> |
| </TD> |
| <TD class="Col2"> </TD> |
| <TD class="Col3"> |
| <TABLE id="PageHeader" border="0" width="100%"> |
| <TR> |
| <TD> |
| <A href="http://openejb.org/"> |
| <IMG hspace="0" src="http://openejb.apache.org/images/logo_openejb.gif" vspace="0"> |
| </A> |
| </TD> |
| <TD align="right"> |
| <A href="http://www.apache.org/"> |
| <IMG src="http://www.apache.org/images/asf-logo.gif" width="258" height="66"> |
| </A> |
| </TD> |
| </TR> |
| <TR> |
| <TD id="page_title"> |
| <!-- $TITLE --> |
| Testing Security Example |
| </TD> |
| |
| <TD align="right"> |
| <BR><BR> |
| <!-- Google CSE Search Box Begins --> |
| <FORM id="searchbox_010475492895890475512:_t4iqjrgx90" action="http://www.google.com/cse"> |
| <INPUT type="hidden" name="cx" value="010475492895890475512:_t4iqjrgx90"> |
| <INPUT type="hidden" name="cof" value="FORID:0"> |
| <INPUT name="q" type="text" size="25"> |
| <INPUT type="submit" name="sa" value="Search"> |
| </FORM> |
| <SCRIPT type="text/javascript" src="http://www.google.com/coop/cse/brand?form=searchbox_010475492895890475512:_t4iqjrgx90"></SCRIPT> |
| <!-- Google CSE Search Box Ends --> |
| |
| </TD> |
| </TR> |
| </TABLE> |
| <P> |
| <!-- $BODY --> |
| <DIV id="PageContent"> |
| <H1><A name="TestingSecurityExample-Overview"></A>Overview</H1> |
| |
| <P>Builds upon the <A href="injection-of-entitymanager-example.html" title="Injection of EntityManager Example">Injection of EntityManager Example</A> but adds the use of <B>@RolesAllowed</B> and <B>@PermitAll</B> in the @Stateful bean to restrict who can perform create, persist and remove operations on the EntityManager. Shows a TestCase using the <B>@RunAs</B> annotation to execute and test the bean code as various users.</P> |
| |
| <P>In this example we restrict the ability to create Movie Entities to a <EM>Manager</EM> or an <EM>Employee</EM>. Reads are open to anyone, logged in or not. And delete operations are only allowed by a <EM>Manager</EM>.</P> |
| |
| <P>See the <A href="security-annotations.html" title="Security Annotations">Security Annotations</A> page for a full description of how the security annotations work.</P> |
| |
| <P><EM>The source for this example is in the "testing-security" directory located in the <A href="../OPENEJB/download.html" title="Download">openejb-examples.zip</A> available on the download page.</EM></P> |
| |
| <H1><A name="TestingSecurityExample-TheCode"></A>The Code</H1> |
| |
| <P>Just as with the <A href="testing-transactions-example.html" title="Testing Transactions Example">Testing Transactions Example</A> the magic of this unit test is in the <B>ManagerBean</B> and <B>EmployeeBean</B> @Stateless beans that we've tucked into our TestCase as inner classes. These beans allow us to execute our test code as either a Manager or as an Employee and test that Movies @Stateful bean is setup to restrict and permit calls according to our intended design.</P> |
| |
| <DIV class="code panel" style="border-width: 1px;"><DIV class="codeContent panelContent"> |
| <PRE class="code-java"><SPAN class="code-keyword">import</SPAN> javax.annotation.security.PermitAll; |
| <SPAN class="code-keyword">import</SPAN> javax.annotation.security.RolesAllowed; |
| <SPAN class="code-keyword">import</SPAN> javax.ejb.Stateful; |
| <SPAN class="code-keyword">import</SPAN> javax.ejb.TransactionAttribute; |
| <SPAN class="code-keyword">import</SPAN> javax.ejb.TransactionAttributeType; |
| <SPAN class="code-keyword">import</SPAN> javax.persistence.EntityManager; |
| <SPAN class="code-keyword">import</SPAN> javax.persistence.PersistenceContext; |
| <SPAN class="code-keyword">import</SPAN> javax.persistence.PersistenceContextType; |
| <SPAN class="code-keyword">import</SPAN> javax.persistence.Query; |
| <SPAN class="code-keyword">import</SPAN> java.util.List; |
| |
| @Stateful(name = <SPAN class="code-quote">"Movies"</SPAN>) |
| <SPAN class="code-keyword">public</SPAN> class MoviesImpl <SPAN class="code-keyword">implements</SPAN> Movies { |
| |
| @PersistenceContext(unitName = <SPAN class="code-quote">"movie-unit"</SPAN>, type = PersistenceContextType.EXTENDED) |
| <SPAN class="code-keyword">private</SPAN> EntityManager entityManager; |
| |
| @RolesAllowed({<SPAN class="code-quote">"Employee"</SPAN>, <SPAN class="code-quote">"Manager"</SPAN>}) |
| <SPAN class="code-keyword">public</SPAN> void addMovie(Movie movie) <SPAN class="code-keyword">throws</SPAN> Exception { |
| entityManager.persist(movie); |
| } |
| |
| @RolesAllowed({<SPAN class="code-quote">"Manager"</SPAN>}) |
| <SPAN class="code-keyword">public</SPAN> void deleteMovie(Movie movie) <SPAN class="code-keyword">throws</SPAN> Exception { |
| entityManager.remove(movie); |
| } |
| |
| @PermitAll |
| @TransactionAttribute(TransactionAttributeType.SUPPORTS) |
| <SPAN class="code-keyword">public</SPAN> List<Movie> getMovies() <SPAN class="code-keyword">throws</SPAN> Exception { |
| Query query = entityManager.createQuery(<SPAN class="code-quote">"SELECT m from Movie as m"</SPAN>); |
| <SPAN class="code-keyword">return</SPAN> query.getResultList(); |
| } |
| } |
| </PRE> |
| </DIV></DIV> |
| |
| <H1><A name="TestingSecurityExample-Writingaunittestfortheexample"></A>Writing a unit test for the example</H1> |
| |
| <DIV class="code panel" style="border-width: 1px;"><DIV class="codeContent panelContent"> |
| <PRE class="code-java"><SPAN class="code-keyword">public</SPAN> class MovieTest <SPAN class="code-keyword">extends</SPAN> TestCase { |
| <SPAN class="code-keyword">private</SPAN> Context context; |
| |
| <SPAN class="code-keyword">protected</SPAN> void setUp() <SPAN class="code-keyword">throws</SPAN> Exception { |
| Properties p = <SPAN class="code-keyword">new</SPAN> Properties(); |
| p.put(Context.INITIAL_CONTEXT_FACTORY, <SPAN class="code-quote">"org.apache.openejb.client.LocalInitialContextFactory"</SPAN>); |
| p.put(<SPAN class="code-quote">"movieDatabase"</SPAN>, <SPAN class="code-quote">"<SPAN class="code-keyword">new</SPAN>:<SPAN class="code-comment">//Resource?type=DataSource"</SPAN>); |
| </SPAN> p.put(<SPAN class="code-quote">"movieDatabase.JdbcDriver"</SPAN>, <SPAN class="code-quote">"org.hsqldb.jdbcDriver"</SPAN>); |
| p.put(<SPAN class="code-quote">"movieDatabase.JdbcUrl"</SPAN>, <SPAN class="code-quote">"jdbc:hsqldb:mem:moviedb"</SPAN>); |
| |
| p.put(<SPAN class="code-quote">"movieDatabaseUnmanaged"</SPAN>, <SPAN class="code-quote">"<SPAN class="code-keyword">new</SPAN>:<SPAN class="code-comment">//Resource?type=DataSource"</SPAN>); |
| </SPAN> p.put(<SPAN class="code-quote">"movieDatabaseUnmanaged.JdbcDriver"</SPAN>, <SPAN class="code-quote">"org.hsqldb.jdbcDriver"</SPAN>); |
| p.put(<SPAN class="code-quote">"movieDatabaseUnmanaged.JdbcUrl"</SPAN>, <SPAN class="code-quote">"jdbc:hsqldb:mem:moviedb"</SPAN>); |
| p.put(<SPAN class="code-quote">"movieDatabaseUnmanaged.JtaManaged"</SPAN>, <SPAN class="code-quote">"<SPAN class="code-keyword">false</SPAN>"</SPAN>); |
| |
| context = <SPAN class="code-keyword">new</SPAN> InitialContext(p); |
| } |
| |
| <SPAN class="code-keyword">public</SPAN> void testAsManager() <SPAN class="code-keyword">throws</SPAN> Exception { |
| Caller managerBean = (Caller) context.lookup(<SPAN class="code-quote">"ManagerBeanLocal"</SPAN>); |
| managerBean.call(<SPAN class="code-keyword">new</SPAN> Callable() { |
| <SPAN class="code-keyword">public</SPAN> <SPAN class="code-object">Object</SPAN> call() <SPAN class="code-keyword">throws</SPAN> Exception { |
| |
| Movies movies = (Movies) context.lookup(<SPAN class="code-quote">"MoviesLocal"</SPAN>); |
| |
| movies.addMovie(<SPAN class="code-keyword">new</SPAN> Movie(<SPAN class="code-quote">"Quentin Tarantino"</SPAN>, <SPAN class="code-quote">"Reservoir Dogs"</SPAN>, 1992)); |
| movies.addMovie(<SPAN class="code-keyword">new</SPAN> Movie(<SPAN class="code-quote">"Joel Coen"</SPAN>, <SPAN class="code-quote">"Fargo"</SPAN>, 1996)); |
| movies.addMovie(<SPAN class="code-keyword">new</SPAN> Movie(<SPAN class="code-quote">"Joel Coen"</SPAN>, <SPAN class="code-quote">"The Big Lebowski"</SPAN>, 1998)); |
| |
| List<Movie> list = movies.getMovies(); |
| assertEquals(<SPAN class="code-quote">"List.size()"</SPAN>, 3, list.size()); |
| |
| <SPAN class="code-keyword">for</SPAN> (Movie movie : list) { |
| movies.deleteMovie(movie); |
| } |
| |
| assertEquals(<SPAN class="code-quote">"Movies.getMovies()"</SPAN>, 0, movies.getMovies().size()); |
| <SPAN class="code-keyword">return</SPAN> <SPAN class="code-keyword">null</SPAN>; |
| } |
| }); |
| } |
| |
| <SPAN class="code-keyword">public</SPAN> void testAsEmployee() <SPAN class="code-keyword">throws</SPAN> Exception { |
| Caller employeeBean = (Caller) context.lookup(<SPAN class="code-quote">"EmployeeBeanLocal"</SPAN>); |
| employeeBean.call(<SPAN class="code-keyword">new</SPAN> Callable() { |
| <SPAN class="code-keyword">public</SPAN> <SPAN class="code-object">Object</SPAN> call() <SPAN class="code-keyword">throws</SPAN> Exception { |
| Movies movies = (Movies) context.lookup(<SPAN class="code-quote">"MoviesLocal"</SPAN>); |
| |
| movies.addMovie(<SPAN class="code-keyword">new</SPAN> Movie(<SPAN class="code-quote">"Quentin Tarantino"</SPAN>, <SPAN class="code-quote">"Reservoir Dogs"</SPAN>, 1992)); |
| movies.addMovie(<SPAN class="code-keyword">new</SPAN> Movie(<SPAN class="code-quote">"Joel Coen"</SPAN>, <SPAN class="code-quote">"Fargo"</SPAN>, 1996)); |
| movies.addMovie(<SPAN class="code-keyword">new</SPAN> Movie(<SPAN class="code-quote">"Joel Coen"</SPAN>, <SPAN class="code-quote">"The Big Lebowski"</SPAN>, 1998)); |
| |
| List<Movie> list = movies.getMovies(); |
| assertEquals(<SPAN class="code-quote">"List.size()"</SPAN>, 3, list.size()); |
| |
| <SPAN class="code-keyword">for</SPAN> (Movie movie : list) { |
| <SPAN class="code-keyword">try</SPAN> { |
| movies.deleteMovie(movie); |
| fail(<SPAN class="code-quote">"Employees should not be allowed to delete"</SPAN>); |
| } <SPAN class="code-keyword">catch</SPAN> (EJBAccessException e) { |
| <SPAN class="code-comment">// Good, Employees cannot delete things |
| </SPAN> } |
| } |
| |
| <SPAN class="code-comment">// The list should still be three movies <SPAN class="code-object">long</SPAN> |
| </SPAN> assertEquals(<SPAN class="code-quote">"Movies.getMovies()"</SPAN>, 3, movies.getMovies().size()); |
| <SPAN class="code-keyword">return</SPAN> <SPAN class="code-keyword">null</SPAN>; |
| } |
| }); |
| } |
| |
| <SPAN class="code-keyword">public</SPAN> void testUnauthenticated() <SPAN class="code-keyword">throws</SPAN> Exception { |
| Movies movies = (Movies) context.lookup(<SPAN class="code-quote">"MoviesLocal"</SPAN>); |
| |
| <SPAN class="code-keyword">try</SPAN> { |
| movies.addMovie(<SPAN class="code-keyword">new</SPAN> Movie(<SPAN class="code-quote">"Quentin Tarantino"</SPAN>, <SPAN class="code-quote">"Reservoir Dogs"</SPAN>, 1992)); |
| fail(<SPAN class="code-quote">"Unauthenticated users should not be able to add movies"</SPAN>); |
| } <SPAN class="code-keyword">catch</SPAN> (EJBAccessException e) { |
| <SPAN class="code-comment">// Good, guests cannot add things |
| </SPAN> } |
| |
| <SPAN class="code-keyword">try</SPAN> { |
| movies.deleteMovie(<SPAN class="code-keyword">null</SPAN>); |
| fail(<SPAN class="code-quote">"Unauthenticated users should not be allowed to delete"</SPAN>); |
| } <SPAN class="code-keyword">catch</SPAN> (EJBAccessException e) { |
| <SPAN class="code-comment">// Good, Unauthenticated users cannot delete things |
| </SPAN> } |
| |
| <SPAN class="code-keyword">try</SPAN> { |
| <SPAN class="code-comment">// Read access should be allowed |
| </SPAN> |
| List<Movie> list = movies.getMovies(); |
| |
| } <SPAN class="code-keyword">catch</SPAN> (EJBAccessException e) { |
| fail(<SPAN class="code-quote">"Read access should be allowed"</SPAN>); |
| } |
| |
| } |
| |
| |
| <SPAN class="code-keyword">public</SPAN> <SPAN class="code-keyword">static</SPAN> <SPAN class="code-keyword">interface</SPAN> Caller { |
| <SPAN class="code-keyword">public</SPAN> <V> V call(Callable<V> callable) <SPAN class="code-keyword">throws</SPAN> Exception; |
| } |
| |
| /** |
| * This little bit of magic allows our test code to execute in |
| * the desired security scope. |
| * <p/> |
| * The src/test/resource/META-INF/ejb-jar.xml will cause <SPAN class="code-keyword">this</SPAN> |
| * EJB to be automatically discovered and deployed when |
| * OpenEJB boots up. |
| */ |
| |
| @Stateless |
| @RunAs(<SPAN class="code-quote">"Manager"</SPAN>) |
| <SPAN class="code-keyword">public</SPAN> <SPAN class="code-keyword">static</SPAN> class ManagerBean <SPAN class="code-keyword">implements</SPAN> Caller { |
| |
| <SPAN class="code-keyword">public</SPAN> <V> V call(Callable<V> callable) <SPAN class="code-keyword">throws</SPAN> Exception { |
| <SPAN class="code-keyword">return</SPAN> callable.call(); |
| } |
| |
| } |
| |
| @Stateless |
| @RunAs(<SPAN class="code-quote">"Employee"</SPAN>) |
| <SPAN class="code-keyword">public</SPAN> <SPAN class="code-keyword">static</SPAN> class EmployeeBean <SPAN class="code-keyword">implements</SPAN> Caller { |
| |
| <SPAN class="code-keyword">public</SPAN> <V> V call(Callable<V> callable) <SPAN class="code-keyword">throws</SPAN> Exception { |
| <SPAN class="code-keyword">return</SPAN> callable.call(); |
| } |
| |
| } |
| |
| } |
| </PRE> |
| </DIV></DIV> |
| |
| <P>Curious on the InitialContext parameters used? See the <A href="injection-of-datasource-example.html" title="Injection of DataSource Example">Injection of DataSource Example</A> for an explanation of how any Resource can be configured via properties in the TestCase itself or via an openejb.xml file.</P> |
| |
| <H1><A name="TestingSecurityExample-Running"></A>Running</H1> |
| |
| <P>Running the example is fairly simple. In the "testing-security" directory of the <A href="../OPENEJB/download.html" title="Download">examples zip</A>, just run:</P> |
| |
| <P>$ mvn clean install</P> |
| |
| <P>Which should create output like the following.</P> |
| |
| <DIV class="preformatted panel" style="border-width: 1px;"><DIV class="preformattedContent panelContent"> |
| <PRE>------------------------------------------------------- |
| T E S T S |
| ------------------------------------------------------- |
| Running org.superbiz.injection.secure.MovieTest |
| Apache OpenEJB 3.0 build: 20080408-04:13 |
| http://openejb.apache.org/ |
| INFO - openejb.home = /Users/dblevins/work/openejb-3.0/examples/testing-security |
| INFO - openejb.base = /Users/dblevins/work/openejb-3.0/examples/testing-security |
| 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=movieDatabaseUnmanaged, type=Resource, provider-id=Default JDBC Database) |
| INFO - Configuring Service(id=movieDatabase, type=Resource, provider-id=Default JDBC Database) |
| INFO - Configuring Service(id=Default JDK 1.3 ProxyFactory, type=ProxyFactory, provider-id=Default JDK 1.3 ProxyFactory) |
| INFO - Found EjbModule in classpath: /Users/dblevins/work/openejb-3.0/examples/testing-security/target/classes |
| INFO - Found EjbModule in classpath: /Users/dblevins/work/openejb-3.0/examples/testing-security/target/test-classes |
| INFO - Configuring app: /Users/dblevins/work/openejb-3.0/examples/testing-security/target/classes |
| 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 PersistenceUnit(name=movie-unit) |
| INFO - Loaded Module: /Users/dblevins/work/openejb-3.0/examples/testing-security/target/classes |
| INFO - Configuring app: /Users/dblevins/work/openejb-3.0/examples/testing-security/target/test-classes |
| INFO - Configuring Service(id=Default Stateless Container, type=Container, provider-id=Default Stateless Container) |
| INFO - Auto-creating a container for bean EmployeeBean: Container(type=STATELESS, id=Default Stateless Container) |
| INFO - Loaded Module: /Users/dblevins/work/openejb-3.0/examples/testing-security/target/test-classes |
| INFO - Assembling app: /Users/dblevins/work/openejb-3.0/examples/testing-security/target/classes |
| INFO - PersistenceUnit(name=movie-unit, provider=org.apache.openjpa.persistence.PersistenceProviderImpl) |
| ERROR - JAVA AGENT NOT INSTALLED. The JPA Persistence Provider requested installation of a ClassFileTransformer which |
| requires a JavaAgent. See http://openejb.apache.org/3.0/javaagent.html |
| INFO - Jndi(name=MoviesLocal) --> Ejb(deployment-id=Movies) |
| INFO - Created Ejb(deployment-id=Movies, ejb-name=Movies, container=Default Stateful Container) |
| INFO - Deployed Application(path=/Users/dblevins/work/openejb-3.0/examples/testing-security/target/classes) |
| INFO - Assembling app: /Users/dblevins/work/openejb-3.0/examples/testing-security/target/test-classes |
| INFO - Jndi(name=EmployeeBeanLocal) --> Ejb(deployment-id=EmployeeBean) |
| INFO - Jndi(name=ManagerBeanLocal) --> Ejb(deployment-id=ManagerBean) |
| INFO - Created Ejb(deployment-id=EmployeeBean, ejb-name=EmployeeBean, container=Default Stateless Container) |
| INFO - Created Ejb(deployment-id=ManagerBean, ejb-name=ManagerBean, container=Default Stateless Container) |
| INFO - Deployed Application(path=/Users/dblevins/work/openejb-3.0/examples/testing-security/target/test-classes) |
| Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 2.109 sec |
| |
| Results : |
| |
| Tests run: 3, Failures: 0, Errors: 0, Skipped: 0 |
| </PRE> |
| </DIV></DIV> |
| |
| </DIV> |
| </P> |
| </TD> |
| <TD class="Col4"><IMG src="http://openejb.apache.org/images/dotTrans.gif"></TD> |
| <TD class="Col5"> |
| |
| |
| </TD> |
| </TR> |
| <TR class="Row5"> |
| <TD class="Col1"> </TD> |
| <TD class="Col2"> </TD> |
| <TD class="Col3"> |
| <BR> |
| <BR> |
| <IMG width="100%" height="1" src="http://openejb.apache.org/images/line_light.gif"> |
| <TABLE width="100%"> |
| <TR> |
| <TD> |
| <SPAN class="bodyGrey"> |
| <SMALL> |
| <NOTICE><!-- $FOOTER --> |
| Apache OpenEJB is an project of The Apache Software Foundation (ASF) |
| </NOTICE> |
| <BR> |
| Site Powered by |
| <A href="http://atlassian.com/">Atlassian</A> |
| <A href="http://atlassian.com/confluence/">Confluence</A> |
| . |
| </SMALL> |
| </SPAN> |
| </TD> |
| <TD align="right"> |
| <A style="color:#999;font-size:small;font-weight:normal;" href="https://cwiki.apache.org/confluence/pages/editpage.action?spaceKey=OPENEJBx30&title=Testing%20Security%20Example">[ edit ]</A> |
| </TD> |
| </TR> |
| </TABLE> |
| <BR> |
| </TD> |
| <TD class="Col4"><IMG src="http://openejb.apache.org/images/dotTrans.gif"></TD> |
| <TD class="Col5"> </TD> |
| </TR> |
| </TABLE> |
| |
| <!-- Needed for composition plugin --> |
| <!-- delay the loading of large javascript files to the end so that they don't interfere with the loading of page content --> |
| <SPAN style="display: none"> |
| <SCRIPT type="text/javascript" language="JavaScript" src="http://cwiki.apache.org/confluence/labels-javascript"></SCRIPT> |
| |
| <SCRIPT src="http://www.google-analytics.com/urchin.js" type="text/javascript"> |
| </SCRIPT> |
| <SCRIPT type="text/javascript"> |
| _uacct = "UA-2717626-1"; |
| urchinTracker(); |
| </SCRIPT> |
| </SPAN> |
| |
| </BODY> |
| </HTML> |