dblevins    2005/04/15 22:21:04

  Modified:    modules/openejb-builder/src/java/org/openejb/deployment
                        SessionBuilder.java StatelessContainerBuilder.java
  Log:

  Build the HandlerChain into the EJBContainer
  
  Revision  Changes    Path
  1.20      +45 -0     
openejb/modules/openejb-builder/src/java/org/openejb/deployment/SessionBuilder.java
  
  Index: SessionBuilder.java
  ===================================================================
  RCS file: 
/scm/openejb/openejb/modules/openejb-builder/src/java/org/openejb/deployment/SessionBuilder.java,v
  retrieving revision 1.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- SessionBuilder.java       15 Apr 2005 05:36:53 -0000      1.19
  +++ SessionBuilder.java       16 Apr 2005 02:21:04 -0000      1.20
  @@ -47,15 +47,21 @@
    */
   package org.openejb.deployment;
   
  +import java.net.MalformedURLException;
   import java.net.URI;
  +import java.net.URL;
   import java.security.Permissions;
  +import java.util.List;
   import java.util.Map;
   import java.util.Set;
  +import java.util.jar.JarFile;
   import javax.management.MalformedObjectNameException;
   import javax.management.ObjectName;
   import javax.transaction.UserTransaction;
   
  +import org.apache.geronimo.axis.builder.WSDescriptorParser;
   import org.apache.geronimo.common.DeploymentException;
  +import org.apache.geronimo.deployment.util.DeploymentUtil;
   import org.apache.geronimo.gbean.GBeanData;
   import org.apache.geronimo.j2ee.deployment.EARContext;
   import org.apache.geronimo.j2ee.deployment.EJBModule;
  @@ -76,11 +82,17 @@
   import org.apache.geronimo.xbeans.j2ee.EnterpriseBeansType;
   import org.apache.geronimo.xbeans.j2ee.EnvEntryType;
   import org.apache.geronimo.xbeans.j2ee.MessageDestinationRefType;
  +import org.apache.geronimo.xbeans.j2ee.PortComponentHandlerType;
  +import org.apache.geronimo.xbeans.j2ee.PortComponentType;
   import org.apache.geronimo.xbeans.j2ee.ResourceEnvRefType;
   import org.apache.geronimo.xbeans.j2ee.ResourceRefType;
   import org.apache.geronimo.xbeans.j2ee.ServiceRefType;
   import org.apache.geronimo.xbeans.j2ee.SessionBeanType;
  +import org.apache.geronimo.xbeans.j2ee.WebserviceDescriptionType;
  +import org.apache.geronimo.xbeans.j2ee.WebservicesDocument;
  +import org.apache.geronimo.xbeans.j2ee.EjbLinkType;
   import org.openejb.dispatch.InterfaceMethodSignature;
  +import org.openejb.slsb.HandlerChainConfiguration;
   import org.openejb.transaction.TransactionPolicySource;
   import org.openejb.transaction.TransactionPolicyType;
   import org.openejb.xbeans.ejbjar.OpenejbSessionBeanType;
  @@ -182,6 +194,7 @@
               
builder.setTransactedTimerName(earContext.getTransactedTimerName());
               
builder.setNonTransactedTimerName(earContext.getNonTransactedTimerName());
               
builder.setServiceEndpointName(OpenEJBModuleBuilder.getJ2eeStringValue(sessionBean.getServiceEndpoint()));
  +            ((StatelessContainerBuilder) 
builder).setHandlerChainConfiguration(createHandlerChainConfiguration(ejbModule.getModuleFile(),
 ejbName, cl));
               containerSecurityBuilder.addToPermissions(toBeChecked, ejbName, 
"ServiceEndpoint", builder.getServiceEndpointName(), cl);
           } else {
               builder = new StatefulContainerBuilder();
  @@ -256,6 +269,38 @@
           }
           GBeanData sessionGBean = result;
           earContext.addGBean(sessionGBean);
  +    }
  +
  +    private HandlerChainConfiguration 
createHandlerChainConfiguration(JarFile moduleFile, String ejbName, ClassLoader 
cl) throws DeploymentException {
  +        PortComponentHandlerType[] handlers = null;
  +        try {
  +            URL webservicesURL = DeploymentUtil.createJarURL(moduleFile, 
"META-INF/webservices.xml");
  +            WebservicesDocument webservicesDocument = 
WebservicesDocument.Factory.parse(webservicesURL);
  +
  +            WebserviceDescriptionType[] webserviceDescriptions = 
webservicesDocument.getWebservices().getWebserviceDescriptionArray();
  +            for (int i = 0; i < webserviceDescriptions.length && handlers == 
null; i++) {
  +
  +                PortComponentType[] portComponents = 
webserviceDescriptions[i].getPortComponentArray();
  +                for (int j = 0; j < portComponents.length && handlers == 
null; j++) {
  +
  +                    EjbLinkType ejbLink = 
portComponents[j].getServiceImplBean().getEjbLink();
  +                    if (ejbLink != null && 
ejbLink.getStringValue().trim().equals(ejbName)) {
  +                        handlers = portComponents[j].getHandlerArray();
  +                    }
  +                }
  +            }
  +        } catch (MalformedURLException e) {
  +            throw new DeploymentException("Invalid URL to webservices.xml", 
e);
  +        } catch (Exception e) {
  +            throw new DeploymentException("Could not read webservices.xml", 
e);
  +        }
  +
  +        if (handlers != null){
  +            List handlerInfos = 
WSDescriptorParser.createHandlerInfoList(handlers, cl);
  +            return new HandlerChainConfiguration(handlerInfos, new 
String[]{});
  +        } else {
  +            return null;
  +        }
       }
   
       public void initContext(EARContext earContext, J2eeContext 
moduleJ2eeContext, URI moduleUri, ClassLoader cl, EnterpriseBeansType 
enterpriseBeans, Set interfaces) throws DeploymentException {
  
  
  
  1.5       +15 -2     
openejb/modules/openejb-builder/src/java/org/openejb/deployment/StatelessContainerBuilder.java
  
  Index: StatelessContainerBuilder.java
  ===================================================================
  RCS file: 
/scm/openejb/openejb/modules/openejb-builder/src/java/org/openejb/deployment/StatelessContainerBuilder.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- StatelessContainerBuilder.java    1 Mar 2005 23:34:37 -0000       1.4
  +++ StatelessContainerBuilder.java    16 Apr 2005 02:21:04 -0000      1.5
  @@ -67,18 +67,30 @@
   import org.openejb.slsb.StatelessInstanceContextFactory;
   import org.openejb.slsb.StatelessInstanceFactory;
   import org.openejb.slsb.StatelessInterceptorBuilder;
  +import org.openejb.slsb.HandlerChainConfiguration;
   import org.openejb.slsb.dispatch.SetSessionContextOperation;
   
   /**
    * @version $Revision$ $Date$
    */
   public class StatelessContainerBuilder extends AbstractContainerBuilder {
  +
       private static final MethodSignature SET_SESSION_CONTEXT = new 
MethodSignature("setSessionContext", new String[]{"javax.ejb.SessionContext"});
   
  +    private HandlerChainConfiguration handlerChainConfiguration;
  +
       protected int getEJBComponentType() {
           return EJBComponentType.STATELESS;
       }
   
  +    public HandlerChainConfiguration getHandlerChainConfiguration() {
  +        return handlerChainConfiguration;
  +    }
  +
  +    public void setHandlerChainConfiguration(HandlerChainConfiguration 
handlerChainConfiguration) {
  +        this.handlerChainConfiguration = handlerChainConfiguration;
  +    }
  +
       protected Object buildIt(boolean buildContainer) throws Exception {
           // get the bean class
           ClassLoader classLoader = getClassLoader();
  @@ -90,7 +102,8 @@
           VirtualOperation[] vtable = (VirtualOperation[]) 
vopMap.values().toArray(new VirtualOperation[vopMap.size()]);
   
           // create and intitalize the interceptor moduleBuilder
  -        InterceptorBuilder interceptorBuilder = 
initializeInterceptorBuilder(new StatelessInterceptorBuilder(), signatures, 
vtable);
  +        StatelessInterceptorBuilder interceptorBuilder = 
(StatelessInterceptorBuilder) initializeInterceptorBuilder(new 
StatelessInterceptorBuilder(), signatures, vtable);
  +        
interceptorBuilder.setHandlerChainConfiguration(getHandlerChainConfiguration());
   
           // build the instance factory
           StatelessInstanceContextFactory contextFactory = new 
StatelessInstanceContextFactory(getContainerId(), beanClass, 
getUserTransaction(), getUnshareableResources(), 
getApplicationManagedSecurityResources());
  
  
  

Reply via email to