You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by ni...@apache.org on 2006/11/09 06:39:25 UTC

svn commit: r472781 - /incubator/cxf/trunk/jca/src/main/java/org/apache/cxf/jca/cxf/JCABusFactory.java

Author: ningjiang
Date: Wed Nov  8 21:39:24 2006
New Revision: 472781

URL: http://svn.apache.org/viewvc?view=rev&rev=472781
Log:
Done some cleanup work and added some notes in JCABusFactory

Modified:
    incubator/cxf/trunk/jca/src/main/java/org/apache/cxf/jca/cxf/JCABusFactory.java

Modified: incubator/cxf/trunk/jca/src/main/java/org/apache/cxf/jca/cxf/JCABusFactory.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/jca/src/main/java/org/apache/cxf/jca/cxf/JCABusFactory.java?view=diff&rev=472781&r1=472780&r2=472781
==============================================================================
--- incubator/cxf/trunk/jca/src/main/java/org/apache/cxf/jca/cxf/JCABusFactory.java (original)
+++ incubator/cxf/trunk/jca/src/main/java/org/apache/cxf/jca/cxf/JCABusFactory.java Wed Nov  8 21:39:24 2006
@@ -23,7 +23,6 @@
 import java.io.InputStream;
 import java.lang.reflect.InvocationTargetException;
 import java.lang.reflect.Method;
-//import java.lang.reflect.Proxy;
 import java.net.InetAddress;
 import java.net.URL;
 import java.net.UnknownHostException;
@@ -33,7 +32,6 @@
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-//import java.util.Map;
 import java.util.Properties;
 import java.util.StringTokenizer;
 import java.util.logging.Logger;
@@ -45,62 +43,30 @@
 import javax.naming.NamingException;
 import javax.resource.ResourceException;
 import javax.rmi.PortableRemoteObject;
-//import javax.wsdl.Binding;
-//import javax.wsdl.Definition;
-//import javax.wsdl.Port;
-//import javax.wsdl.PortType;
-//import javax.wsdl.Service;
-//import javax.wsdl.extensions.ExtensibilityElement;
-//import javax.wsdl.extensions.soap.SOAPAddress;
-//import javax.wsdl.factory.WSDLFactory;
-//import javax.wsdl.xml.WSDLReader;
 import javax.xml.bind.JAXBException;
 import javax.xml.namespace.QName;
-//import javax.xml.ws.Endpoint;
-//import org.xml.sax.InputSource;
 
 import org.apache.cxf.Bus;
 import org.apache.cxf.BusException;
 import org.apache.cxf.BusFactory;
-//import org.apache.cxf.jaxws.EndpointImpl;
 import org.apache.cxf.binding.BindingFactoryManager;
 import org.apache.cxf.binding.soap.SoapBindingFactory;
 import org.apache.cxf.binding.soap.SoapDestinationFactory;
 import org.apache.cxf.common.util.PackageUtils;
-//import org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean;
-//import org.apache.cxf.endpoint.EndpointImpl;
-//import org.apache.cxf.binding.BindingFactoryManager;
-//import org.apache.cxf.binding.soap.SoapBindingFactory;
-//import org.apache.cxf.binding.soap.SoapDestinationFactory;
 import org.apache.cxf.endpoint.Server;
 import org.apache.cxf.jaxb.JAXBDataBinding;
 import org.apache.cxf.jaxws.JAXWSMethodInvoker;
 import org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean;
-//import org.apache.cxf.jaxws.EndpointRegistry;
 import org.apache.cxf.jca.core.resourceadapter.ResourceAdapterInternalException;
 import org.apache.cxf.jca.core.resourceadapter.UriHandlerInit;
-//import org.apache.cxf.jca.servant.CXFConnectEJBServant;
-//import org.apache.cxf.jca.servant.EJBServant;
 import org.apache.cxf.service.Service;
-//import org.apache.cxf.service.factory.HelloService;
 import org.apache.cxf.service.factory.ReflectionServiceFactoryBean;
 import org.apache.cxf.service.factory.ServerFactoryBean;
-//import org.apache.cxf.service.model.InterfaceInfo;
-
-//import org.apache.cxf.tools.util.ProcessorUtil;
 import org.apache.cxf.transport.ConduitInitiatorManager;
 import org.apache.cxf.transport.DestinationFactoryManager;
 import org.apache.cxf.transport.http.HTTPTransportFactory;
 import org.apache.cxf.wsdl.WSDLManager;
 import org.apache.cxf.wsdl11.WSDLManagerImpl;
-//import org.apache.cxf.transport.local.LocalTransportFactory;
-//import org.apache.cxf.transport.local.LocalTransportFactory;
-//import org.apache.cxf.ws.addressing.EndpointReferenceType;
-//import org.apache.cxf.wsdl.EndpointReferenceUtils;
-//import org.apache.cxf.wsdl.WSDLManager;
-//import org.apache.cxf.wsdl11.WSDLManagerImpl;
-
-//import org.xmlsoap.schemas.wsdl.http.AddressType;
 
 
 public class JCABusFactory {
@@ -109,12 +75,11 @@
 
     private Bus bus;
     private BusFactory bf;
-    private List<Object> servantsCache = new ArrayList<Object>();
+    private List<Server> servantsCache = new ArrayList<Server>();
     private InitialContext jndiContext;
     private ClassLoader appserverClassLoader;
     private ManagedConnectionFactoryImpl mcf;
     private Object raBootstrapContext;
-//    private String nameSpace;
 
     public JCABusFactory(ManagedConnectionFactoryImpl aMcf) {
         this.mcf = aMcf;
@@ -133,6 +98,7 @@
 
     protected Bus createBus(ClassLoader loader) throws ResourceException {
         try {
+            //REVISIT we need to use the CXF defualt BusFactory
             Class busClazz = Class.forName(getBusClassName(), true, loader);
             bf = (org.apache.cxf.BusFactory) busClazz.newInstance();
             bus = bf.getDefaultBus();
@@ -144,6 +110,7 @@
     }
     
     protected void initBus() throws ResourceException {
+        //REVISIT The Bus need to be init with context for better configuration
         try {
             SoapBindingFactory bindingFactory = new SoapBindingFactory();
             bus.getExtension(BindingFactoryManager.class)
@@ -170,7 +137,6 @@
             bus.setExtension(new WSDLManagerImpl(), WSDLManager.class);
 
         } catch (Exception ex) {
-//            throw new ResourceAdapterInternalException("Failed to initialize cxf runtime", ex);
             throw new ResourceAdapterInternalException("Failed to initialize cxf runtime", ex);
         }
     }
@@ -187,13 +153,13 @@
 
             // ensure resourceadapter: url handler can be found by URLFactory
             Thread.currentThread().setContextClassLoader(cl);
-            //Thread.currentThread().setContextClassLoader(appserverClassLoader);
+            
             //TODO Check for the managed connection factory properties
+            //TODO We may need get the configuration file from properties 
             //mcf.validateProperties();     
             bus = createBus(cl);
             initBus();
-            //bus = initBus(appserverClassLoader);
-
+            
             initialiseServants();
         } catch (Exception ex) {
             if (ex instanceof ResourceAdapterInternalException) {
@@ -261,11 +227,9 @@
     
     void initialiseServant(String jndiName, String serviceName) throws ResourceException {
 
-        Object servant = null;
+        Server servant = null;
         EJBObject ejb = null;
         QName serviceQName = null;
-//        String wsdlLocation = "";
-//        String portName = "";
         String nameSpace = "";
         String interfaceName = "";
         String packageName = "";
@@ -281,18 +245,15 @@
                 serviceQName = serviceQNameFromString(serviceName);
 
                 serviceQNameFromString(serviceName);
-
-                // so far inbound doesn't support wsdl file
-//                wsdlLocation = wsdlLocFromString(serviceName);
                 
                 // Get ejbObject
                 ejb = getEJBObject(jndiName); 
                 ejbClassLoader = ejb.getClass().getClassLoader();
 
+                //NOTE we can use the ejbClassLoader to load WSDL
                 currentThreadContextClassLoader = Thread.currentThread().getContextClassLoader();
                 Thread.currentThread().setContextClassLoader(ejbClassLoader);
- 
-                
+                               
                 Thread.currentThread().setContextClassLoader(currentThreadContextClassLoader);
 
                 nameSpace = serviceQName.getNamespaceURI();
@@ -303,23 +264,13 @@
                 interfaceName = packageName + "." + interfaceName;
 
                 interfaceClass = Class.forName(interfaceName);
-
-
-
-
-//                if (wsdlLocation == null) {
-                // process service with simple frontend
+                
+                // NOTE We can check the annoation to descide which kind of frontend we will use
+                // Almostly we just need to use the jax-ws frontend
+                // If we have wsdl , then wsdl first,
+                // else code first
+                
                 servant = publishServantWithoutWSDL(ejb, jndiName, nameSpace, interfaceClass);
-//                } else {
-                // process service with jax-ws frontend
-//                }        
-//            } else {
-//                mcf.validateURLString(wsdlLocation,
-//                        "WSDL location specified using '@' notation"
-//                        + " in service string is invalid, value="
-//                        + wsdlLocation);
-//                 portName = portNameFromString(serviceName);
-//            }
             }
         } catch (Exception e) {
             throw new ResourceAdapterInternalException(e.getMessage());
@@ -331,7 +282,7 @@
         }
     }
     
-    public Object publishServantWithoutWSDL(EJBObject ejb, String jndiName,
+    public Server publishServantWithoutWSDL(EJBObject ejb, String jndiName,
                                             String nameSpace, Class interfaceClass) 
         throws Exception {
 
@@ -348,6 +299,7 @@
         JaxWsServiceFactoryBean bean = new JaxWsServiceFactoryBean();
         Service service = createService(interfaceClass, bean);
         
+        // REVISIT this is easy to be replace by EJBMethodInvoker
         service.setInvoker(new JAXWSMethodInvoker(ejb));
 
         ServerFactoryBean svrFactory = new ServerFactoryBean();
@@ -441,19 +393,10 @@
     protected void deregisterServants(Bus aBus) {
         synchronized (servantsCache) {
             if (!servantsCache.isEmpty()) {
-//                 Endpoint ed;
-//                 Iterator servants = servantsCache.iterator();
-//                 while (servants.hasNext()) {
-//                     ed = (Endpoint)(servants.next());                   
-//                     EndpointRegistry er = aBus.getEndpointRegistry();
-//                     er.unregisterEndpoint(ed);
-//                 }
-                Iterator servants = servantsCache.iterator();
+                Iterator<Server> servants = servantsCache.iterator();
                 while (servants.hasNext()) {
-                    Object servant = servants.next();
-                    if (servant instanceof Server) {
-                        ((Server) servant).stop();
-                    }
+                    Server servant = servants.next();
+                    servant.stop();                    
                 }
                 servantsCache.clear();
             }