1 package org.apache.soap.providers; 2 3 import java.io.* ; 4 import java.util.* ; 5 import java.rmi.Remote ; 6 import javax.servlet.* ; 7 import javax.servlet.http.* ; 8 import org.apache.soap.* ; 9 import org.apache.soap.rpc.* ; 10 import org.apache.soap.server.* ; 11 import org.apache.soap.util.* ; 12 import org.apache.soap.encoding.soapenc.Base64; 13 14 import java.lang.reflect.*; 15 import javax.rmi.*; 16 import javax.ejb.*; 17 import javax.naming.*; 18 import javax.naming.Context .*; 19 20 public class EntityEJBProvider extends StatefulEJBProvider { 21 public EntityEJBProvider() { 22 super(); 23 } 24 25 28 public void locate(DeploymentDescriptor depDesc, 29 Envelope env, 30 Call origCall, 31 String methodName, 32 String targetObjectURI, 33 SOAPContext reqContext) throws SOAPException { 34 35 HttpServlet servletRef = (HttpServlet) reqContext.getProperty( Constants.BAG_HTTPSERVLET ); 36 HttpSession sessObj = (HttpSession) reqContext.getProperty( Constants.BAG_HTTPSESSION ); 37 38 setDd(depDesc); 39 setCall(origCall); 40 setTargetObjectURI(origCall.getTargetObjectURI()) ; 41 setServlet(servletRef); 42 setSession(sessObj); 43 setMethodName(origCall.getMethodName()); 44 setMethodParameters(origCall.getParams()); 45 46 String fullURI = origCall.getFullTargetObjectURI(); 48 ejbKey = StatefulEJBProvider.getUniqueId(fullURI); 49 50 if (ejbKey != null) { 51 setRemoteObjRef(deSerialize(ejbKey)); 52 return; 54 } 55 56 Hashtable props = depDesc.getProps(); 57 58 String ContxtProviderURL = (String ) props.get("ContextProviderURL"); 59 String ContxtFactoryName = (String ) props.get("FullContextFactoryName"); 60 61 if ((ContxtProviderURL != null) || (ContxtFactoryName != null)) 62 initialize(ContxtProviderURL, ContxtFactoryName); 63 else 64 initialize(CNTXT_PROVIDER_URL, CNTXT_FACTORY_NAME); 65 66 String homeInterfaceName = (String ) props.get("FullHomeInterfaceName"); 67 if (homeInterfaceName == null) 68 throw new SOAPException(Constants.FAULT_CODE_SERVER, 69 "Error in Deployment Descriptor Property Settings"); 70 71 String jndiName = (String ) props.get("JNDIName"); 74 if ( jndiName == null ) jndiName = depDesc.getProviderClass(); 75 76 if ((jndiName != null) && (getContxt() != null)) { 77 try { 78 EJBHome home = (EJBHome) PortableRemoteObject.narrow( 80 getContxt().lookup(jndiName), 81 Class.forName(homeInterfaceName)); 82 83 93 if ( getMethodName().equals("create") || 94 getMethodName().startsWith("find") ) { 95 setRemoteObjRef(home); 98 isCreate = true; 99 return; 100 } else { 101 Method createMethod = home.getClass().getMethod("create", 105 new Class [0]); 106 setRemoteObjRef((EJBObject) createMethod.invoke((Object ) home, 107 new Object [0])); 108 } 109 } catch (Exception e) { 110 throw new SOAPException(Constants.FAULT_CODE_SERVER, 111 "Error in connecting to EJB", e); 112 } 113 } 114 } 115 } 116 | Popular Tags |