001: /**
002: * JOnAS: Java(TM) Open Application Server
003: * Copyright (C) 1999-2004 Bull S.A.
004: * Contact: jonas-team@objectweb.org
005: *
006: * This library is free software; you can redistribute it and/or
007: * modify it under the terms of the GNU Lesser General Public
008: * License as published by the Free Software Foundation; either
009: * version 2.1 of the License, or any later version.
010: *
011: * This library is distributed in the hope that it will be useful,
012: * but WITHOUT ANY WARRANTY; without even the implied warranty of
013: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
014: * Lesser General Public License for more details.
015: *
016: * You should have received a copy of the GNU Lesser General Public
017: * License along with this library; if not, write to the Free Software
018: * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
019: * USA
020: *
021: * --------------------------------------------------------------------------
022: * $Id: JHandleDelegate.java 6673 2005-04-28 16:53:00Z benoitf $
023: * --------------------------------------------------------------------------
024: */package org.objectweb.jonas_ejb.container;
025:
026: import java.io.IOException;
027: import java.io.ObjectInputStream;
028: import java.io.ObjectOutputStream;
029:
030: import javax.ejb.EJBHome;
031: import javax.ejb.EJBObject;
032: import javax.ejb.spi.HandleDelegate;
033: import javax.rmi.PortableRemoteObject;
034:
035: import org.objectweb.carol.rmi.util.RmiMultiUtility;
036: import org.objectweb.util.monolog.api.BasicLevel;
037:
038: /**
039: * Implementation for HandleDelegate SPI.
040: * @author durieuxp
041: */
042: public class JHandleDelegate implements HandleDelegate {
043:
044: // -----------------------------------------------------------------------
045: // HandleDelegate implementation
046: // ------------------------------------------------------------------------
047:
048: /**
049: * Serialize the EJBObject reference corresponding to a Handle. This method
050: * is called from the writeObject method of portable Handle implementation
051: * classes. The ostream object is the same object that was passed in to the
052: * Handle class's writeObject.
053: * @param ejb The EJBObject reference to be serialized.
054: * @param out The output stream.
055: * @throws IOException The EJBObject could not be serialized because of a
056: * system-level failure.
057: */
058: public void writeEJBObject(EJBObject ejb, ObjectOutputStream out)
059: throws IOException {
060: if (TraceEjb.isDebugIc()) {
061: TraceEjb.interp.log(BasicLevel.DEBUG, "");
062: }
063: out.writeObject(ejb);
064: }
065:
066: /**
067: * Deserialize the EJBObject reference corresponding to a Handle.
068: * readEJBObject is called from the readObject method of portable Handle
069: * implementation classes. The istream object is the same object that was
070: * passed in to the Handle class's readObject. When readEJBObject is called,
071: * istream must point to the location in the stream at which the EJBObject
072: * reference can be read. The container must ensure that the EJBObject
073: * reference is capable of performing invocations immediately after
074: * deserialization.
075: * @param in The input stream.
076: * @return The deserialized EJBObject reference.
077: * @throws IOException The EJBObject could not be deserialized because of a
078: * system-level failure.
079: * @throws ClassNotFoundException The EJBObject could not be deserialized
080: * because some class could not be found.
081: */
082: public EJBObject readEJBObject(ObjectInputStream in)
083: throws IOException, ClassNotFoundException {
084: if (TraceEjb.isDebugIc()) {
085: TraceEjb.interp.log(BasicLevel.DEBUG, "");
086: }
087: Object ejb = in.readObject();
088: RmiMultiUtility.reconnectStub2Orb(ejb);
089: return (EJBObject) PortableRemoteObject.narrow(ejb,
090: EJBObject.class);
091: }
092:
093: /**
094: * Serialize the EJBHome reference corresponding to a HomeHandle. This
095: * method is called from the writeObject method of portable HomeHandle
096: * implementation classes. The ostream object is the same object that was
097: * passed in to the Handle class's writeObject.
098: * @param home The EJBHome reference to be serialized.
099: * @param out The output stream.
100: * @throws IOException The EJBObject could not be deserialized because of a
101: * system-level failure.
102: */
103: public void writeEJBHome(EJBHome home, ObjectOutputStream out)
104: throws IOException {
105: if (TraceEjb.isDebugIc()) {
106: TraceEjb.interp.log(BasicLevel.DEBUG, "");
107: }
108: out.writeObject(home);
109: }
110:
111: /**
112: * Deserialize the EJBHome reference corresponding to a HomeHandle.
113: * readEJBHome is called from the readObject method of portable HomeHandle
114: * implementation classes. The istream object is the same object that was
115: * passed in to the HomeHandle class's readObject. When readEJBHome is
116: * called, istream must point to the location in the stream at which the
117: * EJBHome reference can be read. The container must ensure that the EJBHome
118: * reference is capable of performing invocations immediately after
119: * deserialization.
120: * @param in The input stream.
121: * @return The deserialized EJBHome reference.
122: * @throws IOException The EJBHome could not be deserialized because of a
123: * system-level failure.
124: * @throws ClassNotFoundException The EJBHome could not be deserialized
125: * because some class could not be found.
126: */
127: public EJBHome readEJBHome(ObjectInputStream in)
128: throws IOException, ClassNotFoundException {
129: if (TraceEjb.isDebugIc()) {
130: TraceEjb.interp.log(BasicLevel.DEBUG, "");
131: }
132: Object home = in.readObject();
133: RmiMultiUtility.reconnectStub2Orb(home);
134: return (EJBHome) PortableRemoteObject.narrow(home,
135: EJBHome.class);
136: }
137: }
|