/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.sun.jini.phoenix; import java.lang.reflect.Method; import java.rmi.Remote; import java.rmi.activation.ActivationSystem; import java.rmi.server.ExportException; import java.util.Collection; import net.jini.core.constraint.MethodConstraints; import net.jini.jeri.InvocationDispatcher; import net.jini.jeri.ProxyTrustILFactory; import net.jini.jeri.ServerCapabilities; /** * Invocation layer factory for exporting an {@link ActivationSystem} * to use Jini extensible remote invocation (Jini ERI), that is similar * to {@link ProxyTrustILFactory} except the remote object must be an * <code>ActivationSystem</code> instance and the returned dispatcher * optionally accepts calls from the local host and optionally enforces a * {@link GroupPolicy} on calls to {@link ActivationSystem#registerGroup * registerGroup} and {@link ActivationSystem#setActivationGroupDesc * setActivationGroupDesc}. * * @author Sun Microsystems, Inc. * * @since 2.0.1 * @see SystemAccessILFactory **/ public class SystemAccessProxyTrustILFactory extends ProxyTrustILFactory { /** * The group policy, if any. */ private final GroupPolicy policy; /** * If true, check that client is calling from the local host. */ private final boolean localAccessCheck; /** * Creates an invocation layer factory that creates an invocation * dispatcher with a {@link DefaultGroupPolicy} instance and a * <code>null</code> class loader. This invocation dispatcher only * accepts calls from the local host and enforces the group policy on * calls to {@link ActivationSystem#registerGroup registerGroup} and * {@link ActivationSystem#setActivationGroupDesc * setActivationGroupDesc}. **/ public SystemAccessProxyTrustILFactory() { this(new DefaultGroupPolicy(), null); } /** * Creates an invocation layer factory that creates an invocation * dispatcher with the specified group policy and the specified class * loader. This invocation dispatcher only accepts calls from the * local host and enforces the specified group policy (if * non-<code>null</code>) on calls to {@link * ActivationSystem#registerGroup registerGroup} and {@link * ActivationSystem#setActivationGroupDesc setActivationGroupDesc}. * * @param loader the class loader, or <code>null</code> * @param policy the group policy, or <code>null</code> **/ public SystemAccessProxyTrustILFactory(GroupPolicy policy, ClassLoader loader) { super(null, null, loader); this.policy = policy; this.localAccessCheck = true; } /** * Creates a factory with a <code>null</code> class loader, the * specified server constraints, the {@link SystemPermission} * permission class, and a {@link DefaultGroupPolicy} instance. * * @param serverConstraints the server constraints, or <code>null</code> **/ public SystemAccessProxyTrustILFactory(MethodConstraints serverConstraints) { this(serverConstraints, SystemPermission.class, new DefaultGroupPolicy(), null); } /** * Creates a factory with the specified server constraints, permission * class, group policy, and class loader. This factory creates an * invocation dispatcher that enforces the specified group policy (if * non-<code>null</code>) on calls to {@link * ActivationSystem#registerGroup registerGroup} and {@link * ActivationSystem#setActivationGroupDesc setActivationGroupDesc}. * * @param serverConstraints the server constraints, or <code>null</code> * @param permClass the permission class, or <code>null</code> * @param policy the group policy, or <code>null</code> * @param loader the class loader, or <code>null</code> * @throws IllegalArgumentException if the permission class is abstract, is * not a subclass of {@link java.security.Permission}, or does not have * a public constructor that has either one <code>String</code> parameter * or one {@link Method} parameter and has no declared exceptions **/ public SystemAccessProxyTrustILFactory(MethodConstraints serverConstraints, Class permClass, GroupPolicy policy, ClassLoader loader) { super(serverConstraints, permClass, loader); this.policy = policy; this.localAccessCheck = false; } /** * Returns a * {@link com.sun.jini.phoenix.SystemAccessILFactory.SystemDispatcher} * instance constructed with the specified methods, the class loader * specified during construction, the remote object, server capabilities, * and the server constraints, permission class, and group policy that * this factory was constructed with and a flag indicating whether the * dispatcher should only accept calls from the local host. * * @return a * {@link com.sun.jini.phoenix.SystemAccessILFactory.SystemDispatcher} * instance constructed with the specified methods, remote object, and * server capabilities, and the server constraints, permission class, * group policy, local host access check condition, and class loader that * this factory was constructed with * @throws NullPointerException {@inheritDoc} **/ protected InvocationDispatcher createInvocationDispatcher(Collection methods, Remote impl, ServerCapabilities caps) throws ExportException { if (impl == null) { throw new NullPointerException("impl cannot be null"); } else if (!(impl instanceof ActivationSystem)) { throw new ExportException("cannot create dispatcher", new IllegalArgumentException( "impl must be an ActivationSystem")); } return new SystemAccessILFactory.SystemDispatcher( methods, impl, caps, getServerConstraints(), getPermissionClass(), policy, localAccessCheck, getClassLoader()); } }