001 package org.apache.ojb.broker.core.proxy;
002
003 /* Copyright 2002-2005 The Apache Software Foundation
004 *
005 * Licensed under the Apache License, Version 2.0 (the "License");
006 * you may not use this file except in compliance with the License.
007 * You may obtain a copy of the License at
008 *
009 * http://www.apache.org/licenses/LICENSE-2.0
010 *
011 * Unless required by applicable law or agreed to in writing, software
012 * distributed under the License is distributed on an "AS IS" BASIS,
013 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
014 * See the License for the specific language governing permissions and
015 * limitations under the License.
016 */
017
018 import java.io.Serializable;
019
020 import org.apache.ojb.broker.Identity;
021 import org.apache.ojb.broker.PBKey;
022 import org.apache.ojb.broker.PersistenceBrokerException;
023
024 /**
025 * Proxy base class. can be used to implement lazy materialization techniques.
026 *
027 * @author <a href="mailto:thomas.mahler@itellium.com">Thomas Mahler<a>
028 * @version $Id: VirtualProxy.java,v 1.1 2007-08-24 22:17:32 ewestfal Exp $
029 */
030 public abstract class VirtualProxy implements OJBProxy,Serializable
031 {
032 static final long serialVersionUID = -3999451313262635171L;
033
034 /**
035 * reference to the IndirectionHandler that encapsulates the delegation mechanism
036 * */
037 private IndirectionHandler indirectionHandler = null;
038
039 /**
040 * Creates a new, uninitialized proxy.
041 */
042 public VirtualProxy()
043 {}
044
045 /**
046 * Creates a VirtualProxy for the subject with the given identity.
047 *
048 * @param key The key of the PersistenceBroker
049 * @param oid The identity of the subject
050 */
051 public VirtualProxy(PBKey key, Identity oid)
052 {
053 indirectionHandler = AbstractProxyFactory.getProxyFactory().createIndirectionHandler(key, oid);
054 }
055
056 /**
057 * Create a VirtualProxy that uses the given invocation handler.
058 * [tomdz] Why here the use of InvocationHandler ?
059 *
060 * @param handler The indirection handler of the proxy
061 *
062 */
063
064 public VirtualProxy(IndirectionHandler handler)
065 {
066 indirectionHandler = handler;
067 }
068
069 /**
070 * Returns the indirection handler of the given proxy.
071 *
072 * @param proxy The proxy
073 * @return The indirection handler
074 */
075 public static IndirectionHandler getIndirectionHandler(VirtualProxy proxy)
076 {
077 return proxy.indirectionHandler;
078 }
079
080 /**
081 * Determines whether this proxy already has been materialized.
082 *
083 * @return <code>true</code> if the real subject already been loaded
084 */
085 public boolean alreadyMaterialized()
086 {
087 return indirectionHandler.alreadyMaterialized();
088 }
089
090
091 /**
092 * Returns the proxies real subject. The subject will be materialized if necessary.
093 *
094 * @return The subject
095 */
096 public Object getRealSubject() throws PersistenceBrokerException
097 {
098 return indirectionHandler.getRealSubject();
099 }
100
101 /**
102 * Returns the IndirectionHandler
103 *
104 * @return The indirectionHandler
105 */
106 public IndirectionHandler getIndirectionHandler()
107 {
108 return indirectionHandler;
109 }
110
111 /**
112 * Returns the identity of the subject.
113 *
114 * @return The identity
115 */
116 Identity getIdentity()
117 {
118 return indirectionHandler.getIdentity();
119 }
120
121 public Object writeReplace()
122 {
123 return this;
124 }
125
126
127 }