You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by ga...@apache.org on 2010/08/11 19:29:26 UTC
svn commit: r984485 - in /openejb/trunk/openejb3/container/openejb-core/src:
main/java/org/apache/openejb/assembler/classic/
main/java/org/apache/openejb/core/ivm/naming/
test/java/org/apache/openejb/config/
Author: gawor
Date: Wed Aug 11 17:29:25 2010
New Revision: 984485
URL: http://svn.apache.org/viewvc?rev=984485&view=rev
Log:
OPENEJB-1324: Additional fixes and tests for supporting Enum and Class types as env-entry types
Added:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/ClassReference.java (with props)
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/InjectionTest.java (with props)
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java
Modified: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java?rev=984485&r1=984484&r2=984485&view=diff
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java (original)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/JndiEncBuilder.java Wed Aug 11 17:29:25 2010
@@ -23,6 +23,7 @@ import org.apache.openejb.spi.ContainerS
import org.apache.openejb.core.CoreUserTransaction;
import org.apache.openejb.core.TransactionSynchronizationRegistryWrapper;
import org.apache.openejb.core.JndiFactory;
+import org.apache.openejb.core.ivm.naming.ClassReference;
import org.apache.openejb.core.ivm.naming.CrossClassLoaderJndiReference;
import org.apache.openejb.core.ivm.naming.IntraVmJndiReference;
import org.apache.openejb.core.ivm.naming.JaxWsServiceReference;
@@ -203,6 +204,10 @@ public class JndiEncBuilder {
obj = new Character(sb.charAt(0));
} else if (type == URL.class) {
obj = new URL(entry.value);
+ } else if (type == Class.class) {
+ obj = new ClassReference(entry.value.trim());
+ } else if (type.isEnum()) {
+ obj = Enum.valueOf(type, entry.value.trim());
} else {
throw new IllegalArgumentException("Invalid env-ref-type " + type);
}
Added: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/ClassReference.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/ClassReference.java?rev=984485&view=auto
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/ClassReference.java (added)
+++ openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/ClassReference.java Wed Aug 11 17:29:25 2010
@@ -0,0 +1,38 @@
+/**
+ *
+ * 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.core.ivm.naming;
+
+import javax.naming.NamingException;
+
+public class ClassReference extends Reference {
+
+ private final String className;
+
+ public ClassReference(String className) {
+ this.className = className;
+ }
+
+ public Object getObject() throws NamingException {
+ ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
+ try {
+ return classLoader.loadClass(className);
+ } catch (ClassNotFoundException e) {
+ throw new NamingException("Erorr loading class: " + className);
+ }
+ }
+}
Propchange: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/ClassReference.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/ClassReference.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/ivm/naming/ClassReference.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/InjectionTest.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/InjectionTest.java?rev=984485&view=auto
==============================================================================
--- openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/InjectionTest.java (added)
+++ openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/InjectionTest.java Wed Aug 11 17:29:25 2010
@@ -0,0 +1,217 @@
+/**
+ *
+ * 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;
+
+import java.util.concurrent.TimeUnit;
+
+import javax.annotation.Resource;
+import javax.ejb.SessionContext;
+import javax.ejb.Stateless;
+import javax.naming.InitialContext;
+
+import junit.framework.TestCase;
+
+import org.apache.openejb.assembler.classic.Assembler;
+import org.apache.openejb.assembler.classic.ProxyFactoryInfo;
+import org.apache.openejb.assembler.classic.SecurityServiceInfo;
+import org.apache.openejb.assembler.classic.StatelessSessionContainerInfo;
+import org.apache.openejb.assembler.classic.TransactionServiceInfo;
+import org.apache.openejb.core.ivm.naming.InitContextFactory;
+import org.apache.openejb.jee.EjbJar;
+import org.apache.openejb.jee.EnvEntry;
+import org.apache.openejb.jee.StatelessBean;
+
+/**
+ * @version $Revision$ $Date$
+ */
+public class InjectionTest extends TestCase {
+
+ public void testEnvEntryInjections() throws Exception {
+ InitialContext ctx = new InitialContext();
+
+ Object object = ctx.lookup("WidgetBeanLocal");
+
+ assertTrue("instanceof widget", object instanceof Widget);
+
+ Widget widget = (Widget) object;
+
+ assertEquals("2", widget.getString());
+ assertEquals(3.0D, widget.getDouble());
+ assertEquals(new Long(4), widget.getLong());
+ assertEquals(new Float(5f), widget.getFloat());
+ assertEquals(new Integer(6), widget.getInteger());
+ assertEquals(new Short((short)7), widget.getShort());
+ assertEquals(Boolean.FALSE, widget.getBoolean());
+ assertEquals(new Character('9'), widget.getCharacter());
+ assertEquals(Widget.class, widget.getMyClass());
+ assertEquals(TimeUnit.HOURS, widget.getTimeUnit());
+ }
+
+ protected void setUp() throws Exception {
+ super.setUp();
+
+ System.setProperty(javax.naming.Context.INITIAL_CONTEXT_FACTORY, InitContextFactory.class.getName());
+
+ ConfigurationFactory config = new ConfigurationFactory();
+ Assembler assembler = new Assembler();
+
+ assembler.createProxyFactory(config.configureService(ProxyFactoryInfo.class));
+ assembler.createTransactionManager(config.configureService(TransactionServiceInfo.class));
+ assembler.createSecurityService(config.configureService(SecurityServiceInfo.class));
+
+ // containers
+ StatelessSessionContainerInfo statelessContainerInfo = config.configureService(StatelessSessionContainerInfo.class);
+ statelessContainerInfo.properties.setProperty("TimeOut", "10");
+ statelessContainerInfo.properties.setProperty("MaxSize", "0");
+ statelessContainerInfo.properties.setProperty("StrictPooling", "false");
+ assembler.createContainer(statelessContainerInfo);
+
+ // Setup the descriptor information
+
+ StatelessBean bean = new StatelessBean(WidgetBean.class);
+ bean.addBusinessLocal(Widget.class.getName());
+ bean.addBusinessRemote(RemoteWidget.class.getName());
+
+ EjbJar ejbJar = new EjbJar();
+ ejbJar.addEnterpriseBean(bean);
+
+ bean.getEnvEntry().add(new EnvEntry(name("myString"), "java.lang.String", "2"));
+ bean.getEnvEntry().add(new EnvEntry(name("myDouble"), "java.lang.Double", "3.0"));
+ bean.getEnvEntry().add(new EnvEntry(name("myLong"), "java.lang.Long", "4"));
+ bean.getEnvEntry().add(new EnvEntry(name("myFloat"), "java.lang.Float", "5"));
+ bean.getEnvEntry().add(new EnvEntry(name("myInteger"), "java.lang.Integer", "6"));
+ bean.getEnvEntry().add(new EnvEntry(name("myShort"), "java.lang.Short", "7"));
+ bean.getEnvEntry().add(new EnvEntry(name("myBoolean"), "java.lang.Boolean", "false"));
+ bean.getEnvEntry().add(new EnvEntry(name("myByte"), "java.lang.Byte", "8"));
+ bean.getEnvEntry().add(new EnvEntry(name("myCharacter"), "java.lang.Character", "9"));
+ bean.getEnvEntry().add(new EnvEntry(name("myClass"), "java.lang.Class", Widget.class.getName()));
+ bean.getEnvEntry().add(new EnvEntry(name("myTimeUnit"), TimeUnit.class.getName(), "HOURS"));
+
+ assembler.createApplication(config.configureApplication(ejbJar));
+ }
+
+ private String name(String name) {
+ return "java:comp/env/" + WidgetBean.class.getName() + "/" + name;
+ }
+
+ public static interface Widget {
+ String getString();
+ Double getDouble();
+ Long getLong();
+ Float getFloat();
+ Short getShort();
+ Integer getInteger();
+ Boolean getBoolean();
+ Character getCharacter();
+ Byte getByte();
+ Class getMyClass();
+ TimeUnit getTimeUnit();
+ }
+
+ public static interface RemoteWidget extends Widget {
+ }
+
+ @Stateless
+ public static class WidgetBean implements Widget, RemoteWidget {
+
+ @Resource
+ private String myString = "1";
+
+ @Resource
+ private Double myDouble = 1.0D;
+
+ @Resource
+ private Long myLong = 1L;
+
+ @Resource
+ private Float myFloat = 1.0F;
+
+ @Resource
+ private Integer myInteger = 1;
+
+ @Resource
+ private Short myShort = (short) 1;
+
+ @Resource
+ private Boolean myBoolean = true;
+
+ @Resource
+ private Byte myByte = (byte) 1;
+
+ @Resource
+ private Character myCharacter = '1';
+
+ @Resource
+ private Class myClass = Object.class;
+
+ @Resource
+ private TimeUnit myTimeUnit = TimeUnit.DAYS;
+
+ public WidgetBean() {
+ }
+
+ @Resource
+ public void setSessionContext(SessionContext sessionContext) {
+ }
+
+ public Boolean getBoolean() {
+ return myBoolean;
+ }
+
+ public Byte getByte() {
+ return myByte;
+ }
+
+ public Character getCharacter() {
+ return myCharacter;
+ }
+
+ public Double getDouble() {
+ return myDouble;
+ }
+
+ public Float getFloat() {
+ return myFloat;
+ }
+
+ public Integer getInteger() {
+ return myInteger;
+ }
+
+ public Long getLong() {
+ return myLong;
+ }
+
+ public Class getMyClass() {
+ return myClass;
+ }
+
+ public Short getShort() {
+ return myShort;
+ }
+
+ public String getString() {
+ return myString;
+ }
+
+ public TimeUnit getTimeUnit() {
+ return myTimeUnit;
+ }
+
+ }
+}
Propchange: openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/InjectionTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/InjectionTest.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/InjectionTest.java
------------------------------------------------------------------------------
svn:mime-type = text/plain