You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@aries.apache.org by ti...@apache.org on 2011/08/02 12:04:47 UTC

svn commit: r1153085 - in /aries/trunk/ejb/ejb-modeller: ./ src/main/java/org/apache/aries/ejb/modelling/ src/main/java/org/apache/aries/ejb/modelling/impl/ src/test/java/org/apache/aries/ejb/modelling/impl/ src/test/java/test/ejbs/

Author: timothyjward
Date: Tue Aug  2 10:04:44 2011
New Revision: 1153085

URL: http://svn.apache.org/viewvc?rev=1153085&view=rev
Log:
Documentation and interface usability tweaks

Added:
    aries/trunk/ejb/ejb-modeller/src/test/java/test/ejbs/StatefulSessionBean.java
Modified:
    aries/trunk/ejb/ejb-modeller/pom.xml
    aries/trunk/ejb/ejb-modeller/src/main/java/org/apache/aries/ejb/modelling/EJBLocator.java
    aries/trunk/ejb/ejb-modeller/src/main/java/org/apache/aries/ejb/modelling/EJBRegistry.java
    aries/trunk/ejb/ejb-modeller/src/main/java/org/apache/aries/ejb/modelling/impl/EJBLocationUnavailable.java
    aries/trunk/ejb/ejb-modeller/src/main/java/org/apache/aries/ejb/modelling/impl/EJBLocatorFactory.java
    aries/trunk/ejb/ejb-modeller/src/main/java/org/apache/aries/ejb/modelling/impl/EJBModeller.java
    aries/trunk/ejb/ejb-modeller/src/main/java/org/apache/aries/ejb/modelling/impl/EJBServiceExport.java
    aries/trunk/ejb/ejb-modeller/src/main/java/org/apache/aries/ejb/modelling/impl/OpenEJBLocator.java
    aries/trunk/ejb/ejb-modeller/src/main/java/org/apache/aries/ejb/modelling/impl/ParsedEJBServices.java
    aries/trunk/ejb/ejb-modeller/src/main/java/org/apache/aries/ejb/modelling/impl/StandaloneEJBModeller.java
    aries/trunk/ejb/ejb-modeller/src/test/java/org/apache/aries/ejb/modelling/impl/EJBLocatorTest.java
    aries/trunk/ejb/ejb-modeller/src/test/java/org/apache/aries/ejb/modelling/impl/ParsedEJBServicesTest.java

Modified: aries/trunk/ejb/ejb-modeller/pom.xml
URL: http://svn.apache.org/viewvc/aries/trunk/ejb/ejb-modeller/pom.xml?rev=1153085&r1=1153084&r2=1153085&view=diff
==============================================================================
--- aries/trunk/ejb/ejb-modeller/pom.xml (original)
+++ aries/trunk/ejb/ejb-modeller/pom.xml Tue Aug  2 10:04:44 2011
@@ -39,7 +39,7 @@
 
     <properties>
 		<aries.osgi.export>
-		  org.apache.aries.ejb.modelling
+		  org.apache.aries.ejb.modelling;version="0.1.0"
 		</aries.osgi.export>
         <aries.osgi.private.pkg>
           org.apache.aries.ejb.modelling.*

Modified: aries/trunk/ejb/ejb-modeller/src/main/java/org/apache/aries/ejb/modelling/EJBLocator.java
URL: http://svn.apache.org/viewvc/aries/trunk/ejb/ejb-modeller/src/main/java/org/apache/aries/ejb/modelling/EJBLocator.java?rev=1153085&r1=1153084&r2=1153085&view=diff
==============================================================================
--- aries/trunk/ejb/ejb-modeller/src/main/java/org/apache/aries/ejb/modelling/EJBLocator.java (original)
+++ aries/trunk/ejb/ejb-modeller/src/main/java/org/apache/aries/ejb/modelling/EJBLocator.java Tue Aug  2 10:04:44 2011
@@ -20,8 +20,20 @@ import org.apache.aries.application.mode
 import org.apache.aries.util.filesystem.IDirectory;
 import org.apache.aries.util.manifest.BundleManifest;
 
+/**
+ * A plug point for locating session EJBs in a bundle.
+ */
 public interface EJBLocator {
 
+  /**
+   * Find any session beans defined in the IDirectory bundle and register them
+   * with the supplied {@link EJBRegistry}.
+   * 
+   * @param manifest The manifest for the bundle
+   * @param bundle The bundle binary
+   * @param registry The registry of located Session EJBs
+   * @throws ModellerException
+   */
   public void findEJBs(BundleManifest manifest, IDirectory bundle, EJBRegistry registry)
     throws ModellerException;
   

Modified: aries/trunk/ejb/ejb-modeller/src/main/java/org/apache/aries/ejb/modelling/EJBRegistry.java
URL: http://svn.apache.org/viewvc/aries/trunk/ejb/ejb-modeller/src/main/java/org/apache/aries/ejb/modelling/EJBRegistry.java?rev=1153085&r1=1153084&r2=1153085&view=diff
==============================================================================
--- aries/trunk/ejb/ejb-modeller/src/main/java/org/apache/aries/ejb/modelling/EJBRegistry.java (original)
+++ aries/trunk/ejb/ejb-modeller/src/main/java/org/apache/aries/ejb/modelling/EJBRegistry.java Tue Aug  2 10:04:44 2011
@@ -16,7 +16,18 @@
  */
 package org.apache.aries.ejb.modelling;
 
+/**
+ * A registry of located Session EJBs
+ */
 public interface EJBRegistry {
+  /**
+   * Add a view of a session EJB, e.g. a local home, remote business interface etc.
+   * 
+   * @param ejbName The ejb name
+   * @param ejbType The ejb type (e.g. stateless)
+   * @param interfaceName The fully qualified Java type name for this view
+   * @param remote
+   */
   public void addEJBView(String ejbName, String ejbType, String interfaceName,
       boolean remote);
 }

Modified: aries/trunk/ejb/ejb-modeller/src/main/java/org/apache/aries/ejb/modelling/impl/EJBLocationUnavailable.java
URL: http://svn.apache.org/viewvc/aries/trunk/ejb/ejb-modeller/src/main/java/org/apache/aries/ejb/modelling/impl/EJBLocationUnavailable.java?rev=1153085&r1=1153084&r2=1153085&view=diff
==============================================================================
--- aries/trunk/ejb/ejb-modeller/src/main/java/org/apache/aries/ejb/modelling/impl/EJBLocationUnavailable.java (original)
+++ aries/trunk/ejb/ejb-modeller/src/main/java/org/apache/aries/ejb/modelling/impl/EJBLocationUnavailable.java Tue Aug  2 10:04:44 2011
@@ -22,6 +22,10 @@ import org.apache.aries.ejb.modelling.EJ
 import org.apache.aries.util.filesystem.IDirectory;
 import org.apache.aries.util.manifest.BundleManifest;
 
+/**
+ * An EJB Locator implementation for when EJB location is unavailable.
+ * It will cause any modelling that might involve EJBs to fail.
+ */
 public class EJBLocationUnavailable implements EJBLocator {
 
   public void findEJBs(BundleManifest manifest, IDirectory bundle,

Modified: aries/trunk/ejb/ejb-modeller/src/main/java/org/apache/aries/ejb/modelling/impl/EJBLocatorFactory.java
URL: http://svn.apache.org/viewvc/aries/trunk/ejb/ejb-modeller/src/main/java/org/apache/aries/ejb/modelling/impl/EJBLocatorFactory.java?rev=1153085&r1=1153084&r2=1153085&view=diff
==============================================================================
--- aries/trunk/ejb/ejb-modeller/src/main/java/org/apache/aries/ejb/modelling/impl/EJBLocatorFactory.java (original)
+++ aries/trunk/ejb/ejb-modeller/src/main/java/org/apache/aries/ejb/modelling/impl/EJBLocatorFactory.java Tue Aug  2 10:04:44 2011
@@ -18,6 +18,10 @@ package org.apache.aries.ejb.modelling.i
 
 import org.apache.aries.ejb.modelling.EJBLocator;
 
+/**
+ * A factory for creating our internal EJBLocator without a hard dependency on
+ * OpenEJB
+ */
 public class EJBLocatorFactory {
   public static EJBLocator getEJBLocator() {
     try {

Modified: aries/trunk/ejb/ejb-modeller/src/main/java/org/apache/aries/ejb/modelling/impl/EJBModeller.java
URL: http://svn.apache.org/viewvc/aries/trunk/ejb/ejb-modeller/src/main/java/org/apache/aries/ejb/modelling/impl/EJBModeller.java?rev=1153085&r1=1153084&r2=1153085&view=diff
==============================================================================
--- aries/trunk/ejb/ejb-modeller/src/main/java/org/apache/aries/ejb/modelling/impl/EJBModeller.java (original)
+++ aries/trunk/ejb/ejb-modeller/src/main/java/org/apache/aries/ejb/modelling/impl/EJBModeller.java Tue Aug  2 10:04:44 2011
@@ -40,6 +40,10 @@ public class EJBModeller implements Serv
     this.locator = locator;
   }
   
+  /**
+   * This modeller only searches for EJBs if there is an Export-EJB header with
+   * a value other than NONE (which is also the default).
+   */
   public ParsedServiceElements modelServices(BundleManifest manifest, IDirectory bundle) 
     throws ModellerException {
     logger.trace("modelServices", new Object[] {manifest, bundle});

Modified: aries/trunk/ejb/ejb-modeller/src/main/java/org/apache/aries/ejb/modelling/impl/EJBServiceExport.java
URL: http://svn.apache.org/viewvc/aries/trunk/ejb/ejb-modeller/src/main/java/org/apache/aries/ejb/modelling/impl/EJBServiceExport.java?rev=1153085&r1=1153084&r2=1153085&view=diff
==============================================================================
--- aries/trunk/ejb/ejb-modeller/src/main/java/org/apache/aries/ejb/modelling/impl/EJBServiceExport.java (original)
+++ aries/trunk/ejb/ejb-modeller/src/main/java/org/apache/aries/ejb/modelling/impl/EJBServiceExport.java Tue Aug  2 10:04:44 2011
@@ -28,6 +28,9 @@ import org.apache.aries.application.mode
 import org.apache.aries.application.utils.service.ExportedServiceHelper;
 import org.osgi.framework.Constants;
 
+/**
+ * This class represents the service exported on behalf of a Session Bean
+ */
 public class EJBServiceExport implements ExportedService {
 
   private final String interfaceName;
@@ -38,6 +41,13 @@ public class EJBServiceExport implements
   private final Map<String, Object> serviceProperties;
   private String _toString;
   
+  /**
+   * Set up this {@link ExportedService} with the right EJB properties
+   * @param ejbName
+   * @param ejbType
+   * @param interfaceName
+   * @param remote
+   */
   public EJBServiceExport(String ejbName, String ejbType, String interfaceName,
       boolean remote) {
     this.interfaceName = interfaceName;
@@ -45,7 +55,7 @@ public class EJBServiceExport implements
     
     serviceProperties = new HashMap<String, Object>();
     serviceProperties.put("ejb.name", ejbName);
-    serviceProperties.put("ejb.type", ejbType);
+    serviceProperties.put("ejb.type", correctCase(ejbType));
     if(remote)
       serviceProperties.put("service.exported.interfaces", interfaceName);
     
@@ -56,6 +66,17 @@ public class EJBServiceExport implements
     _attributes.put(ModellingConstants.OBR_SERVICE, ModellingConstants.OBR_SERVICE);
   }
 
+  /**
+   * The ejb.type property is always capitalised first letter, lowercase otherwise
+   * @param ejbType
+   * @return
+   */
+  private String correctCase(String ejbType) {
+    String result = ejbType.substring(0, 1).toUpperCase();
+    result += ejbType.substring(1).toLowerCase();
+    return result;
+  }
+
   public Map<String, Object> getAttributes() {
     return _attributes;
   }

Modified: aries/trunk/ejb/ejb-modeller/src/main/java/org/apache/aries/ejb/modelling/impl/OpenEJBLocator.java
URL: http://svn.apache.org/viewvc/aries/trunk/ejb/ejb-modeller/src/main/java/org/apache/aries/ejb/modelling/impl/OpenEJBLocator.java?rev=1153085&r1=1153084&r2=1153085&view=diff
==============================================================================
--- aries/trunk/ejb/ejb-modeller/src/main/java/org/apache/aries/ejb/modelling/impl/OpenEJBLocator.java (original)
+++ aries/trunk/ejb/ejb-modeller/src/main/java/org/apache/aries/ejb/modelling/impl/OpenEJBLocator.java Tue Aug  2 10:04:44 2011
@@ -36,16 +36,23 @@ import org.apache.openejb.config.ReadDes
 import org.apache.openejb.jee.EjbJar;
 import org.apache.openejb.jee.EnterpriseBean;
 import org.apache.openejb.jee.SessionBean;
-import org.apache.openejb.jee.SessionType;
 import org.apache.xbean.finder.ClassFinder;
 import org.osgi.framework.Constants;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+/**
+ * An {@link EJBLocator} that uses OpenEJB to find EJBs
+ * @author Tim
+ *
+ */
 public class OpenEJBLocator implements EJBLocator {
 
   private static final Logger logger = LoggerFactory.getLogger(OpenEJBLocator.class);
   
+  /**
+   * A ClassLoader used by OpenEJB in annotation scanning
+   */
   public static class ResourceClassLoader extends ClassLoader {
 
     private final List<IDirectory> classpath;
@@ -72,24 +79,26 @@ public class OpenEJBLocator implements E
       EJBRegistry registry) throws ModellerException {
 
     try {
+      //If we have an ejb-jar.xml then parse it 
       IFile file = bundle.getFile("META-INF/ejb-jar.xml");
       EjbJar ejbJar = (file == null) ? new EjbJar() : ReadDescriptors.readEjbJar(file.toURL());
       
       EjbModule module = new EjbModule(ejbJar);
       
+      //Find our classpath so we can scan the module
       List<IDirectory> cpEntries = getClassPathLocations(manifest, bundle);
       
       ClassLoader cl = new ResourceClassLoader(cpEntries);
       module.setClassLoader(cl);
       
-      //This may become AnnotationFinder at some point in the future. We build our
-      //own because we can't trust anyone to get the classpath right otherwise!
+      //We build our own because we can't trust anyone to get the classpath right otherwise!
       module.setFinder(new ClassFinder(cl, getClassPathURLs(cpEntries)));
       
+      //Scan our app for annotated EJBs
       AppModule app = new AppModule(module);
-      
       new AnnotationDeployer().deploy(app);
       
+      //Register our session beans
       for(EnterpriseBean eb : ejbJar.getEnterpriseBeans()) {
         
         if(!!!(eb instanceof SessionBean))
@@ -102,7 +111,13 @@ public class OpenEJBLocator implements E
       throw new ModellerException(e);
     }
   }
-
+  
+  /**
+   * Get URLs for creating a {@link ClassFinder}
+   * @param cpEntries
+   * @return
+   * @throws MalformedURLException
+   */
   private List<URL> getClassPathURLs(List<IDirectory> cpEntries) throws MalformedURLException {
     List<URL> result = new ArrayList<URL>();
     
@@ -112,6 +127,13 @@ public class OpenEJBLocator implements E
     return result;
   }
 
+  /**
+   * Find the classpath entries for our bundle
+   * 
+   * @param manifest
+   * @param bundle
+   * @return
+   */
   private List<IDirectory> getClassPathLocations(BundleManifest manifest,
       IDirectory bundle) {
     List<IDirectory> result = new ArrayList<IDirectory>();
@@ -142,14 +164,16 @@ public class OpenEJBLocator implements E
     return result;
   }
 
+  /**
+   * Register a located session bean with the {@link EJBRegistry}
+   * @param registry
+   * @param sb
+   */
   private void registerSessionBean(EJBRegistry registry, SessionBean sb) {
     
     String name = sb.getEjbName();
     String type = sb.getSessionType().toString();
     
-    if(sb.getSessionType() == SessionType.STATEFUL)
-      return;
-    
     boolean added = false;
     
     for(String iface : sb.getBusinessLocal()) {

Modified: aries/trunk/ejb/ejb-modeller/src/main/java/org/apache/aries/ejb/modelling/impl/ParsedEJBServices.java
URL: http://svn.apache.org/viewvc/aries/trunk/ejb/ejb-modeller/src/main/java/org/apache/aries/ejb/modelling/impl/ParsedEJBServices.java?rev=1153085&r1=1153084&r2=1153085&view=diff
==============================================================================
--- aries/trunk/ejb/ejb-modeller/src/main/java/org/apache/aries/ejb/modelling/impl/ParsedEJBServices.java (original)
+++ aries/trunk/ejb/ejb-modeller/src/main/java/org/apache/aries/ejb/modelling/impl/ParsedEJBServices.java Tue Aug  2 10:04:44 2011
@@ -27,6 +27,12 @@ import org.apache.aries.application.mode
 import org.apache.aries.application.modelling.ParsedServiceElements;
 import org.apache.aries.ejb.modelling.EJBRegistry;
 
+/**
+ * An {@link EJBRegistry} that marks the {@link ParsedServiceElements} provided
+ * by the EJB bundle.
+ * @author Tim
+ *
+ */
 public class ParsedEJBServices implements ParsedServiceElements, EJBRegistry {
 
   private final Collection<ImportedService> references;
@@ -65,6 +71,9 @@ public class ParsedEJBServices implement
   
   public void addEJBView(String ejbName, String ejbType, String interfaceName,
       boolean remote) {
+    if(ejbType.equalsIgnoreCase("Stateful"))
+      return;
+    
     if(all || allowedNames.contains(ejbName))
       services.add(new EJBServiceExport(ejbName, ejbType, interfaceName, remote));
   }

Modified: aries/trunk/ejb/ejb-modeller/src/main/java/org/apache/aries/ejb/modelling/impl/StandaloneEJBModeller.java
URL: http://svn.apache.org/viewvc/aries/trunk/ejb/ejb-modeller/src/main/java/org/apache/aries/ejb/modelling/impl/StandaloneEJBModeller.java?rev=1153085&r1=1153084&r2=1153085&view=diff
==============================================================================
--- aries/trunk/ejb/ejb-modeller/src/main/java/org/apache/aries/ejb/modelling/impl/StandaloneEJBModeller.java (original)
+++ aries/trunk/ejb/ejb-modeller/src/main/java/org/apache/aries/ejb/modelling/impl/StandaloneEJBModeller.java Tue Aug  2 10:04:44 2011
@@ -16,6 +16,9 @@
  */
 package org.apache.aries.ejb.modelling.impl;
 
+/**
+ * An {@link EJBModeller} for use in standalone modelling
+ */
 public class StandaloneEJBModeller extends EJBModeller {
 
   public StandaloneEJBModeller() {

Modified: aries/trunk/ejb/ejb-modeller/src/test/java/org/apache/aries/ejb/modelling/impl/EJBLocatorTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/ejb/ejb-modeller/src/test/java/org/apache/aries/ejb/modelling/impl/EJBLocatorTest.java?rev=1153085&r1=1153084&r2=1153085&view=diff
==============================================================================
--- aries/trunk/ejb/ejb-modeller/src/test/java/org/apache/aries/ejb/modelling/impl/EJBLocatorTest.java (original)
+++ aries/trunk/ejb/ejb-modeller/src/test/java/org/apache/aries/ejb/modelling/impl/EJBLocatorTest.java Tue Aug  2 10:04:44 2011
@@ -68,6 +68,7 @@ public class EJBLocatorTest {
     ZipOutputStream zos = new ZipOutputStream(baos);
     addToZip(zos, "ejb-jar.xml", "META-INF/ejb-jar.xml");
     addToZip(zos, "test/ejbs/StatelessSessionBean.class");
+    addToZip(zos, "test/ejbs/StatefulSessionBean.class");
     zos.close();
     
     runTest(baos.toByteArray(), "MANIFEST_1.MF");
@@ -82,6 +83,7 @@ public class EJBLocatorTest {
     ByteArrayOutputStream baos = new ByteArrayOutputStream();
     ZipOutputStream zos = new ZipOutputStream(baos);
     addToZip(zos, "test/ejbs/StatelessSessionBean.class");
+    addToZip(zos, "test/ejbs/StatefulSessionBean.class");
     zos.close();
     
     runTest(baos.toByteArray(), "MANIFEST_1.MF");
@@ -97,6 +99,7 @@ public class EJBLocatorTest {
     ZipOutputStream zos = new ZipOutputStream(baos);
     addToZip(zos, "ejb-jar.xml", "META-INF/ejb-jar.xml");
     addToZip(zos, "test/ejb/StatelessSessionBean.class", "no/test/ejb/StatelessSessionBean.class");
+    addToZip(zos, "test/ejb/StatefulSessionBean.class", "no/test/ejb/StatefulSessionBean.class");
     zos.close();
     
     runTest(baos.toByteArray(), "MANIFEST_2.MF");
@@ -155,6 +158,14 @@ public class EJBLocatorTest {
       s.assertCalledExactNumberOfTimes(mc, 1);
     else
       s.assertNotCalled(mc);
+    
+    mc = new MethodCall(EJBRegistry.class, "addEJBView",
+        String.class, "STATEFUL", String.class, boolean.class);
+    
+    if(b)
+      s.assertCalledExactNumberOfTimes(mc, 1);
+    else
+      s.assertNotCalled(mc);
   }
   
 }

Modified: aries/trunk/ejb/ejb-modeller/src/test/java/org/apache/aries/ejb/modelling/impl/ParsedEJBServicesTest.java
URL: http://svn.apache.org/viewvc/aries/trunk/ejb/ejb-modeller/src/test/java/org/apache/aries/ejb/modelling/impl/ParsedEJBServicesTest.java?rev=1153085&r1=1153084&r2=1153085&view=diff
==============================================================================
--- aries/trunk/ejb/ejb-modeller/src/test/java/org/apache/aries/ejb/modelling/impl/ParsedEJBServicesTest.java (original)
+++ aries/trunk/ejb/ejb-modeller/src/test/java/org/apache/aries/ejb/modelling/impl/ParsedEJBServicesTest.java Tue Aug  2 10:04:44 2011
@@ -76,4 +76,32 @@ public class ParsedEJBServicesTest {
         it.next());
   } 
 
+  
+  @Test
+  public void testStateful() throws ModellerException {
+    ParsedEJBServices pes = new ParsedEJBServices();
+    pes.setAllowedNames(Arrays.asList("Bar", "Baz"));
+    pes.addEJBView("Baz", "Stateful", "com.acme.Bar", true);
+    
+    assertEquals(0, pes.getServices().size());
+  } 
+  
+  @Test
+  public void testCases() throws ModellerException {
+    ParsedEJBServices pes = new ParsedEJBServices();
+    pes.setAllowedNames(Arrays.asList("ALL", "Foo"));
+    pes.addEJBView("Foo", "STATELESS", "com.acme.Bar", false);
+    pes.addEJBView("Bar", "StAtElEsS", "com.acme.Bar", true);
+    pes.addEJBView("Baz", "stateless", "com.acme.Baz", true);
+    assertEquals(3, pes.getServices().size());
+    
+    Iterator it = pes.getServices().iterator();
+    assertEquals(new EJBServiceExport("Foo", "Stateless", "com.acme.Bar", false), 
+        it.next());
+    
+    assertEquals(new EJBServiceExport("Bar", "Stateless", "com.acme.Bar", true),
+        it.next());
+    assertEquals(new EJBServiceExport("Baz", "Stateless", "com.acme.Baz", true),
+        it.next());
+  }
 }

Added: aries/trunk/ejb/ejb-modeller/src/test/java/test/ejbs/StatefulSessionBean.java
URL: http://svn.apache.org/viewvc/aries/trunk/ejb/ejb-modeller/src/test/java/test/ejbs/StatefulSessionBean.java?rev=1153085&view=auto
==============================================================================
--- aries/trunk/ejb/ejb-modeller/src/test/java/test/ejbs/StatefulSessionBean.java (added)
+++ aries/trunk/ejb/ejb-modeller/src/test/java/test/ejbs/StatefulSessionBean.java Tue Aug  2 10:04:44 2011
@@ -0,0 +1,8 @@
+package test.ejbs;
+
+import javax.ejb.Stateful;
+
+@Stateful(name="Stateful")
+public class StatefulSessionBean {
+
+}