1 6 7 package org.jfox.deployment.web; 8 9 import java.util.HashMap ; 10 import java.util.Map ; 11 import javax.naming.Context ; 12 import javax.naming.LinkRef ; 13 import javax.naming.NamingException ; 14 15 import org.jfox.ejb.meta.EJBReferenceDescriptor; 16 import org.jfox.ejb.meta.EnvEntryDescriptor; 17 import org.jfox.ejb.meta.ResourceEnvRefDescriptor; 18 import org.jfox.ejb.meta.ResourceRefDescriptor; 19 import org.jfox.ioc.common.AbstractComponent; 20 import org.jfox.ioc.deploy.DeployException; 21 import org.jfox.ioc.deployment.Deployable; 22 import org.jfox.ioc.deployment.Deployer; 23 import org.jfox.ioc.ext.ActiveComponent; 24 import org.jfox.ioc.logger.Logger; 25 26 29 30 public abstract class WebDeployer extends AbstractComponent implements Deployer, ActiveComponent { 31 32 protected Logger logger = Logger.getLogger(getClass().getName()); 33 34 37 private Map modules = new HashMap (); 38 39 45 public WebModule getWebModule(String webContext) { 46 return (WebModule) modules.get(webContext); 47 } 48 49 public final void deploy(Deployable webModule) throws DeployException { 50 if(!this.isStarted()) { 51 throw new DeployException("Web container not started, can not deploy Web Application"); 52 } 53 if(!(webModule instanceof WebModule)) { 54 throw new DeployException("can not deploy non-WebModule " + webModule.getClass().getName()); 55 } 56 57 if(webModule instanceof NestedWebModule) { 59 NestedWebModule nestedWebModule = (NestedWebModule) webModule; 60 bindReference(nestedWebModule.getEnterpriseContext(), nestedWebModule.getWebDescriptor()); 61 62 } 63 64 modules.put(((WebModule) webModule).getWebContext(), webModule); 65 doDeploy((WebModule) webModule); 66 } 67 68 public final void undeploy(Deployable comp) { 69 if(comp instanceof WebModule) { 70 modules.remove(((WebModule) comp).getWebContext()); 71 doUndeploy((WebModule) comp); 72 } 73 } 74 75 public final void undeploy(String webContext) { 76 WebModule webModule = (WebModule) modules.get(webContext); 77 undeploy(webModule); 78 } 79 80 protected abstract boolean isStarted(); 81 82 protected abstract void doDeploy(WebModule webModule) throws DeployException; 83 84 protected abstract void doUndeploy(WebModule webModule); 85 86 private void bindReference(Context enc, WebDescriptor webDescriptor) { 87 try { 88 EnvEntryDescriptor[] entries = webDescriptor.getEnvEntries(); 89 for(int i = 0; i < entries.length; i++) { 90 EnvEntryDescriptor env = (EnvEntryDescriptor) entries[i]; 91 String name = env.getName(); 92 Object value = env.getValueObject(); 93 enc.bind(name, value); 94 logger.debug("bind env-entry, name: " + name); 95 } 96 97 EJBReferenceDescriptor[] ejbRefs = webDescriptor.getEjbReferences(); 98 for(int i = 0; i < ejbRefs.length; i++) { 99 EJBReferenceDescriptor ejbRef = (EJBReferenceDescriptor) ejbRefs[i]; 100 LinkRef linkRef = new LinkRef (ejbRef.getRefName()); 102 enc.bind(ejbRef.getRefName(), linkRef); 103 logger.debug("bind ejf-ref, name: " + ejbRef.getRefName()); 104 } 105 106 ResourceRefDescriptor[] resRefs = webDescriptor.getResourceReferences(); 107 for(int i = 0; i < resRefs.length; i++) { 108 ResourceRefDescriptor resRef = (ResourceRefDescriptor) resRefs[i]; 109 LinkRef linkRef = new LinkRef (resRef.getRefName()); 111 enc.bind(resRef.getRefName(), linkRef); 112 logger.debug("bind resource-ref, name: " + resRef.getRefName()); 113 } 114 115 ResourceEnvRefDescriptor[] resourceEnvRefs = webDescriptor.getResourceEnvReferences(); 116 for(int i = 0; i < resourceEnvRefs.length; i++) { 117 ResourceEnvRefDescriptor resourceEnvRef = (ResourceEnvRefDescriptor) resourceEnvRefs[i]; 118 LinkRef linkRef = new LinkRef (resourceEnvRef.getRefName()); 120 enc.bind(resourceEnvRef.getRefName(), linkRef); 121 logger.debug("bind resource-env-ref, name: " + resourceEnvRef.getRefName()); 122 } 123 124 } 125 catch(NamingException e) { 126 logger.warn("bind EnterpriseContext error", e); 127 } 128 } 129 130 public static void main(String [] args) { 131 132 } 133 } 134 135 | Popular Tags |