Modified: river/jtsk/modules/modularize/apache-river/river-services/norm/norm-dl/src/main/java/org/apache/river/norm/proxy/NormProxy.java URL: http://svn.apache.org/viewvc/river/jtsk/modules/modularize/apache-river/river-services/norm/norm-dl/src/main/java/org/apache/river/norm/proxy/NormProxy.java?rev=1879521&r1=1879520&r2=1879521&view=diff ============================================================================== --- river/jtsk/modules/modularize/apache-river/river-services/norm/norm-dl/src/main/java/org/apache/river/norm/proxy/NormProxy.java (original) +++ river/jtsk/modules/modularize/apache-river/river-services/norm/norm-dl/src/main/java/org/apache/river/norm/proxy/NormProxy.java Sun Jul 5 11:41:39 2020 @@ -1,133 +1,133 @@ -/* - * 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.norm; - -import java.io.IOException; -import java.io.InvalidObjectException; -import java.io.ObjectInputStream; -import java.rmi.RemoteException; -import net.jini.admin.Administrable; -import net.jini.core.constraint.MethodConstraints; -import net.jini.core.constraint.RemoteMethodControl; -import net.jini.id.Uuid; -import net.jini.lease.LeaseRenewalService; -import net.jini.lease.LeaseRenewalSet; -import net.jini.security.proxytrust.ProxyTrustIterator; -import net.jini.security.proxytrust.SingletonProxyTrustIterator; - -/** - * Defines a client-side proxy for a Norm server. - * - * @author Sun Microsystems, Inc. - * @since 2.0 - */ -class NormProxy extends AbstractProxy - implements LeaseRenewalService, Administrable -{ - private static final long serialVersionUID = 1; - - /** - * Creates a Norm server proxy, returning an instance that implements - * RemoteMethodControl if the server does. - * - * @param server the server - * @param serverUuid the unique ID for the server - */ - static NormProxy create(NormServer server, Uuid serverUuid) { - if (server instanceof RemoteMethodControl) { - return new ConstrainableNormProxy(server, serverUuid); - } else { - return new NormProxy(server, serverUuid); - } - } - - /** Creates an instance of this class. */ - NormProxy(NormServer server, Uuid serverUuid) { - super(server, serverUuid); - } - - /** Require fields to be non-null. */ - private void readObjectNoData() throws InvalidObjectException { - throw new InvalidObjectException( - "server and uuid must be non-null"); - } - - /* -- Implement LeaseRenewalService -- */ - - /** inherit javadoc */ - public LeaseRenewalSet createLeaseRenewalSet(long leaseDuration) - throws RemoteException - { - return server.createLeaseRenewalSet(leaseDuration); - } - - /* -- Implement Administrable -- */ - - /** inherit javadoc */ - public Object getAdmin() throws RemoteException { - return server.getAdmin(); - } - - /** Defines a subclass of NormProxy that implements RemoteMethodControl. */ - static final class ConstrainableNormProxy extends NormProxy - implements RemoteMethodControl - { - private static final long serialVersionUID = 1; - - /** Creates an instance of this class. */ - ConstrainableNormProxy(NormServer server, Uuid serverUuid) { - super(server, serverUuid); - if (!(server instanceof RemoteMethodControl)) { - throw new IllegalArgumentException( - "server must implement RemoteMethodControl"); - } - } - - /** Require server to implement RemoteMethodControl. */ - private void readObject(ObjectInputStream in) - throws IOException, ClassNotFoundException - { - in.defaultReadObject(); - if (!(server instanceof RemoteMethodControl)) { - throw new InvalidObjectException( - "server must implement RemoteMethodControl"); - } - } - - /* inherit javadoc */ - public RemoteMethodControl setConstraints( - MethodConstraints constraints) - { - NormServer constrainedServer = (NormServer) - ((RemoteMethodControl) server).setConstraints(constraints); - return new ConstrainableNormProxy(constrainedServer, uuid); - } - - /* inherit javadoc */ - public MethodConstraints getConstraints() { - return ((RemoteMethodControl) server).getConstraints(); - } - - /** - * Returns a proxy trust iterator that yields this object's server. - */ - private ProxyTrustIterator getProxyTrustIterator() { - return new SingletonProxyTrustIterator(server); - } - } -} +/* + * 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.norm.proxy; + +import java.io.IOException; +import java.io.InvalidObjectException; +import java.io.ObjectInputStream; +import java.rmi.RemoteException; +import net.jini.admin.Administrable; +import net.jini.core.constraint.MethodConstraints; +import net.jini.core.constraint.RemoteMethodControl; +import net.jini.id.Uuid; +import net.jini.lease.LeaseRenewalService; +import net.jini.lease.LeaseRenewalSet; +import net.jini.security.proxytrust.ProxyTrustIterator; +import net.jini.security.proxytrust.SingletonProxyTrustIterator; + +/** + * Defines a client-side proxy for a Norm server. + * + * @author Sun Microsystems, Inc. + * @since 2.0 + */ +public class NormProxy extends AbstractProxy + implements LeaseRenewalService, Administrable +{ + private static final long serialVersionUID = 1; + + /** + * Creates a Norm server proxy, returning an instance that implements + * RemoteMethodControl if the server does. + * + * @param server the server + * @param serverUuid the unique ID for the server + */ + public static NormProxy create(NormServer server, Uuid serverUuid) { + if (server instanceof RemoteMethodControl) { + return new ConstrainableNormProxy(server, serverUuid); + } else { + return new NormProxy(server, serverUuid); + } + } + + /** Creates an instance of this class. */ + NormProxy(NormServer server, Uuid serverUuid) { + super(server, serverUuid); + } + + /** Require fields to be non-null. */ + private void readObjectNoData() throws InvalidObjectException { + throw new InvalidObjectException( + "server and uuid must be non-null"); + } + + /* -- Implement LeaseRenewalService -- */ + + /** inherit javadoc */ + public LeaseRenewalSet createLeaseRenewalSet(long leaseDuration) + throws RemoteException + { + return server.createLeaseRenewalSet(leaseDuration); + } + + /* -- Implement Administrable -- */ + + /** inherit javadoc */ + public Object getAdmin() throws RemoteException { + return server.getAdmin(); + } + + /** Defines a subclass of NormProxy that implements RemoteMethodControl. */ + static final class ConstrainableNormProxy extends NormProxy + implements RemoteMethodControl + { + private static final long serialVersionUID = 1; + + /** Creates an instance of this class. */ + ConstrainableNormProxy(NormServer server, Uuid serverUuid) { + super(server, serverUuid); + if (!(server instanceof RemoteMethodControl)) { + throw new IllegalArgumentException( + "server must implement RemoteMethodControl"); + } + } + + /** Require server to implement RemoteMethodControl. */ + private void readObject(ObjectInputStream in) + throws IOException, ClassNotFoundException + { + in.defaultReadObject(); + if (!(server instanceof RemoteMethodControl)) { + throw new InvalidObjectException( + "server must implement RemoteMethodControl"); + } + } + + /* inherit javadoc */ + public RemoteMethodControl setConstraints( + MethodConstraints constraints) + { + NormServer constrainedServer = (NormServer) + ((RemoteMethodControl) server).setConstraints(constraints); + return new ConstrainableNormProxy(constrainedServer, uuid); + } + + /* inherit javadoc */ + public MethodConstraints getConstraints() { + return ((RemoteMethodControl) server).getConstraints(); + } + + /** + * Returns a proxy trust iterator that yields this object's server. + */ + private ProxyTrustIterator getProxyTrustIterator() { + return new SingletonProxyTrustIterator(server); + } + } +}
Modified: river/jtsk/modules/modularize/apache-river/river-services/norm/norm-dl/src/main/java/org/apache/river/norm/proxy/NormServer.java URL: http://svn.apache.org/viewvc/river/jtsk/modules/modularize/apache-river/river-services/norm/norm-dl/src/main/java/org/apache/river/norm/proxy/NormServer.java?rev=1879521&r1=1879520&r2=1879521&view=diff ============================================================================== --- river/jtsk/modules/modularize/apache-river/river-services/norm/norm-dl/src/main/java/org/apache/river/norm/proxy/NormServer.java (original) +++ river/jtsk/modules/modularize/apache-river/river-services/norm/norm-dl/src/main/java/org/apache/river/norm/proxy/NormServer.java Sun Jul 5 11:41:39 2020 @@ -1,140 +1,140 @@ -/* - * 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.norm; - -import java.rmi.MarshalledObject; -import java.rmi.Remote; -import java.rmi.RemoteException; - -import net.jini.admin.Administrable; -import net.jini.admin.JoinAdmin; -import net.jini.core.event.EventRegistration; -import net.jini.core.event.RemoteEventListener; -import net.jini.core.lease.Lease; -import net.jini.id.Uuid; -import net.jini.io.MarshalledInstance; -import net.jini.lease.LeaseRenewalService; - -import org.apache.river.admin.DestroyAdmin; -import org.apache.river.landlord.Landlord; -import org.apache.river.proxy.ThrowThis; -import org.apache.river.start.ServiceProxyAccessor; - -/** - * This interface is the private wire protocol to that the various - * proxy objects created by a Norm server (the lease renewal service - * itself, sets, leases, admins, etc.) use to communicate back to the - * server. - * - * @author Sun Microsystems, Inc. - */ -interface NormServer extends Landlord, LeaseRenewalService, - Administrable, JoinAdmin, DestroyAdmin, ServiceProxyAccessor, Remote -{ - /** - * If calling <code>setExpirationWarningListener</code> with a - * <code>null</code> listener, this is the value that should be passed. - */ - final static long NO_LISTENER = -1; - - /** - * Add a lease to a set. - * - * @param id what set the lease should be added to - * @param leaseToRenew the lease to be added to the set - * @param membershipDuration how long the lease should be in the set - * @param renewDuration how long the lease should be renewed for - * each time it is renewed - * @throws ThrowThis when another exception has to be thrown by the proxy - * @throws RemoteException if a communication-related exception occurs - */ - public void renewFor(Uuid id, Lease leaseToRenew, - long membershipDuration, long renewDuration) - throws RemoteException, ThrowThis; - - /** - * Remove a lease from a set. - * - * @param id of set being operated on - * @param leaseToRemove the lease to be removed from the set - * @throws ThrowThis when another exception has to be thrown by the proxy - * @throws RemoteException if a communication-related exception occurs - */ - public Lease remove(Uuid id, Lease leaseToRemove) - throws RemoteException, ThrowThis; - - /** - * Return all the leases in the set. Returns <code>null</code> - * or a zero-length array if there are no leases in the set. - * - * @param id of set being operated on - * @return an object containing an array of {@link MarshalledInstance}s, - * one for each lease - * @throws ThrowThis when another exception has to be thrown by the proxy - * @throws RemoteException if a communication-related exception occurs - */ - public GetLeasesResult getLeases(Uuid id) - throws RemoteException, ThrowThis; - - /** - * Set the expiration warning listener for a set. Also used to - * cancel a registration. - * - * @param id of set being operated on - * @param listener listener to be notified when this event occurs. - * Pass <code>null</code> to clear the registration. - * @param minWarning how long be for the lease on the set expires - * should the event be sent. Ignored if <code>listener</code> - * is <code>null</code>. - * @param handback an object to be handed back to the listener when - * the warning event occurs. Ignored if <code>listener</code> - * is <code>null</code>. - * @return an <code>EventRegistration</code> object for the new - * registration if <code>listener</code> is - * non-<code>null</code> and <code>null</code> otherwise - * @throws ThrowThis when another exception has to be thrown by the proxy - * @throws RemoteException if a communication-related exception occurs - */ - public EventRegistration setExpirationWarningListener( - Uuid id, - RemoteEventListener listener, - long minWarning, - MarshalledObject handback) - throws RemoteException, ThrowThis; - - /** - * Set the renewal failure listener for a set. Also used to - * cancel a registration. - * @param id of set being operated on - * @param listener listener to be notified when this event occurs. - * Pass <code>null</code> to clear the registration. - * @param handback an object to be handed back to the listener when - * the failure event occurs. Ignored if - * <code>listener</code> is <code>null</code>. - * @return an <code>EventRegistration</code> object for the new - * registration if <code>listener</code> is - * non-<code>null</code> and <code>null</code> otherwise. - * @throws ThrowThis when another exception has to be thrown by the proxy - * @throws RemoteException if a communication-related exception occurs - */ - public EventRegistration setRenewalFailureListener( - Uuid id, - RemoteEventListener listener, - MarshalledObject handback) - throws RemoteException, ThrowThis; -} +/* + * 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.norm.proxy; + +import java.rmi.MarshalledObject; +import java.rmi.Remote; +import java.rmi.RemoteException; + +import net.jini.admin.Administrable; +import net.jini.admin.JoinAdmin; +import net.jini.core.event.EventRegistration; +import net.jini.core.event.RemoteEventListener; +import net.jini.core.lease.Lease; +import net.jini.id.Uuid; +import net.jini.io.MarshalledInstance; +import net.jini.lease.LeaseRenewalService; + +import org.apache.river.admin.DestroyAdmin; +import org.apache.river.landlord.Landlord; +import org.apache.river.proxy.ThrowThis; +import org.apache.river.start.moveMe.ServiceProxyAccessor; + +/** + * This interface is the private wire protocol to that the various + * proxy objects created by a Norm server (the lease renewal service + * itself, sets, leases, admins, etc.) use to communicate back to the + * server. + * + * @author Sun Microsystems, Inc. + */ +public interface NormServer extends Landlord, LeaseRenewalService, + Administrable, JoinAdmin, DestroyAdmin, ServiceProxyAccessor, Remote +{ + /** + * If calling <code>setExpirationWarningListener</code> with a + * <code>null</code> listener, this is the value that should be passed. + */ + final static long NO_LISTENER = -1; + + /** + * Add a lease to a set. + * + * @param id what set the lease should be added to + * @param leaseToRenew the lease to be added to the set + * @param membershipDuration how long the lease should be in the set + * @param renewDuration how long the lease should be renewed for + * each time it is renewed + * @throws ThrowThis when another exception has to be thrown by the proxy + * @throws RemoteException if a communication-related exception occurs + */ + public void renewFor(Uuid id, Lease leaseToRenew, + long membershipDuration, long renewDuration) + throws RemoteException, ThrowThis; + + /** + * Remove a lease from a set. + * + * @param id of set being operated on + * @param leaseToRemove the lease to be removed from the set + * @throws ThrowThis when another exception has to be thrown by the proxy + * @throws RemoteException if a communication-related exception occurs + */ + public Lease remove(Uuid id, Lease leaseToRemove) + throws RemoteException, ThrowThis; + + /** + * Return all the leases in the set. Returns <code>null</code> + * or a zero-length array if there are no leases in the set. + * + * @param id of set being operated on + * @return an object containing an array of {@link MarshalledInstance}s, + * one for each lease + * @throws ThrowThis when another exception has to be thrown by the proxy + * @throws RemoteException if a communication-related exception occurs + */ + public GetLeasesResult getLeases(Uuid id) + throws RemoteException, ThrowThis; + + /** + * Set the expiration warning listener for a set. Also used to + * cancel a registration. + * + * @param id of set being operated on + * @param listener listener to be notified when this event occurs. + * Pass <code>null</code> to clear the registration. + * @param minWarning how long be for the lease on the set expires + * should the event be sent. Ignored if <code>listener</code> + * is <code>null</code>. + * @param handback an object to be handed back to the listener when + * the warning event occurs. Ignored if <code>listener</code> + * is <code>null</code>. + * @return an <code>EventRegistration</code> object for the new + * registration if <code>listener</code> is + * non-<code>null</code> and <code>null</code> otherwise + * @throws ThrowThis when another exception has to be thrown by the proxy + * @throws RemoteException if a communication-related exception occurs + */ + public EventRegistration setExpirationWarningListener( + Uuid id, + RemoteEventListener listener, + long minWarning, + MarshalledObject handback) + throws RemoteException, ThrowThis; + + /** + * Set the renewal failure listener for a set. Also used to + * cancel a registration. + * @param id of set being operated on + * @param listener listener to be notified when this event occurs. + * Pass <code>null</code> to clear the registration. + * @param handback an object to be handed back to the listener when + * the failure event occurs. Ignored if + * <code>listener</code> is <code>null</code>. + * @return an <code>EventRegistration</code> object for the new + * registration if <code>listener</code> is + * non-<code>null</code> and <code>null</code> otherwise. + * @throws ThrowThis when another exception has to be thrown by the proxy + * @throws RemoteException if a communication-related exception occurs + */ + public EventRegistration setRenewalFailureListener( + Uuid id, + RemoteEventListener listener, + MarshalledObject handback) + throws RemoteException, ThrowThis; +} Modified: river/jtsk/modules/modularize/apache-river/river-services/norm/norm-dl/src/main/java/org/apache/river/norm/proxy/ProxyVerifier.java URL: http://svn.apache.org/viewvc/river/jtsk/modules/modularize/apache-river/river-services/norm/norm-dl/src/main/java/org/apache/river/norm/proxy/ProxyVerifier.java?rev=1879521&r1=1879520&r2=1879521&view=diff ============================================================================== --- river/jtsk/modules/modularize/apache-river/river-services/norm/norm-dl/src/main/java/org/apache/river/norm/proxy/ProxyVerifier.java (original) +++ river/jtsk/modules/modularize/apache-river/river-services/norm/norm-dl/src/main/java/org/apache/river/norm/proxy/ProxyVerifier.java Sun Jul 5 11:41:39 2020 @@ -1,124 +1,124 @@ -/* - * 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.norm; - -import org.apache.river.landlord.ConstrainableLandlordLease; -import org.apache.river.landlord.Landlord; -import org.apache.river.landlord.LandlordProxyVerifier; -import java.io.IOException; -import java.io.InvalidObjectException; -import java.io.ObjectInputStream; -import java.io.Serializable; -import java.rmi.RemoteException; -import net.jini.core.constraint.MethodConstraints; -import net.jini.core.constraint.RemoteMethodControl; -import net.jini.id.Uuid; -import net.jini.security.TrustVerifier; -import net.jini.security.proxytrust.TrustEquivalence; - -/** Defines a trust verifier for the smart proxies of a Norm server. */ -final class ProxyVerifier implements Serializable, TrustVerifier { - private static final long serialVersionUID = 2; - - /** - * The Norm server proxy. - * - * @serial - */ - private final RemoteMethodControl serverProxy; - - /** - * The unique ID for the Norm server. - * - * @serial - */ - private final Uuid serverUuid; - - /** - * Returns a verifier for the smart proxies of a Norm server with the - * specified proxy and unique ID. - * - * @param serverProxy the Norm server proxy - * @param serverUuid the unique ID for the Norm server - * @throws UnsupportedOperationException if <code>serverProxy</code> does - * not implement both {@link RemoteMethodControl} and {@link - * TrustEquivalence} - */ - ProxyVerifier(NormServer serverProxy, Uuid serverUuid) { - if (!(serverProxy instanceof RemoteMethodControl)) { - throw new UnsupportedOperationException( - "Verifier requires service proxy to implement " + - "RemoteMethodControl"); - } else if (!(serverProxy instanceof TrustEquivalence)) { - throw new UnsupportedOperationException( - "Verifier requires service proxy to implement " + - "TrustEquivalence"); - } - this.serverProxy = (RemoteMethodControl) serverProxy; - this.serverUuid = serverUuid; - } - - /** - * @throws NullPointerException {@inheritDoc} - */ - public boolean isTrustedObject(Object obj, TrustVerifier.Context ctx) - throws RemoteException - { - if (obj == null || ctx == null) { - throw new NullPointerException("Arguments must not be null"); - } else if (obj instanceof ConstrainableLandlordLease) { - return new LandlordProxyVerifier( - (Landlord) serverProxy, serverUuid).isTrustedObject(obj, ctx); - } - RemoteMethodControl otherServerProxy; - if (obj instanceof SetProxy.ConstrainableSetProxy) { - if (!isTrustedObject(((SetProxy) obj).getRenewalSetLease(), ctx)) { - return false; - } - otherServerProxy = - (RemoteMethodControl) ((AbstractProxy) obj).server; - } else if (obj instanceof AdminProxy.ConstrainableAdminProxy || - obj instanceof NormProxy.ConstrainableNormProxy) - { - if (!serverUuid.equals(((AbstractProxy) obj).uuid)) { - return false; - } - otherServerProxy = - (RemoteMethodControl) ((AbstractProxy) obj).server; - } else if (obj instanceof RemoteMethodControl) { - otherServerProxy = (RemoteMethodControl) obj; - } else { - return false; - } - MethodConstraints mc = otherServerProxy.getConstraints(); - TrustEquivalence trusted = - (TrustEquivalence) serverProxy.setConstraints(mc); - return trusted.checkTrustEquivalence(otherServerProxy); - } - - /** Require server proxy to implement TrustEquivalence. */ - private void readObject(ObjectInputStream in) - throws IOException, ClassNotFoundException - { - in.defaultReadObject(); - if (!(serverProxy instanceof TrustEquivalence)) { - throw new InvalidObjectException( - "serverProxy must implement TrustEquivalence"); - } - } -} +/* + * 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.norm.proxy; + +import org.apache.river.landlord.ConstrainableLandlordLease; +import org.apache.river.landlord.Landlord; +import org.apache.river.landlord.LandlordProxyVerifier; +import java.io.IOException; +import java.io.InvalidObjectException; +import java.io.ObjectInputStream; +import java.io.Serializable; +import java.rmi.RemoteException; +import net.jini.core.constraint.MethodConstraints; +import net.jini.core.constraint.RemoteMethodControl; +import net.jini.id.Uuid; +import net.jini.security.TrustVerifier; +import net.jini.security.proxytrust.TrustEquivalence; + +/** Defines a trust verifier for the smart proxies of a Norm server. */ +public final class ProxyVerifier implements Serializable, TrustVerifier { + private static final long serialVersionUID = 2; + + /** + * The Norm server proxy. + * + * @serial + */ + private final RemoteMethodControl serverProxy; + + /** + * The unique ID for the Norm server. + * + * @serial + */ + private final Uuid serverUuid; + + /** + * Returns a verifier for the smart proxies of a Norm server with the + * specified proxy and unique ID. + * + * @param serverProxy the Norm server proxy + * @param serverUuid the unique ID for the Norm server + * @throws UnsupportedOperationException if <code>serverProxy</code> does + * not implement both {@link RemoteMethodControl} and {@link + * TrustEquivalence} + */ + public ProxyVerifier(NormServer serverProxy, Uuid serverUuid) { + if (!(serverProxy instanceof RemoteMethodControl)) { + throw new UnsupportedOperationException( + "Verifier requires service proxy to implement " + + "RemoteMethodControl"); + } else if (!(serverProxy instanceof TrustEquivalence)) { + throw new UnsupportedOperationException( + "Verifier requires service proxy to implement " + + "TrustEquivalence"); + } + this.serverProxy = (RemoteMethodControl) serverProxy; + this.serverUuid = serverUuid; + } + + /** + * @throws NullPointerException {@inheritDoc} + */ + public boolean isTrustedObject(Object obj, TrustVerifier.Context ctx) + throws RemoteException + { + if (obj == null || ctx == null) { + throw new NullPointerException("Arguments must not be null"); + } else if (obj instanceof ConstrainableLandlordLease) { + return new LandlordProxyVerifier( + (Landlord) serverProxy, serverUuid).isTrustedObject(obj, ctx); + } + RemoteMethodControl otherServerProxy; + if (obj instanceof SetProxy.ConstrainableSetProxy) { + if (!isTrustedObject(((SetProxy) obj).getRenewalSetLease(), ctx)) { + return false; + } + otherServerProxy = + (RemoteMethodControl) ((AbstractProxy) obj).server; + } else if (obj instanceof AdminProxy.ConstrainableAdminProxy || + obj instanceof NormProxy.ConstrainableNormProxy) + { + if (!serverUuid.equals(((AbstractProxy) obj).uuid)) { + return false; + } + otherServerProxy = + (RemoteMethodControl) ((AbstractProxy) obj).server; + } else if (obj instanceof RemoteMethodControl) { + otherServerProxy = (RemoteMethodControl) obj; + } else { + return false; + } + MethodConstraints mc = otherServerProxy.getConstraints(); + TrustEquivalence trusted = + (TrustEquivalence) serverProxy.setConstraints(mc); + return trusted.checkTrustEquivalence(otherServerProxy); + } + + /** Require server proxy to implement TrustEquivalence. */ + private void readObject(ObjectInputStream in) + throws IOException, ClassNotFoundException + { + in.defaultReadObject(); + if (!(serverProxy instanceof TrustEquivalence)) { + throw new InvalidObjectException( + "serverProxy must implement TrustEquivalence"); + } + } +} Modified: river/jtsk/modules/modularize/apache-river/river-services/norm/norm-dl/src/main/java/org/apache/river/norm/proxy/SetProxy.java URL: http://svn.apache.org/viewvc/river/jtsk/modules/modularize/apache-river/river-services/norm/norm-dl/src/main/java/org/apache/river/norm/proxy/SetProxy.java?rev=1879521&r1=1879520&r2=1879521&view=diff ============================================================================== --- river/jtsk/modules/modularize/apache-river/river-services/norm/norm-dl/src/main/java/org/apache/river/norm/proxy/SetProxy.java (original) +++ river/jtsk/modules/modularize/apache-river/river-services/norm/norm-dl/src/main/java/org/apache/river/norm/proxy/SetProxy.java Sun Jul 5 11:41:39 2020 @@ -1,460 +1,460 @@ -/* - * 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.norm; - -import java.io.IOException; -import java.io.InvalidObjectException; -import java.io.ObjectInputStream; -import java.lang.reflect.Method; -import java.rmi.MarshalledObject; -import java.rmi.RemoteException; -import java.util.LinkedList; -import java.util.List; - -import net.jini.core.constraint.MethodConstraints; -import net.jini.core.constraint.RemoteMethodControl; -import net.jini.core.event.EventRegistration; -import net.jini.core.event.RemoteEventListener; -import net.jini.core.lease.Lease; -import net.jini.id.Uuid; -import net.jini.io.MarshalledInstance; -import net.jini.lease.LeaseRenewalSet; -import net.jini.lease.LeaseUnmarshalException; -import net.jini.security.proxytrust.ProxyTrustIterator; -import net.jini.security.proxytrust.SingletonProxyTrustIterator; - -import org.apache.river.landlord.ConstrainableLandlordLease; -import org.apache.river.proxy.ConstrainableProxyUtil; -import org.apache.river.proxy.ThrowThis; - -/** - * Client side proxy for Norm's lease renewal sets. Uses an object of - * type NormServer to communicate back to server. - * - * @author Sun Microsystems, Inc. - */ -class SetProxy extends AbstractProxy implements LeaseRenewalSet { - private static final long serialVersionUID = 2; - - /** - * Lease for this set. - * @serial - */ - final Lease ourLease; - - /** - * Creates a lease set proxy, returning an instance that implements - * RemoteMethodControl if the server does. - * - * @param server the server proxy - * @param id the ID of the lease set - * @param lease the lease set's lease - */ - static SetProxy create(NormServer server, Uuid id, Lease lease) { - if (server instanceof RemoteMethodControl) { - return new ConstrainableSetProxy(server, id, lease, null); - } else { - return new SetProxy(server, id, lease); - } - } - - /** Simple constructor. */ - private SetProxy(NormServer server, Uuid id, Lease lease) { - super(server, id); - if (lease == null) { - throw new NullPointerException("lease cannot be null"); - } - ourLease = lease; - } - - /** Require fields to be non-null. */ - private void readObjectNoData() throws InvalidObjectException { - throw new InvalidObjectException( - "server, uuid, and ourLease must be non-null"); - } - - /** Require lease to be non-null. */ - private void readObject(ObjectInputStream in) - throws IOException, ClassNotFoundException - { - in.defaultReadObject(); - if (ourLease == null) { - throw new InvalidObjectException("ourLease cannot be null"); - } - } - - /* -- Implement LeaseRenewalSet -- */ - - // Inherit java doc from super type - public void renewFor(Lease leaseToRenew, long membershipDuration) - throws RemoteException - { - try { - server2().renewFor(uuid, leaseToRenew, membershipDuration, - Lease.FOREVER); - } catch (ThrowThis e) { - // The server wants to throw some remote exception - e.throwRemoteException(); - } - } - - // Inherit java doc from super type - public void renewFor(Lease leaseToRenew, long membershipDuration, - long renewDuration) - throws RemoteException - { - try { - server.renewFor(uuid, leaseToRenew, membershipDuration, - renewDuration); - } catch (ThrowThis e) { - // The server wants to throw some remote exception - e.throwRemoteException(); - } - } - - // Inherit java doc from super type - public Lease remove(Lease leaseToRemove) throws RemoteException { - try { - return server.remove(uuid, leaseToRemove); - } catch (ThrowThis e) { - // The server wants to throw some remote exception - e.throwRemoteException(); - // Need this because compiler does not know that - // throwRemoteException is not going to return - return null; - } - } - - // Inherit java doc from super type - public Lease[] getLeases() throws LeaseUnmarshalException, RemoteException - { - try { - GetLeasesResult result = server.getLeases(uuid); - MarshalledInstance mls[] = result.marshalledLeases; - - if (mls == null || mls.length == 0) - return new Lease[0]; - - final List leases = new LinkedList(); - final List problems = new LinkedList(); - final List exceptions = new LinkedList(); - for (int i=0; i<mls.length; i++) { - Lease l; - final MarshalledInstance ml = mls[i]; - try { - l = (Lease) ml.get(result.verifyCodebaseIntegrity()); - leases.add(l); - } catch (Throwable t) { - problems.add(ml.convertToMarshalledObject()); - exceptions.add(t); - } - } - - final Lease[] rslt = - (Lease[]) leases.toArray(new Lease[leases.size()]); - - if (problems.isEmpty()) - return rslt; - - final MarshalledObject sml[] = - (MarshalledObject[]) problems.toArray( - new MarshalledObject[problems.size()]); - final Throwable es[] = - (Throwable[]) exceptions.toArray( - new Throwable[exceptions.size()]); - - throw new LeaseUnmarshalException("Problem unmarshalling lease(s)", - rslt, sml, es); - - } catch (ThrowThis e) { - // The server wants to throw some remote exception - e.throwRemoteException(); - // Need this because compiler does not know that - // throwRemoteException is not going to return - return null; - } - } - - // Inherit java doc from super type - public EventRegistration setExpirationWarningListener( - RemoteEventListener listener, - long minWarning, - MarshalledObject handback) - throws RemoteException - { - // Do some client side error checking - if (listener == null) { - throw new NullPointerException( - "LeaseRenewalSet.setExpirationWarningListener:Must " + - "pass a non-null listener"); - } - - try { - return server.setExpirationWarningListener(uuid, - listener, minWarning, handback); - } catch (ThrowThis e) { - // The server wants to throw some remote exception - e.throwRemoteException(); - // Need this because compiler does not know that - // throwRemoteException is not going to return - return null; - } - } - - // Inherit java doc from super type - public void clearExpirationWarningListener() throws RemoteException { - try { - server2().setExpirationWarningListener( - uuid, null, NormServer.NO_LISTENER, null); - } catch (ThrowThis e) { - // The server wants to throw some remote exception - e.throwRemoteException(); - } - } - - // Inherit java doc from super type - public EventRegistration setRenewalFailureListener( - RemoteEventListener listener, - MarshalledObject handback) - throws RemoteException - { - // Do some client side error checking - if (listener == null) { - throw new NullPointerException( - "LeaseRenewalSet.setRenewalFailureListener:Must " + - "pass a non-null listener"); - } - - try { - return server.setRenewalFailureListener(uuid, listener, handback); - } catch (ThrowThis e) { - // The server wants to throw some remote exception - e.throwRemoteException(); - // Need this because compiler does not know that - // throwRemoteException is not going to return - return null; - } - } - - - // Inherit java doc from super type - public void clearRenewalFailureListener() throws RemoteException { - try { - server2().setRenewalFailureListener(uuid, null, null); - } catch (ThrowThis e) { - // The server wants to throw some remote exception - e.throwRemoteException(); - } - } - - /** - * Returns a second server proxy for use by methods that represent a second - * client-side method for a single server-side method. The distinction - * only matters for the constrainable subclass, where the different server - * proxies need different client constraints. - */ - NormServer server2() { - return server; - } - - // Inherit java doc from super type - public Lease getRenewalSetLease() { - return ourLease; - } - - /** Defines a subclass of SetProxy that implements RemoteMethodControl. */ - static final class ConstrainableSetProxy extends SetProxy - implements RemoteMethodControl - { - private static final long serialVersionUID = 1; - - /** - * Mappings from client to server methods, using the client method with - * more arguments for each server method when more than one client - * method maps to a single server method. - */ - private static final Method[] methodMap1; - static { - try { - methodMap1 = new Method[] { - LeaseRenewalSet.class.getMethod( - "renewFor", - new Class[] { Lease.class, long.class, long.class }), - NormServer.class.getMethod( - "renewFor", - new Class[] { Uuid.class, Lease.class, long.class, - long.class }), - LeaseRenewalSet.class.getMethod( - "remove", new Class[] { Lease.class }), - NormServer.class.getMethod( - "remove", - new Class[] { Uuid.class, Lease.class }), - LeaseRenewalSet.class.getMethod( - "getLeases", new Class[] { }), - NormServer.class.getMethod( - "getLeases", new Class[] { Uuid.class }), - LeaseRenewalSet.class.getMethod( - "setExpirationWarningListener", - new Class[] { RemoteEventListener.class, - long.class, MarshalledObject.class }), - NormServer.class.getMethod( - "setExpirationWarningListener", - new Class[] { Uuid.class, RemoteEventListener.class, - long.class, MarshalledObject.class }), - LeaseRenewalSet.class.getMethod( - "setRenewalFailureListener", - new Class[] { RemoteEventListener.class, - MarshalledObject.class }), - NormServer.class.getMethod( - "setRenewalFailureListener", - new Class[] { Uuid.class, RemoteEventListener.class, - MarshalledObject.class }) - }; - } catch (NoSuchMethodException e) { - throw new NoSuchMethodError(e.getMessage()); - } - } - - /** - * Second set of mappings from client to server method names, for - * server methods with a second associated client method. - */ - private static final Method[] methodMap2; - static { - try { - methodMap2 = new Method[] { - LeaseRenewalSet.class.getMethod( - "renewFor", - new Class[] { Lease.class, long.class }), - NormServer.class.getMethod( - "renewFor", - new Class[] { Uuid.class, Lease.class, long.class, - long.class } ), - LeaseRenewalSet.class.getMethod( - "clearExpirationWarningListener", new Class[] { }), - NormServer.class.getMethod( - "setExpirationWarningListener", - new Class[] { Uuid.class, RemoteEventListener.class, - long.class, MarshalledObject.class }), - LeaseRenewalSet.class.getMethod( - "clearRenewalFailureListener", new Class[] { }), - NormServer.class.getMethod( - "setRenewalFailureListener", - new Class[] { Uuid.class, RemoteEventListener.class, - MarshalledObject.class }) - }; - } catch (NoSuchMethodException e) { - throw new NoSuchMethodError(e.getMessage()); - } - } - - /** - * The client constraints placed on this proxy or <code>null</code>. - * - * @serial - */ - private MethodConstraints methodConstraints; - - /** - * A second inner proxy to use when the client constraints for - * different smart proxy methods implemented by the same inner proxy - * methods have different constraints. This proxy is used for the - * renewFor(Lease, long), clearExpirationWarningListener, and - * clearRenewalFailureListener methods. - */ - private transient NormServer server2; - - /** Creates an instance of this class. */ - ConstrainableSetProxy(NormServer server, - Uuid id, - Lease lease, - MethodConstraints methodConstraints) - { - super(constrainServer(server, methodConstraints, methodMap1), - id, lease); - if (!(lease instanceof ConstrainableLandlordLease)) { - throw new IllegalArgumentException( - "lease must be a ConstrainableLandlordLease"); - } - this.methodConstraints = methodConstraints; - server2 = constrainServer(server, methodConstraints, methodMap2); - } - - /** - * Verifies that ourLease is a ConstrainableLandlordLease, and that - * server implements RemoteMethodControl and has the appropriate method - * constraints. Also sets the server2 field. - */ - private void readObject(ObjectInputStream s) - throws IOException, ClassNotFoundException - { - s.defaultReadObject(); - if (!(server instanceof RemoteMethodControl)) { - throw new InvalidObjectException( - "server does not implement RemoteMethodControl"); - } else if (!(ourLease instanceof ConstrainableLandlordLease)) { - throw new InvalidObjectException( - "ourLease is not a ConstrainableLandlordLease"); - } - ConstrainableProxyUtil.verifyConsistentConstraints( - methodConstraints, server, methodMap1); - server2 = constrainServer(server, methodConstraints, methodMap2); - } - - - /** - * Returns a copy of the server proxy with the specified client - * constraints and methods mapping. - */ - private static NormServer constrainServer( - NormServer server, - MethodConstraints methodConstraints, - Method[] mappings) - { - return (NormServer) ((RemoteMethodControl) server).setConstraints( - ConstrainableProxyUtil.translateConstraints( - methodConstraints, mappings)); - } - - /** inherit javadoc */ - public RemoteMethodControl setConstraints( - MethodConstraints constraints) - { - return new ConstrainableSetProxy( - server, uuid, ourLease, constraints); - } - - /** inherit javadoc */ - public MethodConstraints getConstraints() { - return methodConstraints; - } - - /** Returns the second server proxy. */ - NormServer server2() { - return server2; - } - - /** - * Returns a proxy trust iterator that supplies the server, for use by - * ProxyTrustVerifier. - */ - private ProxyTrustIterator getProxyTrustIterator() { - return new SingletonProxyTrustIterator(server); - } - } -} +/* + * 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.norm.proxy; + +import java.io.IOException; +import java.io.InvalidObjectException; +import java.io.ObjectInputStream; +import java.lang.reflect.Method; +import java.rmi.MarshalledObject; +import java.rmi.RemoteException; +import java.util.LinkedList; +import java.util.List; + +import net.jini.core.constraint.MethodConstraints; +import net.jini.core.constraint.RemoteMethodControl; +import net.jini.core.event.EventRegistration; +import net.jini.core.event.RemoteEventListener; +import net.jini.core.lease.Lease; +import net.jini.id.Uuid; +import net.jini.io.MarshalledInstance; +import net.jini.lease.LeaseRenewalSet; +import net.jini.lease.LeaseUnmarshalException; +import net.jini.security.proxytrust.ProxyTrustIterator; +import net.jini.security.proxytrust.SingletonProxyTrustIterator; + +import org.apache.river.landlord.ConstrainableLandlordLease; +import org.apache.river.proxy.ConstrainableProxyUtil; +import org.apache.river.proxy.ThrowThis; + +/** + * Client side proxy for Norm's lease renewal sets. Uses an object of + * type NormServer to communicate back to server. + * + * @author Sun Microsystems, Inc. + */ +public class SetProxy extends AbstractProxy implements LeaseRenewalSet { + private static final long serialVersionUID = 2; + + /** + * Lease for this set. + * @serial + */ + final Lease ourLease; + + /** + * Creates a lease set proxy, returning an instance that implements + * RemoteMethodControl if the server does. + * + * @param server the server proxy + * @param id the ID of the lease set + * @param lease the lease set's lease + */ + public static SetProxy create(NormServer server, Uuid id, Lease lease) { + if (server instanceof RemoteMethodControl) { + return new ConstrainableSetProxy(server, id, lease, null); + } else { + return new SetProxy(server, id, lease); + } + } + + /** Simple constructor. */ + private SetProxy(NormServer server, Uuid id, Lease lease) { + super(server, id); + if (lease == null) { + throw new NullPointerException("lease cannot be null"); + } + ourLease = lease; + } + + /** Require fields to be non-null. */ + private void readObjectNoData() throws InvalidObjectException { + throw new InvalidObjectException( + "server, uuid, and ourLease must be non-null"); + } + + /** Require lease to be non-null. */ + private void readObject(ObjectInputStream in) + throws IOException, ClassNotFoundException + { + in.defaultReadObject(); + if (ourLease == null) { + throw new InvalidObjectException("ourLease cannot be null"); + } + } + + /* -- Implement LeaseRenewalSet -- */ + + // Inherit java doc from super type + public void renewFor(Lease leaseToRenew, long membershipDuration) + throws RemoteException + { + try { + server2().renewFor(uuid, leaseToRenew, membershipDuration, + Lease.FOREVER); + } catch (ThrowThis e) { + // The server wants to throw some remote exception + e.throwRemoteException(); + } + } + + // Inherit java doc from super type + public void renewFor(Lease leaseToRenew, long membershipDuration, + long renewDuration) + throws RemoteException + { + try { + server.renewFor(uuid, leaseToRenew, membershipDuration, + renewDuration); + } catch (ThrowThis e) { + // The server wants to throw some remote exception + e.throwRemoteException(); + } + } + + // Inherit java doc from super type + public Lease remove(Lease leaseToRemove) throws RemoteException { + try { + return server.remove(uuid, leaseToRemove); + } catch (ThrowThis e) { + // The server wants to throw some remote exception + e.throwRemoteException(); + // Need this because compiler does not know that + // throwRemoteException is not going to return + return null; + } + } + + // Inherit java doc from super type + public Lease[] getLeases() throws LeaseUnmarshalException, RemoteException + { + try { + GetLeasesResult result = server.getLeases(uuid); + MarshalledInstance mls[] = result.marshalledLeases; + + if (mls == null || mls.length == 0) + return new Lease[0]; + + final List leases = new LinkedList(); + final List problems = new LinkedList(); + final List exceptions = new LinkedList(); + for (int i=0; i<mls.length; i++) { + Lease l; + final MarshalledInstance ml = mls[i]; + try { + l = (Lease) ml.get(result.verifyCodebaseIntegrity()); + leases.add(l); + } catch (Throwable t) { + problems.add(ml.convertToMarshalledObject()); + exceptions.add(t); + } + } + + final Lease[] rslt = + (Lease[]) leases.toArray(new Lease[leases.size()]); + + if (problems.isEmpty()) + return rslt; + + final MarshalledObject sml[] = + (MarshalledObject[]) problems.toArray( + new MarshalledObject[problems.size()]); + final Throwable es[] = + (Throwable[]) exceptions.toArray( + new Throwable[exceptions.size()]); + + throw new LeaseUnmarshalException("Problem unmarshalling lease(s)", + rslt, sml, es); + + } catch (ThrowThis e) { + // The server wants to throw some remote exception + e.throwRemoteException(); + // Need this because compiler does not know that + // throwRemoteException is not going to return + return null; + } + } + + // Inherit java doc from super type + public EventRegistration setExpirationWarningListener( + RemoteEventListener listener, + long minWarning, + MarshalledObject handback) + throws RemoteException + { + // Do some client side error checking + if (listener == null) { + throw new NullPointerException( + "LeaseRenewalSet.setExpirationWarningListener:Must " + + "pass a non-null listener"); + } + + try { + return server.setExpirationWarningListener(uuid, + listener, minWarning, handback); + } catch (ThrowThis e) { + // The server wants to throw some remote exception + e.throwRemoteException(); + // Need this because compiler does not know that + // throwRemoteException is not going to return + return null; + } + } + + // Inherit java doc from super type + public void clearExpirationWarningListener() throws RemoteException { + try { + server2().setExpirationWarningListener( + uuid, null, NormServer.NO_LISTENER, null); + } catch (ThrowThis e) { + // The server wants to throw some remote exception + e.throwRemoteException(); + } + } + + // Inherit java doc from super type + public EventRegistration setRenewalFailureListener( + RemoteEventListener listener, + MarshalledObject handback) + throws RemoteException + { + // Do some client side error checking + if (listener == null) { + throw new NullPointerException( + "LeaseRenewalSet.setRenewalFailureListener:Must " + + "pass a non-null listener"); + } + + try { + return server.setRenewalFailureListener(uuid, listener, handback); + } catch (ThrowThis e) { + // The server wants to throw some remote exception + e.throwRemoteException(); + // Need this because compiler does not know that + // throwRemoteException is not going to return + return null; + } + } + + + // Inherit java doc from super type + public void clearRenewalFailureListener() throws RemoteException { + try { + server2().setRenewalFailureListener(uuid, null, null); + } catch (ThrowThis e) { + // The server wants to throw some remote exception + e.throwRemoteException(); + } + } + + /** + * Returns a second server proxy for use by methods that represent a second + * client-side method for a single server-side method. The distinction + * only matters for the constrainable subclass, where the different server + * proxies need different client constraints. + */ + NormServer server2() { + return server; + } + + // Inherit java doc from super type + public Lease getRenewalSetLease() { + return ourLease; + } + + /** Defines a subclass of SetProxy that implements RemoteMethodControl. */ + static final class ConstrainableSetProxy extends SetProxy + implements RemoteMethodControl + { + private static final long serialVersionUID = 1; + + /** + * Mappings from client to server methods, using the client method with + * more arguments for each server method when more than one client + * method maps to a single server method. + */ + private static final Method[] methodMap1; + static { + try { + methodMap1 = new Method[] { + LeaseRenewalSet.class.getMethod( + "renewFor", + new Class[] { Lease.class, long.class, long.class }), + NormServer.class.getMethod( + "renewFor", + new Class[] { Uuid.class, Lease.class, long.class, + long.class }), + LeaseRenewalSet.class.getMethod( + "remove", new Class[] { Lease.class }), + NormServer.class.getMethod( + "remove", + new Class[] { Uuid.class, Lease.class }), + LeaseRenewalSet.class.getMethod( + "getLeases", new Class[] { }), + NormServer.class.getMethod( + "getLeases", new Class[] { Uuid.class }), + LeaseRenewalSet.class.getMethod( + "setExpirationWarningListener", + new Class[] { RemoteEventListener.class, + long.class, MarshalledObject.class }), + NormServer.class.getMethod( + "setExpirationWarningListener", + new Class[] { Uuid.class, RemoteEventListener.class, + long.class, MarshalledObject.class }), + LeaseRenewalSet.class.getMethod( + "setRenewalFailureListener", + new Class[] { RemoteEventListener.class, + MarshalledObject.class }), + NormServer.class.getMethod( + "setRenewalFailureListener", + new Class[] { Uuid.class, RemoteEventListener.class, + MarshalledObject.class }) + }; + } catch (NoSuchMethodException e) { + throw new NoSuchMethodError(e.getMessage()); + } + } + + /** + * Second set of mappings from client to server method names, for + * server methods with a second associated client method. + */ + private static final Method[] methodMap2; + static { + try { + methodMap2 = new Method[] { + LeaseRenewalSet.class.getMethod( + "renewFor", + new Class[] { Lease.class, long.class }), + NormServer.class.getMethod( + "renewFor", + new Class[] { Uuid.class, Lease.class, long.class, + long.class } ), + LeaseRenewalSet.class.getMethod( + "clearExpirationWarningListener", new Class[] { }), + NormServer.class.getMethod( + "setExpirationWarningListener", + new Class[] { Uuid.class, RemoteEventListener.class, + long.class, MarshalledObject.class }), + LeaseRenewalSet.class.getMethod( + "clearRenewalFailureListener", new Class[] { }), + NormServer.class.getMethod( + "setRenewalFailureListener", + new Class[] { Uuid.class, RemoteEventListener.class, + MarshalledObject.class }) + }; + } catch (NoSuchMethodException e) { + throw new NoSuchMethodError(e.getMessage()); + } + } + + /** + * The client constraints placed on this proxy or <code>null</code>. + * + * @serial + */ + private MethodConstraints methodConstraints; + + /** + * A second inner proxy to use when the client constraints for + * different smart proxy methods implemented by the same inner proxy + * methods have different constraints. This proxy is used for the + * renewFor(Lease, long), clearExpirationWarningListener, and + * clearRenewalFailureListener methods. + */ + private transient NormServer server2; + + /** Creates an instance of this class. */ + ConstrainableSetProxy(NormServer server, + Uuid id, + Lease lease, + MethodConstraints methodConstraints) + { + super(constrainServer(server, methodConstraints, methodMap1), + id, lease); + if (!(lease instanceof ConstrainableLandlordLease)) { + throw new IllegalArgumentException( + "lease must be a ConstrainableLandlordLease"); + } + this.methodConstraints = methodConstraints; + server2 = constrainServer(server, methodConstraints, methodMap2); + } + + /** + * Verifies that ourLease is a ConstrainableLandlordLease, and that + * server implements RemoteMethodControl and has the appropriate method + * constraints. Also sets the server2 field. + */ + private void readObject(ObjectInputStream s) + throws IOException, ClassNotFoundException + { + s.defaultReadObject(); + if (!(server instanceof RemoteMethodControl)) { + throw new InvalidObjectException( + "server does not implement RemoteMethodControl"); + } else if (!(ourLease instanceof ConstrainableLandlordLease)) { + throw new InvalidObjectException( + "ourLease is not a ConstrainableLandlordLease"); + } + ConstrainableProxyUtil.verifyConsistentConstraints( + methodConstraints, server, methodMap1); + server2 = constrainServer(server, methodConstraints, methodMap2); + } + + + /** + * Returns a copy of the server proxy with the specified client + * constraints and methods mapping. + */ + private static NormServer constrainServer( + NormServer server, + MethodConstraints methodConstraints, + Method[] mappings) + { + return (NormServer) ((RemoteMethodControl) server).setConstraints( + ConstrainableProxyUtil.translateConstraints( + methodConstraints, mappings)); + } + + /** inherit javadoc */ + public RemoteMethodControl setConstraints( + MethodConstraints constraints) + { + return new ConstrainableSetProxy( + server, uuid, ourLease, constraints); + } + + /** inherit javadoc */ + public MethodConstraints getConstraints() { + return methodConstraints; + } + + /** Returns the second server proxy. */ + NormServer server2() { + return server2; + } + + /** + * Returns a proxy trust iterator that supplies the server, for use by + * ProxyTrustVerifier. + */ + private ProxyTrustIterator getProxyTrustIterator() { + return new SingletonProxyTrustIterator(server); + } + } +} Modified: river/jtsk/modules/modularize/apache-river/river-services/norm/norm-dl/src/main/java/org/apache/river/norm/proxy/StoreException.java URL: http://svn.apache.org/viewvc/river/jtsk/modules/modularize/apache-river/river-services/norm/norm-dl/src/main/java/org/apache/river/norm/proxy/StoreException.java?rev=1879521&r1=1879520&r2=1879521&view=diff ============================================================================== --- river/jtsk/modules/modularize/apache-river/river-services/norm/norm-dl/src/main/java/org/apache/river/norm/proxy/StoreException.java (original) +++ river/jtsk/modules/modularize/apache-river/river-services/norm/norm-dl/src/main/java/org/apache/river/norm/proxy/StoreException.java Sun Jul 5 11:41:39 2020 @@ -1,92 +1,92 @@ -/* - * 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.norm; - -import java.io.PrintStream; -import java.io.PrintWriter; - -/** - * Base class for exceptions thrown by PersistantStore. - * - * @author Sun Microsystems, Inc. - */ -class StoreException extends Exception { - private static final long serialVersionUID = 1L; - - /** - * The exception (if any) that triggered the store exception. This - * may be <code>null</code>. - * - * @serial - */ - final Throwable nestedException; - - /** - * Create a store exception, forwarding a string to the superclass - * constructor. - * @param str a detailed message for the exception - */ - StoreException(String str) { - super(str); - nestedException = null; - } - - /** - * Create an exception, forwarding a string to the - * superclass constructor. - * @param str a detailed message for the exception - * @param ex root cause for the exception, may be <code>null</code> - */ - StoreException(String str, Throwable ex) { - super(str); - nestedException = ex; - } - - /** - * Print the stack trace of this exception, plus that of the nested - * exception, if any. - */ - public void printStackTrace() { - printStackTrace(System.err); - } - - /** - * Print the stack trace of this exception, plus that of the nested - * exception, if any. - */ - public void printStackTrace(PrintStream out) { - super.printStackTrace(out); - if (nestedException != null) { - out.println("nested exception:"); - nestedException.printStackTrace(out); - } - } - - /** - * Print the stack trace of this exception, plus that of the nested - * exception, if any. - */ - public void printStackTrace(PrintWriter out) { - super.printStackTrace(out); - if (nestedException != null) { - out.println("nested exception:"); - nestedException.printStackTrace(out); - } - } -} - +/* + * 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.norm.proxy; + +import java.io.PrintStream; +import java.io.PrintWriter; + +/** + * Base class for exceptions thrown by PersistantStore. + * + * @author Sun Microsystems, Inc. + */ +public class StoreException extends Exception { + private static final long serialVersionUID = 1L; + + /** + * The exception (if any) that triggered the store exception. This + * may be <code>null</code>. + * + * @serial + */ + final Throwable nestedException; + + /** + * Create a store exception, forwarding a string to the superclass + * constructor. + * @param str a detailed message for the exception + */ + StoreException(String str) { + super(str); + nestedException = null; + } + + /** + * Create an exception, forwarding a string to the + * superclass constructor. + * @param str a detailed message for the exception + * @param ex root cause for the exception, may be <code>null</code> + */ + public StoreException(String str, Throwable ex) { + super(str); + nestedException = ex; + } + + /** + * Print the stack trace of this exception, plus that of the nested + * exception, if any. + */ + public void printStackTrace() { + printStackTrace(System.err); + } + + /** + * Print the stack trace of this exception, plus that of the nested + * exception, if any. + */ + public void printStackTrace(PrintStream out) { + super.printStackTrace(out); + if (nestedException != null) { + out.println("nested exception:"); + nestedException.printStackTrace(out); + } + } + + /** + * Print the stack trace of this exception, plus that of the nested + * exception, if any. + */ + public void printStackTrace(PrintWriter out) { + super.printStackTrace(out); + if (nestedException != null) { + out.println("nested exception:"); + nestedException.printStackTrace(out); + } + } +} + Modified: river/jtsk/modules/modularize/apache-river/river-services/norm/norm-service/pom.xml URL: http://svn.apache.org/viewvc/river/jtsk/modules/modularize/apache-river/river-services/norm/norm-service/pom.xml?rev=1879521&r1=1879520&r2=1879521&view=diff ============================================================================== --- river/jtsk/modules/modularize/apache-river/river-services/norm/norm-service/pom.xml (original) +++ river/jtsk/modules/modularize/apache-river/river-services/norm/norm-service/pom.xml Sun Jul 5 11:41:39 2020 @@ -1,51 +1,57 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!-- -~ Copyright (C) 2014 the original author or authors. -~ -~ Licensed 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. ---> -<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> - <modelVersion>4.0.0</modelVersion> - <parent> - <groupId>org.apache.river</groupId> - <artifactId>norm</artifactId> - <version>3.0-SNAPSHOT</version> - </parent> - - <groupId>org.apache.river.norm</groupId> - <artifactId>norm-service</artifactId> - <url>http://river.apache.org</url> - <name>Module :: Norm Service Implementation</name> - - <dependencies> - <dependency> - <groupId>org.apache.river.norm</groupId> - <artifactId>norm-dl</artifactId> - <version>${project.version}</version> - </dependency> - - <dependency> - <groupId>org.apache.river</groupId> - <artifactId>river-lib</artifactId> - <version>${project.version}</version> - </dependency> - - <dependency> - <groupId>org.apache.river</groupId> - <artifactId>river-start</artifactId> - <version>${project.version}</version> - </dependency> - - </dependencies> -</project> +<?xml version="1.0" encoding="UTF-8"?> +<!-- ~ Copyright (C) 2014 the original author or authors. ~ ~ Licensed 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. --> +<project xmlns="http://maven.apache.org/POM/4.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> + <modelVersion>4.0.0</modelVersion> + <parent> + <groupId>org.apache.river</groupId> + <artifactId>norm</artifactId> + <version>3.0-SNAPSHOT</version> + </parent> + + <groupId>org.apache.river.norm</groupId> + <artifactId>norm-service</artifactId> + <url>http://river.apache.org</url> + <name>Module :: Norm Service Implementation</name> + + <dependencies> + <dependency> + <groupId>org.apache.river.norm</groupId> + <artifactId>norm-dl</artifactId> + <version>${project.version}</version> + </dependency> + + <dependency> + <groupId>org.apache.river</groupId> + <artifactId>river-logging</artifactId> + <version>${project.version}</version> + </dependency> + + <dependency> + <groupId>org.apache.river</groupId> + <artifactId>river-lib</artifactId> + <version>${project.version}</version> + </dependency> + + <dependency> + <groupId>org.apache.river</groupId> + <artifactId>river-start</artifactId> + <version>${project.version}</version> + </dependency> + + <dependency> + <groupId>org.apache.river</groupId> + <artifactId>river-activation</artifactId> + <version>${project.version}</version> + </dependency> + + </dependencies> +</project> Modified: river/jtsk/modules/modularize/apache-river/river-services/norm/norm-service/src/main/java/org/apache/river/norm/LeaseExpirationMgr.java URL: http://svn.apache.org/viewvc/river/jtsk/modules/modularize/apache-river/river-services/norm/norm-service/src/main/java/org/apache/river/norm/LeaseExpirationMgr.java?rev=1879521&r1=1879520&r2=1879521&view=diff ============================================================================== --- river/jtsk/modules/modularize/apache-river/river-services/norm/norm-service/src/main/java/org/apache/river/norm/LeaseExpirationMgr.java (original) +++ river/jtsk/modules/modularize/apache-river/river-services/norm/norm-service/src/main/java/org/apache/river/norm/LeaseExpirationMgr.java Sun Jul 5 11:41:39 2020 @@ -27,7 +27,7 @@ import java.util.logging.Logger; import org.apache.river.collection.WeakTable; import org.apache.river.landlord.LeasedResource; import org.apache.river.thread.InterruptedStatusThread; -import org.apache.river.thread.WakeupManager; +import org.apache.river.thread.wakeup.WakeupManager; /** * Lease manager that aggressively expires leases as their expiration times
