/* * 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.jackrabbit.j2ee; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.net.URI; import java.net.URISyntaxException; import java.rmi.registry.Registry; import javax.servlet.ServletConfig; import javax.servlet.ServletException; /** * The RMI config hold information about RMI connection details. * * It supports the following properties and init parameters: * <pre> * +-------------------+--------------------+ * | Property Name | Init-Param Name | * +-------------------+--------------------+ * | rmi.enable | {rmi-port sepc.} | * | rmi.host | rmi-host | * | rmi.port | rmi-port | * | rmi.name | {repository name} | * | rmi.url | rmi-url | * +-------------------+--------------------+ * </pre> */ public class RMIConfig extends AbstractConfig { /** * default logger */ private static final Logger log = LoggerFactory.getLogger(RMIConfig.class); private boolean rmiEnabled; private int rmiPort = -1; private String rmiHost; private String rmiName; private String rmiUri; private final BootstrapConfig parentConfig; public RMIConfig(BootstrapConfig parentConfig) { this.parentConfig = parentConfig; } public void init(ServletConfig ctx) throws ServletException { super.init(ctx); // enable RMI if either port or url was defined rmiEnabled = rmiPort >=0 || rmiUri != null; } public String getRmiName() { return rmiName; } public void setRmiName(String rmiName) { this.rmiName = rmiName; } public boolean enabled() { return rmiEnabled; } public String getRmiEnabled() { return String.valueOf(rmiEnabled); } public void setRmiEnabled(String rmiEnabled) { this.rmiEnabled = Boolean.valueOf(rmiEnabled).booleanValue(); } public int rmiPort() { return rmiPort; } public String getRmiPort() { return String.valueOf(rmiPort); } public void setRmiPort(String rmiPort) { this.rmiPort = Integer.decode(rmiPort).intValue(); } public String getRmiHost() { return rmiHost; } public void setRmiHost(String rmiHost) { this.rmiHost = rmiHost; } public String getRmiUri() { return rmiUri; } public void setRmiUri(String rmiUri) { this.rmiUri = rmiUri; } public void validate() { if (!rmiEnabled) { return; } if (rmiUri != null && rmiUri.length() > 0) { // URI takes precedences, so check whether the configuration has to // be set from the URI try { URI uri = new URI(rmiUri); // extract values from the URI, check later rmiHost = uri.getHost(); rmiPort = uri.getPort(); rmiName = uri.getPath(); } catch (URISyntaxException e) { log.warn("Cannot parse RMI URI '" + rmiUri + "'.", e); rmiUri = null; // clear RMI URI use another one rmiHost = null; // use default host, ignore rmi-host param } // cut of leading slash from name if defined at all if (rmiName != null && rmiName.startsWith("/")) { rmiName = rmiName.substring(1); } } // check RMI port if (rmiPort == -1 || rmiPort == 0) { // accept -1 or 0 as a hint to use the default rmiPort = Registry.REGISTRY_PORT; } else if (rmiPort < -1 || rmiPort > 0xFFFF) { // emit a warning if out of range, use defualt in this case log.warn("Invalid port in rmi-port param " + rmiPort + ". using default port."); rmiPort = Registry.REGISTRY_PORT; } // check host - use an empty name if null (i.e. not configured) if (rmiHost == null) { rmiHost = ""; } // check name - use repositoryName if empty or null if (rmiName == null || rmiName.length() ==0) { rmiName = parentConfig.getRepositoryName(); } // reconstruct the rmiURI now because values might have been changed rmiUri = "//" + rmiHost + ":" + rmiPort + "/" + rmiName; valid = true; } }