1 45 package org.openejb.server.ejbd; 46 47 import java.io.IOException ; 48 import java.io.InputStream ; 49 import java.io.ObjectInputStream ; 50 import java.io.ObjectOutputStream ; 51 import java.io.OutputStream ; 52 import java.net.Socket ; 53 import java.rmi.RemoteException ; 54 import java.util.Properties ; 55 56 import org.openejb.DeploymentInfo; 57 import org.openejb.ProxyInfo; 58 import org.openejb.client.EJBRequest; 59 import org.openejb.client.RequestMethods; 60 import org.openejb.client.ResponseCodes; 61 import org.openejb.util.Logger; 62 import org.openejb.util.Messages; 63 64 68 public class EjbDaemon implements org.openejb.spi.ApplicationServer, ResponseCodes, RequestMethods { 69 70 Messages _messages = new Messages( "org.openejb.server.util.resources" ); 71 Logger logger = Logger.getInstance( "OpenEJB.server.remote", "org.openejb.server.util.resources" ); 72 73 Properties props; 74 75 ClientObjectFactory clientObjectFactory; 76 DeploymentIndex deploymentIndex; 77 EjbRequestHandler ejbHandler; 78 JndiRequestHandler jndiHandler; 79 AuthRequestHandler authHandler; 80 81 boolean stop = false; 82 83 static EjbDaemon thiss; 84 85 private EjbDaemon() { 86 } 87 88 public static EjbDaemon getEjbDaemon() { 89 if ( thiss == null ) { 90 thiss = new EjbDaemon(); 91 } 92 return thiss; 93 } 94 95 public void init(Properties props) throws Exception { 96 this.props = props; 97 98 deploymentIndex = new DeploymentIndex(); 99 100 clientObjectFactory = new ClientObjectFactory(this); 101 102 ejbHandler = new EjbRequestHandler(this); 104 jndiHandler = new JndiRequestHandler(this); 105 authHandler = new AuthRequestHandler(this); 106 } 107 108 public void service(Socket socket) throws IOException { 109 InputStream in = socket.getInputStream(); 110 OutputStream out = socket.getOutputStream(); 111 112 try { 113 service(in, out); 114 } finally { 115 try { 116 if (socket != null) socket.close(); 117 } catch (Throwable t) { 118 logger.error("Encountered problem while closing connection with client: " + t.getMessage()); 119 } 120 } 121 } 122 123 public void service(InputStream in, OutputStream out) throws IOException { 124 ObjectInputStream ois = null; 125 128 ObjectOutputStream oos = null; 129 130 131 try { 132 133 136 byte requestType = (byte)in.read(); 138 139 if (requestType == -1) { 141 return; 142 } 143 144 ois = new ObjectInputStream ( in ); 145 oos = new ObjectOutputStream ( out ); 146 147 switch (requestType) { 149 case EJB_REQUEST: processEjbRequest(ois, oos); break; 150 case JNDI_REQUEST: processJndiRequest(ois, oos);break; 151 case AUTH_REQUEST: processAuthRequest(ois, oos);break; 152 default: logger.error("Unknown request type "+requestType); 153 } 154 try { 155 if ( oos != null ) { 156 oos.flush(); 157 } 158 } catch ( Throwable t ) { 159 logger.error("Encountered problem while communicating with client: "+t.getMessage()); 160 } 161 163 } catch ( SecurityException e ) { 167 logger.error( "Security error: "+ e.getMessage() ); 168 } catch ( Throwable e ) { 169 logger.error( "Unexpected error", e ); 170 } finally { 172 try { 173 if ( oos != null ) { 174 oos.flush(); 175 } 176 } catch ( Throwable t ) { 177 logger.error("Encountered problem while flushing connection with client: " + t.getMessage()); 178 } 179 } 180 } 181 182 protected DeploymentInfo getDeployment(EJBRequest req) throws RemoteException { 183 return deploymentIndex.getDeployment(req); 184 } 185 186 public void processEjbRequest (ObjectInputStream in, ObjectOutputStream out) { 187 ejbHandler.processRequest(in,out); 188 } 189 190 public void processJndiRequest(ObjectInputStream in, ObjectOutputStream out) throws Exception { 191 jndiHandler.processRequest(in,out); 192 } 193 194 public void processAuthRequest(ObjectInputStream in, ObjectOutputStream out) { 195 authHandler.processRequest(in,out); 196 } 197 198 public javax.ejb.EJBMetaData getEJBMetaData(ProxyInfo info) { 202 return clientObjectFactory.getEJBMetaData(info); 203 } 204 205 public javax.ejb.Handle getHandle(ProxyInfo info) { 206 return clientObjectFactory.getHandle(info); 207 } 208 209 public javax.ejb.HomeHandle getHomeHandle(ProxyInfo info) { 210 return clientObjectFactory.getHomeHandle(info); 211 } 212 213 public javax.ejb.EJBObject getEJBObject(ProxyInfo info) { 214 return clientObjectFactory.getEJBObject(info); 215 } 216 217 public javax.ejb.EJBHome getEJBHome(ProxyInfo info) { 218 return clientObjectFactory.getEJBHome(info); 219 } 220 221 } 222 223 | Popular Tags |