/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.sun.jini.outrigger; import java.rmi.MarshalException; import net.jini.core.entry.Entry; /** * This class is used by the <code>snapshot</code> implementation of the * proxy to create a <code>snapshot</code>. Here's what the JavaSpaces * specification says about <code>snapshot</code>. * * The process of serializing an entry for transmission to a JavaSpaces * service will be identical if the same entry is used twice. This is most * likely to be an issue with templates that are used repeatedly to search * for entries with <code>read</code> or <code>take</code>. The client-side * implementations of <code>read</code> and <code>take</code> cannot * reasonably avoid this duplicated effort, since they have no efficient * way of checking whether the same template is being used without * intervening modification. * * The <code>snapshot</code> method gives the JavaSpaces service implementor * a way to reduce the impact of repeated use of the same entry. Invoking * <code>snapshot</code> with an <code>Entry</code> will return another * <code>Entry</code> object that contains a <i>snapshot</i> of the * original entry. Using the returned snapshot entry is equivalent to * using the unmodified original entry in all operations on the same * JavaSpaces service. Modifications to the original entry will not * affect the snapshot. You can <code>snapshot</code> a <code>null</code> * template; <code>snapshot</code> may or may not return null given a * <code>null</code> template. * * The entry returned from <code>snapshot</code> will be guaranteed * equivalent to the original unmodified object only when used with * the space. Using the snapshot with any other JavaSpaces service * will generate an <code>IllegalArgumentException</code> unless the * other space can use it because of knowledge about the JavaSpaces * service that generated the snapshot. The snapshot will be a different * object from the original, may or may not have the same hash code, * and <code>equals</code> may or may not return <code>true</code> * when invoked with the original object, even if the original * object is unmodified. * * A snapshot is guaranteed to work only within the virtual machine * in which it was generated. If a snapshot is passed to another * virtual machine (for example, in a parameter of an RMI call), * using it--even with the same JavaSpaces service--may generate * an <code>IllegalArgumentException</code>. * * For more information, please review the appropriate specifications. * * @author Sun Microsystems, Inc. * * @see SpaceProxy#snapshot */ class SnapshotRep implements Entry { static final long serialVersionUID = 5126328162389368097L; private EntryRep rep; // the rep from the snapshot /** * Create a new <code>SnapshotRep</code> that is a snapshot of * <code>e</code>. */ SnapshotRep(Entry e) throws MarshalException { rep = new EntryRep(e); } /** * Construct an SnapshotRep from an existing EntryRep */ SnapshotRep(EntryRep e) { rep = e; } /** * Return the pre-computed <code>EntryRep</code>. */ EntryRep rep() { return rep; } }