00001 00026 package org.objectweb.jonas_ejb.svc; 00027 00028 import java.io.IOException; 00029 import java.io.Serializable; 00030 import java.rmi.Remote; 00031 import java.rmi.RemoteException; 00032 import java.util.logging.Level; 00033 import java.util.logging.Logger; 00034 00035 import javax.ejb.EJBObject; 00036 import javax.ejb.Handle; 00037 import javax.ejb.spi.HandleDelegate; 00038 import javax.naming.NamingException; 00039 import javax.rmi.PortableRemoteObject; 00040 import javax.rmi.CORBA.Util; 00041 00042 import org.omg.PortableServer.Servant; 00047 public class JHandleIIOP implements Handle, Serializable { 00048 00052 private static Logger logger = Logger.getLogger("org.objectweb.jonas_ejb.svc"); 00053 00058 private String ior = null; 00059 00064 public JHandleIIOP(Remote r) { 00065 try { 00066 logger.log(Level.FINE, "r=" + r); 00067 Servant servant = (Servant) Util.getTie(r); 00068 org.omg.CORBA.Object o = servant._this_object(); 00069 this.ior = Utility.getORB().object_to_string(o); 00070 logger.log(Level.FINE, "ior=" + ior); 00071 } catch (Exception e) { 00072 logger.log(Level.SEVERE, "cannot get Handle: ", e); 00073 } 00074 } 00075 00082 public EJBObject getEJBObject() throws RemoteException { 00083 logger.log(Level.FINE, ""); 00084 try { 00085 return (EJBObject) PortableRemoteObject.narrow(Utility.getORB().string_to_object(ior), EJBObject.class); 00086 } catch (Exception e) { 00087 throw new RemoteException("JHandle.getEJBObject(): " + e, e); 00088 } 00089 } 00090 00097 private void writeObject(java.io.ObjectOutputStream out) 00098 throws IOException { 00099 HandleDelegate hdld; 00100 logger.log(Level.FINE, ""); 00101 try { 00102 hdld = Utility.getHandleDelegate(); 00103 } catch (NamingException e) { 00104 throw new IOException("Cannot get HandleDelegate"); 00105 } 00106 hdld.writeEJBObject(getEJBObject(), out); 00107 } 00108 00116 private void readObject(java.io.ObjectInputStream in) 00117 throws IOException, ClassNotFoundException { 00118 HandleDelegate hdld; 00119 logger.log(Level.FINE, ""); 00120 try { 00121 hdld = Utility.getHandleDelegate(); 00122 } catch (NamingException e) { 00123 throw new IOException("Cannot get HandleDelegate"); 00124 } 00125 EJBObject obj = hdld.readEJBObject(in); 00126 try { 00127 this.ior = Utility.getORB().object_to_string((org.omg.CORBA.Object) obj); 00128 00129 } catch (Exception e) { 00130 throw new RemoteException("JHandle.readObject(): " + e, e); 00131 } 00132 } 00133 00134 } 00135