KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > jfox > deployment > web > WebDeployer


1 /* JFox, the OpenSource J2EE Application Server
2  *
3  * Distributable under GNU LGPL license by gun.org
4  * more details please visit http://www.huihoo.org/jfox
5  */

6
7 package org.jfox.deployment.web;
8
9 import java.util.HashMap JavaDoc;
10 import java.util.Map JavaDoc;
11 import javax.naming.Context JavaDoc;
12 import javax.naming.LinkRef JavaDoc;
13 import javax.naming.NamingException JavaDoc;
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 /**
27  * @author <a HREF="mailto:young_yy@hotmail.com">Young Yang</a>
28  */

29
30 public abstract class WebDeployer extends AbstractComponent implements Deployer, ActiveComponent {
31
32     protected Logger logger = Logger.getLogger(getClass().getName());
33
34     /**
35      * recorde the modules deployed
36      */

37     private Map JavaDoc modules = new HashMap JavaDoc();
38
39     /**
40      * get the WebModule by it's webContext
41      *
42      * @param webContext
43      * @return
44      */

45     public WebModule getWebModule(String JavaDoc 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         // do enterprise context binding for nested web module
58
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 JavaDoc 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 JavaDoc 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 JavaDoc name = env.getName();
92                 Object JavaDoc 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 // checkEjbReference(ejbRef);
101
LinkRef JavaDoc linkRef = new LinkRef JavaDoc(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 // checkResourceRef(resRef);
110
LinkRef JavaDoc linkRef = new LinkRef JavaDoc(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 // checkResourceEnvRef(resourceEnvRef);
119
LinkRef JavaDoc linkRef = new LinkRef JavaDoc(resourceEnvRef.getRefName());
120                 enc.bind(resourceEnvRef.getRefName(), linkRef);
121                 logger.debug("bind resource-env-ref, name: " + resourceEnvRef.getRefName());
122             }
123
124         }
125         catch(NamingException JavaDoc e) {
126             logger.warn("bind EnterpriseContext error", e);
127         }
128     }
129
130     public static void main(String JavaDoc[] args) {
131
132     }
133 }
134
135
Popular Tags