djencks     2004/07/06 13:22:48

  Modified:    modules/core/src/java/org/openejb/deployment
                        OpenEJBModuleBuilder.java
  Log:

  make mdb deployment work. Make the dds valid.
  
  Revision  Changes    Path
  1.12      +71 -15    
openejb/modules/core/src/java/org/openejb/deployment/OpenEJBModuleBuilder.java
  
  Index: OpenEJBModuleBuilder.java
  ===================================================================
  RCS file: 
/home/projects/openejb/scm/openejb/modules/core/src/java/org/openejb/deployment/OpenEJBModuleBuilder.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- OpenEJBModuleBuilder.java 26 Jun 2004 07:19:52 -0000      1.11
  +++ OpenEJBModuleBuilder.java 6 Jul 2004 17:22:48 -0000       1.12
  @@ -63,6 +63,8 @@
   import java.util.Map;
   import java.util.Properties;
   import java.util.Set;
  +import java.util.Collection;
  +import java.util.ArrayList;
   import java.util.jar.JarEntry;
   import java.util.jar.JarFile;
   import java.util.zip.ZipEntry;
  @@ -266,7 +268,7 @@
                   ejbJar = doc.getEjbJar();
                   ejbModule.setSpecDD(ejbJar);
               } catch (XmlException e) {
  -                throw new DeploymentException("Unable to parse ejb-jar.xml");
  +                throw new DeploymentException("Unable to parse ejb-jar.xml", e);
               }
   
               // load the openejb-jar.xml file
  @@ -488,11 +490,19 @@
               MessageDrivenBeanType messageDrivenBean = messageDrivenBeans[i];
   
               OpenejbMessageDrivenBeanType openejbMessageDrivenBean = 
(OpenejbMessageDrivenBeanType) 
openejbBeans.get(messageDrivenBean.getEjbName().getStringValue());
  +            if (openejbMessageDrivenBean == null) {
  +                throw new DeploymentException("No openejb deployment descriptor for 
mdb: " + messageDrivenBean.getEjbName().getStringValue());
  +            }
               ObjectName messageDrivenObjectName = createEJBObjectName(earContext, 
module.getName(), messageDrivenBean);
               ObjectName activationSpecName = 
createActivationSpecObjectName(earContext, module.getName(), messageDrivenBean);
   
               String containerId = messageDrivenObjectName.getCanonicalName();
  -            GBeanMBean activationSpecGBean = 
createActivationSpecWrapperGBean(messageDrivenBean.getActivationConfig().getActivationConfigPropertyArray(),
 openejbMessageDrivenBean.getResourceAdapterName(), 
openejbMessageDrivenBean.getActivationSpecClass(), containerId);
  +            GBeanMBean activationSpecGBean = 
createActivationSpecWrapperGBean(earContext,
  +                    messageDrivenBean.isSetActivationConfig()? 
messageDrivenBean.getActivationConfig().getActivationConfigPropertyArray(): new 
ActivationConfigPropertyType[] {},
  +                    openejbMessageDrivenBean.getResourceAdapterName(),
  +                    openejbMessageDrivenBean.getActivationSpecClass(),
  +                    containerId,
  +                    cl);
               GBeanMBean messageDrivenGBean = createMessageDrivenBean(earContext, 
ejbModule, containerId, messageDrivenBean, openejbMessageDrivenBean, 
activationSpecName, transactionPolicyHelper, cl);
               earContext.addGBean(activationSpecName, activationSpecGBean);
               earContext.addGBean(messageDrivenObjectName, messageDrivenGBean);
  @@ -777,18 +787,35 @@
           }
       }
   
  -    private GBeanMBean 
createActivationSpecWrapperGBean(ActivationConfigPropertyType[] 
activationConfigProperties, String resourceAdapterName, String activationSpecClass, 
String containerId) throws DeploymentException {
  -        Map activationSpecMap = null;
  +    private GBeanMBean createActivationSpecWrapperGBean(EARContext earContext,
  +                                                        
ActivationConfigPropertyType[] activationConfigProperties,
  +                                                        String resourceAdapterName,
  +                                                        String activationSpecClass,
  +                                                        String containerId,
  +                                                        ClassLoader cl) throws 
DeploymentException {
           ObjectName resourceAdapterObjectName = null;
  -        try {
  -            resourceAdapterObjectName = ObjectName.getInstance(resourceAdapterName);
  -            activationSpecMap = (Map)kernel.getAttribute(resourceAdapterObjectName, 
"activationSpecInfoMap");
  -        } catch (Exception e) {
  -            throw new DeploymentException(e);
  +        String resourceAdapterModule = 
earContext.getResourceAdapterModule(resourceAdapterName);
  +        ActivationSpecInfo activationSpecInfo;
  +        if (resourceAdapterModule != null) {
  +            resourceAdapterObjectName = createResourceAdapterObjectName(earContext, 
resourceAdapterModule, resourceAdapterName);
  +            activationSpecInfo = (ActivationSpecInfo) 
earContext.getActivationSpecInfo(resourceAdapterName, activationSpecClass);
  +        } else {
  +            Set names = 
kernel.listGBeans(createResourceAdapterQueryName(earContext, resourceAdapterName));
  +            if (names.size() != 1) {
  +                throw new DeploymentException("Unknown or ambiguous resource 
adapter reference: " + resourceAdapterName + " match count: " + names.size());
  +            }
  +            resourceAdapterObjectName = (ObjectName) names.iterator().next();
  +            Map activationSpecInfos = null;
  +            try {
  +                activationSpecInfos = 
(Map)kernel.getAttribute(resourceAdapterObjectName, "activationSpecInfoMap");
  +            } catch (Exception e) {
  +                throw new DeploymentException("Could not get activation spec infos 
for resource adapter named: " + resourceAdapterObjectName, e);
  +            }
  +            activationSpecInfo = (ActivationSpecInfo) 
activationSpecInfos.get(activationSpecClass);
           }
  -        ActivationSpecInfo activationSpecInfo = 
(ActivationSpecInfo)activationSpecMap.get(activationSpecClass);
  -        GBeanInfo activationSpecGBeanInfo= 
activationSpecInfo.getActivationSpecGBeanInfo();
  -        GBeanMBean activationSpecGBean = new GBeanMBean(activationSpecGBeanInfo);
  +
  +        GBeanInfo activationSpecGBeanInfo = 
activationSpecInfo.getActivationSpecGBeanInfo();
  +        GBeanMBean activationSpecGBean = new GBeanMBean(activationSpecGBeanInfo, 
cl);
           try {
               activationSpecGBean.setAttribute("activationSpecClass", 
activationSpecInfo.getActivationSpecClass());
               activationSpecGBean.setAttribute("containerId", containerId);
  @@ -801,7 +828,7 @@
           for (int i = 0; i < activationConfigProperties.length; i++) {
               ActivationConfigPropertyType activationConfigProperty = 
activationConfigProperties[i];
               String propertyName = 
activationConfigProperty.getActivationConfigPropertyName().getStringValue();
  -            String propertyValue = 
activationConfigProperty.getActivationConfigPropertyValue().getStringValue();
  +            String propertyValue = 
activationConfigProperty.getActivationConfigPropertyValue().isNil()? null: 
activationConfigProperty.getActivationConfigPropertyValue().getStringValue();
               try {
                   activationSpecGBean.setAttribute(propertyName, propertyValue);
               } catch (Exception e) {
  @@ -857,6 +884,7 @@
           nameProps.put("name", ejbName);
           nameProps.put("J2EEServer", earContext.getJ2EEServerName());
           nameProps.put("J2EEApplication", earContext.getJ2EEApplicationName());
  +        //TODO should this be EJBModule rather than J2EEModule???
           nameProps.put("J2EEModule", moduleName);
   
           try {
  @@ -866,6 +894,34 @@
           }
       }
   
  +    private ObjectName createResourceAdapterObjectName(EARContext earContext, 
String moduleName, String resourceAdapterName) throws DeploymentException {
  +        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", moduleName);
  +
  +        try {
  +            return new ObjectName(earContext.getJ2EEDomainName(), nameProps);
  +        } catch (MalformedObjectNameException e) {
  +            throw new DeploymentException("Unable to construct ObjectName", e);
  +        }
  +    }
  +
  +    ObjectName createResourceAdapterQueryName(EARContext earContext, String 
resourceAdapterName) throws DeploymentException {
  +        StringBuffer buffer = new StringBuffer(earContext.getJ2EEDomainName())
  +                .append(":j2eeType=ResourceAdapter,J2EEServer=")
  +                .append(earContext.getJ2EEServerName())
  +                .append(",*,name=").append(resourceAdapterName);
  +
  +        try {
  +            return new ObjectName(buffer.toString());
  +        } catch (MalformedObjectNameException e) {
  +            throw new DeploymentException("Unable to construct ObjectName", e);
  +        }
  +    }
  +
       private ReadOnlyContext buildComponentContext(EARContext earContext, EJBModule 
ejbModule, SessionBeanType sessionBean, OpenejbSessionBeanType openejbSessionBean, 
UserTransaction userTransaction, ClassLoader cl) throws Exception {
           // env entries
           EnvEntryType[] envEntries = sessionBean.getEnvEntryArray();
  @@ -1170,7 +1226,7 @@
           infoFactory.addAttribute("kernel", Kernel.class, false);
           infoFactory.addInterface(ModuleBuilder.class);
   
  -        infoFactory.setConstructor(new String[] {"kernel"});
  +        infoFactory.setConstructor(new String[]{"kernel"});
   
           GBEAN_INFO = infoFactory.getBeanInfo();
       }
  
  
  

Reply via email to