Author: dain
Date: Sat Sep 8 11:15:15 2007
New Revision: 573889
URL: http://svn.apache.org/viewvc?rev=573889&view=rev
Log:
Switch resource binding code to use new service type field in service provider
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.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/ListAdapter.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/sys/ServiceProvider.java
openejb/trunk/openejb3/container/openejb-core/src/main/resources/META-INF/org.apache.openejb/service-jar.xml
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java?rev=573889&r1=573888&r2=573889&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
(original)
+++
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/AutoConfig.java
Sat Sep 8 11:15:15 2007
@@ -21,8 +21,6 @@
import org.apache.openejb.assembler.classic.ContainerInfo;
import org.apache.openejb.assembler.classic.ResourceInfo;
import org.apache.openejb.assembler.classic.LinkResolver;
-import org.apache.openejb.config.sys.JaxbOpenejb;
-import org.apache.openejb.config.sys.Resource;
import org.apache.openejb.jee.MessageDrivenBean;
import org.apache.openejb.jee.ActivationConfig;
import org.apache.openejb.jee.EnterpriseBean;
@@ -50,7 +48,6 @@
import java.util.Properties;
import java.util.Set;
import java.util.TreeSet;
-import java.util.TreeMap;
import java.util.HashMap;
import java.net.URI;
@@ -58,16 +55,6 @@
public static Messages messages = new
Messages("org.apache.openejb.util.resources");
public static Logger logger = Logger.getInstance(LogCategory.OPENEJB,
"org.apache.openejb.util.resources");
- private static Map<String,String> defaultResourceIds = new
TreeMap<String,String>();
- static {
- defaultResourceIds.put("javax.sql.DataSource", "Default Unmanaged JDBC
Database");
- defaultResourceIds.put("javax.jms.ConnectionFactory", "Default JMS
Connection Factory");
- defaultResourceIds.put("javax.jms.QueueConnectionFactory", "Default
JMS Connection Factory");
- defaultResourceIds.put("javax.jms.TopicConnectionFactory", "Default
JMS Connection Factory");
- defaultResourceIds.put("org.omg.CORBA.ORB", "Default ORB");
- defaultResourceIds.put("javax.mail.Session", "Default Mail Session");
- }
-
private static Set<String> ignoredReferenceTypes = new TreeSet<String>();
static{
// Context objects are automatically handled
@@ -697,19 +684,17 @@
return installResource(beanName, resourceInfo);
}
- // if there is only one resource, use it
+ // if there are any resources of the desired type, use the first one
if (resourceIds.size() > 0) {
return resourceIds.get(0);
}
- // look for a default resource based on the type
- Resource resource = getDefaultResource(type);
- if (resource == null) {
- // no default resource for this type... give up
- throw new OpenEJBException("No default resource defined for
reference '" + resourceId + "' of type '" + type + "' for '" + beanName +
"'.");
+ // Auto create a resource using the first provider that can supply a
resource of the desired type
+ resourceId = ServiceUtils.getServiceProviderId(type);
+ if (resourceId == null) {
+ throw new OpenEJBException("No provider available for resource
reference '" + resourceId + "' of type '" + type + "' for '" + beanName + "'.");
}
- ResourceInfo resourceInfo = configFactory.configureService(resource,
ResourceInfo.class);
- logger.warning("Auto-creating a resource with id '" + resourceInfo.id
+ "' of type '" + type + " for '" + beanName + "'. THERE IS LITTLE CHANCE
THIS WILL WORK!");
+ ResourceInfo resourceInfo = configFactory.configureService(resourceId,
ResourceInfo.class);
return installResource(beanName, resourceInfo);
}
@@ -726,17 +711,6 @@
return resourceInfo.id;
}
- private Resource getDefaultResource(String type) {
- String providerId = defaultResourceIds.get(type);
- if (providerId == null) {
- return null;
- }
- Resource resource = JaxbOpenejb.createResource();
- resource.setProvider(providerId);
- resource.setId(providerId);
- return resource;
- }
-
private String getResourceEnvId(String beanName, String resourceId, String
type) throws OpenEJBException {
if(resourceId == null){
return null;
@@ -766,30 +740,15 @@
logger.info(message);
- // if there isn't a type we can't create a default resource
- if (type == null) {
- throw new OpenEJBException("No provider available for resource
reference '" + resourceId + "' of type '" + type + "' for '" + beanName + "'.");
+ // Auto create a resource using the first provider that can supply a
resource of the desired type
+ String providerId = ServiceUtils.getServiceProviderId(type);
+ if (providerId == null) {
+ throw new OpenEJBException("No provider available for resource
reference '" + resourceId + "' of type '" + type + "' for '" + beanName + "'.");
}
-
- // properties for new resource
Properties properties = new Properties();
properties.setProperty("destination", resourceId);
-
- // Search for a provider like "Default javax.jms.Queue"
- String longId = "Default " + type;
- if (ServiceUtils.hasServiceProvider(longId)) {
- ResourceInfo resourceInfo =
configFactory.configureService(ResourceInfo.class, resourceId, properties,
longId, null);
- return installResource(beanName, resourceInfo);
- }
-
- // Search for a provider like "Default Queue"
- String shortId = "Default " + type.replaceFirst(".*\\.", "");
- if (ServiceUtils.hasServiceProvider(shortId)) {
- ResourceInfo resourceInfo =
configFactory.configureService(ResourceInfo.class, resourceId, properties,
shortId, null);
- return installResource(beanName, resourceInfo);
- }
-
- throw new OpenEJBException("No provider available for resource
reference '" + resourceId + "' of type '" + type + "' for '" + beanName + "'.
Looked for Resource(id=" + longId + ") and Resource(id=" + shortId + ")");
+ ResourceInfo resourceInfo =
configFactory.configureService(ResourceInfo.class, resourceId, properties,
providerId, null);
+ return installResource(beanName, resourceInfo);
}
private String getUsableContainer(Class<? extends ContainerInfo>
containerInfoType, Object bean) {
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=573889&r1=573888&r2=573889&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 Sep 8 11:15:15 2007
@@ -601,14 +601,14 @@
OpenEjbConfiguration runningConfig = getRunningConfig();
for (ResourceInfo resourceInfo : runningConfig.facilities.resources) {
- if (isResourceType(resourceInfo.properties, type)) {
+ if (isResourceType(resourceInfo.serviceType, type)) {
resourceIds.add(resourceInfo.id);
}
}
if (sys != null) {
for (ResourceInfo resourceInfo : sys.facilities.resources) {
- if (isResourceType(resourceInfo.properties, type)) {
+ if (isResourceType(resourceInfo.serviceType, type)) {
resourceIds.add(resourceInfo.id);
}
}
@@ -617,7 +617,7 @@
// the above sys instance
if (openejb != null) {
for (Resource resource : openejb.getResource()) {
- if (isResourceType(resource.getProperties(), type)) {
+ if (isResourceType(resource.getType(), type)) {
resourceIds.add(resource.getId());
}
}
@@ -626,14 +626,12 @@
return resourceIds;
}
- private static boolean isResourceType(Properties properties, String type) {
+ private static boolean isResourceType(String serviceTypes, String type) {
if (type == null) return true;
+ if (serviceTypes == null) return false;
- String connectionInterfaces =
properties.getProperty("ConnectionInterface");
- if (connectionInterfaces == null) return false;
-
- for (String connectionInterface : connectionInterfaces.split(" *, *"))
{
- if (connectionInterface.equals(type)) return true;
+ for (String serviceType : serviceTypes.split(" *, *")) {
+ if (serviceType.equals(type)) return true;
}
return false;
}
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=573889&r1=573888&r2=573889&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
Sat Sep 8 11:15:15 2007
@@ -33,10 +33,11 @@
import java.util.Map;
import java.util.Properties;
import java.util.List;
+import java.util.ArrayList;
public class ServiceUtils {
public static final String defaultProviderURL = "org.apache.openejb";
- private static Map<String, Map<String, ServiceProvider>> loadedServiceJars
= new HashMap<String, Map<String, ServiceProvider>>();
+ private static Map<String, List<ServiceProvider>> loadedServiceJars = new
HashMap<String, List<ServiceProvider>>();
public static Messages messages = new
Messages("org.apache.openejb.util.resources");
public static Logger logger = Logger.getInstance(LogCategory.OPENEJB,
"org.apache.openejb.util.resources");
@@ -62,40 +63,54 @@
try {
ProviderInfo info = getProviderInfo(id);
- Map<String, ServiceProvider> services =
getServices(info.getPackageName());
+ List<ServiceProvider> services =
getServices(info.getPackageName());
- return services.containsKey(info.getServiceName());
- } catch (OpenEJBException e) {
+ for (ServiceProvider service : services) {
+ if (service.getId().equals(id)) {
+ return true;
+ }
+ }
+ } catch (OpenEJBException ignored) {
// someone else will load the file and get the exception
- return false;
}
+ return false;
}
public static ServiceProvider getServiceProvider(String id) throws
OpenEJBException {
ProviderInfo info = getProviderInfo(id);
- Map<String, ServiceProvider> services =
getServices(info.getPackageName());
+ List<ServiceProvider> services = getServices(info.getPackageName());
+
+ for (ServiceProvider service : services) {
+ if (service.getId().equals(info.getServiceName())) {
+ return service;
+ }
+ }
+ throw new NoSuchProviderException(messages.format("conf.4901",
info.getServiceName(), info.getPackageName()));
+ }
+
+ public static String getServiceProviderId(String type) throws
OpenEJBException {
+ if (type == null) return null;
+
+ List<ServiceProvider> services = getServices(defaultProviderURL);
- ServiceProvider service = services.get(info.getServiceName());
- if (service == null) {
- throw new NoSuchProviderException(messages.format("conf.4901",
info.getServiceName(), info.getPackageName()));
+ for (ServiceProvider service : services) {
+ if (service.getServiceTypes().contains(type)) {
+ return service.getId();
+ }
}
- return service;
+ return null;
}
- private static Map<String, ServiceProvider> getServices(String
packageName) throws OpenEJBException {
- Map<String, ServiceProvider> services =
loadedServiceJars.get(packageName);
+ private static List<ServiceProvider> getServices(String packageName)
throws OpenEJBException {
+ List<ServiceProvider> services = loadedServiceJars.get(packageName);
if (services == null) {
ServicesJar servicesJar = JaxbOpenejb.readServicesJar(packageName);
// index services by provider id
List<ServiceProvider> serviceProviders =
servicesJar.getServiceProvider();
- services = new HashMap<String,
ServiceProvider>(serviceProviders.size());
- for (ServiceProvider serviceProvider : serviceProviders) {
- services.put(serviceProvider.getId(), serviceProvider);
-
- }
+ services = new ArrayList<ServiceProvider>(serviceProviders);
loadedServiceJars.put(packageName, services);
}
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/sys/ListAdapter.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/sys/ListAdapter.java?rev=573889&r1=573888&r2=573889&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/sys/ListAdapter.java
(original)
+++
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/sys/ListAdapter.java
Sat Sep 8 11:15:15 2007
@@ -26,13 +26,13 @@
/**
* @version $Rev$ $Date$
*/
-public class ListAdapter extends XmlAdapter<String, List> {
- public List unmarshal(String s) throws Exception {
+public class ListAdapter extends XmlAdapter<String, List<String>> {
+ public List<String> unmarshal(String s) throws Exception {
String[] strings = s.split(", *");
- return new ArrayList(Arrays.asList(strings));
+ return new ArrayList<String>(Arrays.asList(strings));
}
- public String marshal(List list) throws Exception {
+ public String marshal(List<String> list) throws Exception {
return Join.join(", ", list);
}
}
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/sys/ServiceProvider.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/sys/ServiceProvider.java?rev=573889&r1=573888&r2=573889&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/sys/ServiceProvider.java
(original)
+++
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/sys/ServiceProvider.java
Sat Sep 8 11:15:15 2007
@@ -74,7 +74,8 @@
protected String providerType;
@XmlAttribute(name = "service-types", required = false)
@XmlJavaTypeAdapter(ListAdapter.class)
- protected List<String> serviceTypes;
+ // for some reason when this field is type List JaxB gives us a
List<List<String>>
+ protected Object serviceTypes;
/**
* Gets the value of the properties property.
@@ -241,10 +242,11 @@
this.providerType = value;
}
+ @SuppressWarnings({"unchecked"})
public List<String> getServiceTypes() {
if (serviceTypes == null){
serviceTypes = new ArrayList<String>();
}
- return serviceTypes;
+ return (List<String>) serviceTypes;
}
}
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=573889&r1=573888&r2=573889&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
Sat Sep 8 11:15:15 2007
@@ -418,11 +418,6 @@
# original logical connection wrapper.
AccessToUnderlyingConnectionAllowed false
-
- # Interface type of this factory
- # This is used to auto map resource references
-
- ConnectionInterface javax.sql.DataSource
</ServiceProvider>
<ServiceProvider
@@ -607,11 +602,6 @@
# original logical connection wrapper.
AccessToUnderlyingConnectionAllowed false
-
- # Interface type of this factory
- # This is used to auto map resource references
-
- ConnectionInterface javax.sql.DataSource
</ServiceProvider>
<!--
@@ -642,8 +632,6 @@
class-name="org.apache.activemq.ra.ActiveMQManagedConnectionFactory">
ResourceAdapter Default JMS Resource Adapter
-
- ConnectionInterface javax.jms.ConnectionFactory,
javax.jms.QueueConnectionFactory, javax.jms.TopicConnectionFactory
</ServiceProvider>
<ServiceProvider