}
}
private void addConnectorGBeans(EARContext earContext, ConnectorModule module, ConnectorType connector, GerConnectorType geronimoConnector, ClassLoader cl) throws DeploymentException {
ResourceadapterType resourceadapter = connector.getResourceadapter();
GerResourceadapterType geronimoResourceAdapter = geronimoConnector.getResourceadapter();
//
// Resource Adapter
//
ObjectName resourceAdapterObjectName = null;
if (resourceadapter.isSetResourceadapterClass()) {
String resourceAdapterName = geronimoResourceAdapter.getResourceadapterInstance().getResourceadapterName();
// Create the resource adapter gbean
GBeanInfoFactory resourceAdapterInfoFactory = new GBeanInfoFactory("org.apache.geronimo.connector.ResourceAdapterWrapper", cl);
ConfigProperty[] configProperties = getConfigProperties(resourceadapter.getConfigPropertyArray(), geronimoResourceAdapter.getResourceadapterInstance().getConfigPropertySettingArray());
GBeanMBean resourceAdapterGBean = setUpDynamicGBean(resourceAdapterInfoFactory, configProperties, cl);
// set the resource adapter class and activationSpec info map
try {
resourceAdapterGBean.setAttribute("resourceAdapterClass", cl.loadClass(resourceadapter.getResourceadapterClass().getStringValue()));
if (resourceadapter.isSetInboundResourceadapter() && resourceadapter.getInboundResourceadapter().isSetMessageadapter()) {
//get the ActivationSpec metadata as GBeanInfos
Map activationSpecInfoMap = getActivationSpecInfoMap(resourceadapter.getInboundResourceadapter().getMessageadapter().getMessagelistenerArray(), cl);
resourceAdapterGBean.setAttribute("activationSpecInfoMap", activationSpecInfoMap);
earContext.addResourceAdapter(resourceAdapterName, module.getName(), activationSpecInfoMap);
}
} catch (Exception e) {
throw new DeploymentException("Could not set ResourceAdapterClass", e);
}
// set the work manager name
try {
resourceAdapterGBean.setReferencePattern("WorkManager",
ObjectName.getInstance(BASE_WORK_MANAGER_NAME + geronimoResourceAdapter.getResourceadapterInstance().getWorkmanagerName().getStringValue()));
} catch (MalformedObjectNameException e) {
throw new DeploymentException("Could not create object name for work manager", e);
}
// add it
try {
Properties nameProps = new Properties();
nameProps.put("j2eeType", "ResourceAdapter");
nameProps.put("name", resourceAdapterName);
nameProps.put("J2EEServer", earContext.getJ2EEServerName());
nameProps.put("J2EEApplication", earContext.getJ2EEApplicationName());
nameProps.put("ResourceAdapterModule", module.getName());
resourceAdapterObjectName = new ObjectName(earContext.getJ2EEDomainName(), nameProps);
} catch (MalformedObjectNameException e) {
throw new DeploymentException("Could not construct resource adapter object name", e);
}
earContext.addGBean(resourceAdapterObjectName, resourceAdapterGBean);
}
//
// Outbound Managed Connectopn Factories (think JDBC data source or JMS connection factory)
//
// first we need a map of the published outbound adaptors by connection factory interface type
Map connectionDefinitions = new HashMap();
if (resourceadapter.isSetOutboundResourceadapter()) {
for (int j = 0; j < resourceadapter.getOutboundResourceadapter().getConnectionDefinitionArray().length; j++) {
ConnectionDefinitionType connectionDefinition = resourceadapter.getOutboundResourceadapter().getConnectionDefinitionArray(j);
connectionDefinitions.put(connectionDefinition.getConnectionfactoryInterface().getStringValue(), connectionDefinition);
}
// ManagedConnectionFactory setup
if (geronimoResourceAdapter.isSetOutboundResourceadapter()) {
for (int i = 0; i < geronimoResourceAdapter.getOutboundResourceadapter().getConnectionDefinitionArray().length; i++) {
GerConnectionDefinitionType geronimoConnectionDefinition = geronimoResourceAdapter.getOutboundResourceadapter().getConnectionDefinitionArray(i);
assert geronimoConnectionDefinition != null: "Null GeronimoConnectionDefinition";
String connectionFactoryInterfaceName = geronimoConnectionDefinition.getConnectionfactoryInterface().getStringValue();
ConnectionDefinitionType connectionDefinition = (ConnectionDefinitionType) connectionDefinitions.get(connectionFactoryInterfaceName);
if (connectionDefinition == null) {
throw new DeploymentException("No connection definition for ConnectionFactory class: " + connectionFactoryInterfaceName);
}
for (int j = 0; j < geronimoConnectionDefinition.getConnectiondefinitionInstanceArray().length; j++) {
GerConnectiondefinitionInstanceType connectionfactoryInstance = geronimoConnectionDefinition.getConnectiondefinitionInstanceArray()[j];
String managedConnectionFactoryClass = connectionDefinition.getManagedconnectionfactoryClass().getStringValue();
String connectionFactoryInterface = connectionDefinition.getConnectionfactoryInterface().getStringValue();
String connectionFactoryImplClass = connectionDefinition.getConnectionfactoryImplClass().getStringValue();
String connectionInterface = connectionDefinition.getConnectionInterface().getStringValue();
String connectionImplClass = connectionDefinition.getConnectionImplClass().getStringValue();
ConfigProperty[] configProperties = getConfigProperties(connectionDefinition.getConfigPropertyArray(), connectionfactoryInstance.getConfigPropertySettingArray());
addOutboundGBeans(earContext, resourceAdapterObjectName, connectionfactoryInstance, configProperties, managedConnectionFactoryClass, connectionFactoryInterface, connectionFactoryImplClass, connectionInterface, connectionImplClass, cl);
}
}
}
}
//
// admin objects (think message queuse and topics)
//
// first we need a map of the published admin objects by interface type
Map adminObjectInterfaceMap = new HashMap();
for (int i = 0; i < resourceadapter.getAdminobjectArray().length; i++) {
AdminobjectType adminobject = resourceadapter.getAdminobjectArray()[i];
adminObjectInterfaceMap.put(adminobject.getAdminobjectInterface().getStringValue(), adminobject);
}
// add configured admin objects
for (int i = 0; i < geronimoResourceAdapter.getAdminobjectArray().length; i++) {
GerAdminobjectType gerAdminObject = geronimoResourceAdapter.getAdminobjectArray()[i];
String adminObjectInterface = gerAdminObject.getAdminobjectInterface().getStringValue();
AdminobjectType adminObject = (AdminobjectType) adminObjectInterfaceMap.get(adminObjectInterface);
if (adminObject == null) {
throw new DeploymentException("No admin object declared for interface: " + adminObjectInterface);