The container component code is comprised of the classes and interfaces that are listed in the following table. The table also provides a cross-reference to the listing of each class or interface.
Class or Interface |
Listing |
---|---|
Greeter | |
GreeterContainer | |
GreeterContainer | |
GreeterDeployer | |
GreeterSniffer |
This example shows the code for defining a component of the Greeter container.
package org.glassfish.examples.extension.greeter; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; /** * Simple annotation to denote Greeter's component */ @Retention(java.lang.annotation.RetentionPolicy.RUNTIME) public @interface Greeter { /** * Name to uniquely identify different greeters * * @return a good greeter name */ public String name(); }
This example shows the Java language class GreeterAppContainer, which implements the ApplicationContainer interface.
package org.glassfish.examples.extension.greeter; import org.glassfish.api.deployment.ApplicationContainer; import org.glassfish.api.deployment.ApplicationContext; import org.glassfish.api.deployment.archive.ReadableArchive; import java.util.List; import java.util.ArrayList; public class GreeterAppContainer implements ApplicationContainer { final GreeterContainer ctr; final List<Class> componentClasses = new ArrayList<Class>(); public GreeterAppContainer(GreeterContainer ctr) { this.ctr = ctr; } void addComponent(Class componentClass) { componentClasses.add(componentClass); } public Object getDescriptor() { return null; } public boolean start(ApplicationContext startupContext) throws Exception { for (Class componentClass : componentClasses) { try { Object component = componentClass.newInstance(); Greeter greeter = (Greeter) componentClass.getAnnotation(Greeter.class); ctr.habitat.addComponent(greeter.name(), component); } catch(Exception e) { throw new RuntimeException(e); } } return true; } public boolean stop(ApplicationContext stopContext) { for (Class componentClass : componentClasses) { ctr.habitat.removeAllByType(componentClass); } return true; } public boolean suspend() { return false; } public boolean resume() throws Exception { return false; } public ClassLoader getClassLoader() { return null; } }
This example shows the Java language class GreeterContainer, which implements the Container interface.
package org.glassfish.examples.extension.greeter; import org.glassfish.api.container.Container; import org.glassfish.api.deployment.Deployer; import org.jvnet.hk2.annotations.Service; import org.jvnet.hk2.annotations.Inject; import org.jvnet.hk2.component.Habitat; @Service(name="org.glassfish.examples.extension.GreeterContainer") public class GreeterContainer implements Container { @Inject Habitat habitat; public Class<? extends Deployer> getDeployer() { return GreeterDeployer.class; } public String getName() { return "greeter"; } }
This example shows the Java language class GreeterDeployer, which implements the Deployer interface.
package org.glassfish.examples.extension.greeter; import org.glassfish.api.deployment.Deployer; import org.glassfish.api.deployment.MetaData; import org.glassfish.api.deployment.DeploymentContext; import org.glassfish.api.deployment.ApplicationContainer; import org.glassfish.api.deployment.archive.ReadableArchive; import org.glassfish.api.container.Container; import org.jvnet.hk2.annotations.Service; import java.util.Enumeration; @Service public class GreeterDeployer implements Deployer<GreeterContainer, GreeterAppContainer> { public MetaData getMetaData() { return null; } public <V> V loadMetaData(Class<V> type, DeploymentContext context) { return null; } public boolean prepare(DeploymentContext context) { return false; } public GreeterAppContainer load( GreeterContainer container, DeploymentContext context) { GreeterAppContainer appCtr = new GreeterAppContainer(container); ClassLoader cl = context.getClassLoader(); ReadableArchive ra = context.getOriginalSource(); Enumeration<String> entries = ra.entries(); while (entries.hasMoreElements()) { String entry = entries.nextElement(); if (entry.endsWith(".class")) { String className = entryToClass(entry); try { Class componentClass = cl.loadClass(className); // ensure it is one of our component if (componentClass.isAnnotationPresent(Greeter.class)) { appCtr.addComponent(componentClass); } } catch(Exception e) { throw new RuntimeException(e); } } } return appCtr; } public void unload(GreeterAppContainer appContainer, DeploymentContext context) { } public void clean(DeploymentContext context) { } private String entryToClass(String entry) { String str = entry.substring("WEB-INF/classes/".length(), entry.length()-6); return str.replaceAll("/", "."); } }
This example shows the Java language class GreeterSniffer, which implements the Sniffer interface.
package org.glassfish.examples.extension.greeter; import org.glassfish.api.container.Sniffer; import org.glassfish.api.deployment.archive.ReadableArchive; import org.glassfish.api.admin.config.ConfigParser; import org.glassfish.examples.extension.greeter.config.GreeterContainerConfig; import org.jvnet.hk2.annotations.Service; import org.jvnet.hk2.annotations.Inject; import org.jvnet.hk2.component.Habitat; import com.sun.enterprise.module.Module; import java.util.logging.Logger; import java.util.Map; import java.io.IOException; import java.lang.annotation.Annotation; import java.lang.reflect.Array; import java.net.URL; /** * @author Jerome Dochez */ @Service(name="greeter") public class GreeterSniffer implements Sniffer { @Inject(optional=true) GreeterContainerConfig config=null; @Inject ConfigParser configParser; @Inject Habitat habitat; public boolean handles(ReadableArchive source, ClassLoader loader) { return false; } public String[] getURLPatterns() { return new String[0]; } public Class<? extends Annotation>[] getAnnotationTypes() { Class<? extends Annotation>[] a = (Class<? extends Annotation>[]) Array.newInstance(Class.class, 1); a[0] = Greeter.class; return a; } public String getModuleType() { return "greeter"; } public Module[] setup(String containerHome, Logger logger) throws IOException { if (config==null) { URL url = this.getClass().getClassLoader().getResource("init.xml"); if (url!=null) { configParser.parseContainerConfig( habitat, url, GreeterContainerConfig.class); } } return null; } public void tearDown() { } public String[] getContainersNames() { String[] c = { GreeterContainer.class.getName() }; return c; } public boolean isUserVisible() { return true; } public Map<String, String> getDeploymentConfigurations (ReadableArchive source) throws IOException { return null; } public String[] getIncompatibleSnifferTypes() { return new String[0]; } }