You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@river.apache.org by pe...@apache.org on 2020/07/05 11:41:42 UTC
svn commit: r1879521 [16/37] - in
/river/jtsk/modules/modularize/apache-river: ./ browser/
browser/src/main/java/org/apache/river/example/browser/ extra/
groovy-config/ river-activation/ river-collections/
river-collections/src/main/java/org/apache/riv...
Modified: river/jtsk/modules/modularize/apache-river/river-services/mercury/mercury-dl/src/main/java/org/apache/river/mercury/proxy/MailboxProxy.java
URL: http://svn.apache.org/viewvc/river/jtsk/modules/modularize/apache-river/river-services/mercury/mercury-dl/src/main/java/org/apache/river/mercury/proxy/MailboxProxy.java?rev=1879521&r1=1879520&r2=1879521&view=diff
==============================================================================
--- river/jtsk/modules/modularize/apache-river/river-services/mercury/mercury-dl/src/main/java/org/apache/river/mercury/proxy/MailboxProxy.java (original)
+++ river/jtsk/modules/modularize/apache-river/river-services/mercury/mercury-dl/src/main/java/org/apache/river/mercury/proxy/MailboxProxy.java Sun Jul 5 11:41:39 2020
@@ -1,275 +1,275 @@
-/*
- * 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 org.apache.river.mercury;
-
-import org.apache.river.proxy.ThrowThis;
-import net.jini.core.constraint.MethodConstraints;
-import net.jini.core.constraint.RemoteMethodControl;
-import net.jini.id.ReferentUuid;
-import net.jini.id.ReferentUuids;
-import net.jini.id.Uuid;
-import net.jini.security.TrustVerifier;
-import net.jini.security.proxytrust.ProxyTrustIterator;
-import net.jini.security.proxytrust.SingletonProxyTrustIterator;
-
-import java.lang.reflect.Method;
-import java.io.IOException;
-import java.io.InvalidObjectException;
-import java.io.ObjectInputStream;
-import java.io.ObjectStreamException;
-import java.io.Serializable;
-import java.rmi.RemoteException;
-
-import javax.security.auth.Subject;
-
-import net.jini.admin.Administrable;
-import net.jini.core.lease.Lease;
-import net.jini.core.lease.LeaseDeniedException;
-import net.jini.event.EventMailbox;
-import net.jini.event.MailboxRegistration;
-import net.jini.event.MailboxPullRegistration;
-import net.jini.event.PullEventMailbox;
-
-/**
- * A MailboxProxy is a proxy for the event mailbox service.
- * This is the object passed to clients of this service.
- * It implements the <code>PullEventMailbox</code> and the
- * <code>Administrable</code> interfaces.
- *
- * @author Sun Microsystems, Inc.
- *
- * @since 1.1
- */
-class MailboxProxy implements PullEventMailbox,
- Administrable, Serializable, ReferentUuid
-{
-
- private static final long serialVersionUID = 2L;
-
- /**
- * The reference to the event mailbox service implementation
- *
- * @serial
- */
- final MailboxBackEnd mailbox;
-
- /**
- * The proxy's <code>Uuid</code>
- *
- * @serial
- */
- final Uuid proxyID;
-
- /**
- * Creates a mailbox proxy, returning an instance
- * that implements RemoteMethodControl if the server does too.
- *
- * @param mailbox the server proxy
- * @param id the ID of the server
- */
- static MailboxProxy create(MailboxBackEnd mailbox, Uuid id) {
- if (mailbox instanceof RemoteMethodControl) {
- return new ConstrainableMailboxProxy(mailbox, id, null);
- } else {
- return new MailboxProxy(mailbox, id);
- }
- }
-
- /** Convenience constructor. */
- private MailboxProxy(MailboxBackEnd mailbox, Uuid proxyID) {
- if (mailbox == null || proxyID == null) {
- throw new IllegalArgumentException("Cannot accept null arguments");
- }
- this.mailbox = mailbox;
- this.proxyID = proxyID;
- }
-
- // inherit javadoc from parent
- public MailboxRegistration register(long duration)
- throws RemoteException, LeaseDeniedException {
- // Check for a bad argument
- // Note that -1 (i.e. Lease.ANY) is a valid request
- if (duration < 1 && duration != Lease.ANY)
- throw new IllegalArgumentException(
- "Duration values must be positive");
- return mailbox.register(duration);
- }
-
- // inherit javadoc from parent
- public MailboxPullRegistration pullRegister(long duration)
- throws RemoteException, LeaseDeniedException {
- // Check for a bad argument
- // Note that -1 (i.e. Lease.ANY) is a valid request
- if (duration < 1 && duration != Lease.ANY)
- throw new IllegalArgumentException(
- "Duration values must be positive");
- return mailbox.pullRegister(duration);
- }
-
- // inherit javadoc from parent
- public Object getAdmin() throws RemoteException {
- return mailbox.getAdmin();
- }
-
- /* From net.jini.id.ReferentUuid */
- /**
- * Returns the universally unique identifier that has been assigned to the
- * resource this proxy represents.
- *
- * @return the instance of <code>Uuid</code> that is associated with the
- * resource this proxy represents. This method will not return
- * <code>null</code>.
- *
- * @see net.jini.id.ReferentUuid
- */
- public Uuid getReferentUuid() {
- return proxyID;
- }
-
- /** Proxies for servers with the same proxyID have the same hash code. */
- public int hashCode() {
- return proxyID.hashCode();
- }
-
- /**
- * Proxies for servers with the same <code>proxyID</code> are
- * considered equal.
- */
- public boolean equals(Object o) {
- return ReferentUuids.compare(this,o);
- }
-
- /** When an instance of this class is deserialized, this method is
- * automatically invoked. This implementation of this method validates
- * the state of the deserialized instance.
- *
- * @throws <code>InvalidObjectException</code> if the state of the
- * deserialized instance of this class is found to be invalid.
- */
- private void readObject(ObjectInputStream s)
- throws IOException, ClassNotFoundException
- {
- s.defaultReadObject();
- /* Verify server */
- if(mailbox == null) {
- throw new InvalidObjectException("MailboxProxy.readObject "
- +"failure - mailbox "
- +"field is null");
- }//endif
- /* Verify proxyID */
- if(proxyID == null) {
- throw new InvalidObjectException("MailboxProxy.proxyID "
- +"failure - proxyID "
- +"field is null");
- }//endif
- }//end readObject
-
- /** During deserialization of an instance of this class, if it is found
- * that the stream contains no data, this method is automatically
- * invoked. Because it is expected that the stream should always
- * contain data, this implementation of this method simply declares
- * that something must be wrong.
- *
- * @throws <code>InvalidObjectException</code> to indicate that there
- * was no data in the stream during deserialization of an
- * instance of this class; declaring that something is wrong.
- */
- private void readObjectNoData() throws ObjectStreamException {
- throw new InvalidObjectException("no data found when attempting to "
- +"deserialize MailboxProxy instance");
- }//end readObjectNoData
-
-
- /** A subclass of MailboxProxy that implements RemoteMethodControl. */
- final static class ConstrainableMailboxProxy extends MailboxProxy
- implements RemoteMethodControl
- {
- private static final long serialVersionUID = 1L;
-
- /** Creates an instance of this class. */
- private ConstrainableMailboxProxy(MailboxBackEnd mailbox, Uuid uuid,
- MethodConstraints methodConstraints)
- {
- super(constrainServer(mailbox, methodConstraints),
- uuid);
- }
-
- /**
- * Returns a copy of the server proxy with the specified client
- * constraints and methods mapping.
- */
- private static MailboxBackEnd constrainServer(
- MailboxBackEnd mailbox,
- MethodConstraints methodConstraints)
- {
- return (MailboxBackEnd)
- ((RemoteMethodControl)mailbox).setConstraints(methodConstraints);
- }
-
- /** {@inheritDoc} */
- public RemoteMethodControl setConstraints(
- MethodConstraints constraints)
- {
- return new ConstrainableMailboxProxy(mailbox, proxyID,
- constraints);
- }
-
- /** {@inheritDoc} */
- public MethodConstraints getConstraints() {
- return ((RemoteMethodControl) mailbox).getConstraints();
- }
-
- /* Note that the superclass's hashCode method is OK as is. */
- /* Note that the superclass's equals method is OK as is. */
-
- /**
- * Returns a proxy trust iterator that is used in
- * <code>ProxyTrustVerifier</code> to retrieve this object's
- * trust verifier.
- */
- private ProxyTrustIterator getProxyTrustIterator() {
- return new SingletonProxyTrustIterator(mailbox);
- }//end getProxyTrustIterator
-
- /** Performs various functions related to the trust verification
- * process for the current instance of this proxy class, as
- * detailed in the description for this class.
- *
- * @throws <code>InvalidObjectException</code> if any of the
- * requirements for trust verification (as detailed in the
- * class description) are not satisfied.
- */
- private void readObject(ObjectInputStream s)
- throws IOException, ClassNotFoundException
- {
- /* Note that basic validation of the fields of this class was
- * already performed in the readObject() method of this class'
- * super class.
- */
- s.defaultReadObject();
- // Verify that the server implements RemoteMethodControl
- if( !(mailbox instanceof RemoteMethodControl) ) {
- throw new InvalidObjectException(
- "MailboxAdminProxy.readObject failure - mailbox " +
- "does not implement constrainable functionality ");
- }//endif
- }//end readObject
-
-
- }
-}
+/*
+ * 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 org.apache.river.mercury.proxy;
+
+import org.apache.river.proxy.ThrowThis;
+import net.jini.core.constraint.MethodConstraints;
+import net.jini.core.constraint.RemoteMethodControl;
+import net.jini.id.ReferentUuid;
+import net.jini.id.ReferentUuids;
+import net.jini.id.Uuid;
+import net.jini.security.TrustVerifier;
+import net.jini.security.proxytrust.ProxyTrustIterator;
+import net.jini.security.proxytrust.SingletonProxyTrustIterator;
+
+import java.lang.reflect.Method;
+import java.io.IOException;
+import java.io.InvalidObjectException;
+import java.io.ObjectInputStream;
+import java.io.ObjectStreamException;
+import java.io.Serializable;
+import java.rmi.RemoteException;
+
+import javax.security.auth.Subject;
+
+import net.jini.admin.Administrable;
+import net.jini.core.lease.Lease;
+import net.jini.core.lease.LeaseDeniedException;
+import net.jini.event.EventMailbox;
+import net.jini.event.MailboxRegistration;
+import net.jini.event.MailboxPullRegistration;
+import net.jini.event.PullEventMailbox;
+
+/**
+ * A MailboxProxy is a proxy for the event mailbox service.
+ * This is the object passed to clients of this service.
+ * It implements the <code>PullEventMailbox</code> and the
+ * <code>Administrable</code> interfaces.
+ *
+ * @author Sun Microsystems, Inc.
+ *
+ * @since 1.1
+ */
+public class MailboxProxy implements PullEventMailbox,
+ Administrable, Serializable, ReferentUuid
+{
+
+ private static final long serialVersionUID = 2L;
+
+ /**
+ * The reference to the event mailbox service implementation
+ *
+ * @serial
+ */
+ final MailboxBackEnd mailbox;
+
+ /**
+ * The proxy's <code>Uuid</code>
+ *
+ * @serial
+ */
+ final Uuid proxyID;
+
+ /**
+ * Creates a mailbox proxy, returning an instance
+ * that implements RemoteMethodControl if the server does too.
+ *
+ * @param mailbox the server proxy
+ * @param id the ID of the server
+ */
+ public static MailboxProxy create(MailboxBackEnd mailbox, Uuid id) {
+ if (mailbox instanceof RemoteMethodControl) {
+ return new ConstrainableMailboxProxy(mailbox, id, null);
+ } else {
+ return new MailboxProxy(mailbox, id);
+ }
+ }
+
+ /** Convenience constructor. */
+ private MailboxProxy(MailboxBackEnd mailbox, Uuid proxyID) {
+ if (mailbox == null || proxyID == null) {
+ throw new IllegalArgumentException("Cannot accept null arguments");
+ }
+ this.mailbox = mailbox;
+ this.proxyID = proxyID;
+ }
+
+ // inherit javadoc from parent
+ public MailboxRegistration register(long duration)
+ throws RemoteException, LeaseDeniedException {
+ // Check for a bad argument
+ // Note that -1 (i.e. Lease.ANY) is a valid request
+ if (duration < 1 && duration != Lease.ANY)
+ throw new IllegalArgumentException(
+ "Duration values must be positive");
+ return mailbox.register(duration);
+ }
+
+ // inherit javadoc from parent
+ public MailboxPullRegistration pullRegister(long duration)
+ throws RemoteException, LeaseDeniedException {
+ // Check for a bad argument
+ // Note that -1 (i.e. Lease.ANY) is a valid request
+ if (duration < 1 && duration != Lease.ANY)
+ throw new IllegalArgumentException(
+ "Duration values must be positive");
+ return mailbox.pullRegister(duration);
+ }
+
+ // inherit javadoc from parent
+ public Object getAdmin() throws RemoteException {
+ return mailbox.getAdmin();
+ }
+
+ /* From net.jini.id.ReferentUuid */
+ /**
+ * Returns the universally unique identifier that has been assigned to the
+ * resource this proxy represents.
+ *
+ * @return the instance of <code>Uuid</code> that is associated with the
+ * resource this proxy represents. This method will not return
+ * <code>null</code>.
+ *
+ * @see net.jini.id.ReferentUuid
+ */
+ public Uuid getReferentUuid() {
+ return proxyID;
+ }
+
+ /** Proxies for servers with the same proxyID have the same hash code. */
+ public int hashCode() {
+ return proxyID.hashCode();
+ }
+
+ /**
+ * Proxies for servers with the same <code>proxyID</code> are
+ * considered equal.
+ */
+ public boolean equals(Object o) {
+ return ReferentUuids.compare(this,o);
+ }
+
+ /** When an instance of this class is deserialized, this method is
+ * automatically invoked. This implementation of this method validates
+ * the state of the deserialized instance.
+ *
+ * @throws <code>InvalidObjectException</code> if the state of the
+ * deserialized instance of this class is found to be invalid.
+ */
+ private void readObject(ObjectInputStream s)
+ throws IOException, ClassNotFoundException
+ {
+ s.defaultReadObject();
+ /* Verify server */
+ if(mailbox == null) {
+ throw new InvalidObjectException("MailboxProxy.readObject "
+ +"failure - mailbox "
+ +"field is null");
+ }//endif
+ /* Verify proxyID */
+ if(proxyID == null) {
+ throw new InvalidObjectException("MailboxProxy.proxyID "
+ +"failure - proxyID "
+ +"field is null");
+ }//endif
+ }//end readObject
+
+ /** During deserialization of an instance of this class, if it is found
+ * that the stream contains no data, this method is automatically
+ * invoked. Because it is expected that the stream should always
+ * contain data, this implementation of this method simply declares
+ * that something must be wrong.
+ *
+ * @throws <code>InvalidObjectException</code> to indicate that there
+ * was no data in the stream during deserialization of an
+ * instance of this class; declaring that something is wrong.
+ */
+ private void readObjectNoData() throws ObjectStreamException {
+ throw new InvalidObjectException("no data found when attempting to "
+ +"deserialize MailboxProxy instance");
+ }//end readObjectNoData
+
+
+ /** A subclass of MailboxProxy that implements RemoteMethodControl. */
+ final static class ConstrainableMailboxProxy extends MailboxProxy
+ implements RemoteMethodControl
+ {
+ private static final long serialVersionUID = 1L;
+
+ /** Creates an instance of this class. */
+ private ConstrainableMailboxProxy(MailboxBackEnd mailbox, Uuid uuid,
+ MethodConstraints methodConstraints)
+ {
+ super(constrainServer(mailbox, methodConstraints),
+ uuid);
+ }
+
+ /**
+ * Returns a copy of the server proxy with the specified client
+ * constraints and methods mapping.
+ */
+ private static MailboxBackEnd constrainServer(
+ MailboxBackEnd mailbox,
+ MethodConstraints methodConstraints)
+ {
+ return (MailboxBackEnd)
+ ((RemoteMethodControl)mailbox).setConstraints(methodConstraints);
+ }
+
+ /** {@inheritDoc} */
+ public RemoteMethodControl setConstraints(
+ MethodConstraints constraints)
+ {
+ return new ConstrainableMailboxProxy(mailbox, proxyID,
+ constraints);
+ }
+
+ /** {@inheritDoc} */
+ public MethodConstraints getConstraints() {
+ return ((RemoteMethodControl) mailbox).getConstraints();
+ }
+
+ /* Note that the superclass's hashCode method is OK as is. */
+ /* Note that the superclass's equals method is OK as is. */
+
+ /**
+ * Returns a proxy trust iterator that is used in
+ * <code>ProxyTrustVerifier</code> to retrieve this object's
+ * trust verifier.
+ */
+ private ProxyTrustIterator getProxyTrustIterator() {
+ return new SingletonProxyTrustIterator(mailbox);
+ }//end getProxyTrustIterator
+
+ /** Performs various functions related to the trust verification
+ * process for the current instance of this proxy class, as
+ * detailed in the description for this class.
+ *
+ * @throws <code>InvalidObjectException</code> if any of the
+ * requirements for trust verification (as detailed in the
+ * class description) are not satisfied.
+ */
+ private void readObject(ObjectInputStream s)
+ throws IOException, ClassNotFoundException
+ {
+ /* Note that basic validation of the fields of this class was
+ * already performed in the readObject() method of this class'
+ * super class.
+ */
+ s.defaultReadObject();
+ // Verify that the server implements RemoteMethodControl
+ if( !(mailbox instanceof RemoteMethodControl) ) {
+ throw new InvalidObjectException(
+ "MailboxAdminProxy.readObject failure - mailbox " +
+ "does not implement constrainable functionality ");
+ }//endif
+ }//end readObject
+
+
+ }
+}
Modified: river/jtsk/modules/modularize/apache-river/river-services/mercury/mercury-dl/src/main/java/org/apache/river/mercury/proxy/MercuryPermission.java
URL: http://svn.apache.org/viewvc/river/jtsk/modules/modularize/apache-river/river-services/mercury/mercury-dl/src/main/java/org/apache/river/mercury/proxy/MercuryPermission.java?rev=1879521&r1=1879520&r2=1879521&view=diff
==============================================================================
--- river/jtsk/modules/modularize/apache-river/river-services/mercury/mercury-dl/src/main/java/org/apache/river/mercury/proxy/MercuryPermission.java (original)
+++ river/jtsk/modules/modularize/apache-river/river-services/mercury/mercury-dl/src/main/java/org/apache/river/mercury/proxy/MercuryPermission.java Sun Jul 5 11:41:39 2020
@@ -1,59 +1,59 @@
-/*
- * 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 org.apache.river.mercury;
-
-import net.jini.security.AccessPermission;
-
-/**
- * Represents permissions that can be used to express the access control policy
- * for the Mercury server exported with a
- * {@link net.jini.jeri.BasicJeriExporter}. This class
- * can be passed to {@link net.jini.jeri.BasicInvocationDispatcher},
- * and then used in
- * security policy permission grants. <p>
- *
- * An instance contains a name (also referred to as a "target name") but no
- * actions list; you either have the named permission or you don't. The
- * convention is that the target name is the non-qualified name of the remote
- * method being invoked. Wildcard matches are supported using the syntax
- * specified by {@link AccessPermission}. <p>
- *
- * The possible target names for use with a Mercury server are specified in the
- * package documentation for {@link org.apache.river.mercury}.
- *
- * @author Sun Microsystems, Inc.
- * @since 2.0
- */
-public class MercuryPermission extends AccessPermission {
-
- private static final long serialVersionUID = 1L;
-
- /**
- * Creates an instance with the specified target name.
- *
- * @param name the target name
- * @throws NullPointerException if the target name is <code>null</code>
- * @throws IllegalArgumentException if the target name does not match
- * the syntax specified in the comments at the beginning of the {@link
- * AccessPermission} class
- */
- public MercuryPermission(String name) {
- super(name);
- }
-}
+/*
+ * 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 org.apache.river.mercury.proxy;
+
+import net.jini.security.AccessPermission;
+
+/**
+ * Represents permissions that can be used to express the access control policy
+ * for the Mercury server exported with a
+ * {@link net.jini.jeri.BasicJeriExporter}. This class
+ * can be passed to {@link net.jini.jeri.BasicInvocationDispatcher},
+ * and then used in
+ * security policy permission grants. <p>
+ *
+ * An instance contains a name (also referred to as a "target name") but no
+ * actions list; you either have the named permission or you don't. The
+ * convention is that the target name is the non-qualified name of the remote
+ * method being invoked. Wildcard matches are supported using the syntax
+ * specified by {@link AccessPermission}. <p>
+ *
+ * The possible target names for use with a Mercury server are specified in the
+ * package documentation for {@link org.apache.river.mercury}.
+ *
+ * @author Sun Microsystems, Inc.
+ * @since 2.0
+ */
+public class MercuryPermission extends AccessPermission {
+
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * Creates an instance with the specified target name.
+ *
+ * @param name the target name
+ * @throws NullPointerException if the target name is <code>null</code>
+ * @throws IllegalArgumentException if the target name does not match
+ * the syntax specified in the comments at the beginning of the {@link
+ * AccessPermission} class
+ */
+ public MercuryPermission(String name) {
+ super(name);
+ }
+}
Modified: river/jtsk/modules/modularize/apache-river/river-services/mercury/mercury-dl/src/main/java/org/apache/river/mercury/proxy/ProxyUtil.java
URL: http://svn.apache.org/viewvc/river/jtsk/modules/modularize/apache-river/river-services/mercury/mercury-dl/src/main/java/org/apache/river/mercury/proxy/ProxyUtil.java?rev=1879521&r1=1879520&r2=1879521&view=diff
==============================================================================
--- river/jtsk/modules/modularize/apache-river/river-services/mercury/mercury-dl/src/main/java/org/apache/river/mercury/proxy/ProxyUtil.java (original)
+++ river/jtsk/modules/modularize/apache-river/river-services/mercury/mercury-dl/src/main/java/org/apache/river/mercury/proxy/ProxyUtil.java Sun Jul 5 11:41:39 2020
@@ -1,77 +1,77 @@
-/*
- * 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 org.apache.river.mercury;
-
-import java.lang.reflect.Method;
-
-/**
- * Convenience class that contains a package protected static utility method
- * used by the proxy classes of this package in proxy trust verification
- * process.
- *
- * Note that this class cannot be instantiated.
- *
- * @author Sun Microsystems, Inc.
- */
-class ProxyUtil {
-
- /** This class cannot be instantiated. */
- private ProxyUtil() {
- throw new AssertionError("class cannot be instantiated");
- }//end constructor
-
- /**
- * Returns the public method for the specified <code>Class</code> type,
- * method name, and array of parameter types.
- * <p>
- * This method is typically used in place of {@link Class#getMethod
- * Class.getMethod} to get a method that should definitely be defined;
- * thus, this method throws an error instead of an exception if the
- * given method is missing.
- * <p>
- * This method is convenient for the initialization of a static
- * variable for use as the <code>mappings</code> argument to
- * {@link org.apache.river.proxy.ConstrainableProxyUtil#translateConstraints
- * ConstrainableProxyUtil.translateConstraints}.
- *
- * @param type the <code>Class</code> type that defines the
- * method of interest
- * @param name <code>String</code> containing the name of the
- * method of interest
- * @param parameterTypes the <code>Class</code> types of the parameters
- * to the method of interest
- *
- * @return a <code>Method</code> object that provides information about,
- * and access to, the method of interest
- *
- * @throws <code>NoSuchMethodError</code> if the method of interest cannot
- * be found
- * @throws <code>NullPointerException</code> if <code>type</code> or
- * <code>name</code> is <code>null</code>
- */
- static Method getMethod(Class type,
- String name,
- Class[] parameterTypes)
- {
- try {
- return type.getMethod(name, parameterTypes);
- } catch (NoSuchMethodException e) {
- throw (Error)(new NoSuchMethodError(e.getMessage()).initCause(e));
- }
- }//end getMethod
-}//end class ProxyUtil
+/*
+ * 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 org.apache.river.mercury.proxy;
+
+import java.lang.reflect.Method;
+
+/**
+ * Convenience class that contains a package protected static utility method
+ * used by the proxy classes of this package in proxy trust verification
+ * process.
+ *
+ * Note that this class cannot be instantiated.
+ *
+ * @author Sun Microsystems, Inc.
+ */
+class ProxyUtil {
+
+ /** This class cannot be instantiated. */
+ private ProxyUtil() {
+ throw new AssertionError("class cannot be instantiated");
+ }//end constructor
+
+ /**
+ * Returns the public method for the specified <code>Class</code> type,
+ * method name, and array of parameter types.
+ * <p>
+ * This method is typically used in place of {@link Class#getMethod
+ * Class.getMethod} to get a method that should definitely be defined;
+ * thus, this method throws an error instead of an exception if the
+ * given method is missing.
+ * <p>
+ * This method is convenient for the initialization of a static
+ * variable for use as the <code>mappings</code> argument to
+ * {@link org.apache.river.proxy.ConstrainableProxyUtil#translateConstraints
+ * ConstrainableProxyUtil.translateConstraints}.
+ *
+ * @param type the <code>Class</code> type that defines the
+ * method of interest
+ * @param name <code>String</code> containing the name of the
+ * method of interest
+ * @param parameterTypes the <code>Class</code> types of the parameters
+ * to the method of interest
+ *
+ * @return a <code>Method</code> object that provides information about,
+ * and access to, the method of interest
+ *
+ * @throws <code>NoSuchMethodError</code> if the method of interest cannot
+ * be found
+ * @throws <code>NullPointerException</code> if <code>type</code> or
+ * <code>name</code> is <code>null</code>
+ */
+ static Method getMethod(Class type,
+ String name,
+ Class[] parameterTypes)
+ {
+ try {
+ return type.getMethod(name, parameterTypes);
+ } catch (NoSuchMethodException e) {
+ throw (Error)(new NoSuchMethodError(e.getMessage()).initCause(e));
+ }
+ }//end getMethod
+}//end class ProxyUtil
Modified: river/jtsk/modules/modularize/apache-river/river-services/mercury/mercury-dl/src/main/java/org/apache/river/mercury/proxy/ProxyVerifier.java
URL: http://svn.apache.org/viewvc/river/jtsk/modules/modularize/apache-river/river-services/mercury/mercury-dl/src/main/java/org/apache/river/mercury/proxy/ProxyVerifier.java?rev=1879521&r1=1879520&r2=1879521&view=diff
==============================================================================
--- river/jtsk/modules/modularize/apache-river/river-services/mercury/mercury-dl/src/main/java/org/apache/river/mercury/proxy/ProxyVerifier.java (original)
+++ river/jtsk/modules/modularize/apache-river/river-services/mercury/mercury-dl/src/main/java/org/apache/river/mercury/proxy/ProxyVerifier.java Sun Jul 5 11:41:39 2020
@@ -1,147 +1,147 @@
-/*
- * 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 org.apache.river.mercury;
-
-import org.apache.river.landlord.ConstrainableLandlordLease;
-import org.apache.river.landlord.Landlord;
-import org.apache.river.landlord.LandlordProxyVerifier;
-import net.jini.core.constraint.MethodConstraints;
-import net.jini.core.constraint.RemoteMethodControl;
-import net.jini.id.ReferentUuid;
-import net.jini.id.Uuid;
-import net.jini.security.TrustVerifier;
-import net.jini.security.proxytrust.TrustEquivalence;
-import java.io.Serializable;
-import java.rmi.RemoteException;
-import java.util.logging.Level;
-import java.util.logging.Logger;
-
-/** Defines a trust verifier for the smart proxies of a Mercury server. */
-final class ProxyVerifier implements TrustVerifier, Serializable {
-
- private static final long serialVersionUID = 1L;
-
- /** Logger for logging information about this instance */
- private static final Logger logger =
- Logger.getLogger("net.jini.security.trust");
-
- private static final String proxyVerifierSourceClass =
- ProxyVerifier.class.getName();
-
- /** The Mercury server proxy. */
- private final RemoteMethodControl serverProxy;
-
- /**
- * The unique identifier associated with the backend server referenced
- * by the <code>serverProxy</code>, used for comparison with the IDs
- * extracted from the smart proxies being verified.
- *
- * @serial
- */
- private final Uuid proxyID;
-
- /**
- * Returns a verifier for the smart proxies of the specified Mercury server
- * proxy.
- *
- * @param serverProxy the Mercury server proxy
- * @throws UnsupportedOperationException if <code>serverProxy</code> does
- * not implement both {@link RemoteMethodControl} and {@link
- * TrustEquivalence}
- */
- ProxyVerifier(MailboxBackEnd serverProxy, Uuid proxyID) {
- if (!(serverProxy instanceof RemoteMethodControl)) {
- throw new UnsupportedOperationException(
- "No verifier available for non-constrainable service");
- } else if (!(serverProxy instanceof TrustEquivalence)) {
- throw new UnsupportedOperationException(
- "Verifier requires service proxy to implement " +
- "TrustEquivalence");
- } else if (proxyID == null) {
- throw new IllegalArgumentException(
- "Proxy id cannot be null");
- }
- this.serverProxy = (RemoteMethodControl) serverProxy;
- this.proxyID = proxyID;
- }
-
- /**
- * @throws NullPointerException {@inheritDoc}
- */
- public boolean isTrustedObject(Object obj, TrustVerifier.Context ctx)
- throws RemoteException
- {
- if (logger.isLoggable(Level.FINER)) {
- logger.entering(proxyVerifierSourceClass, "isTrustedObject",
- new Object[] { obj, ctx });
- }
- if (obj == null || ctx == null) {
- throw new NullPointerException("Arguments must not be null");
- }
- RemoteMethodControl otherServerProxy;
- Uuid inputProxyID = null;
- if (obj instanceof Registration.ConstrainableRegistration) {
- Registration reg = (Registration) obj;
- // verify sub-components
- if (!isTrustedObject(reg.lease, ctx) ||
- !isTrustedObject(reg.listener, ctx)) {
- return false;
- }
- otherServerProxy = (RemoteMethodControl) reg.mailbox;
- } else if (obj instanceof MailboxBackEnd &&
- obj instanceof RemoteMethodControl) {
- /* Inner proxy verification case. To simplify logic, below,
- * just assume the same Uuid that we have in hand.
- */
- otherServerProxy = (RemoteMethodControl)obj;
- inputProxyID = proxyID;
- } else if (obj instanceof MailboxProxy.ConstrainableMailboxProxy) {
- otherServerProxy = (RemoteMethodControl) ((MailboxProxy)obj).mailbox;
- inputProxyID = ((ReferentUuid)obj).getReferentUuid();
- } else if (obj instanceof MailboxAdminProxy.ConstrainableMailboxAdminProxy) {
- otherServerProxy = (RemoteMethodControl) ((MailboxAdminProxy)obj).server;
- inputProxyID = ((ReferentUuid)obj).getReferentUuid();
- } else if (obj instanceof ListenerProxy.ConstrainableListenerProxy) {
- otherServerProxy = (RemoteMethodControl) ((ListenerProxy)obj).server;
- } else if (obj instanceof ConstrainableLandlordLease) {
- final LandlordProxyVerifier lpv =
- new LandlordProxyVerifier((Landlord)serverProxy, proxyID);
- return lpv.isTrustedObject(obj, ctx);
- } else {
- logger.log(Level.FINEST, "Object {0} is not a supported type",
- obj);
- return false;
- }
-
- // For top-level proxies, quickly verify proxy Uuid
- if ((inputProxyID != null) &&
- !(proxyID.equals(inputProxyID))) {
- return false;
- }
-
- MethodConstraints mc = otherServerProxy.getConstraints();
- TrustEquivalence trusted =
- (TrustEquivalence) serverProxy.setConstraints(mc);
- boolean result = trusted.checkTrustEquivalence(otherServerProxy);
- if (logger.isLoggable(Level.FINER)) {
- logger.exiting(proxyVerifierSourceClass, "isTrustedObject",
- Boolean.valueOf(result));
- }
- return result;
- }
-}
+/*
+ * 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 org.apache.river.mercury.proxy;
+
+import org.apache.river.landlord.ConstrainableLandlordLease;
+import org.apache.river.landlord.Landlord;
+import org.apache.river.landlord.LandlordProxyVerifier;
+import net.jini.core.constraint.MethodConstraints;
+import net.jini.core.constraint.RemoteMethodControl;
+import net.jini.id.ReferentUuid;
+import net.jini.id.Uuid;
+import net.jini.security.TrustVerifier;
+import net.jini.security.proxytrust.TrustEquivalence;
+import java.io.Serializable;
+import java.rmi.RemoteException;
+import java.util.logging.Level;
+import java.util.logging.Logger;
+
+/** Defines a trust verifier for the smart proxies of a Mercury server. */
+public final class ProxyVerifier implements TrustVerifier, Serializable {
+
+ private static final long serialVersionUID = 1L;
+
+ /** Logger for logging information about this instance */
+ private static final Logger logger =
+ Logger.getLogger("net.jini.security.trust");
+
+ private static final String proxyVerifierSourceClass =
+ ProxyVerifier.class.getName();
+
+ /** The Mercury server proxy. */
+ private final RemoteMethodControl serverProxy;
+
+ /**
+ * The unique identifier associated with the backend server referenced
+ * by the <code>serverProxy</code>, used for comparison with the IDs
+ * extracted from the smart proxies being verified.
+ *
+ * @serial
+ */
+ private final Uuid proxyID;
+
+ /**
+ * Returns a verifier for the smart proxies of the specified Mercury server
+ * proxy.
+ *
+ * @param serverProxy the Mercury server proxy
+ * @throws UnsupportedOperationException if <code>serverProxy</code> does
+ * not implement both {@link RemoteMethodControl} and {@link
+ * TrustEquivalence}
+ */
+ public ProxyVerifier(MailboxBackEnd serverProxy, Uuid proxyID) {
+ if (!(serverProxy instanceof RemoteMethodControl)) {
+ throw new UnsupportedOperationException(
+ "No verifier available for non-constrainable service");
+ } else if (!(serverProxy instanceof TrustEquivalence)) {
+ throw new UnsupportedOperationException(
+ "Verifier requires service proxy to implement " +
+ "TrustEquivalence");
+ } else if (proxyID == null) {
+ throw new IllegalArgumentException(
+ "Proxy id cannot be null");
+ }
+ this.serverProxy = (RemoteMethodControl) serverProxy;
+ this.proxyID = proxyID;
+ }
+
+ /**
+ * @throws NullPointerException {@inheritDoc}
+ */
+ public boolean isTrustedObject(Object obj, TrustVerifier.Context ctx)
+ throws RemoteException
+ {
+ if (logger.isLoggable(Level.FINER)) {
+ logger.entering(proxyVerifierSourceClass, "isTrustedObject",
+ new Object[] { obj, ctx });
+ }
+ if (obj == null || ctx == null) {
+ throw new NullPointerException("Arguments must not be null");
+ }
+ RemoteMethodControl otherServerProxy;
+ Uuid inputProxyID = null;
+ if (obj instanceof Registration.ConstrainableRegistration) {
+ Registration reg = (Registration) obj;
+ // verify sub-components
+ if (!isTrustedObject(reg.lease, ctx) ||
+ !isTrustedObject(reg.listener, ctx)) {
+ return false;
+ }
+ otherServerProxy = (RemoteMethodControl) reg.mailbox;
+ } else if (obj instanceof MailboxBackEnd &&
+ obj instanceof RemoteMethodControl) {
+ /* Inner proxy verification case. To simplify logic, below,
+ * just assume the same Uuid that we have in hand.
+ */
+ otherServerProxy = (RemoteMethodControl)obj;
+ inputProxyID = proxyID;
+ } else if (obj instanceof MailboxProxy.ConstrainableMailboxProxy) {
+ otherServerProxy = (RemoteMethodControl) ((MailboxProxy)obj).mailbox;
+ inputProxyID = ((ReferentUuid)obj).getReferentUuid();
+ } else if (obj instanceof MailboxAdminProxy.ConstrainableMailboxAdminProxy) {
+ otherServerProxy = (RemoteMethodControl) ((MailboxAdminProxy)obj).server;
+ inputProxyID = ((ReferentUuid)obj).getReferentUuid();
+ } else if (obj instanceof ListenerProxy.ConstrainableListenerProxy) {
+ otherServerProxy = (RemoteMethodControl) ((ListenerProxy)obj).server;
+ } else if (obj instanceof ConstrainableLandlordLease) {
+ final LandlordProxyVerifier lpv =
+ new LandlordProxyVerifier((Landlord)serverProxy, proxyID);
+ return lpv.isTrustedObject(obj, ctx);
+ } else {
+ logger.log(Level.FINEST, "Object {0} is not a supported type",
+ obj);
+ return false;
+ }
+
+ // For top-level proxies, quickly verify proxy Uuid
+ if ((inputProxyID != null) &&
+ !(proxyID.equals(inputProxyID))) {
+ return false;
+ }
+
+ MethodConstraints mc = otherServerProxy.getConstraints();
+ TrustEquivalence trusted =
+ (TrustEquivalence) serverProxy.setConstraints(mc);
+ boolean result = trusted.checkTrustEquivalence(otherServerProxy);
+ if (logger.isLoggable(Level.FINER)) {
+ logger.exiting(proxyVerifierSourceClass, "isTrustedObject",
+ Boolean.valueOf(result));
+ }
+ return result;
+ }
+}
Modified: river/jtsk/modules/modularize/apache-river/river-services/mercury/mercury-dl/src/main/java/org/apache/river/mercury/proxy/Registration.java
URL: http://svn.apache.org/viewvc/river/jtsk/modules/modularize/apache-river/river-services/mercury/mercury-dl/src/main/java/org/apache/river/mercury/proxy/Registration.java?rev=1879521&r1=1879520&r2=1879521&view=diff
==============================================================================
--- river/jtsk/modules/modularize/apache-river/river-services/mercury/mercury-dl/src/main/java/org/apache/river/mercury/proxy/Registration.java (original)
+++ river/jtsk/modules/modularize/apache-river/river-services/mercury/mercury-dl/src/main/java/org/apache/river/mercury/proxy/Registration.java Sun Jul 5 11:41:39 2020
@@ -1,390 +1,390 @@
-/*
- * 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 org.apache.river.mercury;
-
-import java.io.IOException;
-import java.io.InvalidObjectException;
-import java.io.ObjectInputStream;
-import java.io.ObjectStreamException;
-import java.io.Serializable;
-import java.lang.reflect.Method;
-import java.rmi.RemoteException;
-import java.util.Collection;
-
-import javax.security.auth.Subject;
-
-import org.apache.river.landlord.ConstrainableLandlordLease;
-import org.apache.river.proxy.ConstrainableProxyUtil;
-import org.apache.river.proxy.ThrowThis;
-import net.jini.core.constraint.MethodConstraints;
-import net.jini.core.constraint.RemoteMethodControl;
-import net.jini.id.ReferentUuid;
-import net.jini.id.ReferentUuids;
-import net.jini.id.Uuid;
-import net.jini.security.proxytrust.ProxyTrustIterator;
-import net.jini.security.proxytrust.SingletonProxyTrustIterator;
-import net.jini.security.TrustVerifier;
-
-import net.jini.event.MailboxPullRegistration;
-import net.jini.event.MailboxRegistration;
-import net.jini.event.RemoteEventIterator;
-import net.jini.core.event.RemoteEventListener;
-import net.jini.core.lease.Lease;
-
-/**
- * The <tt>Registration</tt> class is the client-side proxy
- * returned to event mailbox clients as the result of the
- * registration process. It implements the <tt>MailboxRegistration</tt>
- * interface and delegates functionality to the mailbox service
- * where necessary.
- *
- * @author Sun Microsystems, Inc.
- *
- * @since 1.1
- */
-class Registration implements MailboxPullRegistration,
- Serializable, ReferentUuid
-{
-
- private static final long serialVersionUID = 2L;
-
- /** Unique identifier for this registration */
- final Uuid registrationID;
-
- /** Reference to service implementation */
- final MailboxBackEnd mailbox;
-
- /** Reference to service provided RemoteEventListener implementation */
- final ListenerProxy listener;
-
- /** The service's registration lease */
- final Lease lease;
-
- /**
- * Creates a mailbox registration proxy, returning an instance
- * that implements RemoteMethodControl if the server does too.
- *
- * @param server the server proxy
- * @param id the ID of the lease set
- * @param lease the lease set's lease
- */
- static Registration create(Uuid id, MailboxBackEnd server, Lease lease) {
- if (server instanceof RemoteMethodControl) {
- return new ConstrainableRegistration(id, server, lease, null);
- } else {
- return new Registration(id, server, lease);
- }
- }
-
- /** Convenience constructor */
- private Registration(Uuid id, MailboxBackEnd srv, Lease l) {
- if (id == null || srv == null || l == null)
- throw new IllegalArgumentException("Cannot accept null arguments");
- registrationID = id;
- mailbox = srv;
- listener = ListenerProxy.create(id, srv);
- lease = l;
- }
-
- // inherit javadoc from supertype
- public Lease getLease() {
- return lease;
- }
-
- // inherit javadoc from supertype
- public RemoteEventListener getListener() {
- return listener;
- }
-
- // inherit javadoc from supertype
- public void enableDelivery(RemoteEventListener target)
- throws RemoteException
- {
- // Prevent resubmission of this registration's listener
- if ((target instanceof ListenerProxy) &&
- (listener.equals((ListenerProxy)target))) {
- throw new IllegalArgumentException("Cannot resubmit " +
- "a target that was provided by the EventMailbox service");
- } else { // OK to make the call, now
- try {
- mailbox.enableDelivery(registrationID, target);
- } catch (ThrowThis tt) {
- tt.throwRemoteException();
- }
- }
- }
-
- // inherit javadoc from supertype
- public void disableDelivery() throws RemoteException {
- try {
- mailbox.disableDelivery(registrationID);
- } catch (ThrowThis tt) {
- tt.throwRemoteException();
- }
- }
-
- // inherit javadoc from supertype
- public RemoteEventIterator getRemoteEvents()
- throws RemoteException
- {
- RemoteEventIteratorImpl i = null;
- try {
- RemoteEventIteratorData d = mailbox.getRemoteEvents(registrationID);
- i = new RemoteEventIteratorImpl(
- d.uuid, registrationID, mailbox, d.events);
- } catch (ThrowThis tt) {
- tt.throwRemoteException();
- }
- return i;
- }
-
- // inherit javadoc from supertype
- public void addUnknownEvents(Collection unknownEvents)
- throws RemoteException
- {
- //TODO - verify collection contains RemoteEvents
- try {
- mailbox.addUnknownEvents(registrationID, unknownEvents);
- } catch (ThrowThis tt) {
- tt.throwRemoteException();
- }
-
- }
-
- /* From net.jini.id.ReferentUuid */
- /**
- * Returns the universally unique identifier that has been assigned to the
- * resource this proxy represents.
- *
- * @return the instance of <code>Uuid</code> that is associated with the
- * resource this proxy represents. This method will not return
- * <code>null</code>.
- *
- * @see net.jini.id.ReferentUuid
- */
- public Uuid getReferentUuid() {
- return registrationID;
- }
-
- /** Proxies with the same registrationID have the same hash code. */
- public int hashCode() {
- return registrationID.hashCode();
- }
-
- /** Proxies with the same registrationID are considered equal. */
- public boolean equals(Object o) {
- return ReferentUuids.compare(this,o);
- }
-
- /** When an instance of this class is deserialized, this method is
- * automatically invoked. This implementation of this method validates
- * the state of the deserialized instance.
- *
- * @throws <code>InvalidObjectException</code> if the state of the
- * deserialized instance of this class is found to be invalid.
- */
- private void readObject(ObjectInputStream s)
- throws IOException, ClassNotFoundException
- {
- s.defaultReadObject();
- /* Verify server */
- if(mailbox == null) {
- throw new InvalidObjectException("Registration.readObject "
- +"failure - mailbox "
- +"field is null");
- }//endif
- /* Verify registrationID */
- if(registrationID == null) {
- throw new InvalidObjectException
- ("Registration.readObject "
- +"failure - registrationID field is null");
- }//endif
- /* Verify regLease */
- if(lease == null) {
- throw new InvalidObjectException
- ("Registration.readObject "
- +"failure - lease field is null");
- }//endif
- /* Verify listener */
- if(listener == null) {
- throw new InvalidObjectException
- ("Registration.readObject "
- +"failure - listener field is null");
- }//endif
- }//end readObject
-
- /** During deserialization of an instance of this class, if it is found
- * that the stream contains no data, this method is automatically
- * invoked. Because it is expected that the stream should always
- * contain data, this implementation of this method simply declares
- * that something must be wrong.
- *
- * @throws <code>InvalidObjectException</code> to indicate that there
- * was no data in the stream during deserialization of an
- * instance of this class; declaring that something is wrong.
- */
- private void readObjectNoData() throws ObjectStreamException {
- throw new InvalidObjectException("no data found when attempting to "
- +"deserialize Registration instance");
- }//end readObjectNoData
-
- /** A subclass of Registration that implements RemoteMethodControl. */
- final static class ConstrainableRegistration extends Registration
- implements RemoteMethodControl
- {
- private static final long serialVersionUID = 1L;
-
- // Mappings from client to server methods,
- private static final Method[] methodMap1 = {
- ProxyUtil.getMethod(MailboxPullRegistration.class,
- "getRemoteEvents", new Class[] {}),
- ProxyUtil.getMethod(MailboxBackEnd.class,
- "getRemoteEvents", new Class[] {Uuid.class}),
- // Use the same constraints for getNextBatch as getRemoteEvents
- ProxyUtil.getMethod(MailboxPullRegistration.class,
- "getRemoteEvents", new Class[] {}),
- ProxyUtil.getMethod(MailboxBackEnd.class,
- "getNextBatch", new Class[] {
- Uuid.class, Uuid.class, long.class, Object.class}),
- ProxyUtil.getMethod(MailboxPullRegistration.class,
- "addUnknownEvents", new Class[] {Collection.class}),
- ProxyUtil.getMethod(MailboxBackEnd.class,
- "addUnknownEvents", new Class[] {Uuid.class, Collection.class}),
- ProxyUtil.getMethod(MailboxRegistration.class,
- "enableDelivery", new Class[] {RemoteEventListener.class}),
- ProxyUtil.getMethod(MailboxBackEnd.class,
- "enableDelivery", new Class[] {Uuid.class,
- RemoteEventListener.class}),
- ProxyUtil.getMethod(MailboxRegistration.class,
- "disableDelivery", new Class[] {}),
- ProxyUtil.getMethod(MailboxBackEnd.class,
- "disableDelivery", new Class[] {Uuid.class})
- };
- /**
- * The client constraints placed on this proxy or <code>null</code>.
- *
- * @serial
- */
- private MethodConstraints methodConstraints;
-
- /** Creates an instance of this class. */
- private ConstrainableRegistration(Uuid id, MailboxBackEnd server,
- Lease lease, MethodConstraints methodConstraints)
- {
- super(id, constrainServer(server, methodConstraints),
- lease);
- this.methodConstraints = methodConstraints;
- }
-
- // inherit javadoc from supertype
- public RemoteEventIterator getRemoteEvents(long maxEvents, long timeout)
- throws RemoteException
- {
- //
- //TODO - return constrained remote iterator impl
- //
- return super.getRemoteEvents();
- }
-
- /**
- * Returns a copy of the server proxy with the specified client
- * constraints and methods mapping.
- */
- private static MailboxBackEnd constrainServer(
- MailboxBackEnd server,
- MethodConstraints methodConstraints)
- {
- return (MailboxBackEnd)
- ((RemoteMethodControl)server).setConstraints(
- ConstrainableProxyUtil.translateConstraints(
- methodConstraints, methodMap1));
- }
- /** {@inheritDoc} */
- public RemoteMethodControl setConstraints(
- MethodConstraints constraints)
- {
- return new ConstrainableRegistration(registrationID, mailbox, lease,
- constraints);
- }
-
- /** {@inheritDoc} */
- public MethodConstraints getConstraints() {
- return methodConstraints;
- }
-
- /* Note that the superclass's hashCode method is OK as is. */
- /* Note that the superclass's equals method is OK as is. */
-
- /* Note that the superclass's hashCode method is OK as is. */
- /**
- * Returns a proxy trust iterator that is used in
- * <code>ProxyTrustVerifier</code> to retrieve this object's
- * trust verifier.
- */
- private ProxyTrustIterator getProxyTrustIterator() {
- return new SingletonProxyTrustIterator(mailbox);
- }//end getProxyTrustIterator
-
- /**
- * Verifies that the registrationID, lease and mailbox fields are
- * not null, that mailbox implements RemoteMethodControl, and that the
- * mailbox proxy has the appropriate method constraints.
- *
- * @throws InvalidObjectException if registrationID, lease or mailbox
- * is null, if mailbox does not implement RemoteMethodControl,
- * or if server has the wrong constraints
- */
- private void readObject(ObjectInputStream s)
- throws IOException, ClassNotFoundException
- {
- /* Note that basic validation of the fields of this class was
- * already performed in the readObject() method of this class'
- * super class.
- */
- s.defaultReadObject();
- /* Verify the server and its constraints */
- ConstrainableProxyUtil.verifyConsistentConstraints(methodConstraints,
- mailbox,
- methodMap1);
- if( !(lease instanceof ConstrainableLandlordLease) ) {
- throw new InvalidObjectException
- ("Registration.readObject failure - "
- +"lease is not an instance of "
- +"ConstrainableLandlordLease");
- }//endif
-
- if( !(listener instanceof ListenerProxy.ConstrainableListenerProxy) ) {
- throw new InvalidObjectException
- ("Registration.readObject failure - "
- +"listener is not an instance of "
- +"ListenerProxy.ConstrainableListenerProxy");
- }//endif
-
- /* Verify listener's ID */
- if(registrationID !=
- ((ListenerProxy.ConstrainableListenerProxy)listener).registrationID)
- {
- throw new InvalidObjectException
- ("Registration.readObject "
- +"failure - listener ID "
- +"is not equal to "
- +"proxy ID");
- }
- }
- }
-}
+/*
+ * 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 org.apache.river.mercury.proxy;
+
+import java.io.IOException;
+import java.io.InvalidObjectException;
+import java.io.ObjectInputStream;
+import java.io.ObjectStreamException;
+import java.io.Serializable;
+import java.lang.reflect.Method;
+import java.rmi.RemoteException;
+import java.util.Collection;
+
+import javax.security.auth.Subject;
+
+import org.apache.river.landlord.ConstrainableLandlordLease;
+import org.apache.river.proxy.ConstrainableProxyUtil;
+import org.apache.river.proxy.ThrowThis;
+import net.jini.core.constraint.MethodConstraints;
+import net.jini.core.constraint.RemoteMethodControl;
+import net.jini.id.ReferentUuid;
+import net.jini.id.ReferentUuids;
+import net.jini.id.Uuid;
+import net.jini.security.proxytrust.ProxyTrustIterator;
+import net.jini.security.proxytrust.SingletonProxyTrustIterator;
+import net.jini.security.TrustVerifier;
+
+import net.jini.event.MailboxPullRegistration;
+import net.jini.event.MailboxRegistration;
+import net.jini.event.RemoteEventIterator;
+import net.jini.core.event.RemoteEventListener;
+import net.jini.core.lease.Lease;
+
+/**
+ * The <tt>Registration</tt> class is the client-side proxy
+ * returned to event mailbox clients as the result of the
+ * registration process. It implements the <tt>MailboxRegistration</tt>
+ * interface and delegates functionality to the mailbox service
+ * where necessary.
+ *
+ * @author Sun Microsystems, Inc.
+ *
+ * @since 1.1
+ */
+public class Registration implements MailboxPullRegistration,
+ Serializable, ReferentUuid
+{
+
+ private static final long serialVersionUID = 2L;
+
+ /** Unique identifier for this registration */
+ final Uuid registrationID;
+
+ /** Reference to service implementation */
+ final MailboxBackEnd mailbox;
+
+ /** Reference to service provided RemoteEventListener implementation */
+ final ListenerProxy listener;
+
+ /** The service's registration lease */
+ final Lease lease;
+
+ /**
+ * Creates a mailbox registration proxy, returning an instance
+ * that implements RemoteMethodControl if the server does too.
+ *
+ * @param server the server proxy
+ * @param id the ID of the lease set
+ * @param lease the lease set's lease
+ */
+ public static Registration create(Uuid id, MailboxBackEnd server, Lease lease) {
+ if (server instanceof RemoteMethodControl) {
+ return new ConstrainableRegistration(id, server, lease, null);
+ } else {
+ return new Registration(id, server, lease);
+ }
+ }
+
+ /** Convenience constructor */
+ private Registration(Uuid id, MailboxBackEnd srv, Lease l) {
+ if (id == null || srv == null || l == null)
+ throw new IllegalArgumentException("Cannot accept null arguments");
+ registrationID = id;
+ mailbox = srv;
+ listener = ListenerProxy.create(id, srv);
+ lease = l;
+ }
+
+ // inherit javadoc from supertype
+ public Lease getLease() {
+ return lease;
+ }
+
+ // inherit javadoc from supertype
+ public RemoteEventListener getListener() {
+ return listener;
+ }
+
+ // inherit javadoc from supertype
+ public void enableDelivery(RemoteEventListener target)
+ throws RemoteException
+ {
+ // Prevent resubmission of this registration's listener
+ if ((target instanceof ListenerProxy) &&
+ (listener.equals((ListenerProxy)target))) {
+ throw new IllegalArgumentException("Cannot resubmit " +
+ "a target that was provided by the EventMailbox service");
+ } else { // OK to make the call, now
+ try {
+ mailbox.enableDelivery(registrationID, target);
+ } catch (ThrowThis tt) {
+ tt.throwRemoteException();
+ }
+ }
+ }
+
+ // inherit javadoc from supertype
+ public void disableDelivery() throws RemoteException {
+ try {
+ mailbox.disableDelivery(registrationID);
+ } catch (ThrowThis tt) {
+ tt.throwRemoteException();
+ }
+ }
+
+ // inherit javadoc from supertype
+ public RemoteEventIterator getRemoteEvents()
+ throws RemoteException
+ {
+ RemoteEventIteratorImpl i = null;
+ try {
+ RemoteEventIteratorData d = mailbox.getRemoteEvents(registrationID);
+ i = new RemoteEventIteratorImpl(
+ d.uuid, registrationID, mailbox, d.events);
+ } catch (ThrowThis tt) {
+ tt.throwRemoteException();
+ }
+ return i;
+ }
+
+ // inherit javadoc from supertype
+ public void addUnknownEvents(Collection unknownEvents)
+ throws RemoteException
+ {
+ //TODO - verify collection contains RemoteEvents
+ try {
+ mailbox.addUnknownEvents(registrationID, unknownEvents);
+ } catch (ThrowThis tt) {
+ tt.throwRemoteException();
+ }
+
+ }
+
+ /* From net.jini.id.ReferentUuid */
+ /**
+ * Returns the universally unique identifier that has been assigned to the
+ * resource this proxy represents.
+ *
+ * @return the instance of <code>Uuid</code> that is associated with the
+ * resource this proxy represents. This method will not return
+ * <code>null</code>.
+ *
+ * @see net.jini.id.ReferentUuid
+ */
+ public Uuid getReferentUuid() {
+ return registrationID;
+ }
+
+ /** Proxies with the same registrationID have the same hash code. */
+ public int hashCode() {
+ return registrationID.hashCode();
+ }
+
+ /** Proxies with the same registrationID are considered equal. */
+ public boolean equals(Object o) {
+ return ReferentUuids.compare(this,o);
+ }
+
+ /** When an instance of this class is deserialized, this method is
+ * automatically invoked. This implementation of this method validates
+ * the state of the deserialized instance.
+ *
+ * @throws <code>InvalidObjectException</code> if the state of the
+ * deserialized instance of this class is found to be invalid.
+ */
+ private void readObject(ObjectInputStream s)
+ throws IOException, ClassNotFoundException
+ {
+ s.defaultReadObject();
+ /* Verify server */
+ if(mailbox == null) {
+ throw new InvalidObjectException("Registration.readObject "
+ +"failure - mailbox "
+ +"field is null");
+ }//endif
+ /* Verify registrationID */
+ if(registrationID == null) {
+ throw new InvalidObjectException
+ ("Registration.readObject "
+ +"failure - registrationID field is null");
+ }//endif
+ /* Verify regLease */
+ if(lease == null) {
+ throw new InvalidObjectException
+ ("Registration.readObject "
+ +"failure - lease field is null");
+ }//endif
+ /* Verify listener */
+ if(listener == null) {
+ throw new InvalidObjectException
+ ("Registration.readObject "
+ +"failure - listener field is null");
+ }//endif
+ }//end readObject
+
+ /** During deserialization of an instance of this class, if it is found
+ * that the stream contains no data, this method is automatically
+ * invoked. Because it is expected that the stream should always
+ * contain data, this implementation of this method simply declares
+ * that something must be wrong.
+ *
+ * @throws <code>InvalidObjectException</code> to indicate that there
+ * was no data in the stream during deserialization of an
+ * instance of this class; declaring that something is wrong.
+ */
+ private void readObjectNoData() throws ObjectStreamException {
+ throw new InvalidObjectException("no data found when attempting to "
+ +"deserialize Registration instance");
+ }//end readObjectNoData
+
+ /** A subclass of Registration that implements RemoteMethodControl. */
+ final static class ConstrainableRegistration extends Registration
+ implements RemoteMethodControl
+ {
+ private static final long serialVersionUID = 1L;
+
+ // Mappings from client to server methods,
+ private static final Method[] methodMap1 = {
+ ProxyUtil.getMethod(MailboxPullRegistration.class,
+ "getRemoteEvents", new Class[] {}),
+ ProxyUtil.getMethod(MailboxBackEnd.class,
+ "getRemoteEvents", new Class[] {Uuid.class}),
+ // Use the same constraints for getNextBatch as getRemoteEvents
+ ProxyUtil.getMethod(MailboxPullRegistration.class,
+ "getRemoteEvents", new Class[] {}),
+ ProxyUtil.getMethod(MailboxBackEnd.class,
+ "getNextBatch", new Class[] {
+ Uuid.class, Uuid.class, long.class, Object.class}),
+ ProxyUtil.getMethod(MailboxPullRegistration.class,
+ "addUnknownEvents", new Class[] {Collection.class}),
+ ProxyUtil.getMethod(MailboxBackEnd.class,
+ "addUnknownEvents", new Class[] {Uuid.class, Collection.class}),
+ ProxyUtil.getMethod(MailboxRegistration.class,
+ "enableDelivery", new Class[] {RemoteEventListener.class}),
+ ProxyUtil.getMethod(MailboxBackEnd.class,
+ "enableDelivery", new Class[] {Uuid.class,
+ RemoteEventListener.class}),
+ ProxyUtil.getMethod(MailboxRegistration.class,
+ "disableDelivery", new Class[] {}),
+ ProxyUtil.getMethod(MailboxBackEnd.class,
+ "disableDelivery", new Class[] {Uuid.class})
+ };
+ /**
+ * The client constraints placed on this proxy or <code>null</code>.
+ *
+ * @serial
+ */
+ private MethodConstraints methodConstraints;
+
+ /** Creates an instance of this class. */
+ private ConstrainableRegistration(Uuid id, MailboxBackEnd server,
+ Lease lease, MethodConstraints methodConstraints)
+ {
+ super(id, constrainServer(server, methodConstraints),
+ lease);
+ this.methodConstraints = methodConstraints;
+ }
+
+ // inherit javadoc from supertype
+ public RemoteEventIterator getRemoteEvents(long maxEvents, long timeout)
+ throws RemoteException
+ {
+ //
+ //TODO - return constrained remote iterator impl
+ //
+ return super.getRemoteEvents();
+ }
+
+ /**
+ * Returns a copy of the server proxy with the specified client
+ * constraints and methods mapping.
+ */
+ private static MailboxBackEnd constrainServer(
+ MailboxBackEnd server,
+ MethodConstraints methodConstraints)
+ {
+ return (MailboxBackEnd)
+ ((RemoteMethodControl)server).setConstraints(
+ ConstrainableProxyUtil.translateConstraints(
+ methodConstraints, methodMap1));
+ }
+ /** {@inheritDoc} */
+ public RemoteMethodControl setConstraints(
+ MethodConstraints constraints)
+ {
+ return new ConstrainableRegistration(registrationID, mailbox, lease,
+ constraints);
+ }
+
+ /** {@inheritDoc} */
+ public MethodConstraints getConstraints() {
+ return methodConstraints;
+ }
+
+ /* Note that the superclass's hashCode method is OK as is. */
+ /* Note that the superclass's equals method is OK as is. */
+
+ /* Note that the superclass's hashCode method is OK as is. */
+ /**
+ * Returns a proxy trust iterator that is used in
+ * <code>ProxyTrustVerifier</code> to retrieve this object's
+ * trust verifier.
+ */
+ private ProxyTrustIterator getProxyTrustIterator() {
+ return new SingletonProxyTrustIterator(mailbox);
+ }//end getProxyTrustIterator
+
+ /**
+ * Verifies that the registrationID, lease and mailbox fields are
+ * not null, that mailbox implements RemoteMethodControl, and that the
+ * mailbox proxy has the appropriate method constraints.
+ *
+ * @throws InvalidObjectException if registrationID, lease or mailbox
+ * is null, if mailbox does not implement RemoteMethodControl,
+ * or if server has the wrong constraints
+ */
+ private void readObject(ObjectInputStream s)
+ throws IOException, ClassNotFoundException
+ {
+ /* Note that basic validation of the fields of this class was
+ * already performed in the readObject() method of this class'
+ * super class.
+ */
+ s.defaultReadObject();
+ /* Verify the server and its constraints */
+ ConstrainableProxyUtil.verifyConsistentConstraints(methodConstraints,
+ mailbox,
+ methodMap1);
+ if( !(lease instanceof ConstrainableLandlordLease) ) {
+ throw new InvalidObjectException
+ ("Registration.readObject failure - "
+ +"lease is not an instance of "
+ +"ConstrainableLandlordLease");
+ }//endif
+
+ if( !(listener instanceof ListenerProxy.ConstrainableListenerProxy) ) {
+ throw new InvalidObjectException
+ ("Registration.readObject failure - "
+ +"listener is not an instance of "
+ +"ListenerProxy.ConstrainableListenerProxy");
+ }//endif
+
+ /* Verify listener's ID */
+ if(registrationID !=
+ ((ListenerProxy.ConstrainableListenerProxy)listener).registrationID)
+ {
+ throw new InvalidObjectException
+ ("Registration.readObject "
+ +"failure - listener ID "
+ +"is not equal to "
+ +"proxy ID");
+ }
+ }
+ }
+}
Modified: river/jtsk/modules/modularize/apache-river/river-services/mercury/mercury-dl/src/main/java/org/apache/river/mercury/proxy/RemoteEventData.java
URL: http://svn.apache.org/viewvc/river/jtsk/modules/modularize/apache-river/river-services/mercury/mercury-dl/src/main/java/org/apache/river/mercury/proxy/RemoteEventData.java?rev=1879521&r1=1879520&r2=1879521&view=diff
==============================================================================
--- river/jtsk/modules/modularize/apache-river/river-services/mercury/mercury-dl/src/main/java/org/apache/river/mercury/proxy/RemoteEventData.java (original)
+++ river/jtsk/modules/modularize/apache-river/river-services/mercury/mercury-dl/src/main/java/org/apache/river/mercury/proxy/RemoteEventData.java Sun Jul 5 11:41:39 2020
@@ -1,114 +1,114 @@
-/*
- * 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 org.apache.river.mercury;
-
-import org.apache.river.proxy.MarshalledWrapper;
-
-import java.io.InvalidObjectException;
-import java.io.IOException;
-import java.io.ObjectInputStream;
-import java.io.Serializable;
-import java.util.Collection;
-
-import net.jini.core.event.RemoteEvent;
-import net.jini.id.Uuid;
-import net.jini.io.MarshalledInstance;
-
-/**
- * Simple struct to hold a <code>RemoteEvent</code> and its associated
- * <code>Object</code> (cookie) obtained from an <code>EventLog</code>.
- */
-class RemoteEventData implements Serializable {
- private static final long serialVersionUID = 1L;
-
- /**
- * <code>MarshalledObject</code> that holds desired
- * <code>RemoteEvent</code>. Wrapping the remote event
- * permits deserialization to occur on demand on the
- * client-side.
- */
- private MarshalledInstance mi;
-
- /** Cookie associated with the <code>RemoteEvent</code> */
- private final Object cookie;
-
- /**
- * <code>true</code> if the last time this object was unmarshalled
- * integrity was being enforced, <code>false</code> otherwise.
- */
- private transient boolean integrity;
-
- /**
- * Creates a new RemoteEventData instance.
- * @param re value of <code>re</code> field.
- * @param cookie value of <code>cookie</code> field.
- */
- RemoteEventData(RemoteEvent re, Object cookie) {
- try {
- mi = (re==null)?null:new MarshalledInstance(re);
- } catch (IOException ioe) {
- mi = null;
- }
- this.cookie = cookie;
- }
-
- public RemoteEvent getRemoteEvent() throws ClassNotFoundException {
- if (mi == null)
- throw new ClassNotFoundException(
- "Failed to create server-side remote event");
- RemoteEvent re = null;
- try {
- re = (RemoteEvent)mi.get(integrity);
- } catch (IOException ioe) {
- throw new ClassNotFoundException(
- "Failed to create client-side remote event", ioe);
- }
- return re;
- }
-
- public Object getCookie() {
- return cookie;
- }
-
- /**
- * Use <code>readObject</code> method to capture whether or
- * not integrity was being enforced when this object was
- * unmarshalled, and to perform basic integrity checks.
- */
- private void readObject(ObjectInputStream in)
- throws IOException, ClassNotFoundException
- {
- in.defaultReadObject();
-
- if (cookie == null)
- throw new InvalidObjectException("null cookie");
-
- // get value for integrity flag
- integrity = MarshalledWrapper.integrityEnforced(in);
- }
-
- /**
- * We should always have data in the stream, if this method
- * gets called there is something wrong.
- */
- private void readObjectNoData() throws InvalidObjectException {
- throw new
- InvalidObjectException("RemoteEventData should always have data");
- }
-
-}
+/*
+ * 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 org.apache.river.mercury.proxy;
+
+import org.apache.river.proxy.MarshalledWrapper;
+
+import java.io.InvalidObjectException;
+import java.io.IOException;
+import java.io.ObjectInputStream;
+import java.io.Serializable;
+import java.util.Collection;
+
+import net.jini.core.event.RemoteEvent;
+import net.jini.id.Uuid;
+import net.jini.io.MarshalledInstance;
+
+/**
+ * Simple struct to hold a <code>RemoteEvent</code> and its associated
+ * <code>Object</code> (cookie) obtained from an <code>EventLog</code>.
+ */
+public class RemoteEventData implements Serializable {
+ private static final long serialVersionUID = 1L;
+
+ /**
+ * <code>MarshalledObject</code> that holds desired
+ * <code>RemoteEvent</code>. Wrapping the remote event
+ * permits deserialization to occur on demand on the
+ * client-side.
+ */
+ private MarshalledInstance mi;
+
+ /** Cookie associated with the <code>RemoteEvent</code> */
+ private final Object cookie;
+
+ /**
+ * <code>true</code> if the last time this object was unmarshalled
+ * integrity was being enforced, <code>false</code> otherwise.
+ */
+ private transient boolean integrity;
+
+ /**
+ * Creates a new RemoteEventData instance.
+ * @param re value of <code>re</code> field.
+ * @param cookie value of <code>cookie</code> field.
+ */
+ public RemoteEventData(RemoteEvent re, Object cookie) {
+ try {
+ mi = (re==null)?null:new MarshalledInstance(re);
+ } catch (IOException ioe) {
+ mi = null;
+ }
+ this.cookie = cookie;
+ }
+
+ public RemoteEvent getRemoteEvent() throws ClassNotFoundException {
+ if (mi == null)
+ throw new ClassNotFoundException(
+ "Failed to create server-side remote event");
+ RemoteEvent re = null;
+ try {
+ re = (RemoteEvent)mi.get(integrity);
+ } catch (IOException ioe) {
+ throw new ClassNotFoundException(
+ "Failed to create client-side remote event", ioe);
+ }
+ return re;
+ }
+
+ public Object getCookie() {
+ return cookie;
+ }
+
+ /**
+ * Use <code>readObject</code> method to capture whether or
+ * not integrity was being enforced when this object was
+ * unmarshalled, and to perform basic integrity checks.
+ */
+ private void readObject(ObjectInputStream in)
+ throws IOException, ClassNotFoundException
+ {
+ in.defaultReadObject();
+
+ if (cookie == null)
+ throw new InvalidObjectException("null cookie");
+
+ // get value for integrity flag
+ integrity = MarshalledWrapper.integrityEnforced(in);
+ }
+
+ /**
+ * We should always have data in the stream, if this method
+ * gets called there is something wrong.
+ */
+ private void readObjectNoData() throws InvalidObjectException {
+ throw new
+ InvalidObjectException("RemoteEventData should always have data");
+ }
+
+}