Author: dblevins
Date: Thu Feb 4 16:14:10 2010
New Revision: 906542
URL: http://svn.apache.org/viewvc?rev=906542&view=rev
Log:
OPENEJB-1232: Client Failover and ConnnectionStrategy configurable on a per
bean basis
Added:
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/EjbDeploymentPropertiesTest.java
(with props)
openejb/trunk/openejb3/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/DynamicConnectionStrategyTest.java
(with props)
openejb/trunk/openejb3/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/PropertiesPropogationTest.java
(with props)
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/DeploymentInfo.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanInfo.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/EjbJarInfoBuilder.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/CoreDeploymentInfo.java
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/SuperProperties.java
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/OpenEjbConfigurationValidationTest.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/oejb3/EjbDeployment.java
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/oejb3/OpenejbJar.java
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/Client.java
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/ConnectionManager.java
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBMetaDataImpl.java
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBRequest.java
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/SocketConnectionFactory.java
openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/ClientObjectFactory.java
openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/JndiRequestHandler.java
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/DeploymentInfo.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/DeploymentInfo.java?rev=906542&r1=906541&r2=906542&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/DeploymentInfo.java
(original)
+++
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/DeploymentInfo.java
Thu Feb 4 16:14:10 2010
@@ -27,6 +27,7 @@
import java.util.Map;
import java.util.List;
import java.util.Set;
+import java.util.Properties;
import javax.naming.Context;
import javax.ejb.ScheduleExpression;
@@ -141,6 +142,8 @@
public <T> T set(Class<T> type, T value);
+ public Properties getProperties();
+
public boolean retainIfExeption(Method removeMethod);
public boolean isLoadOnStartup();
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java?rev=906542&r1=906541&r2=906542&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java
(original)
+++
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanBuilder.java
Thu Feb 4 16:14:10 2010
@@ -158,6 +158,8 @@
deployment.getInjections().addAll(injections);
+ deployment.getProperties().putAll(bean.properties);
+
// ejbTimeout
deployment.setEjbTimeout(getTimeout(ejbClass, bean.timeoutMethod));
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanInfo.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanInfo.java?rev=906542&r1=906541&r2=906542&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanInfo.java
(original)
+++
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/EnterpriseBeanInfo.java
Thu Feb 4 16:14:10 2010
@@ -18,6 +18,7 @@
import java.util.ArrayList;
import java.util.List;
+import java.util.Properties;
public abstract class EnterpriseBeanInfo extends InfoObject {
@@ -35,6 +36,8 @@
public int type;
+ public final Properties properties = new Properties();
+
public String codebase;
public String description;
public String displayName;
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=906542&r1=906541&r2=906542&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
Thu Feb 4 16:14:10 2010
@@ -282,6 +282,16 @@
}
}
+ /**
+ * Main loop that gets executed when OpenEJB starts up
+ * Reads config files and produces the basic "AST"
+ * the assembler needs to actually build the contianer system
+ *
+ * This method is called by the Assembler once at startup.
+ *
+ * @return
+ * @throws OpenEJBException
+ */
public OpenEjbConfiguration getOpenEjbConfiguration() throws
OpenEJBException {
if (sys != null) {
@@ -619,6 +629,22 @@
private static final Map<Class<? extends ServiceInfo>, Class<? extends
Service>> types = new HashMap<Class<? extends ServiceInfo>, Class<? extends
Service>>();
+ /**
+ * This is the magic that allows people to be really vague in their
openejb.xml and not specify
+ * the provider for one of their declared services. We look here for the
default service id
+ *
+ * We then look in the default provider "namespace" that is setup, which
will usually be either one of:
+ *
+ * - org.apache.openejb
+ * - org.apache.openejb.embedded
+ * - org.apache.openejb.tomcat
+ * - org.apache.openejb.jetty
+ *
+ * As in:
+ *
+ * - META-INF/<provider>/service-jar.xml
+ *
+ */
static {
defaultProviders.put(MdbContainerInfo.class, new
DefaultService("MESSAGE", Container.class));
defaultProviders.put(ManagedContainerInfo.class, new
DefaultService("MANAGED", Container.class));
@@ -661,6 +687,20 @@
}
+ /**
+ * This is the major piece of code that configures servics
+ * It merges the data from the <ServiceProvider> declaration
+ * with the data from the openejb.xml file (say <Resource>)
+ *
+ * The end result is a canonical (i.e. flattened) ServiceInfo
+ * The ServiceInfo will be of a specific type (ContainerInfo,
ResourceInfo, etc)
+ *
+ * @param service
+ * @param infoType
+ * @param <T>
+ * @return
+ * @throws OpenEJBException
+ */
public <T extends ServiceInfo> T configureService(Service service, Class<?
extends T> infoType) throws OpenEJBException {
try {
if (infoType == null) throw new NullPointerException("type");
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/EjbJarInfoBuilder.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/EjbJarInfoBuilder.java?rev=906542&r1=906541&r2=906542&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/EjbJarInfoBuilder.java
(original)
+++
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/config/EjbJarInfoBuilder.java
Thu Feb 4 16:14:10 2010
@@ -557,6 +557,7 @@
TransactionType txType = s.getTransactionType();
bean.transactionType = (txType != null)?txType.toString():
TransactionType.CONTAINER.toString();
bean.serviceEndpoint = s.getServiceEndpoint();
+ bean.properties.putAll(d.getProperties());
return bean;
}
@@ -588,6 +589,7 @@
bean.ejbName = mdb.getEjbName();
TransactionType txType = mdb.getTransactionType();
bean.transactionType = (txType != null)?txType.toString():
TransactionType.CONTAINER.toString();
+ bean.properties.putAll(d.getProperties());
if (mdb.getMessagingType() != null) {
bean.mdbInterface = mdb.getMessagingType();
@@ -669,6 +671,7 @@
bean.primKeyField = e.getPrimkeyField();
bean.persistenceType = e.getPersistenceType().toString();
bean.reentrant = e.getReentrant() + "";
+ bean.properties.putAll(d.getProperties());
CmpVersion cmpVersion = e.getCmpVersion();
if (e.getPersistenceType() == PersistenceType.CONTAINER) {
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/CoreDeploymentInfo.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/CoreDeploymentInfo.java?rev=906542&r1=906541&r2=906542&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/CoreDeploymentInfo.java
(original)
+++
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/core/CoreDeploymentInfo.java
Thu Feb 4 16:14:10 2010
@@ -27,6 +27,7 @@
import java.util.Map;
import java.util.Set;
import java.util.TreeSet;
+import java.util.Properties;
import javax.ejb.EJBHome;
import javax.ejb.EJBLocalHome;
import javax.ejb.EJBLocalObject;
@@ -98,6 +99,8 @@
private String destinationId;
private final Map<Class, Object> data = new HashMap<Class, Object>();
+ private final Properties properties = new Properties();
+
private String ejbName;
private String moduleId;
private String runAs;
@@ -322,6 +325,10 @@
return (T) data.put(type, value);
}
+ public Properties getProperties() {
+ return properties;
+ }
+
public List<Injection> getInjections() {
return injections;
}
Modified:
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/SuperProperties.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/SuperProperties.java?rev=906542&r1=906541&r2=906542&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/SuperProperties.java
(original)
+++
openejb/trunk/openejb3/container/openejb-core/src/main/java/org/apache/openejb/util/SuperProperties.java
Thu Feb 4 16:14:10 2010
@@ -76,7 +76,7 @@
protected LinkedHashMap<Object,Object> properties = new
LinkedHashMap<Object,Object>();
/**
- * Comments for the properties.
+ * Comments for individual the properties.
*/
protected LinkedHashMap<String,String> comments = new
LinkedHashMap<String,String>();
Modified:
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/OpenEjbConfigurationValidationTest.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/OpenEjbConfigurationValidationTest.java?rev=906542&r1=906541&r2=906542&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/OpenEjbConfigurationValidationTest.java
(original)
+++
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/assembler/classic/OpenEjbConfigurationValidationTest.java
Thu Feb 4 16:14:10 2010
@@ -32,6 +32,21 @@
import java.util.Set;
/**
+ * This test verifies that no architectural constraints have been violated
+ * in the Info Object tree. Basically those are:
+ *
+ * - Only public fields of basic data types are allowed.
+ *
+ * So this means *no*
+ * - methods
+ * - constructors
+ * - Complex data types (Class, ClassLoader, etc)
+ *
+ * Keeps the Info Objects inline with the concept of a basic AST (Abstract
Syntax Tree)
+ * which is produced by the ConfigurationFactory and built by the Assembler,
+ *
+ * See http://openejb.apache.org/configuration-and-assembly.html
+ *
* @version $Rev$ $Date$
*/
public class OpenEjbConfigurationValidationTest extends TestCase {
@@ -53,21 +68,28 @@
String simpleName = clazz.getSimpleName();
+ // Constructors are not allowed in Info objects
Constructor[] constructors = clazz.getDeclaredConstructors();
assertEquals("constructors are not allowed: " + simpleName, 1,
constructors.length);
assertEquals("constructors are not allowed: " + simpleName, 0,
constructors[0].getParameterTypes().length);
+ // Methods are not allowed in Info objects
Method[] methods = clazz.getDeclaredMethods();
assertEquals("methods are not allowed: " + simpleName, 0,
methods.length);
+ // Annotations are not allowed in Info objects
Annotation[] annotations = clazz.getDeclaredAnnotations();
assertEquals("annotations are not allowed: " + simpleName, 0,
annotations.length);
+ // We are very picky on fields as well
+ // Only certain data types are allowed
Field[] fields = clazz.getDeclaredFields();
for (Field field : fields) {
+ // Only public fields are allowed
assertTrue("Non-public fields are not allowed: " + simpleName +
"." + field.getName(), Modifier.isPublic(field.getModifiers()));
+ // Annotations of fields are not allowed
annotations = clazz.getDeclaredAnnotations();
assertEquals("annotations are not allowed: " + simpleName + "." +
field.getName(), 0, annotations.length);
@@ -76,37 +98,51 @@
type = type.getComponentType();
}
+ // All lists and collections *must* specify the generic type
+ // No vague lists that are typeless
+ // Garantees that the data type in the list is one of the allowed
types
if (List.class.isAssignableFrom(type)) {
type = getGenericType(field);
assertNotNull("Lists must have a generic type: " + simpleName
+ "." + field.getName(), type);
}
+ // Same rules for java.util.Set collections
if (Set.class.isAssignableFrom(type)) {
type = getGenericType(field);
assertNotNull("Sets must have a generic type: " + simpleName +
"." + field.getName(), type);
}
+ // Now we check the data type of the field
+ // Complex types are not allowed
+
+ // Primitives are OK
if (type.isPrimitive()) {
continue;
}
+ // String is OK
if (String.class.isAssignableFrom(type)) {
continue;
}
+ // Properties is OK
if (Properties.class.isAssignableFrom(type)) {
continue;
}
+ // OK
if (QName.class.isAssignableFrom(type)) {
continue;
}
+ // Other InfoObjects are OK
if (InfoObject.class.isAssignableFrom(type)) {
validate(type);
continue;
}
+ // All else is NOT allowed
+ // Referrences to java.lang.Class or ClassLoaders, or URLs or
anything else is all bad
fail("Field is not of an allowed type: " + simpleName + "." +
field.getName());
}
}
Added:
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/EjbDeploymentPropertiesTest.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/EjbDeploymentPropertiesTest.java?rev=906542&view=auto
==============================================================================
---
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/EjbDeploymentPropertiesTest.java
(added)
+++
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/EjbDeploymentPropertiesTest.java
Thu Feb 4 16:14:10 2010
@@ -0,0 +1,74 @@
+/**
+ * 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 junit.framework.TestCase;
+import org.apache.openejb.DeploymentInfo;
+import org.apache.openejb.assembler.classic.Assembler;
+import org.apache.openejb.assembler.classic.SecurityServiceInfo;
+import org.apache.openejb.assembler.classic.TransactionServiceInfo;
+import org.apache.openejb.jee.EjbJar;
+import org.apache.openejb.jee.StatelessBean;
+import org.apache.openejb.jee.oejb3.EjbDeployment;
+import org.apache.openejb.jee.oejb3.OpenejbJar;
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.spi.ContainerSystem;
+
+import java.util.Properties;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class EjbDeploymentPropertiesTest extends TestCase {
+
+ public void test() throws Exception {
+ ConfigurationFactory config = new ConfigurationFactory();
+ Assembler assembler = new Assembler();
+
+
assembler.createTransactionManager(config.configureService(TransactionServiceInfo.class));
+
assembler.createSecurityService(config.configureService(SecurityServiceInfo.class));
+
+ // Setup the descriptor information
+
+ EjbModule ejbModule = new EjbModule(new EjbJar(), new OpenejbJar());
+ EjbJar ejbJar = ejbModule.getEjbJar();
+ OpenejbJar openejbJar = ejbModule.getOpenejbJar();
+
+ StatelessBean statelessBean = ejbJar.addEnterpriseBean(new
StatelessBean(WidgetBean.class));
+ EjbDeployment deployment = openejbJar.addEjbDeployment(statelessBean);
+ deployment.getProperties().put("color", "orange");
+
+ assembler.createApplication(config.configureApplication(ejbModule));
+
+ ContainerSystem containerSystem =
SystemInstance.get().getComponent(ContainerSystem.class);
+
+ DeploymentInfo deploymentInfo =
containerSystem.getDeploymentInfo("WidgetBean");
+
+ Properties properties = deploymentInfo.getProperties();
+ assertTrue(properties.containsKey("color"));
+ assertEquals("orange", properties.getProperty("color"));
+ }
+
+
+ public static interface Widget {
+
+ }
+
+ public static class WidgetBean implements Widget {
+
+ }
+}
Propchange:
openejb/trunk/openejb3/container/openejb-core/src/test/java/org/apache/openejb/config/EjbDeploymentPropertiesTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified:
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/oejb3/EjbDeployment.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/oejb3/EjbDeployment.java?rev=906542&r1=906541&r2=906542&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/oejb3/EjbDeployment.java
(original)
+++
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/oejb3/EjbDeployment.java
Thu Feb 4 16:14:10 2010
@@ -16,6 +16,8 @@
*/
package org.apache.openejb.jee.oejb3;
+import org.apache.openejb.jee.EnterpriseBean;
+
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
@@ -30,9 +32,10 @@
import java.util.Map;
import java.util.LinkedHashMap;
import java.util.Iterator;
+import java.util.Properties;
@XmlAccessorType(XmlAccessType.FIELD)
-...@xmltype(propOrder = {"jndi","ejbLink", "resourceLink", "query"})
+...@xmltype(propOrder = {"jndi","ejbLink", "resourceLink", "query",
"properties"})
@XmlRootElement(name = "ejb-deployment")
public class EjbDeployment {
@@ -59,6 +62,10 @@
@XmlAttribute(name = "ejb-name")
protected String ejbName;
+ @XmlElement(name = "properties")
+ @XmlJavaTypeAdapter(PropertiesAdapter.class)
+ protected Properties properties;
+
public EjbDeployment() {
}
@@ -68,6 +75,11 @@
this.ejbName = ejbName;
}
+ public EjbDeployment(EnterpriseBean bean) {
+ this.deploymentId = bean.getEjbName();
+ this.ejbName = bean.getEjbName();
+ }
+
public List<EjbLink> getEjbLink() {
if (ejbLink == null) {
ejbLink = new ArrayList<EjbLink>();
@@ -165,4 +177,11 @@
public void addQuery(Query query) {
getQuery().add(query);
}
+
+ public Properties getProperties() {
+ if (properties == null) {
+ properties = new Properties();
+ }
+ return properties;
+ }
}
Modified:
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/oejb3/OpenejbJar.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/oejb3/OpenejbJar.java?rev=906542&r1=906541&r2=906542&view=diff
==============================================================================
---
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/oejb3/OpenejbJar.java
(original)
+++
openejb/trunk/openejb3/container/openejb-jee/src/main/java/org/apache/openejb/jee/oejb3/OpenejbJar.java
Thu Feb 4 16:14:10 2010
@@ -18,6 +18,9 @@
package org.apache.openejb.jee.oejb3;
+import org.apache.openejb.jee.StatelessBean;
+import org.apache.openejb.jee.EnterpriseBean;
+
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
@@ -71,8 +74,9 @@
return getEjbDeployment().size();
}
- public void addEjbDeployment(EjbDeployment ejbDeployment) {
+ public EjbDeployment addEjbDeployment(EjbDeployment ejbDeployment) {
getEjbDeployment().add(ejbDeployment);
+ return ejbDeployment;
}
public void removeEjbDeployment(EjbDeployment ejbDeployment) {
@@ -85,5 +89,8 @@
}
return properties;
}
-
+
+ public EjbDeployment addEjbDeployment(EnterpriseBean bean) {
+ return addEjbDeployment(new EjbDeployment(bean));
+ }
}
Modified:
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/Client.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/Client.java?rev=906542&r1=906541&r2=906542&view=diff
==============================================================================
---
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/Client.java
(original)
+++
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/Client.java
Thu Feb 4 16:14:10 2010
@@ -75,7 +75,7 @@
Connection conn = null;
try {
- conn = ConnectionManager.getConnection(cluster, server);
+ conn = ConnectionManager.getConnection(cluster, server, req);
} catch (IOException e) {
throw new RemoteException("Unable to connect",e);
}
Modified:
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/ConnectionManager.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/ConnectionManager.java?rev=906542&r1=906541&r2=906542&view=diff
==============================================================================
---
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/ConnectionManager.java
(original)
+++
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/ConnectionManager.java
Thu Feb 4 16:14:10 2010
@@ -18,6 +18,7 @@
import java.io.IOException;
import java.net.URI;
+import java.util.Properties;
public class ConnectionManager {
@@ -44,9 +45,14 @@
}
- public static Connection getConnection(ClusterMetaData cluster,
ServerMetaData server) throws IOException {
+ public static Connection getConnection(ClusterMetaData cluster,
ServerMetaData server, Request req) throws IOException {
String name = cluster.getConnectionStrategy();
+ if (req instanceof EJBRequest) {
+ EJBRequest ejbRequest = (EJBRequest) req;
+ final Properties p = ejbRequest.getEjbMetaData().getProperties();
+ name = p.getProperty("openejb.client.connection.strategy", name);
+ }
if (name == null) name = "default";
ConnectionStrategy strategy = strategies.get(name);
Modified:
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBMetaDataImpl.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBMetaDataImpl.java?rev=906542&r1=906541&r2=906542&view=diff
==============================================================================
---
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBMetaDataImpl.java
(original)
+++
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBMetaDataImpl.java
Thu Feb 4 16:14:10 2010
@@ -19,8 +19,12 @@
import java.io.IOException;
import java.io.ObjectInput;
import java.io.ObjectOutput;
+import java.io.ByteArrayOutputStream;
+import java.io.ByteArrayInputStream;
import java.util.List;
import java.util.ArrayList;
+import java.util.Properties;
+import java.util.Map;
import javax.ejb.EJBHome;
@@ -47,6 +51,8 @@
protected final transient List<Class> businessClasses = new
ArrayList<Class>();
+ protected final transient Properties properties = new Properties();
+
protected transient Class keyClass;
protected transient EJBHome ejbHomeProxy;
@@ -150,6 +156,10 @@
return businessClasses;
}
+ public Properties getProperties() {
+ return properties;
+ }
+
public Object getPrimaryKey() {
return primaryKey;
}
@@ -178,6 +188,20 @@
}
out.writeByte(interfaceType.ordinal());
+
+ if (properties.size() == 0) {
+ out.writeBoolean(false);
+ } else {
+ out.writeBoolean(true);
+ final ByteArrayOutputStream tmp = new ByteArrayOutputStream();
+ properties.store(tmp, "");
+ tmp.close();
+ final byte[] bytes = tmp.toByteArray();
+ final int length = bytes.length;
+ out.writeInt(length);
+ out.write(bytes);
+ }
+
}
public void readExternal(ObjectInput in) throws IOException,
ClassNotFoundException {
@@ -202,6 +226,15 @@
byte typeIndex = in.readByte();
interfaceType = InterfaceType.values()[typeIndex];
}
+
+ final boolean hasProperties = in.readBoolean();
+ if (hasProperties) {
+ final int bufferLength = in.readInt();
+ final byte[] buffer = new byte[bufferLength];
+ in.read(buffer);
+ final ByteArrayInputStream bais = new ByteArrayInputStream(buffer);
+ properties.load(bais);
+ }
}
public String toString() {
@@ -227,4 +260,15 @@
}
return sb.toString();
}
-}
\ No newline at end of file
+
+ public void loadProperties(Properties properties) {
+ for (Map.Entry<Object, Object> entry : properties.entrySet()) {
+ if (entry.getKey() instanceof String) {
+ String key = (String) entry.getKey();
+ if (key.startsWith("openejb.client.")){
+ this.properties.put(key, entry.getValue());
+ }
+ }
+ }
+ }
+}
Modified:
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBRequest.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBRequest.java?rev=906542&r1=906541&r2=906542&view=diff
==============================================================================
---
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBRequest.java
(original)
+++
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/EJBRequest.java
Thu Feb 4 16:14:10 2010
@@ -37,9 +37,11 @@
private transient Object clientIdentity;
private transient String deploymentId;
private transient int serverHash;
-
private transient Body body;
+ // Only visible on the client side
+ private transient final EJBMetaDataImpl ejbMetaData;
+
public static final int SESSION_BEAN_STATELESS = 6;
public static final int SESSION_BEAN_STATEFUL = 7;
public static final int ENTITY_BM_PERSISTENCE = 8;
@@ -47,11 +49,13 @@
public EJBRequest() {
body = new Body(null);
+ ejbMetaData = null;
}
public EJBRequest(int requestMethod, EJBMetaDataImpl ejb, Method method,
Object[] args, Object primaryKey) {
body = new Body(ejb);
+ this.ejbMetaData = ejb;
this.requestMethod = requestMethod;
setDeploymentCode(ejb.deploymentCode);
setDeploymentId(ejb.deploymentID);
@@ -60,6 +64,10 @@
setPrimaryKey(primaryKey);
}
+ public EJBMetaDataImpl getEjbMetaData() {
+ return ejbMetaData;
+ }
+
public Class getInterfaceClass() {
return body.getInterfaceClass();
}
Modified:
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/SocketConnectionFactory.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/SocketConnectionFactory.java?rev=906542&r1=906541&r2=906542&view=diff
==============================================================================
---
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/SocketConnectionFactory.java
(original)
+++
openejb/trunk/openejb3/server/openejb-client/src/main/java/org/apache/openejb/client/SocketConnectionFactory.java
Thu Feb 4 16:14:10 2010
@@ -48,7 +48,9 @@
Properties p = System.getProperties();
size = getInt(p, "openejb.client.connectionpool.size", size);
+ size = getInt(p, "openejb.client.connection.pool.size", size);
timeout = getInt(p, "openejb.client.connectionpool.timeout", timeout);
+ timeout = getInt(p, "openejb.client.connection.pool.timeout", timeout);
}
public static int getInt(Properties p, String property, int defaultValue){
Modified:
openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/ClientObjectFactory.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/ClientObjectFactory.java?rev=906542&r1=906541&r2=906542&view=diff
==============================================================================
---
openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/ClientObjectFactory.java
(original)
+++
openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/ClientObjectFactory.java
Thu Feb 4 16:14:10 2010
@@ -18,6 +18,7 @@
import java.net.URI;
import java.util.Properties;
+import java.util.Map;
import org.apache.openejb.DeploymentInfo;
import org.apache.openejb.ProxyInfo;
@@ -52,12 +53,7 @@
DeploymentInfo deployment = info.getDeploymentInfo();
int idCode = -1;
- EJBMetaDataImpl metaData = new
EJBMetaDataImpl(deployment.getHomeInterface(),
- deployment.getRemoteInterface(),
- deployment.getPrimaryKeyClass(),
- deployment.getComponentType().toString(),
- deployment.getDeploymentID().toString(),
- idCode, convert(info.getInterfaceType()), null);
+ EJBMetaDataImpl metaData = buildEjbMetaData(info, deployment, idCode);
return metaData;
}
@@ -74,12 +70,7 @@
}
ClientMetaData cMetaData = new ClientMetaData(securityIdentity);
- EJBMetaDataImpl eMetaData = new
EJBMetaDataImpl(deployment.getHomeInterface(),
- deployment.getRemoteInterface(),
- deployment.getPrimaryKeyClass(),
- deployment.getComponentType().toString(),
- deployment.getDeploymentID().toString(),
- idCode, convert(info.getInterfaceType()), null);
+ EJBMetaDataImpl eMetaData = buildEjbMetaData(info, deployment, idCode);
Object primKey = info.getPrimaryKey();
EJBObjectHandler hanlder =
EJBObjectHandler.createEJBObjectHandler(eMetaData, getServerMetaData(),
cMetaData, primKey);
@@ -108,12 +99,7 @@
e.printStackTrace();
}
ClientMetaData cMetaData = new ClientMetaData(securityIdentity);
- EJBMetaDataImpl eMetaData = new
EJBMetaDataImpl(deployment.getHomeInterface(),
- deployment.getRemoteInterface(),
- deployment.getPrimaryKeyClass(),
- deployment.getComponentType().toString(),
- deployment.getDeploymentID().toString(),
- idCode, convert(info.getInterfaceType()), null);
+ EJBMetaDataImpl eMetaData = buildEjbMetaData(info, deployment, idCode);
EJBHomeHandler hanlder =
EJBHomeHandler.createEJBHomeHandler(eMetaData, getServerMetaData(), cMetaData);
@@ -133,12 +119,7 @@
e.printStackTrace();
}
ClientMetaData cMetaData = new ClientMetaData(securityIdentity);
- EJBMetaDataImpl eMetaData = new
EJBMetaDataImpl(deployment.getHomeInterface(),
- deployment.getRemoteInterface(),
- deployment.getPrimaryKeyClass(),
- deployment.getComponentType().toString(),
- deployment.getDeploymentID().toString(),
- idCode, convert(info.getInterfaceType()), null);
+ EJBMetaDataImpl eMetaData = buildEjbMetaData(info, deployment, idCode);
Object primKey = info.getPrimaryKey();
EJBObjectHandler hanlder =
EJBObjectHandler.createEJBObjectHandler(eMetaData, getServerMetaData(),
cMetaData, primKey);
@@ -164,6 +145,8 @@
deployment.getComponentType().toString(),
deployment.getDeploymentID().toString(),
idCode, convert(info.getInterfaceType()),
info.getInterfaces());
+ eMetaData.loadProperties(deployment.getProperties());
+
Object primKey = info.getPrimaryKey();
EJBObjectHandler hanlder =
EJBObjectHandler.createEJBObjectHandler(eMetaData, getServerMetaData(),
cMetaData, primKey);
@@ -198,16 +181,21 @@
e.printStackTrace();
}
ClientMetaData cMetaData = new ClientMetaData(securityIdentity);
+ EJBMetaDataImpl eMetaData = buildEjbMetaData(info, deployment, idCode);
+
+ EJBHomeHandler hanlder =
EJBHomeHandler.createEJBHomeHandler(eMetaData, getServerMetaData(), cMetaData);
+
+ return hanlder.createEJBHomeProxy();
+ }
+
+ private EJBMetaDataImpl buildEjbMetaData(ProxyInfo info, DeploymentInfo
deployment, int idCode) {
EJBMetaDataImpl eMetaData = new
EJBMetaDataImpl(deployment.getHomeInterface(),
deployment.getRemoteInterface(),
deployment.getPrimaryKeyClass(),
deployment.getComponentType().toString(),
deployment.getDeploymentID().toString(),
idCode, convert(info.getInterfaceType()), null);
-
- EJBHomeHandler hanlder =
EJBHomeHandler.createEJBHomeHandler(eMetaData, getServerMetaData(), cMetaData);
-
- return hanlder.createEJBHomeProxy();
+ eMetaData.loadProperties(deployment.getProperties());
+ return eMetaData;
}
-
}
\ No newline at end of file
Modified:
openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/JndiRequestHandler.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/JndiRequestHandler.java?rev=906542&r1=906541&r2=906542&view=diff
==============================================================================
---
openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/JndiRequestHandler.java
(original)
+++
openejb/trunk/openejb3/server/openejb-ejbd/src/main/java/org/apache/openejb/server/ejbd/JndiRequestHandler.java
Thu Feb 4 16:14:10 2010
@@ -372,6 +372,8 @@
deployment.getComponentType().toString(),
deploymentID,
-1, convert(proxyInfo.getInterfaceType()), null);
+ metaData.loadProperties(deployment.getProperties());
+
res.setResult(metaData);
break;
}
@@ -390,6 +392,8 @@
deploymentID,
-1, convert(proxyInfo.getInterfaceType()),
proxyInfo.getInterfaces());
metaData.setPrimaryKey(proxyInfo.getPrimaryKey());
+ metaData.loadProperties(deployment.getProperties());
+
res.setResult(metaData);
break;
}
Added:
openejb/trunk/openejb3/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/DynamicConnectionStrategyTest.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/DynamicConnectionStrategyTest.java?rev=906542&view=auto
==============================================================================
---
openejb/trunk/openejb3/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/DynamicConnectionStrategyTest.java
(added)
+++
openejb/trunk/openejb3/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/DynamicConnectionStrategyTest.java
Thu Feb 4 16:14:10 2010
@@ -0,0 +1,117 @@
+/**
+ * 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.server.ejbd;
+
+import junit.framework.TestCase;
+import org.apache.openejb.OpenEJB;
+import org.apache.openejb.assembler.classic.Assembler;
+import org.apache.openejb.client.ClusterMetaData;
+import org.apache.openejb.client.Connection;
+import org.apache.openejb.client.ConnectionManager;
+import org.apache.openejb.client.ConnectionStrategy;
+import org.apache.openejb.client.ServerMetaData;
+import org.apache.openejb.client.StickyConnectionStrategy;
+import org.apache.openejb.config.ConfigurationFactory;
+import org.apache.openejb.config.EjbModule;
+import org.apache.openejb.core.ServerFederation;
+import org.apache.openejb.jee.EjbJar;
+import org.apache.openejb.jee.StatelessBean;
+import org.apache.openejb.jee.oejb3.EjbDeployment;
+import org.apache.openejb.jee.oejb3.OpenejbJar;
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.server.ServiceDaemon;
+import org.apache.openejb.server.ServicePool;
+
+import javax.ejb.Remote;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import java.io.IOException;
+import java.util.Properties;
+import java.util.concurrent.atomic.AtomicBoolean;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class DynamicConnectionStrategyTest extends TestCase {
+
+ public void test() throws Exception {
+
+ ConnectionManager.registerStrategy("test", new
TestConnectionStrategy());
+ EjbServer ejbServer = new EjbServer();
+
+ Properties initProps = new Properties();
+ initProps.setProperty("openejb.deployments.classpath.include", "");
+
initProps.setProperty("openejb.deployments.classpath.filter.descriptors",
"true");
+ OpenEJB.init(initProps, new ServerFederation());
+ ejbServer.init(new Properties());
+
+ ServicePool pool = new ServicePool(ejbServer, "ejbd", 10);
+ ServiceDaemon serviceDaemon = new ServiceDaemon(pool, 0, "localhost");
+ serviceDaemon.start();
+
+ int port = serviceDaemon.getPort();
+
+ Assembler assembler =
SystemInstance.get().getComponent(Assembler.class);
+ ConfigurationFactory config = new ConfigurationFactory();
+
+ EjbModule ejbModule = new EjbModule(new EjbJar(), new OpenejbJar());
+ EjbJar ejbJar = ejbModule.getEjbJar();
+ OpenejbJar openejbJar = ejbModule.getOpenejbJar();
+
+ StatelessBean statelessBean = ejbJar.addEnterpriseBean(new
StatelessBean(WidgetBean.class));
+ EjbDeployment deployment = openejbJar.addEjbDeployment(statelessBean);
+ deployment.getProperties().put("openejb.client.connection.strategy",
"test");
+
+ assembler.createApplication(config.configureApplication(ejbModule));
+
+ Properties props = new Properties();
+ props.put("java.naming.factory.initial",
"org.apache.openejb.client.RemoteInitialContextFactory");
+ props.put("java.naming.provider.url", "ejbd://127.0.0.1:" + port);
+ Context context = new InitialContext(props);
+
+ Widget remote = (Widget) context.lookup("WidgetBeanRemote");
+
+ assertFalse(TestConnectionStrategy.called.get());
+
+ remote.echo("foo");
+
+ assertTrue(TestConnectionStrategy.called.get());
+ }
+
+
+ @Remote
+ public static interface Widget {
+ public Object echo(Object o);
+ }
+
+ public static class WidgetBean implements Widget {
+ public Object echo(Object o) {
+ return o;
+ }
+ }
+
+ public static class TestConnectionStrategy implements ConnectionStrategy {
+ public static final AtomicBoolean called = new AtomicBoolean();
+
+ private final StickyConnectionStrategy strategy = new
StickyConnectionStrategy();
+
+ public Connection connect(ClusterMetaData cluster, ServerMetaData
server) throws IOException {
+ called.set(true);
+ return strategy.connect(cluster, server);
+ }
+ }
+}
\ No newline at end of file
Propchange:
openejb/trunk/openejb3/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/DynamicConnectionStrategyTest.java
------------------------------------------------------------------------------
svn:eol-style = native
Added:
openejb/trunk/openejb3/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/PropertiesPropogationTest.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/openejb3/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/PropertiesPropogationTest.java?rev=906542&view=auto
==============================================================================
---
openejb/trunk/openejb3/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/PropertiesPropogationTest.java
(added)
+++
openejb/trunk/openejb3/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/PropertiesPropogationTest.java
Thu Feb 4 16:14:10 2010
@@ -0,0 +1,108 @@
+/**
+ * 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.server.ejbd;
+
+import junit.framework.TestCase;
+import org.apache.openejb.OpenEJB;
+import org.apache.openejb.client.proxy.ProxyManager;
+import org.apache.openejb.client.proxy.InvocationHandler;
+import org.apache.openejb.client.EJBObjectHandler;
+import org.apache.openejb.assembler.classic.Assembler;
+import org.apache.openejb.assembler.classic.EjbJarInfo;
+import org.apache.openejb.config.ConfigurationFactory;
+import org.apache.openejb.config.EjbModule;
+import org.apache.openejb.core.ServerFederation;
+import org.apache.openejb.jee.EjbJar;
+import org.apache.openejb.jee.StatelessBean;
+import org.apache.openejb.jee.oejb3.OpenejbJar;
+import org.apache.openejb.jee.oejb3.EjbDeployment;
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.server.ServiceDaemon;
+import org.apache.openejb.server.ServicePool;
+
+import javax.ejb.Remote;
+import javax.naming.Context;
+import javax.naming.InitialContext;
+import java.util.Properties;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class PropertiesPropogationTest extends TestCase {
+
+ public void test() throws Exception {
+ EjbServer ejbServer = new EjbServer();
+
+ Properties initProps = new Properties();
+ initProps.setProperty("openejb.deployments.classpath.include", "");
+
initProps.setProperty("openejb.deployments.classpath.filter.descriptors",
"true");
+ OpenEJB.init(initProps, new ServerFederation());
+ ejbServer.init(new Properties());
+
+ ServicePool pool = new ServicePool(ejbServer, "ejbd", 10);
+ ServiceDaemon serviceDaemon = new ServiceDaemon(pool, 0, "localhost");
+ serviceDaemon.start();
+
+ int port = serviceDaemon.getPort();
+
+ Assembler assembler =
SystemInstance.get().getComponent(Assembler.class);
+ ConfigurationFactory config = new ConfigurationFactory();
+
+ EjbModule ejbModule = new EjbModule(new EjbJar(), new OpenejbJar());
+ EjbJar ejbJar = ejbModule.getEjbJar();
+ OpenejbJar openejbJar = ejbModule.getOpenejbJar();
+
+ StatelessBean statelessBean = ejbJar.addEnterpriseBean(new
StatelessBean(WidgetBean.class));
+ EjbDeployment deployment = openejbJar.addEjbDeployment(statelessBean);
+ deployment.getProperties().put("color", "orange");
+ deployment.getProperties().put("openejb.client.color", "red");
+
+ assembler.createApplication(config.configureApplication(ejbModule));
+
+ Properties props = new Properties();
+ props.put("java.naming.factory.initial",
"org.apache.openejb.client.RemoteInitialContextFactory");
+ props.put("java.naming.provider.url", "ejbd://127.0.0.1:" + port);
+ Context context = new InitialContext(props);
+
+ Widget remote = (Widget) context.lookup("WidgetBeanRemote");
+
+ InvocationHandler handler = ProxyManager.getInvocationHandler(remote);
+
+ EJBObjectHandler objectHandler = EJBObjectHandler.class.cast(handler);
+
+ Properties properties = objectHandler.getEjb().getProperties();
+
+ // Should only contain "openejb.client.*" properties
+ assertFalse(properties.containsKey("color"));
+
+ // The openejb.client.color property should have been propogated
+ assertTrue(properties.containsKey("openejb.client.color"));
+ assertEquals("red", properties.getProperty("openejb.client.color"));
+ }
+
+
+ @Remote
+ public static interface Widget {
+ public Object echo(Object o);
+ }
+
+ public static class WidgetBean implements Widget {
+ public Object echo(Object o) {
+ return o;
+ }
+ }
+}
Propchange:
openejb/trunk/openejb3/server/openejb-ejbd/src/test/java/org/apache/openejb/server/ejbd/PropertiesPropogationTest.java
------------------------------------------------------------------------------
svn:eol-style = native