Author: dblevins
Date: Sun Apr 10 14:12:31 2011
New Revision: 1090807
URL: http://svn.apache.org/viewvc?rev=1090807&view=rev
Log:
OPENEJB-1519: Update existing examples to EJB 3.1
Also some simplification of some of the example code
Added:
openejb/trunk/openejb3/examples/alternate-descriptors/src/main/java/org/superbiz/altdd/Movies.java
- copied, changed from r1088039,
openejb/trunk/openejb3/examples/alternate-descriptors/src/main/java/org/superbiz/altdd/MoviesImpl.java
openejb/trunk/openejb3/examples/component-interfaces/src/main/java/org/superbiz/FriendlyPerson.java
(contents, props changed)
- copied, changed from r1088039,
openejb/trunk/openejb3/examples/component-interfaces/src/main/java/org/superbiz/FriendlyPersonImpl.java
openejb/trunk/openejb3/examples/custom-injection/src/main/java/org/superbiz/enventries/Stratocaster.java
- copied, changed from r1088039,
openejb/trunk/openejb3/examples/custom-injection/src/main/java/org/superbiz/enventries/StratocasterImpl.java
openejb/trunk/openejb3/examples/injection-of-connectionfactory/src/main/java/org/superbiz/injection/jms/Messages.java
- copied, changed from r1088039,
openejb/trunk/openejb3/examples/injection-of-connectionfactory/src/main/java/org/superbiz/injection/jms/MessagingBean.java
openejb/trunk/openejb3/examples/injection-of-datasource/src/main/java/org/superbiz/injection/Movies.java
- copied, changed from r1088039,
openejb/trunk/openejb3/examples/injection-of-datasource/src/main/java/org/superbiz/injection/MoviesImpl.java
openejb/trunk/openejb3/examples/injection-of-ejbs/src/main/java/org/superbiz/injection/DataReader.java
(contents, props changed)
- copied, changed from r1088039,
openejb/trunk/openejb3/examples/injection-of-ejbs/src/main/java/org/superbiz/injection/DataReaderImpl.java
openejb/trunk/openejb3/examples/injection-of-ejbs/src/main/java/org/superbiz/injection/DataStore.java
(contents, props changed)
- copied, changed from r1088039,
openejb/trunk/openejb3/examples/injection-of-ejbs/src/main/java/org/superbiz/injection/DataStoreImpl.java
openejb/trunk/openejb3/examples/injection-of-entitymanager/src/main/java/org/superbiz/injection/jpa/Movies.java
- copied, changed from r1088039,
openejb/trunk/openejb3/examples/injection-of-entitymanager/src/main/java/org/superbiz/injection/jpa/MoviesImpl.java
openejb/trunk/openejb3/examples/injection-of-env-entry/src/main/java/org/superbiz/injection/enventry/
openejb/trunk/openejb3/examples/injection-of-env-entry/src/main/java/org/superbiz/injection/enventry/Configuration.java
(with props)
openejb/trunk/openejb3/examples/injection-of-env-entry/src/main/java/org/superbiz/injection/enventry/Shape.java
(with props)
openejb/trunk/openejb3/examples/injection-of-env-entry/src/main/java/org/superbiz/injection/enventry/Widget.java
(with props)
openejb/trunk/openejb3/examples/injection-of-env-entry/src/test/java/org/superbiz/injection/enventry/
openejb/trunk/openejb3/examples/injection-of-env-entry/src/test/java/org/superbiz/injection/enventry/ConfigurationTest.java
(contents, props changed)
- copied, changed from r1088039,
openejb/trunk/openejb3/examples/injection-of-env-entry/src/test/java/org/superbiz/injection/InvoiceBeanTest.java
Removed:
openejb/trunk/openejb3/examples/alternate-descriptors/src/main/java/org/superbiz/altdd/MoviesImpl.java
openejb/trunk/openejb3/examples/alternate-descriptors/src/test/resources/
openejb/trunk/openejb3/examples/component-interfaces/src/main/java/org/superbiz/FriendlyPersonImpl.java
openejb/trunk/openejb3/examples/component-interfaces/src/main/resources/
openejb/trunk/openejb3/examples/custom-injection/src/main/java/org/superbiz/enventries/StratocasterImpl.java
openejb/trunk/openejb3/examples/custom-injection/src/main/resources/META-INF/ejb-jar.xml
openejb/trunk/openejb3/examples/injection-of-connectionfactory/src/main/java/org/superbiz/injection/jms/MessagingBean.java
openejb/trunk/openejb3/examples/injection-of-connectionfactory/src/main/java/org/superbiz/injection/jms/MessagingLocal.java
openejb/trunk/openejb3/examples/injection-of-connectionfactory/src/main/resources/
openejb/trunk/openejb3/examples/injection-of-datasource/src/main/java/org/superbiz/injection/MoviesImpl.java
openejb/trunk/openejb3/examples/injection-of-datasource/src/main/resources/
openejb/trunk/openejb3/examples/injection-of-ejbs/src/main/java/org/superbiz/injection/DataReaderImpl.java
openejb/trunk/openejb3/examples/injection-of-ejbs/src/main/java/org/superbiz/injection/DataReaderLocal.java
openejb/trunk/openejb3/examples/injection-of-ejbs/src/main/java/org/superbiz/injection/DataReaderRemote.java
openejb/trunk/openejb3/examples/injection-of-ejbs/src/main/java/org/superbiz/injection/DataStoreImpl.java
openejb/trunk/openejb3/examples/injection-of-ejbs/src/main/resources/
openejb/trunk/openejb3/examples/injection-of-entitymanager/src/main/java/org/superbiz/injection/jpa/MoviesImpl.java
openejb/trunk/openejb3/examples/injection-of-entitymanager/src/main/resources/META-INF/ejb-jar.xml
openejb/trunk/openejb3/examples/injection-of-env-entry/src/main/java/org/superbiz/injection/Invoice.java
openejb/trunk/openejb3/examples/injection-of-env-entry/src/main/java/org/superbiz/injection/InvoiceBean.java
openejb/trunk/openejb3/examples/injection-of-env-entry/src/main/java/org/superbiz/injection/LineItem.java
openejb/trunk/openejb3/examples/injection-of-env-entry/src/main/java/org/superbiz/injection/PurchaseOrder.java
openejb/trunk/openejb3/examples/injection-of-env-entry/src/main/java/org/superbiz/injection/PurchaseOrderBean.java
openejb/trunk/openejb3/examples/injection-of-env-entry/src/main/java/org/superbiz/injection/TooManyItemsException.java
openejb/trunk/openejb3/examples/injection-of-env-entry/src/test/java/org/superbiz/injection/InvoiceBeanTest.java
openejb/trunk/openejb3/examples/injection-of-env-entry/src/test/java/org/superbiz/injection/PurchaseOrderBeanTest.java
Modified:
openejb/trunk/openejb3/examples/alternate-descriptors/src/test/java/org/superbiz/altdd/MoviesTest.java
openejb/trunk/openejb3/examples/component-interfaces/src/test/java/org/superbiz/FriendlyPersonTest.java
openejb/trunk/openejb3/examples/custom-injection/src/test/java/org/superbiz/enventries/StratocasterTest.java
openejb/trunk/openejb3/examples/injection-of-connectionfactory/src/test/java/org/superbiz/injection/jms/MessagingBeanTest.java
openejb/trunk/openejb3/examples/injection-of-datasource/src/test/java/org/superbiz/injection/MoviesTest.java
openejb/trunk/openejb3/examples/injection-of-ejbs/src/test/java/org/superbiz/injection/EjbDependencyTest.java
openejb/trunk/openejb3/examples/injection-of-entitymanager/src/test/java/org/superbiz/injection/jpa/MoviesTest.java
openejb/trunk/openejb3/examples/injection-of-env-entry/src/main/resources/META-INF/ejb-jar.xml
Copied:
openejb/trunk/openejb3/examples/alternate-descriptors/src/main/java/org/superbiz/altdd/Movies.java
(from r1088039,
openejb/trunk/openejb3/examples/alternate-descriptors/src/main/java/org/superbiz/altdd/MoviesImpl.java)
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/examples/alternate-descriptors/src/main/java/org/superbiz/altdd/Movies.java?p2=openejb/trunk/openejb3/examples/alternate-descriptors/src/main/java/org/superbiz/altdd/Movies.java&p1=openejb/trunk/openejb3/examples/alternate-descriptors/src/main/java/org/superbiz/altdd/MoviesImpl.java&r1=1088039&r2=1090807&rev=1090807&view=diff
==============================================================================
---
openejb/trunk/openejb3/examples/alternate-descriptors/src/main/java/org/superbiz/altdd/MoviesImpl.java
(original)
+++
openejb/trunk/openejb3/examples/alternate-descriptors/src/main/java/org/superbiz/altdd/Movies.java
Sun Apr 10 14:12:31 2011
@@ -26,9 +26,9 @@ import javax.persistence.Query;
import java.util.List;
//START SNIPPET: code
-@Stateful(name = "Movies")
+@Stateful
@TransactionAttribute(MANDATORY)
-public class MoviesImpl implements Movies {
+public class Movies {
@PersistenceContext(unitName = "movie-unit", type =
PersistenceContextType.TRANSACTION)
private EntityManager entityManager;
Modified:
openejb/trunk/openejb3/examples/alternate-descriptors/src/test/java/org/superbiz/altdd/MoviesTest.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/examples/alternate-descriptors/src/test/java/org/superbiz/altdd/MoviesTest.java?rev=1090807&r1=1090806&r2=1090807&view=diff
==============================================================================
---
openejb/trunk/openejb3/examples/alternate-descriptors/src/test/java/org/superbiz/altdd/MoviesTest.java
(original)
+++
openejb/trunk/openejb3/examples/alternate-descriptors/src/test/java/org/superbiz/altdd/MoviesTest.java
Sun Apr 10 14:12:31 2011
@@ -18,17 +18,12 @@ package org.superbiz.altdd;
import junit.framework.TestCase;
-import javax.naming.Context;
-import javax.naming.InitialContext;
+import javax.ejb.embeddable.EJBContainer;
import javax.ejb.EJB;
import javax.ejb.SessionContext;
import javax.transaction.UserTransaction;
-import javax.transaction.HeuristicMixedException;
-import javax.transaction.HeuristicRollbackException;
import javax.transaction.RollbackException;
-import javax.transaction.SystemException;
import javax.annotation.Resource;
-import javax.annotation.PostConstruct;
import javax.persistence.PersistenceContext;
import javax.persistence.EntityManager;
import javax.interceptor.InvocationContext;
@@ -36,12 +31,7 @@ import javax.interceptor.AroundInvoke;
import java.util.Properties;
import java.util.List;
-import org.superbiz.altdd.Movie;
-import org.superbiz.altdd.Movies;
-import org.apache.openejb.api.LocalClient;
-
//START SNIPPET: code
-@LocalClient
public class MoviesTest extends TestCase {
@EJB
@@ -55,17 +45,13 @@ public class MoviesTest extends TestCase
public void setUp() throws Exception {
Properties p = new Properties();
- p.put(Context.INITIAL_CONTEXT_FACTORY,
"org.apache.openejb.client.LocalInitialContextFactory");
p.put("movieDatabase", "new://Resource?type=DataSource");
p.put("movieDatabase.JdbcDriver", "org.hsqldb.jdbcDriver");
p.put("movieDatabase.JdbcUrl", "jdbc:hsqldb:mem:moviedb");
p.put("openejb.altdd.prefix", "test");
- InitialContext initialContext = new InitialContext(p);
-
- // Here's the fun part
- initialContext.bind("inject", this);
+ EJBContainer.createEJBContainer(p).getContext().bind("inject", this);
}
public void test() throws Exception {
Copied:
openejb/trunk/openejb3/examples/component-interfaces/src/main/java/org/superbiz/FriendlyPerson.java
(from r1088039,
openejb/trunk/openejb3/examples/component-interfaces/src/main/java/org/superbiz/FriendlyPersonImpl.java)
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/examples/component-interfaces/src/main/java/org/superbiz/FriendlyPerson.java?p2=openejb/trunk/openejb3/examples/component-interfaces/src/main/java/org/superbiz/FriendlyPerson.java&p1=openejb/trunk/openejb3/examples/component-interfaces/src/main/java/org/superbiz/FriendlyPersonImpl.java&r1=1088039&r2=1090807&rev=1090807&view=diff
==============================================================================
---
openejb/trunk/openejb3/examples/component-interfaces/src/main/java/org/superbiz/FriendlyPersonImpl.java
(original)
+++
openejb/trunk/openejb3/examples/component-interfaces/src/main/java/org/superbiz/FriendlyPerson.java
Sun Apr 10 14:12:31 2011
@@ -17,6 +17,7 @@
package org.superbiz;
import javax.ejb.Init;
+import javax.ejb.LocalBean;
import javax.ejb.Remove;
import javax.ejb.Stateful;
import javax.ejb.Remote;
@@ -35,6 +36,7 @@ import java.util.Properties;
* @author <a href="mailto:[email protected]">David Blevins</a>
*/
//START SNIPPET: code
+
// EJB 3.0 Style business interfaces
// Each of these interfaces are already annotated in the classes
// themselves with @Remote and @Local, so annotating them here
@@ -49,15 +51,15 @@ import java.util.Properties;
@RemoteHome(FriendlyPersonEjbHome.class)
@LocalHome(FriendlyPersonEjbLocalHome.class)
-@Stateful(name="FriendlyPerson")
-public class FriendlyPersonImpl implements FriendlyPersonLocal,
FriendlyPersonRemote {
+@Stateful
+public class FriendlyPerson implements FriendlyPersonLocal,
FriendlyPersonRemote {
private final HashMap<String, MessageFormat> greetings;
private final Properties languagePreferences;
private String defaultLanguage;
- public FriendlyPersonImpl() {
+ public FriendlyPerson() {
greetings = new HashMap();
languagePreferences = new Properties();
defaultLanguage = Locale.getDefault().getLanguage();
Propchange:
openejb/trunk/openejb3/examples/component-interfaces/src/main/java/org/superbiz/FriendlyPerson.java
------------------------------------------------------------------------------
svn:keywords = Date Rev Author Id Revision HeadURL
Modified:
openejb/trunk/openejb3/examples/component-interfaces/src/test/java/org/superbiz/FriendlyPersonTest.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/examples/component-interfaces/src/test/java/org/superbiz/FriendlyPersonTest.java?rev=1090807&r1=1090806&r2=1090807&view=diff
==============================================================================
---
openejb/trunk/openejb3/examples/component-interfaces/src/test/java/org/superbiz/FriendlyPersonTest.java
(original)
+++
openejb/trunk/openejb3/examples/component-interfaces/src/test/java/org/superbiz/FriendlyPersonTest.java
Sun Apr 10 14:12:31 2011
@@ -18,10 +18,9 @@ package org.superbiz;
import junit.framework.TestCase;
-import javax.naming.InitialContext;
+import javax.ejb.embeddable.EJBContainer;
import javax.naming.Context;
import java.util.Locale;
-import java.util.Properties;
/**
* @author <a href="mailto:[email protected]">David Blevins</a>
@@ -29,12 +28,11 @@ import java.util.Properties;
* @version $Rev$ $Date$
*/
public class FriendlyPersonTest extends TestCase {
- private InitialContext initialContext;
+
+ private Context context;
protected void setUp() throws Exception {
- Properties properties = new Properties();
- properties.setProperty(Context.INITIAL_CONTEXT_FACTORY,
"org.apache.openejb.client.LocalInitialContextFactory");
- initialContext = new InitialContext(properties);
+ context = EJBContainer.createEJBContainer().getContext();
}
/**
@@ -44,7 +42,7 @@ public class FriendlyPersonTest extends
*/
//START SNIPPET: remotehome
public void testEjbHomeAndEjbObject() throws Exception {
- Object object = initialContext.lookup("FriendlyPersonRemoteHome");
+ Object object =
context.lookup("java:global/component-interfaces/FriendlyPerson!org.superbiz.FriendlyPersonEjbHome");
FriendlyPersonEjbHome home = (FriendlyPersonEjbHome) object;
FriendlyPersonEjbObject friendlyPerson = home.create();
@@ -81,7 +79,7 @@ public class FriendlyPersonTest extends
* @throws Exception
*/
public void testEjbLocalHomeAndEjbLocalObject() throws Exception {
- Object object = initialContext.lookup("FriendlyPersonLocalHome");
+ Object object =
context.lookup("java:global/component-interfaces/FriendlyPerson!org.superbiz.FriendlyPersonEjbLocalHome");
FriendlyPersonEjbLocalHome home = (FriendlyPersonEjbLocalHome) object;
FriendlyPersonEjbLocalObject friendlyPerson = home.create();
@@ -117,7 +115,7 @@ public class FriendlyPersonTest extends
*/
//START SNIPPET: remote
public void testBusinessRemote() throws Exception {
- Object object = initialContext.lookup("FriendlyPersonRemote");
+ Object object =
context.lookup("java:global/component-interfaces/FriendlyPerson!org.superbiz.FriendlyPersonRemote");
FriendlyPersonRemote friendlyPerson = (FriendlyPersonRemote) object;
@@ -153,7 +151,7 @@ public class FriendlyPersonTest extends
* @throws Exception
*/
public void testBusinessLocal() throws Exception {
- Object object = initialContext.lookup("FriendlyPersonLocal");
+ Object object =
context.lookup("java:global/component-interfaces/FriendlyPerson!org.superbiz.FriendlyPersonLocal");
FriendlyPersonLocal friendlyPerson = (FriendlyPersonLocal) object;
Copied:
openejb/trunk/openejb3/examples/custom-injection/src/main/java/org/superbiz/enventries/Stratocaster.java
(from r1088039,
openejb/trunk/openejb3/examples/custom-injection/src/main/java/org/superbiz/enventries/StratocasterImpl.java)
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/examples/custom-injection/src/main/java/org/superbiz/enventries/Stratocaster.java?p2=openejb/trunk/openejb3/examples/custom-injection/src/main/java/org/superbiz/enventries/Stratocaster.java&p1=openejb/trunk/openejb3/examples/custom-injection/src/main/java/org/superbiz/enventries/StratocasterImpl.java&r1=1088039&r2=1090807&rev=1090807&view=diff
==============================================================================
---
openejb/trunk/openejb3/examples/custom-injection/src/main/java/org/superbiz/enventries/StratocasterImpl.java
(original)
+++
openejb/trunk/openejb3/examples/custom-injection/src/main/java/org/superbiz/enventries/Stratocaster.java
Sun Apr 10 14:12:31 2011
@@ -33,7 +33,7 @@ import java.util.Map;
*/
//START SNIPPET: code
@Stateless
-public class StratocasterImpl implements Stratocaster {
+public class Stratocaster {
@Resource(name = "pickups")
Modified:
openejb/trunk/openejb3/examples/custom-injection/src/test/java/org/superbiz/enventries/StratocasterTest.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/examples/custom-injection/src/test/java/org/superbiz/enventries/StratocasterTest.java?rev=1090807&r1=1090806&r2=1090807&view=diff
==============================================================================
---
openejb/trunk/openejb3/examples/custom-injection/src/test/java/org/superbiz/enventries/StratocasterTest.java
(original)
+++
openejb/trunk/openejb3/examples/custom-injection/src/test/java/org/superbiz/enventries/StratocasterTest.java
Sun Apr 10 14:12:31 2011
@@ -20,6 +20,8 @@ import static java.util.Arrays.asList;
import junit.framework.TestCase;
+import javax.ejb.EJB;
+import javax.ejb.embeddable.EJBContainer;
import javax.naming.InitialContext;
import javax.naming.Context;
@@ -46,18 +48,11 @@ import java.text.DateFormat;
//START SNIPPET: code
public class StratocasterTest extends TestCase {
- private InitialContext initialContext;
-
- protected void setUp() throws Exception {
- Properties properties = new Properties();
- properties.setProperty(Context.INITIAL_CONTEXT_FACTORY,
"org.apache.openejb.client.LocalInitialContextFactory");
-
- initialContext = new InitialContext(properties);
- }
+ @EJB
+ private Stratocaster strat;
public void test() throws Exception {
- Stratocaster strat = (Stratocaster)
initialContext.lookup("StratocasterImplLocal");
-
+ EJBContainer.createEJBContainer().getContext().bind("inject", this);
Date date = DateFormat.getDateInstance(DateFormat.MEDIUM,
Locale.US).parse("Mar 1, 1962");
assertEquals("Strat.getDateCreated()", date, strat.getDateCreated());
Copied:
openejb/trunk/openejb3/examples/injection-of-connectionfactory/src/main/java/org/superbiz/injection/jms/Messages.java
(from r1088039,
openejb/trunk/openejb3/examples/injection-of-connectionfactory/src/main/java/org/superbiz/injection/jms/MessagingBean.java)
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/examples/injection-of-connectionfactory/src/main/java/org/superbiz/injection/jms/Messages.java?p2=openejb/trunk/openejb3/examples/injection-of-connectionfactory/src/main/java/org/superbiz/injection/jms/Messages.java&p1=openejb/trunk/openejb3/examples/injection-of-connectionfactory/src/main/java/org/superbiz/injection/jms/MessagingBean.java&r1=1088039&r2=1090807&rev=1090807&view=diff
==============================================================================
---
openejb/trunk/openejb3/examples/injection-of-connectionfactory/src/main/java/org/superbiz/injection/jms/MessagingBean.java
(original)
+++
openejb/trunk/openejb3/examples/injection-of-connectionfactory/src/main/java/org/superbiz/injection/jms/Messages.java
Sun Apr 10 14:12:31 2011
@@ -30,7 +30,7 @@ import javax.jms.Session;
import javax.jms.TextMessage;
@Stateless
-public class MessagingBean implements MessagingLocal {
+public class Messages {
@Resource
private ConnectionFactory connectionFactory;
Modified:
openejb/trunk/openejb3/examples/injection-of-connectionfactory/src/test/java/org/superbiz/injection/jms/MessagingBeanTest.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/examples/injection-of-connectionfactory/src/test/java/org/superbiz/injection/jms/MessagingBeanTest.java?rev=1090807&r1=1090806&r2=1090807&view=diff
==============================================================================
---
openejb/trunk/openejb3/examples/injection-of-connectionfactory/src/test/java/org/superbiz/injection/jms/MessagingBeanTest.java
(original)
+++
openejb/trunk/openejb3/examples/injection-of-connectionfactory/src/test/java/org/superbiz/injection/jms/MessagingBeanTest.java
Sun Apr 10 14:12:31 2011
@@ -19,26 +19,24 @@ package org.superbiz.injection.jms;
import junit.framework.TestCase;
+import javax.ejb.embeddable.EJBContainer;
import javax.naming.Context;
-import javax.naming.InitialContext;
-import java.util.Properties;
public class MessagingBeanTest extends TestCase {
public void test() throws Exception {
- Properties p = new Properties();
- p.put(Context.INITIAL_CONTEXT_FACTORY,
"org.apache.openejb.client.LocalInitialContextFactory");
- InitialContext context = new InitialContext(p);
-
- MessagingLocal bean = (MessagingLocal)
context.lookup("MessagingBeanLocal");
-
- bean.sendMessage("Hello World!");
- bean.sendMessage("How are you?");
- bean.sendMessage("Still spinning?");
-
- assertEquals(bean.receiveMessage(), "Hello World!");
- assertEquals(bean.receiveMessage(), "How are you?");
- assertEquals(bean.receiveMessage(), "Still spinning?");
+
+ final Context context = EJBContainer.createEJBContainer().getContext();
+
+ Messages messages = (Messages)
context.lookup("java:global/injection-of-connectionfactory/Messages");
+
+ messages.sendMessage("Hello World!");
+ messages.sendMessage("How are you?");
+ messages.sendMessage("Still spinning?");
+
+ assertEquals(messages.receiveMessage(), "Hello World!");
+ assertEquals(messages.receiveMessage(), "How are you?");
+ assertEquals(messages.receiveMessage(), "Still spinning?");
}
}
//END SNIPPET: code
Copied:
openejb/trunk/openejb3/examples/injection-of-datasource/src/main/java/org/superbiz/injection/Movies.java
(from r1088039,
openejb/trunk/openejb3/examples/injection-of-datasource/src/main/java/org/superbiz/injection/MoviesImpl.java)
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/examples/injection-of-datasource/src/main/java/org/superbiz/injection/Movies.java?p2=openejb/trunk/openejb3/examples/injection-of-datasource/src/main/java/org/superbiz/injection/Movies.java&p1=openejb/trunk/openejb3/examples/injection-of-datasource/src/main/java/org/superbiz/injection/MoviesImpl.java&r1=1088039&r2=1090807&rev=1090807&view=diff
==============================================================================
---
openejb/trunk/openejb3/examples/injection-of-datasource/src/main/java/org/superbiz/injection/MoviesImpl.java
(original)
+++
openejb/trunk/openejb3/examples/injection-of-datasource/src/main/java/org/superbiz/injection/Movies.java
Sun Apr 10 14:12:31 2011
@@ -27,8 +27,8 @@ import java.sql.ResultSet;
import java.util.List;
import java.util.ArrayList;
-@Stateful(name = "Movies")
-public class MoviesImpl implements Movies {
+@Stateful
+public class Movies {
/**
* The field name "movieDatabase" matches the DataSource we
Modified:
openejb/trunk/openejb3/examples/injection-of-datasource/src/test/java/org/superbiz/injection/MoviesTest.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/examples/injection-of-datasource/src/test/java/org/superbiz/injection/MoviesTest.java?rev=1090807&r1=1090806&r2=1090807&view=diff
==============================================================================
---
openejb/trunk/openejb3/examples/injection-of-datasource/src/test/java/org/superbiz/injection/MoviesTest.java
(original)
+++
openejb/trunk/openejb3/examples/injection-of-datasource/src/test/java/org/superbiz/injection/MoviesTest.java
Sun Apr 10 14:12:31 2011
@@ -18,6 +18,7 @@ package org.superbiz.injection;
import junit.framework.TestCase;
+import javax.ejb.embeddable.EJBContainer;
import javax.naming.Context;
import javax.naming.InitialContext;
import java.util.Properties;
@@ -27,15 +28,15 @@ import java.util.List;
public class MoviesTest extends TestCase {
public void test() throws Exception {
+
Properties p = new Properties();
- p.put(Context.INITIAL_CONTEXT_FACTORY,
"org.apache.openejb.client.LocalInitialContextFactory");
p.put("movieDatabase", "new://Resource?type=DataSource");
p.put("movieDatabase.JdbcDriver", "org.hsqldb.jdbcDriver");
p.put("movieDatabase.JdbcUrl", "jdbc:hsqldb:mem:moviedb");
- Context context = new InitialContext(p);
+ Context context = EJBContainer.createEJBContainer(p).getContext();
- Movies movies = (Movies) context.lookup("MoviesLocal");
+ Movies movies = (Movies)
context.lookup("java:global/injection-of-datasource/Movies");
movies.addMovie(new Movie("Quentin Tarantino", "Reservoir Dogs",
1992));
movies.addMovie(new Movie("Joel Coen", "Fargo", 1996));
Copied:
openejb/trunk/openejb3/examples/injection-of-ejbs/src/main/java/org/superbiz/injection/DataReader.java
(from r1088039,
openejb/trunk/openejb3/examples/injection-of-ejbs/src/main/java/org/superbiz/injection/DataReaderImpl.java)
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/examples/injection-of-ejbs/src/main/java/org/superbiz/injection/DataReader.java?p2=openejb/trunk/openejb3/examples/injection-of-ejbs/src/main/java/org/superbiz/injection/DataReader.java&p1=openejb/trunk/openejb3/examples/injection-of-ejbs/src/main/java/org/superbiz/injection/DataReaderImpl.java&r1=1088039&r2=1090807&rev=1090807&view=diff
==============================================================================
---
openejb/trunk/openejb3/examples/injection-of-ejbs/src/main/java/org/superbiz/injection/DataReaderImpl.java
(original)
+++
openejb/trunk/openejb3/examples/injection-of-ejbs/src/main/java/org/superbiz/injection/DataReader.java
Sun Apr 10 14:12:31 2011
@@ -20,7 +20,7 @@ import javax.ejb.EJB;
import javax.ejb.Stateless;
/**
- * This is an EJB 3 style pojo stateless session bean
+ * This is an EJB 3.1 style pojo stateless session bean
* Every stateless session bean implementation must be annotated
* using the annotation @Stateless
* This EJB has 2 business interfaces: DataReaderRemote, a remote business
@@ -36,15 +36,20 @@ import javax.ejb.Stateless;
*/
//START SNIPPET: code
@Stateless
-public class DataReaderImpl implements DataReaderLocal, DataReaderRemote {
+public class DataReader {
@EJB private DataStoreRemote dataStoreRemote;
@EJB private DataStoreLocal dataStoreLocal;
-
+ @EJB private DataStore dataStore;
+
public String readDataFromLocalStore() {
return "LOCAL:"+dataStoreLocal.getData();
}
+ public String readDataFromLocalBeanStore() {
+ return "LOCALBEAN:"+dataStore.getData();
+ }
+
public String readDataFromRemoteStore() {
return "REMOTE:"+dataStoreRemote.getData();
}
Propchange:
openejb/trunk/openejb3/examples/injection-of-ejbs/src/main/java/org/superbiz/injection/DataReader.java
------------------------------------------------------------------------------
svn:keywords = Date Rev Author Id Revision HeadURL
Copied:
openejb/trunk/openejb3/examples/injection-of-ejbs/src/main/java/org/superbiz/injection/DataStore.java
(from r1088039,
openejb/trunk/openejb3/examples/injection-of-ejbs/src/main/java/org/superbiz/injection/DataStoreImpl.java)
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/examples/injection-of-ejbs/src/main/java/org/superbiz/injection/DataStore.java?p2=openejb/trunk/openejb3/examples/injection-of-ejbs/src/main/java/org/superbiz/injection/DataStore.java&p1=openejb/trunk/openejb3/examples/injection-of-ejbs/src/main/java/org/superbiz/injection/DataStoreImpl.java&r1=1088039&r2=1090807&rev=1090807&view=diff
==============================================================================
---
openejb/trunk/openejb3/examples/injection-of-ejbs/src/main/java/org/superbiz/injection/DataStoreImpl.java
(original)
+++
openejb/trunk/openejb3/examples/injection-of-ejbs/src/main/java/org/superbiz/injection/DataStore.java
Sun Apr 10 14:12:31 2011
@@ -16,6 +16,7 @@
*/
package org.superbiz.injection;
+import javax.ejb.LocalBean;
import javax.ejb.Stateless;
/**
@@ -28,7 +29,8 @@ import javax.ejb.Stateless;
*/
//START SNIPPET: code
@Stateless
-public class DataStoreImpl implements DataStoreLocal, DataStoreRemote{
+@LocalBean
+public class DataStore implements DataStoreLocal, DataStoreRemote{
public String getData() {
return "42";
Propchange:
openejb/trunk/openejb3/examples/injection-of-ejbs/src/main/java/org/superbiz/injection/DataStore.java
------------------------------------------------------------------------------
svn:keywords = Date Rev Author Id Revision HeadURL
Modified:
openejb/trunk/openejb3/examples/injection-of-ejbs/src/test/java/org/superbiz/injection/EjbDependencyTest.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/examples/injection-of-ejbs/src/test/java/org/superbiz/injection/EjbDependencyTest.java?rev=1090807&r1=1090806&r2=1090807&view=diff
==============================================================================
---
openejb/trunk/openejb3/examples/injection-of-ejbs/src/test/java/org/superbiz/injection/EjbDependencyTest.java
(original)
+++
openejb/trunk/openejb3/examples/injection-of-ejbs/src/test/java/org/superbiz/injection/EjbDependencyTest.java
Sun Apr 10 14:12:31 2011
@@ -16,10 +16,8 @@
*/
package org.superbiz.injection;
-import java.util.Properties;
-
+import javax.ejb.embeddable.EJBContainer;
import javax.naming.Context;
-import javax.naming.InitialContext;
import junit.framework.TestCase;
@@ -30,22 +28,16 @@ import junit.framework.TestCase;
//START SNIPPET: code
public class EjbDependencyTest extends TestCase {
- private InitialContext initialContext;
-
- protected void setUp() throws Exception {
- Properties properties = new Properties();
- properties.setProperty(Context.INITIAL_CONTEXT_FACTORY,
"org.apache.openejb.client.LocalInitialContextFactory");
-
- initialContext = new InitialContext(properties);
- }
-
public void test() throws Exception {
- DataReaderLocal dataReader = (DataReaderLocal)
initialContext.lookup("DataReaderImplLocal");
+ final Context context = EJBContainer.createEJBContainer().getContext();
+
+ DataReader dataReader = (DataReader)
context.lookup("java:global/injection-of-ejbs/DataReader");
assertNotNull(dataReader);
assertEquals("LOCAL:42", dataReader.readDataFromLocalStore());
assertEquals("REMOTE:42", dataReader.readDataFromRemoteStore());
+ assertEquals("LOCALBEAN:42", dataReader.readDataFromLocalBeanStore());
}
}
//END SNIPPET: code
Copied:
openejb/trunk/openejb3/examples/injection-of-entitymanager/src/main/java/org/superbiz/injection/jpa/Movies.java
(from r1088039,
openejb/trunk/openejb3/examples/injection-of-entitymanager/src/main/java/org/superbiz/injection/jpa/MoviesImpl.java)
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/examples/injection-of-entitymanager/src/main/java/org/superbiz/injection/jpa/Movies.java?p2=openejb/trunk/openejb3/examples/injection-of-entitymanager/src/main/java/org/superbiz/injection/jpa/Movies.java&p1=openejb/trunk/openejb3/examples/injection-of-entitymanager/src/main/java/org/superbiz/injection/jpa/MoviesImpl.java&r1=1088039&r2=1090807&rev=1090807&view=diff
==============================================================================
---
openejb/trunk/openejb3/examples/injection-of-entitymanager/src/main/java/org/superbiz/injection/jpa/MoviesImpl.java
(original)
+++
openejb/trunk/openejb3/examples/injection-of-entitymanager/src/main/java/org/superbiz/injection/jpa/Movies.java
Sun Apr 10 14:12:31 2011
@@ -17,6 +17,7 @@
package org.superbiz.injection.jpa;
//START SNIPPET: code
+
import javax.ejb.Stateful;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
@@ -24,8 +25,8 @@ import javax.persistence.PersistenceCont
import javax.persistence.Query;
import java.util.List;
-@Stateful(name = "Movies")
-public class MoviesImpl implements Movies {
+@Stateful
+public class Movies {
@PersistenceContext(unitName = "movie-unit", type =
PersistenceContextType.EXTENDED)
private EntityManager entityManager;
Modified:
openejb/trunk/openejb3/examples/injection-of-entitymanager/src/test/java/org/superbiz/injection/jpa/MoviesTest.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/examples/injection-of-entitymanager/src/test/java/org/superbiz/injection/jpa/MoviesTest.java?rev=1090807&r1=1090806&r2=1090807&view=diff
==============================================================================
---
openejb/trunk/openejb3/examples/injection-of-entitymanager/src/test/java/org/superbiz/injection/jpa/MoviesTest.java
(original)
+++
openejb/trunk/openejb3/examples/injection-of-entitymanager/src/test/java/org/superbiz/injection/jpa/MoviesTest.java
Sun Apr 10 14:12:31 2011
@@ -18,8 +18,8 @@ package org.superbiz.injection.jpa;
import junit.framework.TestCase;
+import javax.ejb.embeddable.EJBContainer;
import javax.naming.Context;
-import javax.naming.InitialContext;
import java.util.List;
import java.util.Properties;
@@ -27,20 +27,15 @@ import java.util.Properties;
public class MoviesTest extends TestCase {
public void test() throws Exception {
- Properties p = new Properties();
- p.put(Context.INITIAL_CONTEXT_FACTORY,
"org.apache.openejb.client.LocalInitialContextFactory");
+
+ 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");
- p.put("movieDatabaseUnmanaged", "new://Resource?type=DataSource");
- p.put("movieDatabaseUnmanaged.JdbcDriver", "org.hsqldb.jdbcDriver");
- p.put("movieDatabaseUnmanaged.JdbcUrl", "jdbc:hsqldb:mem:moviedb");
- p.put("movieDatabaseUnmanaged.JtaManaged", "false");
-
- Context context = new InitialContext(p);
+ final Context context =
EJBContainer.createEJBContainer(p).getContext();
- Movies movies = (Movies) context.lookup("MoviesLocal");
+ Movies movies = (Movies)
context.lookup("java:global/injection-of-entitymanager/Movies");
movies.addMovie(new Movie("Quentin Tarantino", "Reservoir Dogs",
1992));
movies.addMovie(new Movie("Joel Coen", "Fargo", 1996));
Added:
openejb/trunk/openejb3/examples/injection-of-env-entry/src/main/java/org/superbiz/injection/enventry/Configuration.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/examples/injection-of-env-entry/src/main/java/org/superbiz/injection/enventry/Configuration.java?rev=1090807&view=auto
==============================================================================
---
openejb/trunk/openejb3/examples/injection-of-env-entry/src/main/java/org/superbiz/injection/enventry/Configuration.java
(added)
+++
openejb/trunk/openejb3/examples/injection-of-env-entry/src/main/java/org/superbiz/injection/enventry/Configuration.java
Sun Apr 10 14:12:31 2011
@@ -0,0 +1,63 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.superbiz.injection.enventry;
+
+import javax.annotation.Resource;
+import javax.ejb.Singleton;
+import java.util.Date;
+
+/**
+ * This example demostrates the use of the injection of environment entries
+ * using <b>Resource</b> annotation.
+ * <p/>
+ * "EJB Core Contracts and Requirements" specification section 16.4.1.1.
+ *
+ * @version $Rev$ $Date$
+ */
+//START SNIPPET: code
+@Singleton
+public class Configuration {
+
+ @Resource
+ private String color;
+
+ @Resource
+ private Shape shape;
+
+ @Resource
+ private Class strategy;
+
+ @Resource(name = "date")
+ private long date;
+
+ public String getColor() {
+ return color;
+ }
+
+ public Shape getShape() {
+ return shape;
+ }
+
+ public Class getStrategy() {
+ return strategy;
+ }
+
+ public Date getDate() {
+ return new Date(date);
+ }
+}
+//END SNIPPET: code
Propchange:
openejb/trunk/openejb3/examples/injection-of-env-entry/src/main/java/org/superbiz/injection/enventry/Configuration.java
------------------------------------------------------------------------------
svn:keywords = Date Rev Author Id Revision HeadURL
Added:
openejb/trunk/openejb3/examples/injection-of-env-entry/src/main/java/org/superbiz/injection/enventry/Shape.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/examples/injection-of-env-entry/src/main/java/org/superbiz/injection/enventry/Shape.java?rev=1090807&view=auto
==============================================================================
---
openejb/trunk/openejb3/examples/injection-of-env-entry/src/main/java/org/superbiz/injection/enventry/Shape.java
(added)
+++
openejb/trunk/openejb3/examples/injection-of-env-entry/src/main/java/org/superbiz/injection/enventry/Shape.java
Sun Apr 10 14:12:31 2011
@@ -0,0 +1,12 @@
+package org.superbiz.injection.enventry;
+
+/**
+ * @version $Revision$ $Date$
+ */
+public enum Shape {
+
+ CIRCLE,
+ TRIANGLE,
+ SQUARE
+
+}
Propchange:
openejb/trunk/openejb3/examples/injection-of-env-entry/src/main/java/org/superbiz/injection/enventry/Shape.java
------------------------------------------------------------------------------
svn:eol-style = native
Added:
openejb/trunk/openejb3/examples/injection-of-env-entry/src/main/java/org/superbiz/injection/enventry/Widget.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/examples/injection-of-env-entry/src/main/java/org/superbiz/injection/enventry/Widget.java?rev=1090807&view=auto
==============================================================================
---
openejb/trunk/openejb3/examples/injection-of-env-entry/src/main/java/org/superbiz/injection/enventry/Widget.java
(added)
+++
openejb/trunk/openejb3/examples/injection-of-env-entry/src/main/java/org/superbiz/injection/enventry/Widget.java
Sun Apr 10 14:12:31 2011
@@ -0,0 +1,26 @@
+/**
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.superbiz.injection.enventry;
+
+/**
+ * Exists to show that any class object can be injected and does
+ * not need to be loaded directly in app code.
+ *
+ * @version $Revision$ $Date$
+ */
+public class Widget {
+}
Propchange:
openejb/trunk/openejb3/examples/injection-of-env-entry/src/main/java/org/superbiz/injection/enventry/Widget.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified:
openejb/trunk/openejb3/examples/injection-of-env-entry/src/main/resources/META-INF/ejb-jar.xml
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/examples/injection-of-env-entry/src/main/resources/META-INF/ejb-jar.xml?rev=1090807&r1=1090806&r2=1090807&view=diff
==============================================================================
---
openejb/trunk/openejb3/examples/injection-of-env-entry/src/main/resources/META-INF/ejb-jar.xml
(original)
+++
openejb/trunk/openejb3/examples/injection-of-env-entry/src/main/resources/META-INF/ejb-jar.xml
Sun Apr 10 14:12:31 2011
@@ -23,12 +23,27 @@
<ejb-jar xmlns="http://java.sun.com/xml/ns/javaee" version="3.0"
metadata-complete="false">
<enterprise-beans>
<session>
- <ejb-name>InvoiceBean</ejb-name>
+ <ejb-name>Configuration</ejb-name>
<env-entry>
- <description>The maximum number of line items per
invoice.</description>
-
<env-entry-name>org.superbiz.injection.InvoiceBean/maxLineItems</env-entry-name>
- <env-entry-type>java.lang.Integer</env-entry-type>
- <env-entry-value>15</env-entry-value>
+
<env-entry-name>org.superbiz.injection.enventry.Configuration/color</env-entry-name>
+ <env-entry-type>java.lang.String</env-entry-type>
+ <env-entry-value>orange</env-entry-value>
+ </env-entry>
+ <env-entry>
+
<env-entry-name>org.superbiz.injection.enventry.Configuration/shape</env-entry-name>
+ <env-entry-type>org.superbiz.injection.enventry.Shape</env-entry-type>
+ <env-entry-value>TRIANGLE</env-entry-value>
+ </env-entry>
+ <env-entry>
+
<env-entry-name>org.superbiz.injection.enventry.Configuration/strategy</env-entry-name>
+ <env-entry-type>java.lang.Class</env-entry-type>
+
<env-entry-value>org.superbiz.injection.enventry.Widget</env-entry-value>
+ </env-entry>
+ <env-entry>
+ <description>The name was explicitly set in the annotation so the
classname prefix isn't required</description>
+ <env-entry-name>date</env-entry-name>
+ <env-entry-type>java.lang.Long</env-entry-type>
+ <env-entry-value>123456789</env-entry-value>
</env-entry>
</session>
</enterprise-beans>
Copied:
openejb/trunk/openejb3/examples/injection-of-env-entry/src/test/java/org/superbiz/injection/enventry/ConfigurationTest.java
(from r1088039,
openejb/trunk/openejb3/examples/injection-of-env-entry/src/test/java/org/superbiz/injection/InvoiceBeanTest.java)
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/examples/injection-of-env-entry/src/test/java/org/superbiz/injection/enventry/ConfigurationTest.java?p2=openejb/trunk/openejb3/examples/injection-of-env-entry/src/test/java/org/superbiz/injection/enventry/ConfigurationTest.java&p1=openejb/trunk/openejb3/examples/injection-of-env-entry/src/test/java/org/superbiz/injection/InvoiceBeanTest.java&r1=1088039&r2=1090807&rev=1090807&view=diff
==============================================================================
---
openejb/trunk/openejb3/examples/injection-of-env-entry/src/test/java/org/superbiz/injection/InvoiceBeanTest.java
(original)
+++
openejb/trunk/openejb3/examples/injection-of-env-entry/src/test/java/org/superbiz/injection/enventry/ConfigurationTest.java
Sun Apr 10 14:12:31 2011
@@ -14,45 +14,34 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.superbiz.injection;
+package org.superbiz.injection.enventry;
-import java.util.Properties;
+import javax.ejb.embeddable.EJBContainer;
import javax.naming.Context;
-import javax.naming.InitialContext;
import junit.framework.TestCase;
+import org.superbiz.injection.enventry.Configuration;
+import org.superbiz.injection.enventry.Shape;
+import org.superbiz.injection.enventry.Widget;
-//START SNIPPET: code
-public class InvoiceBeanTest extends TestCase {
+import java.util.Date;
- private InitialContext initialContext;
+//START SNIPPET: code
+public class ConfigurationTest extends TestCase {
- protected void setUp() throws Exception {
- Properties properties = new Properties();
- properties.setProperty(Context.INITIAL_CONTEXT_FACTORY,
"org.apache.openejb.client.LocalInitialContextFactory");
- initialContext = new InitialContext(properties);
- }
+ public void test() throws Exception {
+ final Context context = EJBContainer.createEJBContainer().getContext();
- public void testAddLineItem() throws Exception {
- Invoice order = (Invoice) initialContext.lookup("InvoiceBeanRemote");
- assertNotNull(order);
- LineItem item = new LineItem("ABC-1", "Test Item");
-
- try {
- order.addLineItem(item);
- } catch (TooManyItemsException tmie) {
- fail("Test failed due to: " + tmie.getMessage());
- }
- }
+ final Configuration configuration = (Configuration)
context.lookup("java:global/injection-of-env-entry/Configuration");
- public void testGetMaxLineItems() throws Exception {
- Invoice order = (Invoice) initialContext.lookup("InvoiceBeanRemote");
- assertNotNull(order);
+ assertEquals("orange", configuration.getColor());
- int maxLineItems = order.getMaxLineItems();
+ assertEquals(Shape.TRIANGLE, configuration.getShape());
- assertEquals(15, maxLineItems);
+ assertEquals(Widget.class, configuration.getStrategy());
+
+ assertEquals(new Date(123456789), configuration.getDate());
}
}
//END SNIPPET: code
Propchange:
openejb/trunk/openejb3/examples/injection-of-env-entry/src/test/java/org/superbiz/injection/enventry/ConfigurationTest.java
------------------------------------------------------------------------------
svn:keywords = Date Rev Author Id Revision HeadURL