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.2.6 2005/12/21 22:25:30 tomdz Exp $
029: */
030: public abstract class VirtualProxy implements OJBProxy, Serializable {
031: static final long serialVersionUID = -3999451313262635171L;
032:
033: /**
034: * reference to the IndirectionHandler that encapsulates the delegation mechanism
035: * */
036: private IndirectionHandler indirectionHandler = null;
037:
038: /**
039: * Creates a new, uninitialized proxy.
040: */
041: public VirtualProxy() {
042: }
043:
044: /**
045: * Creates a VirtualProxy for the subject with the given identity.
046: *
047: * @param key The key of the PersistenceBroker
048: * @param oid The identity of the subject
049: */
050: public VirtualProxy(PBKey key, Identity oid) {
051: indirectionHandler = AbstractProxyFactory.getProxyFactory()
052: .createIndirectionHandler(key, oid);
053: }
054:
055: /**
056: * Create a VirtualProxy that uses the given invocation handler.
057: * [tomdz] Why here the use of InvocationHandler ?
058: *
059: * @param handler The indirection handler of the proxy
060: *
061: */
062:
063: public VirtualProxy(IndirectionHandler handler) {
064: indirectionHandler = handler;
065: }
066:
067: /**
068: * Returns the indirection handler of the given proxy.
069: *
070: * @param proxy The proxy
071: * @return The indirection handler
072: */
073: public static IndirectionHandler getIndirectionHandler(
074: VirtualProxy proxy) {
075: return proxy.indirectionHandler;
076: }
077:
078: /**
079: * Determines whether this proxy already has been materialized.
080: *
081: * @return <code>true</code> if the real subject already been loaded
082: */
083: public boolean alreadyMaterialized() {
084: return indirectionHandler.alreadyMaterialized();
085: }
086:
087: /**
088: * Returns the proxies real subject. The subject will be materialized if necessary.
089: *
090: * @return The subject
091: */
092: public Object getRealSubject() throws PersistenceBrokerException {
093: return indirectionHandler.getRealSubject();
094: }
095:
096: /**
097: * Returns the IndirectionHandler
098: *
099: * @return The indirectionHandler
100: */
101: public IndirectionHandler getIndirectionHandler() {
102: return indirectionHandler;
103: }
104:
105: /**
106: * Returns the identity of the subject.
107: *
108: * @return The identity
109: */
110: Identity getIdentity() {
111: return indirectionHandler.getIdentity();
112: }
113:
114: public Object writeReplace() {
115: return this;
116: }
117:
118: }
|