[CJ-dev] commonjava-projects/commonjava-config/projects/jboss-config-service/src/java/org/commonjava
Brought to you by:
johnqueso
From: <joh...@co...> - 2004-02-18 06:20:24
|
Update of /cvsroot/commonjava/commonjava-projects/commonjava-config/projects/jboss-config-service/src/java/org/commonjava/config/snapin/jboss In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv26323/projects/jboss-config-service/src/java/org/commonjava/config/snapin/jboss Added Files: JBossSnapInLocalSvcLoader.java SnapInServiceMBean.java JBossSnapInService.java JBossSnapInServiceConstants.java JBossSnapInServiceLoader.java Log Message: updated documentation in project.xml files, and added functionality to: Console: - provide convenient way to prompt the user for more information Config: - Provide snap-in container stacking, or scoping - Provide a JBoss service implementation of a snap-in container Probably other things, but I don't honestly remember everything... --- NEW FILE: JBossSnapInLocalSvcLoader.java --- /* Created on Feb 14, 2004 */ package org.commonjava.config.snapin.jboss; import javax.naming.NamingException; import org.commonjava.config.snapin.SnapInContainer; import org.commonjava.config.snapin.SnapInContainerLoader; import org.commonjava.config.snapin.SnapInLoaderException; import org.commonjava.j2ee.services.ServiceLocator; import org.commonjava.j2ee.services.config.EnterpriseConfigurationException; /** * @author jdcasey */ public class JBossSnapInLocalSvcLoader extends SnapInContainerLoader { public JBossSnapInLocalSvcLoader(){} public SnapInContainer loadSnapInContainer() throws SnapInLoaderException { try { return (SnapInContainer)ServiceLocator.getLocalService( JBossSnapInServiceConstants.JNDI_NAME, SnapInContainer.class ); } catch(NamingException e){ throw new SnapInLoaderException(e); } catch (EnterpriseConfigurationException e) { throw new SnapInLoaderException(e); } } } --- NEW FILE: SnapInServiceMBean.java --- /* Created on Feb 17, 2004 */ package org.commonjava.config.snapin.jboss; import javax.management.ObjectName; import org.jboss.mx.util.ObjectNameFactory; import org.jboss.system.ServiceMBean; /** * @author jdcasey */ public interface SnapInServiceMBean extends ServiceMBean { //default object name public static final ObjectName OBJECT_NAME = ObjectNameFactory.create( "jboss:type=Service,service=SnapInService" ); } --- NEW FILE: JBossSnapInService.java --- /* Created on Feb 14, 2004 */ package org.commonjava.config.snapin.jboss; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.Name; import javax.naming.NameNotFoundException; import javax.naming.NamingException; import javax.naming.Reference; import javax.naming.StringRefAddr; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.commonjava.config.snapin.SnapInContainer; import org.commonjava.config.snapin.SnapInContainerLoader; import org.commonjava.config.snapin.SnapInLoaderException; import org.commonjava.opl.ParseException; import org.jboss.naming.NonSerializableFactory; import org.jboss.system.ServiceMBeanSupport; /** Service used to expose a snap-in container to the server via JNDI. * * @jmx:mbean name="jboss:type=Service,service=SnapInService" * extends="org.jboss.system.ServiceMBean" * * @author John Casey */ public final class JBossSnapInService extends ServiceMBeanSupport implements SnapInServiceMBean{ private static final Log LOG = LogFactory.getLog(JBossSnapInService.class); private SnapInContainer container; /* (non-Javadoc) * @see org.jboss.system.ServiceMBeanSupport#startService() */ protected void startService() throws Exception { bind(); } /* (non-Javadoc) * @see org.jboss.system.ServiceMBeanSupport#stopService() */ protected void stopService() throws Exception { unbind(); // release container. Reload if re-bound. container = null; } private void bind() throws NamingException, SnapInLoaderException, ParseException { ensureContainerLoaded(); String bindName = JBossSnapInServiceConstants.JNDI_NAME; NonSerializableFactory.bind(bindName, container); Context ctx = new InitialContext(); try{ Name n = ctx.getNameParser("").parse(bindName); while (n.size() > 1){ String ctxName = n.get(0); try{ ctx = (Context) ctx.lookup(ctxName); } catch (NameNotFoundException e){ ctx = ctx.createSubcontext(ctxName); } n = n.getSuffix(1); } // The helper class NonSerializableFactory uses address type nns, we go on to // use the helper class to bind the javax.mail.Session object in JNDI StringRefAddr addr = new StringRefAddr("nns", bindName); Reference ref = new Reference( SnapInContainer.class.getName(), addr, NonSerializableFactory.class.getName(), null ); ctx.bind(n.get(0), ref); } finally{ ctx.close(); } if (LOG.isInfoEnabled()) { LOG.info("Snap-In Service bound to " + bindName); } } private void unbind() throws NamingException, ParseException { String bindName = JBossSnapInServiceConstants.JNDI_NAME; if (bindName != null) { InitialContext ctx = new InitialContext(); try{ ctx.unbind(bindName); } finally{ ctx.close(); } NonSerializableFactory.unbind(bindName); if (LOG.isInfoEnabled()) { LOG.info("Snap-In service '" + bindName + "' removed from JNDI"); } } } /** * */ private void ensureContainerLoaded() throws SnapInLoaderException, ParseException { this.container = SnapInContainerLoader.getSnapInContainer(); } } --- NEW FILE: JBossSnapInServiceConstants.java --- /* Created on Feb 14, 2004 */ package org.commonjava.config.snapin.jboss; /** * @author jdcasey */ public final class JBossSnapInServiceConstants { public static final String JNDI_NAME = "/services/JBossSnapInService"; private JBossSnapInServiceConstants() { } } --- NEW FILE: JBossSnapInServiceLoader.java --- /* Created on Feb 14, 2004 */ package org.commonjava.config.snapin.jboss; import javax.naming.NamingException; import org.commonjava.config.snapin.GenericSnapInContainerLoader; import org.commonjava.config.snapin.SnapInContainer; import org.commonjava.config.snapin.SnapInContainerLoader; import org.commonjava.config.snapin.SnapInLoaderException; import org.commonjava.config.snapin.StackedSnapInContainer; import org.commonjava.j2ee.services.ServiceLocator; import org.commonjava.j2ee.services.config.EnterpriseConfigurationException; /** * @author jdcasey */ public class JBossSnapInServiceLoader extends SnapInContainerLoader { public JBossSnapInServiceLoader(){} public SnapInContainer loadSnapInContainer() throws SnapInLoaderException { // We're using a pretty complex setup here. We'll stack the local configuration on top of // the proxied one from the JNDI lookup. This way, local settings can override remote ones. StackedSnapInContainer container = new StackedSnapInContainer(); // First, load the local configuration snap-ins. SnapInContainerLoader localLoader = GenericSnapInContainerLoader.getInstance(); SnapInContainer localContainer = localLoader.loadSnapInContainer(); container.prepend(localContainer); try { SnapInContainer remoteContainer = (SnapInContainer)ServiceLocator.getService( JBossSnapInServiceConstants.JNDI_NAME, SnapInContainer.class ); container.append(remoteContainer); } catch (EnterpriseConfigurationException e) { throw new SnapInLoaderException(e); } catch(NamingException e){ throw new SnapInLoaderException(e); } return container; } } |