01: /**
02: * Licensed to the Apache Software Foundation (ASF) under one or more
03: * contributor license agreements. See the NOTICE file distributed with
04: * this work for additional information regarding copyright ownership.
05: * The ASF licenses this file to You under the Apache License, Version 2.0
06: * (the "License"); you may not use this file except in compliance with
07: * the License. You may obtain a copy of the License at
08: *
09: * http://www.apache.org/licenses/LICENSE-2.0
10: *
11: * Unless required by applicable law or agreed to in writing, software
12: * distributed under the License is distributed on an "AS IS" BASIS,
13: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14: * See the License for the specific language governing permissions and
15: * limitations under the License.
16: */package org.apache.openejb.spi;
17:
18: import javax.ejb.EJBHome;
19: import javax.ejb.EJBMetaData;
20: import javax.ejb.EJBObject;
21: import javax.ejb.Handle;
22: import javax.ejb.HomeHandle;
23:
24: import org.apache.openejb.ProxyInfo;
25:
26: /**
27: * <h2><b>LOCAL to REMOTE SERIALIZATION</b></h2> <p>
28: *
29: * <i>Definition:</i><p>
30: * This is a serialization that initiates in the local vm, but
31: * is outside the scope of a marked IntraVM local serialization.
32: * <p>
33: * <i>Circumstances:</i><p>
34: * When an IntraVM implementation of a javax.ejb.* interface is
35: * serialized outside the scope of the IntraVM Server
36: * <p>
37: * These serializations happen when objects are sent from a
38: * local bean to a remote client as part of a return value, or
39: * when a stateful session bean is passified.
40: * <p>
41: * <i>Action:</i><p>
42: * Don't serialize the IntraVM javax.ejb.* interface
43: * implementation, instead ask the ApplicationServer to nominate
44: * its own implementation as a replacement. This is done via
45: * the org.apache.openejb.spi.ApplicationServer interface.
46: * <p>
47: * <i>Example Scenario:</i><p>
48: * SERIALIZATION<br>
49: * <br>1. ObjectOutputStream encounters an IntraVmMetaData instance
50: * in the object graph and calls its writeReplace method.
51: * <br>2. The IntraVmMetaData instance determines it is being
52: * serialized outside the scope of an IntraVM serialization
53: * by calling IntraVmCopyMonitor.isIntraVmCopyOperation().
54: * <br>3. The IntraVmMetaData instance calls the getEJBMetaData
55: * method on the ApplicationServer.
56: * <br>4. The IntraVmMetaData instance returns the
57: * ApplicationServer's EJBMetaData instance from the
58: * writeReplace method.
59: * <br>5. The ObjectOutputStream serializes the ApplicationServer's
60: * EJBMetaData instance in place of the IntraVmMetaData
61: * instance.
62: * <p>
63: * Note: The ApplicationServer's EJBMetaData instance can
64: * be any object that implements the javax.ejb.EJBMetaData
65: * interface and can also implement any serialization
66: * methods, such as the writeReplace method, to nominate a
67: * replacement or implement protocol specific logic or
68: * otherwise gain control over the serialization of
69: * EJBMetaData instances destined for its remote clients.
70: * <p>
71: * DESERIALIZATION<p>
72: * The deserialization of the Application Server's
73: * javax.ejb.* implementations is implementation specific.
74: * <p>
75: *
76: * @version $Revision: 534559 $ $Date: 2007-05-02 10:29:36 -0700 $
77: */
78: public interface ApplicationServer {
79:
80: public EJBMetaData getEJBMetaData(ProxyInfo proxyInfo);
81:
82: public Handle getHandle(ProxyInfo proxyInfo);
83:
84: public HomeHandle getHomeHandle(ProxyInfo proxyInfo);
85:
86: public EJBObject getEJBObject(ProxyInfo proxyInfo);
87:
88: public Object getBusinessObject(ProxyInfo proxyInfo);
89:
90: public EJBHome getEJBHome(ProxyInfo proxyInfo);
91:
92: }
|