1 45 package org.openejb.server.ejbd; 46 47 import java.io.ObjectInputStream ; 48 import java.io.ObjectOutputStream ; 49 50 import javax.naming.Context ; 51 import javax.naming.NameNotFoundException ; 52 import javax.naming.NamingException ; 53 54 import org.openejb.DeploymentInfo; 55 import org.openejb.OpenEJB; 56 import org.openejb.client.EJBMetaDataImpl; 57 import org.openejb.client.JNDIRequest; 58 import org.openejb.client.JNDIResponse; 59 import org.openejb.client.RequestMethods; 60 import org.openejb.client.ResponseCodes; 61 62 63 66 class JndiRequestHandler implements ResponseCodes, RequestMethods { 67 private final EjbDaemon daemon; 68 69 javax.naming.Context clientJndi; 70 71 JndiRequestHandler(EjbDaemon daemon) throws Exception { 72 clientJndi = (javax.naming.Context )OpenEJB.getJNDIContext().lookup("openejb/ejb"); 73 this.daemon = daemon; 74 } 75 76 public void processRequest(ObjectInputStream in, ObjectOutputStream out) throws Exception { 77 JNDIRequest req = new JNDIRequest(); 78 JNDIResponse res = new JNDIResponse(); 79 req.readExternal( in ); 80 81 84 String name = req.getRequestString(); 85 if ( name.startsWith("/") ) name = name.substring(1); 86 87 DeploymentInfo deployment = daemon.deploymentIndex.getDeployment(name); 88 89 if (deployment == null) { 90 try { 91 Object obj = clientJndi.lookup(name); 92 93 if ( obj instanceof Context ) { 94 res.setResponseCode( JNDI_CONTEXT ); 95 } else res.setResponseCode( JNDI_NOT_FOUND ); 96 97 } catch (NameNotFoundException e) { 98 res.setResponseCode(JNDI_NOT_FOUND); 99 } catch (NamingException e) { 100 res.setResponseCode(JNDI_NAMING_EXCEPTION); 101 res.setResult( e ); 102 } 103 } else { 104 res.setResponseCode( JNDI_EJBHOME ); 105 EJBMetaDataImpl metaData = new EJBMetaDataImpl(deployment.getHomeInterface(), 106 deployment.getRemoteInterface(), 107 deployment.getPrimaryKeyClass(), 108 deployment.getComponentType(), 109 deployment.getDeploymentID().toString(), 110 this.daemon.deploymentIndex.getDeploymentIndex(name)); 111 res.setResult( metaData ); 112 } 113 114 res.writeExternal( out ); 115 } 116 } | Popular Tags |