1 28 29 package com.caucho.ejb.burlap; 30 31 import com.caucho.burlap.io.BurlapInput; 32 import com.caucho.hessian.io.AbstractHessianInput; 33 import com.caucho.hessian.io.AbstractHessianOutput; 34 import com.caucho.hessian.io.HessianRemoteResolver; 35 import com.caucho.server.util.CauchoSystem; 36 import com.caucho.vfs.Path; 37 import com.caucho.vfs.Vfs; 38 39 import java.io.IOException ; 40 import java.io.InputStream ; 41 import java.io.OutputStream ; 42 43 56 57 public class BurlapStubFactory implements HessianRemoteResolver { 58 private HessianRemoteResolver _resolver; 59 private Path _workPath; 60 61 public BurlapStubFactory() 62 { 63 _resolver = this; 64 } 65 66 69 public HessianRemoteResolver getRemoteResolver() 70 { 71 return _resolver; 72 } 73 74 public void setWorkPath(Path path) 75 { 76 _workPath = path; 77 } 78 79 public Path getWorkPath() 80 { 81 return _workPath; 82 } 83 84 98 public Object create(Class api, String url) 99 throws Exception 100 { 101 StubGenerator gen = new StubGenerator(); 102 gen.setClassDir(getWorkPath()); 103 104 Class cl = gen.createStub(api); 105 106 BurlapStub stub = (BurlapStub) cl.newInstance(); 107 108 stub._burlap_setURLPath(Vfs.lookup(url)); 109 stub._burlap_setClientContainer(this); 110 111 return stub; 112 } 113 114 public AbstractHessianInput getBurlapInput(InputStream is) 115 { 116 AbstractHessianInput in = new BurlapInput(is); 117 in.setRemoteResolver(_resolver); 118 119 return in; 120 } 121 122 public AbstractHessianOutput getBurlapOutput(OutputStream os) 123 { 124 return new BurlapWriter(os); 125 } 126 127 130 public Object lookup(String type, String url) 131 throws IOException 132 { 133 try { 134 Class api = CauchoSystem.loadClass(type); 135 136 return create(api, url); 137 } catch (RuntimeException e) { 138 throw e; 139 } catch (Exception e) { 140 IOException e1 = new IOException (e.toString()); 141 e1.initCause(e); 142 143 throw e1; 144 } 145 } 146 } 147 | Popular Tags |