1 28 29 package com.caucho.ejb.burlap; 30 31 import com.caucho.burlap.io.BurlapInput; 32 import com.caucho.burlap.io.BurlapOutput; 33 import com.caucho.ejb.AbstractServer; 34 import com.caucho.ejb.protocol.EjbProtocolManager; 35 import com.caucho.ejb.protocol.Skeleton; 36 import com.caucho.log.Log; 37 import com.caucho.services.name.NameServerRemote; 38 39 import javax.ejb.EJBHome ; 40 import java.io.InputStream ; 41 import java.io.OutputStream ; 42 import java.util.ArrayList ; 43 import java.util.logging.Level ; 44 import java.util.logging.Logger ; 45 46 54 public class NameContextSkeleton extends Skeleton { 55 protected static final Logger log = Log.open(NameContextSkeleton.class); 56 57 private BurlapProtocol _protocol; 58 private String _prefix; 59 60 NameContextSkeleton(BurlapProtocol protocol, String prefix) 61 { 62 _protocol = protocol; 63 _prefix = prefix; 64 } 65 66 69 public void _service(InputStream is, OutputStream os) 70 throws Exception 71 { 72 BurlapInput in = new BurlapReader(is); 73 BurlapOutput out = new BurlapWriter(os); 74 75 in.startCall(); 76 77 String method = in.getMethod(); 78 79 try { 80 if (method.equals("lookup") || 81 method.equals("lookup_string") || 82 method.equals("lookup_1")) 83 executeLookup(in, out); 84 else if (method.equals("list")) 85 executeList(in, out); 86 else 87 executeUnknown(method, in, out); 88 } catch (BurlapProtocolException e) { 89 throw e; 90 } catch (Throwable e) { 91 log.log(Level.FINE, e.toString(), e); 92 93 out.startReply(); 94 out.writeFault("ServiceException", e.getMessage(), e); 95 out.completeReply(); 96 } 97 } 98 99 private void executeLookup(BurlapInput in, BurlapOutput out) 100 throws Throwable 101 { 102 String name = in.readString(); 103 in.completeCall(); 104 105 EjbProtocolManager container = _protocol.getProtocolManager(); 106 107 AbstractServer server = container.getServerByEJBName(name); 108 109 if (server != null) { 110 EJBHome home = server.getEJBHome(); 111 112 out.startReply(); 113 114 out.writeObject(home); 115 116 out.completeReply(); 117 } 118 else if (container.getRemoteChildren(name) != null) { 119 out.startReply(); 120 121 String serverId = _prefix + name; 122 if (serverId.startsWith("/")) 123 serverId = serverId.substring(1); 124 125 out.writeRemote(NameServerRemote.class.getName(), 126 _protocol.getURLPrefix() + serverId); 127 128 out.completeReply(); 129 } 130 else { 131 out.startReply(); 132 133 out.writeNull(); 134 out.completeReply(); 135 } 136 } 137 138 private void executeList(BurlapInput in, BurlapOutput out) 139 throws Throwable 140 { 141 in.completeCall(); 142 143 EjbProtocolManager container = _protocol.getProtocolManager(); 144 145 AbstractServer server = container.getServerByEJBName(_prefix); 146 147 ArrayList children; 148 149 if (server != null) { 150 EJBHome home = server.getEJBHome(); 151 152 out.startReply(); 153 154 out.writeNull(); 155 156 out.completeReply(); 157 } 158 else if ((children = container.getRemoteChildren(_prefix)) != null) { 159 out.startReply(); 160 161 out.writeObject(children.toArray(new String [children.size()])); 162 163 out.completeReply(); 164 } 165 else { 166 out.startReply(); 167 168 out.writeNull(); 169 out.completeReply(); 170 } 171 } 172 173 180 protected void executeUnknown(String method, 181 BurlapInput in, BurlapOutput out) 182 throws Exception 183 { 184 if (method.equals("_burlap_getAttribute")) { 185 String key = in.readString(); 186 in.completeCall(); 187 188 out.startReply(); 189 190 if ("java.api.class".equals(key)) 191 out.writeString(NameServerRemote.class.getName()); 192 else if ("java.home.class".equals(key)) 193 out.writeString(NameServerRemote.class.getName()); 194 else if ("java.object.class".equals(key)) 195 out.writeString(NameServerRemote.class.getName()); 196 else if ("home-class".equals(key)) 197 out.writeString(NameServerRemote.class.getName()); 198 else if ("remote-class".equals(key)) 199 out.writeString(NameServerRemote.class.getName()); 200 else 201 out.writeNull(); 202 203 out.completeReply(); 204 } 205 else { 206 out.startReply(); 207 out.writeFault("NoMethod", "no such method: " + method, null); 208 out.completeReply(); 209 } 210 } 211 } 212 | Popular Tags |