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/29 08:48:34 UTC

svn commit: r607392 - in /openejb/trunk/openejb3: assembly/openejb-tomcat/openejb-tomcat-webapp/src/main/resources/META-INF/org.apache.openejb.tomcat/ container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/ container/openejb-core/src...

Author: dblevins
Date: Fri Dec 28 23:48:33 2007
New Revision: 607392

URL: http://svn.apache.org/viewvc?rev=607392&view=rev
Log:
OPENEJB-743: Improved configuration error detection and help
OPENEJB-742: java.lang.NullPointerException at ConfigurationFactory$DefaultService.access$000(ConfigurationFactory.java:NNN)

Added:
    openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/ResourceInfoComparatorTest.java
Modified:
    openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-webapp/src/main/resources/META-INF/org.apache.openejb.tomcat/service-jar.xml
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.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/ServiceUtils.java
    openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/sys/Openejb.java
    openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb/service-jar.xml
    openejb/trunk/openejb3/container/openejb-core/src/main/resources/default.openejb.conf
    openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/config/Messages.properties
    openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/util/resources/Messages.properties

Modified: openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-webapp/src/main/resources/META-INF/org.apache.openejb.tomcat/service-jar.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-webapp/src/main/resources/META-INF/org.apache.openejb.tomcat/service-jar.xml?rev=607392&r1=607391&r2=607392&view=diff
==============================================================================
--- openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-webapp/src/main/resources/META-INF/org.apache.openejb.tomcat/service-jar.xml (original)
+++ openejb/trunk/openejb3/assembly/openejb-tomcat/openejb-tomcat-webapp/src/main/resources/META-INF/org.apache.openejb.tomcat/service-jar.xml Fri Dec 28 23:48:33 2007
@@ -641,6 +641,7 @@
   <ServiceProvider
           id="Default JMS Resource Adapter"
           service="Resource"
+          types="ActiveMQResourceAdapter"
           class-name="org.apache.activemq.ra.ActiveMQResourceAdapter">
 
     # Broker configuration

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java?rev=607392&r1=607391&r2=607392&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java Fri Dec 28 23:48:33 2007
@@ -820,18 +820,21 @@
     private void replaceResourceAdapterProperty(ObjectRecipe serviceRecipe) throws OpenEJBException {
         Object resourceAdapterId = serviceRecipe.getProperty("ResourceAdapter");
         if (resourceAdapterId instanceof String)  {
+            String id = (String) resourceAdapterId;
+            id = id.trim();
+
             Object resourceAdapter = null;
             try {
-                resourceAdapter = containerSystem.getJNDIContext().lookup("java:openejb/Resource/" + resourceAdapterId);
+                resourceAdapter = containerSystem.getJNDIContext().lookup("java:openejb/Resource/" + id);
             } catch (NamingException e) {
                 // handled below
             }
 
             if (resourceAdapter == null) {
-                throw new OpenEJBException("No existing resource adapter defined with id '" + resourceAdapterId + "'.");
+                throw new OpenEJBException("No existing resource adapter defined with id '" + id + "'.");
             }
             if (!(resourceAdapter instanceof ResourceAdapter)) {
-                throw new OpenEJBException("Resource adapter defined with id '" + resourceAdapterId + "' is not an instance of ResourceAdapter, " +
+                throw new OpenEJBException("Resource adapter defined with id '" + id + "' is not an instance of ResourceAdapter, " +
                         "but is an instance of " + resourceAdapter.getClass());
             }
             serviceRecipe.setProperty("ResourceAdapter", resourceAdapter);

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=607392&r1=607391&r2=607392&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 Fri Dec 28 23:48:33 2007
@@ -64,8 +64,11 @@
 import org.apache.openejb.util.Logger;
 import org.apache.openejb.util.Messages;
 import org.apache.openejb.util.URISupport;
+import org.apache.openejb.util.Join;
 
 import java.io.File;
+import java.io.DataOutputStream;
+import java.io.PrintWriter;
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.util.ArrayList;
@@ -75,11 +78,12 @@
 import java.util.List;
 import java.util.Map;
 import java.util.Properties;
+import java.util.Comparator;
 
 public class ConfigurationFactory implements OpenEjbConfigurationFactory {
 
-    private static final Logger logger = Logger.getInstance(LogCategory.OPENEJB_STARTUP_CONFIG, "org.apache.openejb.util.resources");
-    private static final Messages messages = new Messages("org.apache.openejb.util.resources");
+    private static final Logger logger = Logger.getInstance(LogCategory.OPENEJB_STARTUP_CONFIG, ConfigurationFactory.class);
+    private static final Messages messages = new Messages(ConfigurationFactory.class);
 
     private String configLocation = "";
 
@@ -250,10 +254,16 @@
 
         sys.facilities.transactionService = configureService(openejb.getTransactionManager(), TransactionServiceInfo.class);
 
+        List<ResourceInfo> resources = new ArrayList<ResourceInfo>();
         for (Resource resource : openejb.getResource()) {
             ResourceInfo resourceInfo = configureService(resource, ResourceInfo.class);
-            sys.facilities.resources.add(resourceInfo);
+            resources.add(resourceInfo);
         }
+        Collections.sort(resources, new ResourceInfoComparator(resources));
+
+        sys.facilities.resources.addAll(resources);
+
+
 
 //        ConnectionManagerInfo service = configureService(openejb.getConnectionManager(), ConnectionManagerInfo.class);
 //        sys.facilities.connectionManagers.add(service);
@@ -363,14 +373,12 @@
             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
+            logger.warning("configureApplication.loadFailed", jarFile.getAbsolutePath(), e.getMessage()); // 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
             // removing this message causes NO messages to be printed when embedded
-            logger.warning(message, e);
+            logger.warning("configureApplication.loadFailed", e, jarFile.getAbsolutePath(), e.getMessage());
             throw e;
         }
         return appInfo;
@@ -452,75 +460,109 @@
 
 
     public <T extends ServiceInfo> T configureService(Class<? extends T> type) throws OpenEJBException {
-        Service service = getDefaultService(type);
-
-        return configureService(service, type);
+        return configureService((Service)null, type);
     }
 
     private <T extends ServiceInfo>Service getDefaultService(Class<? extends T> type) throws OpenEJBException {
         DefaultService defaultService = defaultProviders.get(type);
 
+        if (defaultService == null) return null;
+
         Service service;
         try {
             service = JaxbOpenejb.create(defaultService.type);
             service.setType(defaultService.id);
         } catch (Exception e) {
-            throw new OpenEJBException("Cannot instantiate class " + defaultService.type.getName(), e);
+            String name = (defaultService == null || defaultService.type == null) ? "null" : defaultService.type.getName();
+            throw new OpenEJBException("Cannot instantiate class " + name, e);
         }
         return service;
     }
 
 
     public <T extends ServiceInfo> T configureService(Service service, Class<? extends T> infoType) throws OpenEJBException {
-        if (infoType == null) throw new NullPointerException("type");
-
-        if (service == null) {
-            service = getDefaultService(infoType);
-        }
-
-        String providerType = service.getClass().getSimpleName();
+        try {
+            if (infoType == null) throw new NullPointerException("type");
 
-        ServiceProvider provider = resolveServiceProvider(service, infoType);
+            if (service == null) {
+                service = getDefaultService(infoType);
+                if (service == null){
+                    throw new OpenEJBException(messages.format("configureService.noDefaultService", infoType.getName()));
+                }
+            }
 
-        if (provider == null){
-            throw new NoSuchProviderException("Cannot determine a default provider for Service("+service.getId() +", "+infoType.getSimpleName()+")");
-        }
 
-        if (service.getId() == null) service.setId(provider.getId());
+            String providerType = service.getClass().getSimpleName();
 
-        logger.info("Configuring Service(id=" + service.getId() + ", type=" + provider.getService() + ", provider-id=" + provider.getId() + ")");
+            ServiceProvider provider = resolveServiceProvider(service, infoType);
 
-        Properties props = new Properties();
-        props.putAll(provider.getProperties());
-        props.putAll(service.getProperties());
-        props.putAll(getSystemProperties(service.getId(), provider.getService()));
+            if (provider == null){
+                List<ServiceProvider> providers = ServiceUtils.getServiceProvidersByServiceType(providerType);
+                StringBuilder sb = new StringBuilder();
+//                for (ServiceProvider p : providers) {
+//                    sb.append(System.getProperty("line.separator"));
+//                    sb.append("  <").append(p.getService());
+//                    sb.append(" id=\"").append(service.getId()).append('"');
+//                    sb.append(" provider=\"").append(p.getId()).append("\"/>");
+//                }
+
+                List<String> types = new ArrayList<String>();
+                for (ServiceProvider p : providers) {
+                    for (String type : p.getTypes()) {
+                        if (types.contains(type)) continue;
+                        types.add(type);
+                        sb.append(System.getProperty("line.separator"));
+                        sb.append("  <").append(p.getService());
+                        sb.append(" id=\"").append(service.getId()).append('"');
+                        sb.append(" type=\"").append(type).append("\"/>");
+                    }
+                }
+                String noProviderMessage = messages.format("configureService.noProviderForService", providerType, service.getId(), service.getType(), service.getProvider(), sb.toString());
+                throw new NoSuchProviderException(noProviderMessage);
+            }
 
-        if (providerType != null && !provider.getService().equals(providerType)) {
-            throw new OpenEJBException(messages.format("conf.4902", service.getId(), providerType));
-        }
+            if (service.getId() == null) service.setId(provider.getId());
 
-        T info;
+            logger.info("configureService.configuring", service.getId(), provider.getService(), provider.getId());
 
-        try {
-            info = infoType.newInstance();
-        } catch (Exception e) {
-            throw new OpenEJBException("Cannot instantiate class " + infoType.getName(), e);
-        }
+            Properties props = new Properties();
+            props.putAll(provider.getProperties());
+            props.putAll(service.getProperties());
+            props.putAll(getSystemProperties(service.getId(), provider.getService()));
 
-        info.service = provider.getService();
-        info.types.addAll(provider.getTypes());
-        info.description = provider.getDescription();
-        info.displayName = provider.getDisplayName();
-        info.className = provider.getClassName();
-        info.factoryMethod = provider.getFactoryName();
-        info.id = service.getId();
-        info.properties = props;
-        info.constructorArgs.addAll(parseConstructorArgs(provider));
+            if (providerType != null && !provider.getService().equals(providerType)) {
+                throw new OpenEJBException(messages.format("configureService.wrongProviderType", service.getId(), providerType));
+            }
 
-        specialProcessing(info);
+            T info;
 
+            try {
+                info = infoType.newInstance();
+            } catch (Exception e) {
+                throw new OpenEJBException("Cannot instantiate class " + infoType.getName(), e);
+            }
 
-        return info;
+            info.service = provider.getService();
+            info.types.addAll(provider.getTypes());
+            info.description = provider.getDescription();
+            info.displayName = provider.getDisplayName();
+            info.className = provider.getClassName();
+            info.factoryMethod = provider.getFactoryName();
+            info.id = service.getId();
+            info.properties = props;
+            info.constructorArgs.addAll(parseConstructorArgs(provider));
+
+            specialProcessing(info);
+
+
+            return info;
+        } catch (NoSuchProviderException e) {
+            String message = logger.fatal("configureService.failed", e, service.getId());
+            throw new OpenEJBException(message + ": " + e.getMessage());
+        } catch (Throwable e) {
+            String message = logger.fatal("configureService.failed", e, service.getId());
+            throw new OpenEJBException(message, e);
+        }
     }
 
     private <T extends ServiceInfo> void specialProcessing(T info) {
@@ -549,7 +591,9 @@
 
         if (infoType != null) {
             Service defaultService = getDefaultService(infoType);
-            return resolveServiceProvider(defaultService, null);
+            if (defaultService != null) {
+                return resolveServiceProvider(defaultService, null);
+            }
         }
 
         return null;
@@ -776,6 +820,62 @@
             }
 
             return property;
+        }
+    }
+
+    public static class ResourceInfoComparator implements Comparator<ResourceInfo> {
+        private final List<String> ids;
+
+        public ResourceInfoComparator(List<ResourceInfo> resources){
+            ids = new ArrayList<String>();
+            for (ResourceInfo info : resources) {
+                ids.add(info.id);
+            }
+        }
+
+        public int compare(ResourceInfo a, ResourceInfo b) {
+            String refA = getReference(a);
+            String refB = getReference(b);
+
+            // both null or the same id
+            if (refA == refB) return 0;
+
+            // b is null
+            if (refA != null && refB == null){
+                return 1;
+            }
+
+            // a is null
+            if (refB != null && refA == null){
+                return -1;
+            }
+
+            // b is referencing a
+            if (a.id.equals(refB)) {
+                return 1;
+            }
+
+            // a is referencing b
+            if (b.id.equals(refA)) {
+                return 1;
+            }
+
+            return 0;
+        }
+
+        public int hasReference(ResourceInfo info){
+            for (Object value : info.properties.values()) {
+                if (ids.contains(value)) return 1;
+            }
+            return 0;
+        }
+
+        public String getReference(ResourceInfo info){
+            for (Object value : info.properties.values()) {
+                value = ((String)value).trim();
+                if (ids.contains(value)) return (String) value;
+            }
+            return null;
         }
     }
 }

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ServiceUtils.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ServiceUtils.java?rev=607392&r1=607391&r2=607392&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ServiceUtils.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/ServiceUtils.java Fri Dec 28 23:48:33 2007
@@ -63,7 +63,7 @@
         try {
             ProviderInfo info = getProviderInfo(id);
 
-            List<ServiceProvider> services = getServices(info.getPackageName());
+            List<ServiceProvider> services = getServiceProviders(info.getPackageName());
 
             for (ServiceProvider service : services) {
                 if (service.getId().equals(id)) {
@@ -79,7 +79,7 @@
     public static ServiceProvider getServiceProvider(String id) throws OpenEJBException {
         ProviderInfo info = getProviderInfo(id);
 
-        List<ServiceProvider> services = getServices(info.getPackageName());
+        List<ServiceProvider> services = getServiceProviders(info.getPackageName());
 
         for (ServiceProvider service : services) {
             if (service.getId().equals(info.getServiceName())) {
@@ -95,10 +95,27 @@
         return provider != null? provider.getId(): null;
     }
 
+
+    public static List<ServiceProvider> getServiceProvidersByServiceType(String type) throws OpenEJBException {
+        ArrayList<ServiceProvider> providers = new ArrayList<ServiceProvider>();
+        if (type == null) return providers;
+
+        List<ServiceProvider> services = getServiceProviders(defaultProviderURL);
+
+        for (ServiceProvider service : services) {
+            if (service.getService().equals(type)) {
+                providers.add(service);
+            }
+        }
+
+        return providers;
+    }
+
+
     public static ServiceProvider getServiceProviderByType(String type) throws OpenEJBException {
         if (type == null) return null;
 
-        List<ServiceProvider> services = getServices(defaultProviderURL);
+        List<ServiceProvider> services = getServiceProviders(defaultProviderURL);
 
         for (ServiceProvider service : services) {
             if (service.getTypes().contains(type)) {
@@ -112,11 +129,9 @@
     public static ServiceProvider getServiceProviderByType(String providerType, String serviceType) throws OpenEJBException {
         if (serviceType == null) return null;
 
-        List<ServiceProvider> services = getServices(defaultProviderURL);
+        List<ServiceProvider> services = getServiceProvidersByServiceType(providerType);
 
         for (ServiceProvider service : services) {
-            if (!service.getService().equals(providerType)) continue;
-            
             if (service.getTypes().contains(serviceType)) {
                 return service;
             }
@@ -125,7 +140,11 @@
         return null;
     }
 
-    private static List<ServiceProvider> getServices(String packageName) throws OpenEJBException {
+    public static List<ServiceProvider> getServiceProviders() throws OpenEJBException {
+        return getServiceProviders(defaultProviderURL);
+    }
+
+    public static List<ServiceProvider> getServiceProviders(String packageName) throws OpenEJBException {
         List<ServiceProvider> services = loadedServiceJars.get(packageName);
         if (services == null) {
             ServicesJar servicesJar = JaxbOpenejb.readServicesJar(packageName);

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/sys/Openejb.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/sys/Openejb.java?rev=607392&r1=607391&r2=607392&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/sys/Openejb.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/sys/Openejb.java Fri Dec 28 23:48:33 2007
@@ -266,6 +266,7 @@
                 Resource resource = new Resource();
                 resource.setJar(connector.getJar());
                 resource.setId(connector.getId());
+                resource.setType(connector.getType());
                 resource.setProvider(connector.getProvider());
                 resource.getProperties().putAll(connector.getProperties());
                 this.resource.add(resource);

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb/service-jar.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb/service-jar.xml?rev=607392&r1=607391&r2=607392&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb/service-jar.xml (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb/service-jar.xml Fri Dec 28 23:48:33 2007
@@ -634,6 +634,7 @@
   <ServiceProvider
           id="Default JMS Resource Adapter"
           service="Resource"
+          types="ActiveMQResourceAdapter"
           class-name="org.apache.activemq.ra.ActiveMQResourceAdapter">
 
     # Broker configuration

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/resources/default.openejb.conf
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/resources/default.openejb.conf?rev=607392&r1=607391&r2=607392&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/resources/default.openejb.conf (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/resources/default.openejb.conf Fri Dec 28 23:48:33 2007
@@ -22,7 +22,7 @@
 
 <openejb>
 
-<Container id="Default CMP Container" ctype="CMP_ENTITY">
+<Container id="My CMP Container" type="CMP_ENTITY">
   # This container can service CMP 1.1 and 2.x Entity Beans
   #
   # Persistence is achived by taking the entity beans deployed
@@ -38,12 +38,12 @@
   # ConnectorName is he id of the Connector element which
   # should provide connectivity for this CMP Container
 
-  ConnectorName  Default JDBC Database
+  ConnectorName  My DataSource
 
 </Container>
 
 
-<Container id="Default BMP Container" ctype="BMP_ENTITY">
+<Container id="My BMP Container" type="BMP_ENTITY">
 
   # Specifies the size of the bean pools for this
   # bmp entity container.
@@ -53,7 +53,7 @@
 </Container>
 
 
-<Container id="Default Stateful Container" ctype="STATEFUL">
+<Container id="My Stateful Container" type="STATEFUL">
   #  The passivator is responsible for writing beans to disk
   #  at passivation time. Different passivators can be used
   #  by setting this property to the fully qualified class name
@@ -89,7 +89,7 @@
 </Container>
 
 
-<Container id="Default Stateless Container" ctype="STATELESS">
+<Container id="My Stateless Container" type="STATELESS">
   #  Specifies the time to wait between invocations. This
   #  value is measured in milliseconds.  A value of 5 would
   #  result in a time-out of 5 milliseconds between invocations.
@@ -119,11 +119,11 @@
 </Container>
 
 
-<Container id="Default " ctype="MESSAGE">
+<Container id="My MDB Container " type="MESSAGE">
 
   #  The resource adapter delivers messages to the container
 
-  ResourceAdapter Default JMS Resource Adapter
+  ResourceAdapter My JMS Resource Adapter
 
   # Specifies the message listener interface handled by this container
 
@@ -146,7 +146,7 @@
 # http://openejb.apache.org/3.0/databases.html
 -->
 
-<Resource id="Default JDBC Database" >
+<Resource id="My DataSource" type="DataSource">
   JdbcDriver org.hsqldb.jdbcDriver
   JdbcUrl jdbc:hsqldb:file:hsqldb
   UserName sa
@@ -155,7 +155,7 @@
 </Resource>
 
 
-<Resource id="Default Unmanaged JDBC Database">
+<Resource id="My Unmanaged DataSource" type="DataSource">
   JdbcDriver org.hsqldb.jdbcDriver
   JdbcUrl jdbc:hsqldb:file:hsqldb
   UserName sa
@@ -164,7 +164,7 @@
 </Resource>
 
 
-<Resource id="Default JMS Resource Adapter">
+<Resource id="My JMS Resource Adapter" type="ActiveMQResourceAdapter">
   # Broker configuration URI as defined by ActiveMQ
   # see http://activemq.apache.org/broker-configuration-uri.html
 
@@ -180,9 +180,9 @@
 </Resource>
 
 
-<Connector id="Default JMS Connection Factory">
+<Connector id="My JMS Connection Factory" type="javax.jms.ConnectionFactory">
 
-  ResourceAdapter Default JMS Resource Adapter
+  ResourceAdapter My JMS Resource Adapter
 
   # Specifies if the connection is enrolled in global transaction
   # allowed values: xa, local or none

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/config/Messages.properties
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/config/Messages.properties?rev=607392&r1=607391&r2=607392&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/config/Messages.properties (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/config/Messages.properties Fri Dec 28 23:48:33 2007
@@ -97,3 +97,25 @@
 
 #fatal("config.noBeanFound", ejb.getEjbRefName(), referringComponent);
 config.noBeanFound=Cannot find bean \"{0}\" referenced by bean \"{1}\".
+
+# info("configureService.configuring", service.getId(), provider.getService(), provider.getId());
+configureService.configuring=Configuring Service(id={0}, type={1}, provider-id={2})
+
+# fatal("configureService.failed", service.getId(), e)
+configureService.failed=Failed Configuring Service(id={0})
+
+# "configureService.wrongProviderType", service.getId(), providerType));
+configureService.wrongProviderType=ServiceProvider of "{0}" is not of type "{1}"
+
+
+# info("config.configApp", appModule.getJarLocation());
+config.configApp=Configuring app: {0}
+
+# warning("configureApplication.loadFailed", jarFile.getAbsolutePath(), e.getMessage());
+configureApplication.loadFailed=Jar not loaded. {0}.  {1}
+
+# format("configureService.noDefaultService", infoType.getName())
+configureService.noDefaultService = No Default Service for {0}
+
+# format("configureService.noProviderForService", service.getClass().getName(), service.getId(), service.getType(), service.getProvider(), sb.toString());
+configureService.noProviderForService = Cannot determine a provider for {0}(id={1}, type={2}, provider={3}).\n\nPossible valid configurations might be: {4}

Modified: openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/util/resources/Messages.properties
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/util/resources/Messages.properties?rev=607392&r1=607391&r2=607392&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/util/resources/Messages.properties (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/resources/org/apache/openejb/util/resources/Messages.properties Fri Dec 28 23:48:33 2007
@@ -229,7 +229,6 @@
 config.usingDefault=OpenEJB configuration not found, using default configuration.
 config.noContainerFound=Cannot find container "{0}" for bean "{1}".
 config.noBeanFound=Cannot find bean "{0}" referenced by bean "{1}".
-config.configApp=Configuring app: {0}
 
 init.0100=Invalid {0} provider {1}.  The factory class specified, {2}, does not implement the {3} interface.  Please check the configuration of {1}."
 

Added: openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/ResourceInfoComparatorTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/ResourceInfoComparatorTest.java?rev=607392&view=auto
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/ResourceInfoComparatorTest.java (added)
+++ openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/ResourceInfoComparatorTest.java Fri Dec 28 23:48:33 2007
@@ -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.apache.openejb.assembler.classic;
+
+import junit.framework.TestCase;
+
+import java.util.List;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.Properties;
+
+import org.apache.openejb.config.ConfigurationFactory;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class ResourceInfoComparatorTest extends TestCase {
+
+    public void test() throws Exception {
+        List<ResourceInfo> resources = new ArrayList<ResourceInfo>();
+
+        resources.add(new ResourceInfo());
+        resources.get(0).id = "Red";
+        resources.get(0).properties = new Properties();
+        resources.get(0).properties.put("someValue", "Blue");
+
+        resources.add(new ResourceInfo());
+        resources.get(1).id = "Blue";
+        resources.get(1).properties = new Properties();
+        resources.get(1).properties.put("foo", "Green");
+
+        resources.add(new ResourceInfo());
+        resources.get(2).properties = new Properties();
+        resources.get(2).id = "Green";
+
+        resources.add(new ResourceInfo());
+        resources.get(3).id = "Yellow";
+        resources.get(3).properties = new Properties();
+        resources.get(3).properties.put("foo", "Green");
+
+        Collections.sort(resources, new ConfigurationFactory.ResourceInfoComparator(resources));
+
+        assertEquals("Green", resources.get(0).id);
+        assertEquals("Blue", resources.get(1).id);
+        assertEquals("Red", resources.get(2).id);
+        assertEquals("Yellow", resources.get(3).id);
+
+    }
+}