Author: dblevins
Date: Wed Aug 15 04:00:20 2012
New Revision: 1373201
URL: http://svn.apache.org/viewvc?rev=1373201&view=rev
Log:
OPENEJB-1887 ServiceProvider inheritance
Added:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/provider/MalformedProviderNameException.java
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/provider/ID.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/provider/InvalidProviderDeclarationException.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/provider/ProviderManager.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/JaxbOpenejb.java
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/ProviderManagerTest.java
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/provider/ID.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/provider/ID.java?rev=1373201&r1=1373200&r2=1373201&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/provider/ID.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/provider/ID.java
Wed Aug 15 04:00:20 2012
@@ -64,7 +64,7 @@ public class ID {
return new ID(parts[0], parts[1]);
}
- throw new ProviderManager.MalformedProviderNameException(raw);
+ throw new MalformedProviderNameException(raw);
}
@Override
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/provider/InvalidProviderDeclarationException.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/provider/InvalidProviderDeclarationException.java?rev=1373201&r1=1373200&r2=1373201&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/provider/InvalidProviderDeclarationException.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/provider/InvalidProviderDeclarationException.java
Wed Aug 15 04:00:20 2012
@@ -27,7 +27,7 @@ public class InvalidProviderDeclarationE
private final ServiceProvider provider;
public InvalidProviderDeclarationException(String s, ID id,
ServiceProvider provider) {
- super(s);
+ super(String.format("%s - %s", id, s));
this.id = id;
this.provider = provider;
}
Added:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/provider/MalformedProviderNameException.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/provider/MalformedProviderNameException.java?rev=1373201&view=auto
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/provider/MalformedProviderNameException.java
(added)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/provider/MalformedProviderNameException.java
Wed Aug 15 04:00:20 2012
@@ -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.apache.openejb.config.provider;
+
+/**
+* @version $Rev$ $Date$
+*/
+public class MalformedProviderNameException extends IllegalArgumentException {
+ public MalformedProviderNameException(String s) {
+ super(s);
+ }
+}
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/provider/ProviderManager.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/provider/ProviderManager.java?rev=1373201&r1=1373200&r2=1373201&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/provider/ProviderManager.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/provider/ProviderManager.java
Wed Aug 15 04:00:20 2012
@@ -97,8 +97,6 @@ public class ProviderManager {
private void register(ID id, ServiceProvider provider, Set<ID> seen) {
if (providers.containsKey(id)) return;
- validate(id, provider);
-
if (provider.getParent() != null) {
final ID parentId = ID.parse(provider.getParent(), id);
@@ -113,6 +111,8 @@ public class ProviderManager {
inherit(provider, parent);
}
+ validate(id, provider);
+
providers.put(id, provider);
}
@@ -120,7 +120,7 @@ public class ProviderManager {
if (n(child.getClassName())) child.setClassName(parent.getClassName());
if (n(child.getConstructor()))
child.setConstructor(parent.getConstructor());
- if (n(child.getFactoryName()))
child.setDisplayName(parent.getFactoryName());
+ if (n(child.getFactoryName()))
child.setFactoryName(parent.getFactoryName());
if (n(child.getDescription()))
child.setDescription(parent.getDescription());
if (n(child.getDisplayName()))
child.setDisplayName(parent.getDisplayName());
if (n(child.getService())) child.setService(parent.getService());
@@ -172,6 +172,9 @@ public class ProviderManager {
private void validate(ID id, ServiceProvider provider) {
id.validate();
+ if (provider.getService() == null) {
+ throw new InvalidProviderDeclarationException("'service' attribute
cannot be null", id, provider);
+ }
// TODO - validate provider
}
@@ -180,9 +183,4 @@ public class ProviderManager {
}
- public static class MalformedProviderNameException extends
IllegalArgumentException {
- public MalformedProviderNameException(String s) {
- super(s);
- }
- }
}
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/JaxbOpenejb.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/JaxbOpenejb.java?rev=1373201&r1=1373200&r2=1373201&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/JaxbOpenejb.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/JaxbOpenejb.java
Wed Aug 15 04:00:20 2012
@@ -180,7 +180,7 @@ public abstract class JaxbOpenejb {
return servicesJar;
}
- private static ServicesJar parseServicesJar(InputStream in) throws
ParserConfigurationException, SAXException, IOException {
+ public static ServicesJar parseServicesJar(InputStream in) throws
ParserConfigurationException, SAXException, IOException {
InputSource inputSource = new InputSource(in);
SAXParserFactory factory = SAX_PARSER_FACTORY;
@@ -206,7 +206,7 @@ public abstract class JaxbOpenejb {
provider.setFactoryName(att.getValue("", "factory-name"));
provider.setConstructor(att.getValue("", "constructor"));
provider.setClassName(att.getValue("", "class-name"));
- provider.setParent(att.getValue("", "provider"));
+ provider.setParent(att.getValue("", "parent"));
String typesString = att.getValue("", "types");
if (typesString != null){
ListAdapter listAdapter = new ListAdapter();
Modified:
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/ProviderManagerTest.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/ProviderManagerTest.java?rev=1373201&r1=1373200&r2=1373201&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/ProviderManagerTest.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/ProviderManagerTest.java
Wed Aug 15 04:00:20 2012
@@ -321,6 +321,111 @@ public class ProviderManagerTest extends
}
}
+ public void testInheritedAttributes() throws Exception {
+
+ final ProviderManager manager = new ProviderManager(new
ProviderLoader() {
+ @Override
+ public ServiceProvider load(ID id) {
+ if ("color".equalsIgnoreCase(id.getName())) {
+ final ServiceProvider color = new ServiceProvider();
+ color.setClassName(Color.class.getName());
+ color.setFactoryName("fooFactory");
+ color.setId("Color");
+ color.setService("Resource");
+ color.setConstructor("one, two, three");
+ color.setDescription("the description");
+ color.setDisplayName("the display name");
+ color.getProperties().setProperty("red", "0");
+ color.getProperties().setProperty("green", "0");
+ color.getProperties().setProperty("blue", "0");
+ color.getTypes().add(Color.class.getName());
+ return color;
+ }
+
+ if ("red".equalsIgnoreCase(id.getName())) {
+ final ServiceProvider red = new ServiceProvider();
+ red.setId("Red");
+ red.setParent("Color");
+ red.getProperties().setProperty("red", "255");
+ return red;
+ }
+
+ if ("orange".equalsIgnoreCase(id.getName())) {
+ final ServiceProvider orange = new ServiceProvider();
+ orange.setId("Orange");
+ orange.setParent("Red");
+ orange.getProperties().setProperty("green", "200");
+ return orange;
+ }
+
+ throw new IllegalStateException(id.toString());
+ }
+
+ @Override
+ public List<ServiceProvider> load(String namespace) {
+ List<ServiceProvider> list = new ArrayList<ServiceProvider>();
+ list.add(load(new ID(namespace, "color")));
+ list.add(load(new ID(namespace, "red")));
+ list.add(load(new ID(namespace, "orange")));
+ return list;
+ }
+ });
+
+ { // Assert Orange
+
+ // Should have inherited from Red
+
+ final ServiceProvider provider = manager.get("dEFAUlT", "orAngE");
+ assertNotNull(provider);
+ assertEquals(Color.class.getName(), provider.getClassName());
+ assertEquals("Resource", provider.getService());
+ assertEquals("one, two, three", provider.getConstructor());
+ assertEquals("the description", provider.getDescription());
+ assertEquals("the display name", provider.getDisplayName());
+ assertEquals("fooFactory", provider.getFactoryName());
+ assertEquals("255", provider.getProperties().getProperty("reD"));
+ assertEquals("200", provider.getProperties().get("grEeN"));
+ assertEquals("0", provider.getProperties().get("bLue"));
+ assertEquals(1, provider.getTypes().size());
+ }
+
+ { // Assert Red
+
+ // Should have inherited green and blue values from Color
+
+ final ServiceProvider provider = manager.get("dEFaulT", "REd");
+ assertNotNull(provider);
+ assertEquals(Color.class.getName(), provider.getClassName());
+ assertEquals("Resource", provider.getService());
+ assertEquals("one, two, three", provider.getConstructor());
+ assertEquals("the description", provider.getDescription());
+ assertEquals("the display name", provider.getDisplayName());
+ assertEquals("fooFactory", provider.getFactoryName());
+ assertEquals("255", provider.getProperties().getProperty("rED"));
+ assertEquals("0", provider.getProperties().get("grEEN"));
+ assertEquals("0", provider.getProperties().get("bLUe"));
+ }
+
+ { // Assert Color
+ // Must be able to retrieve provider and properties in a
case-insensitive manner
+
+ final ServiceProvider provider = manager.get("DeFaulT", "CoLoR");
+ assertNotNull(provider);
+ assertEquals(Color.class.getName(), provider.getClassName());
+ assertEquals("Resource", provider.getService());
+ assertEquals("one, two, three", provider.getConstructor());
+ assertEquals("the description", provider.getDescription());
+ assertEquals("the display name", provider.getDisplayName());
+ assertEquals("fooFactory", provider.getFactoryName());
+ assertEquals("0", provider.getProperties().getProperty("rEd"));
+ assertEquals("0", provider.getProperties().get("grEEn"));
+ assertEquals("0", provider.getProperties().get("blUE"));
+ }
+
+ assertEquals(3, manager.getAll().size());
+ }
+
+
public static class Color {
private int red;
private int green;