You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by db...@apache.org on 2007/12/09 02:23:07 UTC

svn commit: r602604 - in /openejb/trunk/openejb3/container/openejb-core/src/main: java/org/apache/openejb/config/ java/org/apache/openejb/config/rules/ resources/org/apache/openejb/config/rules/

Author: dblevins
Date: Sat Dec  8 17:23:06 2007
New Revision: 602604

URL: http://svn.apache.org/viewvc?rev=602604&view=rev
Log:
OPENEJB-730: Validation: Attempted use of PersistenceContextType.EXTENDED by non-Stateful bean
Also fixed a rather nasty typo that more or less prevented all validation.

Removed:
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckServiceRefs.java
Modified:
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AppValidator.java
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ReportValidationResults.java
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckPersistenceRefs.java
    openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/config/rules/Messages.properties

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AppValidator.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AppValidator.java?rev=602604&r1=602603&r2=602604&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AppValidator.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AppValidator.java Sat Dec  8 17:23:06 2007
@@ -24,7 +24,7 @@
 import org.apache.openejb.config.rules.CheckAssemblyBindings;
 import org.apache.openejb.config.rules.CheckCallbacks;
 import org.apache.openejb.config.rules.CheckInjectionTargets;
-import org.apache.openejb.config.rules.CheckServiceRefs;
+import org.apache.openejb.config.rules.CheckPersistenceRefs;
 import org.apache.openejb.util.Messages;
 
 public class AppValidator {
@@ -84,7 +84,7 @@
                 new CheckCallbacks(),
                 new CheckAssemblyBindings(),
                 new CheckInjectionTargets(),
-                new CheckServiceRefs()
+                new CheckPersistenceRefs()
         };
         return rules;
     }

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java?rev=602604&r1=602603&r2=602604&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java Sat Dec  8 17:23:06 2007
@@ -377,6 +377,10 @@
         try {
             AppModule appModule = deploymentLoader.load(jarFile);
             appInfo = configureApplication(appModule);
+        } catch (ValidationFailedException e) {
+            String message = messages.format("conf.0004", jarFile.getAbsolutePath(), e.getMessage());
+            logger.warning(message); // DO not include the stacktrace in the message
+            throw e;
         } catch (OpenEJBException e) {
             String message = messages.format("conf.0004", jarFile.getAbsolutePath(), e.getMessage());
             // DO NOT REMOVE THE EXCEPTION FROM THIS LOG MESSAGE

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ReportValidationResults.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ReportValidationResults.java?rev=602604&r1=602603&r2=602604&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ReportValidationResults.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ReportValidationResults.java Sat Dec  8 17:23:06 2007
@@ -26,7 +26,7 @@
 public class ReportValidationResults implements DynamicDeployer {
 
     public AppModule deploy(AppModule appModule) throws OpenEJBException {
-        if (!appModule.hasErrors() && !appModule.hasWarnings()) return appModule;
+        if (!appModule.hasErrors() && !appModule.hasFailures()) return appModule;
 
         ValidationFailedException validationFailedException = null;
 

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckPersistenceRefs.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckPersistenceRefs.java?rev=602604&r1=602603&r2=602604&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckPersistenceRefs.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/rules/CheckPersistenceRefs.java Sat Dec  8 17:23:06 2007
@@ -18,22 +18,53 @@
 
 import org.apache.openejb.config.EjbModule;
 import org.apache.openejb.jee.EnterpriseBean;
-import org.apache.openejb.jee.ServiceRef;
+import org.apache.openejb.jee.PersistenceContextRef;
+import org.apache.openejb.jee.SessionBean;
+import org.apache.openejb.jee.SessionType;
+import org.apache.openejb.jee.PersistenceContextType;
+import org.apache.openejb.jee.MessageDrivenBean;
+import org.apache.openejb.jee.EntityBean;
+import org.apache.openejb.BeanType;
 
 /**
  * @version $Rev$ $Date$
  */
 public class CheckPersistenceRefs extends ValidationBase {
     public void validate(EjbModule ejbModule) {
-        // Warn that we do not support service-refs yet.
-
-        // Skip if in geronimo
-        if (System.getProperty("duct tape") != null) return;
 
         for (EnterpriseBean bean : ejbModule.getEjbJar().getEnterpriseBeans()) {
-            for (ServiceRef ref : bean.getServiceRef()) {
-                warn(bean, "serviceRef.unsupported", ref.getName());
+
+            String beanType = getType(bean);
+            if (beanType.equals("Stateful")) continue; // skip statefuls
+
+            for (PersistenceContextRef ref : bean.getPersistenceContextRef()) {
+                if (isExtented(ref)) {
+                    String refName = ref.getName();
+                    String prefix = bean.getEjbClass() + "/";
+                    if (refName.startsWith(prefix)) {
+                        refName = refName.substring(prefix.length());
+                    }
+                    fail(bean, "persistenceContextExtented.nonStateful", refName, beanType);
+                }
+
             }
         }
+    }
+
+    private boolean isExtented(PersistenceContextRef ref) {
+        return ref.getPersistenceContextType().equals(PersistenceContextType.EXTENDED);
+    }
+
+    private String getType(EnterpriseBean bean) {
+        if (bean instanceof SessionBean) {
+            SessionBean sessionBean = (SessionBean) bean;
+            switch(sessionBean.getSessionType()){
+                case STATEFUL: return "Stateful";
+                case STATELESS: return "Stateless";
+                default: throw new IllegalArgumentException("Uknown SessionBean type "+bean.getClass());
+            }
+        } else if (bean instanceof MessageDrivenBean) return "MessageDriven";
+        else if (bean instanceof EntityBean) return "EJB 2.1 Entity";
+        else throw new IllegalArgumentException("Uknown bean type "+bean.getClass());
     }
 }

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/config/rules/Messages.properties
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/config/rules/Messages.properties?rev=602604&r1=602603&r2=602604&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/config/rules/Messages.properties (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/config/rules/Messages.properties Sat Dec  8 17:23:06 2007
@@ -277,3 +277,7 @@
 2.ann.remoteOrLocal.ejbLocalObject = @{0} used in bean class lists a javax.ejb.EJBLocalObject interface. Use @LocalHome with home interface of '{1}'.
 3.ann.remoteOrLocal.ejbLocalObject = When applied to a bean class, the @{0} annotation must only list business interfaces and cannot list legacy EJBLocalObject interfaces.  The EJBLocalHome of interface for '{1}' can be annotated on the bean class with @LocalHome
 
+# fail(bean, "persistenceContextExtented.nonStateful", refName, beanType);
+1.persistenceContextExtented.nonStateful = Non-Stateful use of PersistenceContextType.EXTENDED
+2.persistenceContextExtented.nonStateful = Non-Stateful use of PersistenceContextType.EXTENDED in ref {0}
+3.persistenceContextExtented.nonStateful = {1} ejbs are not capable of using EntityManagers with EXTENTED persistence.  Convert your bean to a Stateful ejb or update the '{0}' PersistenceContext reference to PersistenceContextType.TRANSACTION.  
\ No newline at end of file