Author: dblevins
Date: Sat Aug 11 20:03:44 2012
New Revision: 1372013
URL: http://svn.apache.org/viewvc?rev=1372013&view=rev
Log:
[jira is still down for maintenance, not sure what number this is]
Improve the ability to use <Resource> and similar without a service-jar.xml
<Resource> et. al now support 'class-name', 'constructor' and 'factory-name'
just like <ServiceProvider> does.
Added:
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/sys/NoServiceJarTest.java
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/Service.java
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/AbstractService.java
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java?rev=1372013&r1=1372012&r2=1372013&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/ConfigurationFactory.java
Sat Aug 11 20:03:44 2012
@@ -404,6 +404,7 @@ public class ConfigurationFactory implem
sys.containerSystem = new ContainerSystemInfo();
sys.facilities = new FacilitiesInfo();
+ // TODO: This is wrong not all services are JndiContexts
for (Service service : openejb.getServices()) {
final JndiContextInfo info = configureService(service,
JndiContextInfo.class);
sys.facilities.services.add(info);
@@ -930,10 +931,15 @@ public class ConfigurationFactory implem
ServiceProvider provider = resolveServiceProvider(service,
infoType);
- /* we mock the provider if not found now
if (provider == null) {
final List<ServiceProvider> providers =
ServiceUtils.getServiceProvidersByServiceType(providerType);
final 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("\"/>");
+// }
final List<String> types = new ArrayList<String>();
for (final ServiceProvider p : providers) {
@@ -949,15 +955,6 @@ public class ConfigurationFactory implem
final String noProviderMessage =
messages.format("configureService.noProviderForService", providerType,
service.getId(), service.getType(), service.getProvider(), sb.toString());
throw new NoSuchProviderException(noProviderMessage);
}
- */
-
- if (provider == null) { // mock it, service-jar.xml is just a pain
for simple resources with no real default
- String type = service.getProperties().getProperty("class");
- if (type == null) {
- type = service.getType();
- }
- provider = new ServiceProvider(type, service.getId(),
providerType);
- }
if (service.getId() == null) service.setId(provider.getId());
@@ -1065,6 +1062,21 @@ public class ConfigurationFactory implem
@SuppressWarnings({"unchecked"})
private ServiceProvider resolveServiceProvider(final
org.apache.openejb.config.Service service, final Class infoType) throws
OpenEJBException {
+ if (service.getClassName() != null) {
+ if (service.getType() == null) {
+ service.setType(service.getClassName());
+ }
+
+ final ServiceProvider provider = new ServiceProvider();
+ provider.setId(service.getId());
+ provider.setService(service.getClass().getSimpleName());
+ provider.getTypes().add(service.getType());
+ provider.setClassName(service.getClassName());
+ provider.setConstructor(service.getConstructor());
+ provider.setFactoryName(service.getFactoryName());
+ return provider;
+ }
+
if (service.getProvider() != null) {
return ServiceUtils.getServiceProvider(service.getProvider());
}
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/Service.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/Service.java?rev=1372013&r1=1372012&r2=1372013&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/Service.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/Service.java
Sat Aug 11 20:03:44 2012
@@ -54,4 +54,10 @@ public interface Service {
public String getType();
public void setType(String type);
+
+ public String getClassName();
+
+ public String getConstructor();
+
+ public String getFactoryName();
}
\ No newline at end of file
Modified:
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/AbstractService.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/AbstractService.java?rev=1372013&r1=1372012&r2=1372013&view=diff
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/AbstractService.java
(original)
+++
openejb/trunk/openejb/container/openejb-core/src/main/java/org/apache/openejb/config/sys/AbstractService.java
Sat Aug 11 20:03:44 2012
@@ -59,6 +59,24 @@ public abstract class AbstractService im
@XmlAttribute
protected String type;
+ /**
+ * Mutually exclusive with 'provider'
+ */
+ @XmlAttribute(name = "class-name")
+ protected String className;
+
+ /**
+ * Mutually exclusive with 'provider'
+ */
+ @XmlAttribute(name = "constructor")
+ protected String constructor;
+
+ /**
+ * Mutually exclusive with 'provider'
+ */
+ @XmlAttribute(name = "factory-name")
+ protected String factoryName;
+
protected AbstractService(String id) {
this(id, null, null);
@@ -171,6 +189,30 @@ public abstract class AbstractService im
this.type = type;
}
+ public String getClassName() {
+ return className;
+ }
+
+ public void setClassName(String className) {
+ this.className = className;
+ }
+
+ public String getConstructor() {
+ return constructor;
+ }
+
+ public void setConstructor(String constructor) {
+ this.constructor = constructor;
+ }
+
+ public String getFactoryName() {
+ return factoryName;
+ }
+
+ public void setFactoryName(String factoryName) {
+ this.factoryName = factoryName;
+ }
+
@Override
public boolean equals(Object o) {
if (this == o) return true;
Added:
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/sys/NoServiceJarTest.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/sys/NoServiceJarTest.java?rev=1372013&view=auto
==============================================================================
---
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/sys/NoServiceJarTest.java
(added)
+++
openejb/trunk/openejb/container/openejb-core/src/test/java/org/apache/openejb/config/sys/NoServiceJarTest.java
Sat Aug 11 20:03:44 2012
@@ -0,0 +1,141 @@
+/*
+ * 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.sys;
+
+import junit.framework.TestCase;
+import org.apache.openejb.AppContext;
+import org.apache.openejb.OpenEJBException;
+import org.apache.openejb.assembler.classic.Assembler;
+import org.apache.openejb.assembler.classic.ResourceInfo;
+import org.apache.openejb.assembler.classic.SecurityServiceInfo;
+import org.apache.openejb.assembler.classic.TransactionServiceInfo;
+import org.apache.openejb.config.ConfigurationFactory;
+import org.apache.openejb.config.EjbModule;
+import org.apache.openejb.jee.EjbJar;
+import org.apache.openejb.jee.SingletonBean;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class NoServiceJarTest extends TestCase {
+
+ public void test() throws Exception {
+ final ConfigurationFactory factory = new ConfigurationFactory();
+ final Assembler assembler = new Assembler();
+
+ final Resource orange = new Resource("Orange");
+ orange.setClassName(Color.class.getName());
+ orange.getProperties().setProperty("red", "255");
+ orange.getProperties().setProperty("green", "200");
+ orange.getProperties().setProperty("blue", "0");
+
+ final ResourceInfo resourceInfo = factory.configureService(orange,
ResourceInfo.class);
+ assembler.createResource(resourceInfo);
+
+
assembler.createSecurityService(factory.configureService(SecurityServiceInfo.class));
+
assembler.createTransactionManager(factory.configureService(TransactionServiceInfo.class));
+
+ final EjbJar ejbJar = new EjbJar();
+ ejbJar.addEnterpriseBean(new SingletonBean(MyBean.class));
+ final AppContext application =
assembler.createApplication(factory.configureApplication(new
EjbModule(ejbJar)));
+
+ final MyBean myBean = (MyBean)
application.getBeanContexts().get(0).getBusinessLocalBeanHome().create();
+
+ final Color color = myBean.getColor();
+ assertNotNull(color);
+ assertEquals(255, color.getRed());
+ assertEquals(200, color.getGreen());
+ assertEquals(0, color.getBlue());
+ }
+
+ public void testInvalid() throws Exception {
+ final ConfigurationFactory factory = new ConfigurationFactory();
+
+ final Resource orange = new Resource("Orange");
+ orange.getProperties().setProperty("red", "255");
+ orange.getProperties().setProperty("green", "200");
+ orange.getProperties().setProperty("blue", "0");
+
+ try {
+ factory.configureService(orange, ResourceInfo.class);
+ fail("OpenEJBException should have been thrown");
+ } catch (OpenEJBException e) {
+ // pass
+ }
+ }
+
+ public void testInvalidJustType() throws Exception {
+ final ConfigurationFactory factory = new ConfigurationFactory();
+
+ final Resource orange = new Resource("Orange");
+ orange.setType(Color.class.getName());
+ orange.getProperties().setProperty("red", "255");
+ orange.getProperties().setProperty("green", "200");
+ orange.getProperties().setProperty("blue", "0");
+
+ try {
+ factory.configureService(orange, ResourceInfo.class);
+ fail("OpenEJBException should have been thrown");
+ } catch (OpenEJBException e) {
+ // pass
+ }
+ }
+
+
+ public static class Color {
+ private int red;
+ private int green;
+ private int blue;
+
+ public Color() {
+ }
+
+ public int getRed() {
+ return red;
+ }
+
+ public void setRed(int red) {
+ this.red = red;
+ }
+
+ public int getGreen() {
+ return green;
+ }
+
+ public void setGreen(int green) {
+ this.green = green;
+ }
+
+ public int getBlue() {
+ return blue;
+ }
+
+ public void setBlue(int blue) {
+ this.blue = blue;
+ }
+ }
+
+ public static class MyBean {
+
+ @javax.annotation.Resource
+ private Color color;
+
+ public Color getColor() {
+ return color;
+ }
+ }
+}