You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by dj...@apache.org on 2008/01/18 08:54:14 UTC
svn commit: r613091 - in
/geronimo/server/trunk/plugins/connector/geronimo-connector-builder/src:
main/java/org/apache/geronimo/connector/deployment/
test/java/org/apache/geronimo/connector/deployment/
Author: djencks
Date: Thu Jan 17 23:54:14 2008
New Revision: 613091
URL: http://svn.apache.org/viewvc?rev=613091&view=rev
Log:
GERONIMO-3480. Allow ResourceAdapter, ManagedConnectionFactory, and AdminObject properties that aren't mentioned in the ra.xml
Modified:
geronimo/server/trunk/plugins/connector/geronimo-connector-builder/src/main/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilder.java
geronimo/server/trunk/plugins/connector/geronimo-connector-builder/src/test/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilderTest.java
Modified: geronimo/server/trunk/plugins/connector/geronimo-connector-builder/src/main/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilder.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/connector/geronimo-connector-builder/src/main/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilder.java?rev=613091&r1=613090&r2=613091&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/connector/geronimo-connector-builder/src/main/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilder.java (original)
+++ geronimo/server/trunk/plugins/connector/geronimo-connector-builder/src/main/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilder.java Thu Jan 17 23:54:14 2008
@@ -29,12 +29,12 @@
import java.util.Enumeration;
import java.util.HashMap;
import java.util.HashSet;
-import java.util.Iterator;
import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.TreeMap;
+import java.util.Collections;
import java.util.jar.JarFile;
import java.util.zip.ZipEntry;
@@ -431,9 +431,10 @@
// Create the resource adapter gbean
if (resourceadapter.isSetResourceadapterClass()) {
GBeanInfoBuilder resourceAdapterInfoBuilder = new GBeanInfoBuilder(ResourceAdapterWrapperGBean.class, ResourceAdapterWrapperGBean.GBEAN_INFO);
- GBeanData resourceAdapterGBeanData = setUpDynamicGBean(resourceAdapterInfoBuilder, resourceadapter.getConfigPropertyArray(), cl);
+ String resourceAdapterClassName = resourceadapter.getResourceadapterClass().getStringValue().trim();
+ GBeanData resourceAdapterGBeanData = setUpDynamicGBeanWithProperties(resourceAdapterClassName, resourceAdapterInfoBuilder, resourceadapter.getConfigPropertyArray(), cl, Collections.<String>emptySet());
- resourceAdapterGBeanData.setAttribute("resourceAdapterClass", resourceadapter.getResourceadapterClass().getStringValue().trim());
+ resourceAdapterGBeanData.setAttribute("resourceAdapterClass", resourceAdapterClassName);
// Add map from messageListenerInterface to activationSpec class
Map<String, String> messageListenerToActivationSpecMap = new TreeMap<String, String>();
@@ -478,7 +479,7 @@
}
GBeanData jcaResourceData = new GBeanData(jcaResourcejsr77Name, JCAResourceImplGBean.GBEAN_INFO);
- Map thisModule = new LinkedHashMap(2);
+ Map<String, String> thisModule = new LinkedHashMap<String, String>(2);
thisModule.put(NameFactory.J2EE_APPLICATION, resourceAdapterModuleName.getNameProperty(NameFactory.J2EE_APPLICATION));
thisModule.put(NameFactory.RESOURCE_ADAPTER_MODULE, resourceAdapterModuleName.getNameProperty(NameFactory.J2EE_NAME));
jcaResourceData.setReferencePattern("ConnectionFactories", new AbstractNameQuery(resourceAdapterModuleName.getArtifact(), thisModule, JCAConnectionFactory.class.getName()));
@@ -511,9 +512,7 @@
ResourceadapterType resourceadapter = connector.getResourceadapter();
GerResourceadapterType[] geronimoResourceAdapters = geronimoConnector.getResourceadapterArray();
- for (int k = 0; k < geronimoResourceAdapters.length; k++) {
- GerResourceadapterType geronimoResourceAdapter = geronimoResourceAdapters[k];
-
+ for (GerResourceadapterType geronimoResourceAdapter : geronimoResourceAdapters) {
// Resource Adapter
AbstractName resourceAdapterAbstractName = null;
if (resourceadapter.isSetResourceadapterClass()) {
@@ -547,8 +546,7 @@
throw new DeploymentException("Geronimo plan configures an outbound resource adapter but ra.xml does not describe any");
}
String transactionSupport = resourceadapter.getOutboundResourceadapter().getTransactionSupport().getStringValue().trim();
- for (int i = 0; i < geronimoResourceAdapter.getOutboundResourceadapter().getConnectionDefinitionArray().length; i++)
- {
+ for (int i = 0; i < geronimoResourceAdapter.getOutboundResourceadapter().getConnectionDefinitionArray().length; i++) {
GerConnectionDefinitionType geronimoConnectionDefinition = geronimoResourceAdapter.getOutboundResourceadapter().getConnectionDefinitionArray(i);
assert geronimoConnectionDefinition != null : "Null GeronimoConnectionDefinition";
@@ -559,8 +557,7 @@
throw new DeploymentException("No connection definition for ConnectionFactory class: " + connectionFactoryInterfaceName);
}
- for (int j = 0; j < geronimoConnectionDefinition.getConnectiondefinitionInstanceArray().length; j++)
- {
+ for (int j = 0; j < geronimoConnectionDefinition.getConnectiondefinitionInstanceArray().length; j++) {
GerConnectiondefinitionInstanceType connectionfactoryInstance = geronimoConnectionDefinition.getConnectiondefinitionInstanceArray()[j];
addOutboundGBeans(earContext, jcaResourceName, resourceAdapterAbstractName, connectionFactoryGBeanData, connectionfactoryInstance, transactionSupport, cl);
@@ -581,9 +578,8 @@
throw new DeploymentException("No admin object declared for interface: " + adminObjectInterface);
}
- for (int j = 0; j < gerAdminObject.getAdminobjectInstanceArray().length; j++) {
+ for (GerAdminobjectInstanceType gerAdminObjectInstance: gerAdminObject.getAdminobjectInstanceArray()) {
GBeanData adminObjectInstanceGBeanData = new GBeanData(adminObjectGBeanData);
- GerAdminobjectInstanceType gerAdminObjectInstance = gerAdminObject.getAdminobjectInstanceArray()[j];
setDynamicGBeanDataAttributes(adminObjectInstanceGBeanData, gerAdminObjectInstance.getConfigPropertySettingArray(), cl);
// add it
AbstractName adminObjectAbstractName = earContext.getNaming().createChildName(jcaResourceName, gerAdminObjectInstance.getMessageDestinationName().trim(), NameFactory.JCA_ADMIN_OBJECT);
@@ -598,49 +594,18 @@
}
private Map getActivationSpecInfoMap(MessagelistenerType[] messagelistenerArray, ClassLoader cl) throws DeploymentException {
- Map activationSpecInfos = new HashMap();
- for (int i = 0; i < messagelistenerArray.length; i++) {
- MessagelistenerType messagelistenerType = messagelistenerArray[i];
+ Map<String, GBeanData> activationSpecInfos = new HashMap<String, GBeanData>();
+ for (MessagelistenerType messagelistenerType : messagelistenerArray) {
String messageListenerInterface = messagelistenerType.getMessagelistenerType().getStringValue().trim();
ActivationspecType activationspec = messagelistenerType.getActivationspec();
String activationSpecClassName = activationspec.getActivationspecClass().getStringValue().trim();
GBeanInfoBuilder infoBuilder = new GBeanInfoBuilder(ActivationSpecWrapperGBean.class, ActivationSpecWrapperGBean.GBEAN_INFO);
+ Set<String> ignore = Collections.singleton("resourceAdapter");
+ setUpDynamicGBean(activationSpecClassName, infoBuilder, ignore, cl, true);
- //add all javabean properties that have both getter and setter. Ignore the "required" flag from the dd.
- Map getters = new HashMap();
- Set setters = new HashSet();
- Method[] methods;
- try {
- Class activationSpecClass = cl.loadClass(activationSpecClassName);
- methods = activationSpecClass.getMethods();
- } catch (ClassNotFoundException e) {
- throw new DeploymentException("Can not load activation spec class", e);
- }
- for (int j = 0; j < methods.length; j++) {
- Method method = methods[j];
- String methodName = method.getName();
- if ((methodName.startsWith("get") || methodName.startsWith("is")) && method.getParameterTypes().length == 0) {
- String attributeName = (methodName.startsWith("get")) ? methodName.substring(3) : methodName.substring(2);
- getters.put(Introspector.decapitalize(attributeName), method.getReturnType().getName());
- } else if (methodName.startsWith("set") && method.getParameterTypes().length == 1) {
- setters.add(Introspector.decapitalize(methodName.substring(3)));
- }
- }
- getters.keySet().retainAll(setters);
- getters.remove("resourceAdapter");
-
- for (Iterator iterator = getters.entrySet().iterator(); iterator.hasNext();) {
- Map.Entry entry = (Map.Entry) iterator.next();
- infoBuilder.addAttribute(new DynamicGAttributeInfo((String) entry.getKey(), (String) entry.getValue(), true, true, true, true));
- }
GBeanInfo gbeanInfo = infoBuilder.getBeanInfo();
- try {
- //make sure the class is available, but we don't use it.
- cl.loadClass(activationSpecClassName);
- } catch (ClassNotFoundException e) {
- throw new DeploymentException("Could not load ActivationSpec class", e);
- }
+
GBeanData activationSpecInfo = new GBeanData(gbeanInfo);
activationSpecInfo.setAttribute("activationSpecClass", activationSpecClassName);
activationSpecInfos.put(messageListenerInterface, activationSpecInfo);
@@ -648,17 +613,55 @@
return activationSpecInfos;
}
- private Map getManagedConnectionFactoryInfoMap(ConnectionDefinitionType[] connectionDefinitionArray, ClassLoader cl) throws DeploymentException {
- Map managedConnectionFactoryInfos = new HashMap();
- for (int i = 0; i < connectionDefinitionArray.length; i++) {
- ConnectionDefinitionType connectionDefinition = connectionDefinitionArray[i];
+ private void setUpDynamicGBean(String activationSpecClassName, GBeanInfoBuilder infoBuilder, Set<String> ignore, ClassLoader cl, boolean decapitalize) throws DeploymentException {
+ //add all javabean properties that have both getter and setter. Ignore the "required" flag from the dd.
+ Map<String, String> getters = new HashMap<String, String>();
+ Set<String> setters = new HashSet<String>();
+ Method[] methods;
+ try {
+ Class activationSpecClass = cl.loadClass(activationSpecClassName);
+ methods = activationSpecClass.getMethods();
+ } catch (ClassNotFoundException e) {
+ throw new DeploymentException("Can not load activation spec class", e);
+ }
+ for (Method method : methods) {
+ String methodName = method.getName();
+ if ((methodName.startsWith("get") || methodName.startsWith("is")) && method.getParameterTypes().length == 0) {
+ String attributeName = (methodName.startsWith("get")) ? methodName.substring(3) : methodName.substring(2);
+ getters.put(setCase(attributeName, decapitalize), method.getReturnType().getName());
+ } else if (methodName.startsWith("set") && method.getParameterTypes().length == 1) {
+ setters.add(setCase(methodName.substring(3), decapitalize));
+ }
+ }
+ getters.keySet().retainAll(setters);
+ getters.keySet().removeAll(ignore);
+
+ for (Map.Entry<String, String> entry : getters.entrySet()) {
+ infoBuilder.addAttribute(new DynamicGAttributeInfo(entry.getKey(), entry.getValue(), true, true, true, true));
+ }
+ }
+
+ private String setCase(String attributeName, boolean decapitalize) {
+ if (decapitalize) {
+ return Introspector.decapitalize(attributeName);
+ } else {
+ return attributeName;
+ }
+ }
+ private Map getManagedConnectionFactoryInfoMap(ConnectionDefinitionType[] connectionDefinitionArray, ClassLoader cl) throws DeploymentException {
+ Map<String, GBeanData> managedConnectionFactoryInfos = new HashMap<String, GBeanData>();
+ for (ConnectionDefinitionType connectionDefinition : connectionDefinitionArray) {
GBeanInfoBuilder managedConnectionFactoryInfoBuilder = new GBeanInfoBuilder(ManagedConnectionFactoryWrapper.class, ManagedConnectionFactoryWrapperGBean.GBEAN_INFO);
- GBeanData managedConnectionFactoryGBeanData = setUpDynamicGBean(managedConnectionFactoryInfoBuilder, connectionDefinition.getConfigPropertyArray(), cl);
+ String managedConnectionfactoryClassName = connectionDefinition.getManagedconnectionfactoryClass().getStringValue().trim();
+ Set<String> ignore = new HashSet<String>();
+ ignore.add("ResourceAdapter");
+ ignore.add("LogWriter");
+ GBeanData managedConnectionFactoryGBeanData = setUpDynamicGBeanWithProperties(managedConnectionfactoryClassName, managedConnectionFactoryInfoBuilder, connectionDefinition.getConfigPropertyArray(), cl, ignore);
// set the standard properties
String connectionfactoryInterface = connectionDefinition.getConnectionfactoryInterface().getStringValue().trim();
- managedConnectionFactoryGBeanData.setAttribute("managedConnectionFactoryClass", connectionDefinition.getManagedconnectionfactoryClass().getStringValue().trim());
+ managedConnectionFactoryGBeanData.setAttribute("managedConnectionFactoryClass", managedConnectionfactoryClassName);
managedConnectionFactoryGBeanData.setAttribute("connectionFactoryInterface", connectionfactoryInterface);
managedConnectionFactoryGBeanData.setAttribute("connectionFactoryImplClass", connectionDefinition.getConnectionfactoryImplClass().getStringValue().trim());
managedConnectionFactoryGBeanData.setAttribute("connectionInterface", connectionDefinition.getConnectionInterface().getStringValue().trim());
@@ -669,35 +672,32 @@
}
private Map getAdminObjectInfoMap(AdminobjectType[] adminobjectArray, ClassLoader cl) throws DeploymentException {
- Map adminObjectInfos = new HashMap();
- for (int i = 0; i < adminobjectArray.length; i++) {
- AdminobjectType adminObject = adminobjectArray[i];
-
+ Map<String, GBeanData> adminObjectInfos = new HashMap<String, GBeanData>();
+ for (AdminobjectType adminObject : adminobjectArray) {
GBeanInfoBuilder adminObjectInfoBuilder = new GBeanInfoBuilder(AdminObjectWrapper.class, AdminObjectWrapperGBean.GBEAN_INFO);
- GBeanData adminObjectGBeanData = setUpDynamicGBean(adminObjectInfoBuilder, adminObject.getConfigPropertyArray(), cl);
+ String adminObjectClassName = adminObject.getAdminobjectClass().getStringValue().trim();
+ GBeanData adminObjectGBeanData = setUpDynamicGBeanWithProperties(adminObjectClassName, adminObjectInfoBuilder, adminObject.getConfigPropertyArray(), cl, Collections.<String>emptySet());
// set the standard properties
String adminObjectInterface = adminObject.getAdminobjectInterface().getStringValue().trim();
adminObjectGBeanData.setAttribute("adminObjectInterface", adminObjectInterface);
- adminObjectGBeanData.setAttribute("adminObjectClass", adminObject.getAdminobjectClass().getStringValue().trim());
+ adminObjectGBeanData.setAttribute("adminObjectClass", adminObjectClassName);
adminObjectInfos.put(adminObjectInterface, adminObjectGBeanData);
}
return adminObjectInfos;
}
- private GBeanData setUpDynamicGBean(GBeanInfoBuilder infoBuilder, ConfigPropertyType[] configProperties, ClassLoader cl) throws DeploymentException {
- for (int i = 0; i < configProperties.length; i++) {
- infoBuilder.addAttribute(new DynamicGAttributeInfo(configProperties[i].getConfigPropertyName().getStringValue().trim(), configProperties[i].getConfigPropertyType().getStringValue().trim(), true, true, true, true));
- }
+ private GBeanData setUpDynamicGBeanWithProperties(String className, GBeanInfoBuilder infoBuilder, ConfigPropertyType[] configProperties, ClassLoader cl, Set<String> ignore) throws DeploymentException {
+ setUpDynamicGBean(className, infoBuilder, ignore, cl, false);
GBeanInfo gbeanInfo = infoBuilder.getBeanInfo();
GBeanData gbeanData = new GBeanData(gbeanInfo);
- for (int i = 0; i < configProperties.length; i++) {
- if (configProperties[i].isSetConfigPropertyValue()) {
- gbeanData.setAttribute(configProperties[i].getConfigPropertyName().getStringValue(),
- getValue(configProperties[i].getConfigPropertyType().getStringValue(),
- configProperties[i].getConfigPropertyValue().getStringValue(),
+ for (ConfigPropertyType configProperty : configProperties) {
+ if (configProperty.isSetConfigPropertyValue()) {
+ gbeanData.setAttribute(configProperty.getConfigPropertyName().getStringValue(),
+ getValue(configProperty.getConfigPropertyType().getStringValue(),
+ configProperty.getConfigPropertyValue().getStringValue(),
cl));
}
}
@@ -838,7 +838,7 @@
connectionManagerGBean.setAttribute("transactionSupport", transactionSupport);
connectionManagerGBean.setAttribute("pooling", pooling);
connectionManagerGBean.setReferencePattern("ConnectionTracker", earContext.getConnectionTrackerName());
- connectionManagerGBean.setAttribute("containerManagedSecurity", Boolean.valueOf(connectionManager.isSetContainerManagedSecurity()));
+ connectionManagerGBean.setAttribute("containerManagedSecurity", connectionManager.isSetContainerManagedSecurity());
connectionManagerGBean.setReferencePattern("TransactionManager", earContext.getTransactionManagerName());
} catch (Exception e) {
throw new DeploymentException("Problem setting up ConnectionManager named " + connectionfactoryInstance.getName().trim(), e);
@@ -921,7 +921,7 @@
throw new DeploymentException("No resource adapter instance gbean found matching " + resourceAdapterInstanceQuery + " from configuration " + configuration.getId(), e);
}
String moduleName = (String) instanceName.getName().get(NameFactory.RESOURCE_ADAPTER_MODULE);
- Map moduleNameMap = new HashMap(instanceName.getName());
+ Map<String, String> moduleNameMap = new HashMap<String, String>(instanceName.getName());
moduleNameMap.remove(NameFactory.JCA_RESOURCE);
moduleNameMap.remove(NameFactory.RESOURCE_ADAPTER);
moduleNameMap.remove(NameFactory.RESOURCE_ADAPTER_MODULE);
Modified: geronimo/server/trunk/plugins/connector/geronimo-connector-builder/src/test/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilderTest.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/connector/geronimo-connector-builder/src/test/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilderTest.java?rev=613091&r1=613090&r2=613091&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/connector/geronimo-connector-builder/src/test/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilderTest.java (original)
+++ geronimo/server/trunk/plugins/connector/geronimo-connector-builder/src/test/java/org/apache/geronimo/connector/deployment/ConnectorModuleBuilderTest.java Thu Jan 17 23:54:14 2008
@@ -422,7 +422,7 @@
assertNotNull(managedConnectionFactoryInfo);
GBeanInfo managedConnectionFactoryGBeanInfo = managedConnectionFactoryInfo.getGBeanInfo();
List attributes3 = managedConnectionFactoryGBeanInfo.getPersistentAttributes();
- assertEquals(10, attributes3.size());
+ assertEquals(11, attributes3.size());
}
// FirstTestOutboundConnectionFactory