001: /*
002: * JBoss, Home of Professional Open Source.
003: * Copyright 2006, Red Hat Middleware LLC, and individual contributors
004: * as indicated by the @author tags. See the copyright.txt file in the
005: * distribution for a full listing of individual contributors.
006: *
007: * This is free software; you can redistribute it and/or modify it
008: * under the terms of the GNU Lesser General Public License as
009: * published by the Free Software Foundation; either version 2.1 of
010: * the License, or (at your option) any later version.
011: *
012: * This software is distributed in the hope that it will be useful,
013: * but WITHOUT ANY WARRANTY; without even the implied warranty of
014: * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
015: * Lesser General Public License for more details.
016: *
017: * You should have received a copy of the GNU Lesser General Public
018: * License along with this software; if not, write to the Free
019: * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
020: * 02110-1301 USA, or see the FSF site: http://www.fsf.org.
021: */
022: package org.jboss.naming;
023:
024: import javax.naming.NamingException;
025:
026: import org.jboss.system.ServiceMBean;
027: import org.jboss.system.ServiceMBeanSupport;
028:
029: /**
030: * A simple utility mbean that allows one to create an alias in
031: * the form of a LinkRef from one JNDI name to another.
032: *
033: * @jmx:mbean extends="org.jboss.system.ServiceMBean"
034: *
035: * @author <a href="mailto:Scott_Stark@displayscape.com">Scott Stark</a>.
036: * @version $Revision: 57209 $
037: */
038: public class NamingAlias extends ServiceMBeanSupport implements
039: NamingAliasMBean {
040: private String fromName;
041: private String toName;
042:
043: public NamingAlias() {
044: this (null, null);
045: }
046:
047: public NamingAlias(final String fromName, final String toName) {
048: this .fromName = fromName;
049: this .toName = toName;
050: }
051:
052: /**
053: * Get the from name of the alias. This is the location where the
054: * LinkRef is bound under JNDI.
055: *
056: * @jmx:managed-attribute
057: *
058: * @return the location of the LinkRef
059: */
060: public String getFromName() {
061: return fromName;
062: }
063:
064: /**
065: * Set the from name of the alias. This is the location where the
066: * LinkRef is bound under JNDI.
067: *
068: * @jmx:managed-attribute
069: *
070: * @param name, the location where the LinkRef will be bound
071: */
072: public void setFromName(String name) throws NamingException {
073: removeLinkRef(fromName);
074: this .fromName = name;
075: createLinkRef();
076: }
077:
078: /**
079: * Get the to name of the alias. This is the target name to
080: * which the LinkRef refers. The name is a URL, or a name to be resolved
081: * relative to the initial context, or if the first character of the name
082: * is ".", the name is relative to the context in which the link is bound.
083: *
084: * @jmx:managed-attribute
085: *
086: * @return the target JNDI name of the alias.
087: */
088: public String getToName() {
089: return toName;
090: }
091:
092: /**
093: * Set the to name of the alias. This is the target name to
094: * which the LinkRef refers. The name is a URL, or a name to be resolved
095: * relative to the initial context, or if the first character of the name
096: * is ".", the name is relative to the context in which the link is bound.
097: *
098: * @jmx:managed-attribute
099: *
100: * @param name, the target JNDI name of the alias.
101: */
102: public void setToName(String name) throws NamingException {
103: this .toName = name;
104:
105: createLinkRef();
106: }
107:
108: protected void startService() throws Exception {
109: if (fromName == null)
110: throw new IllegalStateException("fromName is null");
111: if (toName == null)
112: throw new IllegalStateException("toName is null");
113: createLinkRef();
114: }
115:
116: protected void stopService() throws Exception {
117: removeLinkRef(fromName);
118: }
119:
120: private void createLinkRef() throws NamingException {
121: if (super .getState() == ServiceMBean.STARTING
122: || super .getState() == ServiceMBean.STARTED)
123: Util.createLinkRef(fromName, toName);
124: }
125:
126: /**
127: * Unbind the name value if we are in the STARTED state.
128: */
129: private void removeLinkRef(String name) throws NamingException {
130: if (super.getState() == ServiceMBean.STOPPING)
131: Util.removeLinkRef(name);
132: }
133: }
|