JndiEnvRefsGroupDesc.java

00001 
00027 package org.objectweb.jonas_lib.deployment.api;
00028 
00029 // import java
00030 import java.util.HashMap;
00031 import java.util.Iterator;
00032 import java.util.List;
00033 import java.util.Map;
00034 import java.util.Set;
00035 import java.util.Vector;
00036 
00037 import org.objectweb.jonas_lib.deployment.xml.EjbLocalRef;
00038 import org.objectweb.jonas_lib.deployment.xml.EjbRef;
00039 import org.objectweb.jonas_lib.deployment.xml.EnvEntry;
00040 import org.objectweb.jonas_lib.deployment.xml.JndiEnvRefsGroupXml;
00041 import org.objectweb.jonas_lib.deployment.xml.JonasEjbRef;
00042 import org.objectweb.jonas_lib.deployment.xml.JonasJndiEnvRefsGroupXml;
00043 import org.objectweb.jonas_lib.deployment.xml.JonasMessageDestinationRef;
00044 import org.objectweb.jonas_lib.deployment.xml.JonasResource;
00045 import org.objectweb.jonas_lib.deployment.xml.JonasResourceEnv;
00046 import org.objectweb.jonas_lib.deployment.xml.JonasServiceRef;
00047 import org.objectweb.jonas_lib.deployment.xml.MessageDestinationRef;
00048 import org.objectweb.jonas_lib.deployment.xml.ResourceEnvRef;
00049 import org.objectweb.jonas_lib.deployment.xml.ResourceRef;
00050 import org.objectweb.jonas_lib.deployment.xml.ServiceRef;
00051 
00052 import org.objectweb.jonas_ws.deployment.api.ServiceRefDesc;
00053 import org.objectweb.jonas_ws.deployment.api.WSDeploymentDescException;
00054 
00055 import org.objectweb.jonas.common.Log;
00056 
00057 import org.objectweb.util.monolog.api.BasicLevel;
00058 import org.objectweb.util.monolog.api.Logger;
00059 
00073 public abstract class JndiEnvRefsGroupDesc extends DescriptionGroupDesc implements JndiEnvRefsGroup {
00074 
00078     private Vector resourceEnvRefs = new Vector();
00079 
00083     private Vector resourceRefs = new Vector();
00084 
00088     private Vector envEntries = new Vector();
00089 
00093     private Vector serviceRefs = new Vector();
00094 
00098     private Vector ejbRefs = new Vector();
00099 
00103     private Vector ejbLocalRefs = new Vector();
00104 
00108     private Vector messageDestinationRefs = new Vector();
00109 
00113     private static Logger logger = Log.getLogger(Log.JONAS_WS_PREFIX);
00114 
00126     protected JndiEnvRefsGroupDesc(ClassLoader classLoader,
00127                                    JndiEnvRefsGroupXml app,
00128                                    JonasJndiEnvRefsGroupXml jonasApp,
00129                                    String fileName)
00130       throws DeploymentDescException {
00131 
00132         // test classloader
00133         if (classLoader == null) {
00134             throw new DeploymentDescException("Classloader is null");
00135         }
00136         // display name
00137         displayName = null;
00138         if (app.getDisplayName() != null) {
00139             displayName = app.getDisplayName();
00140         }
00141 
00142         // resource-env-ref
00143         processResourceEnvRef(classLoader, app, jonasApp);
00144 
00145         // resource-ref
00146         processResourceRef(classLoader, app, jonasApp);
00147 
00148         // env-entry
00149         processEnvEntry(app);
00150 
00151         // ejb-ref
00152         processEjbRef(app, jonasApp);
00153 
00154         // ejb-local-ref
00155         processEjbLocalRef(app);
00156 
00157         // service-ref
00158         processServiceRef(classLoader, app, jonasApp, fileName);
00159 
00160         // message-destination-ref
00161         processMessageDestinationRef(app, jonasApp);
00162 
00163 
00164     }
00165 
00171     private void processEnvEntry(JndiEnvRefsGroupXml app) throws DeploymentDescException {
00172         // env-entry
00173         for (Iterator i = app.getEnvEntryList().iterator(); i.hasNext();) {
00174             EnvEntryDesc envEntryDesc = new EnvEntryDesc((EnvEntry) i.next());
00175             envEntries.addElement(envEntryDesc);
00176         }
00177     }
00178 
00186     private void processMessageDestinationRef(JndiEnvRefsGroupXml app, JonasJndiEnvRefsGroupXml jonasApp) throws DeploymentDescException {
00187         List messageDestinationRefList = app.getMessageDestinationRefList();
00188         List jonasMessageDestinationRefList = jonasApp.getJonasMessageDestinationRefList();
00189 
00190 
00191         HashMap messageDestinationRef = new HashMap();
00192         for (Iterator i = jonasMessageDestinationRefList.iterator(); i.hasNext();) {
00193             JonasMessageDestinationRef jonasMessageDestinationRef = (JonasMessageDestinationRef) i.next();
00194             String mdrName = jonasMessageDestinationRef.getMessageDestinationRefName();
00195             boolean findMDRef = false;
00196             for (Iterator j = messageDestinationRefList.iterator(); j.hasNext() && !findMDRef;) {
00197                 MessageDestinationRef mdRef = (MessageDestinationRef) j.next();
00198                 if (mdrName.equals(mdRef.getMessageDestinationRefName())) {
00199                     findMDRef = true;
00200                 }
00201             }
00202             if (!findMDRef) {
00203                 throw new DeploymentDescException("message-destination-ref missing for jonas-message-destination-ref " + mdrName);
00204             }
00205             messageDestinationRef.put(mdrName, jonasMessageDestinationRef);
00206         }
00207         for (Iterator i = messageDestinationRefList.iterator(); i.hasNext();) {
00208             MessageDestinationRef mdRef = (MessageDestinationRef) i.next();
00209             String mdrName = mdRef.getMessageDestinationRefName();
00210             JonasMessageDestinationRef jonasMessageDestinationRef = (JonasMessageDestinationRef) messageDestinationRef.get(mdrName);
00211             if (jonasMessageDestinationRef == null) {
00212                 // The message-destination-link must be specified when there is no jonas-message-destination-ref
00213                 if ((mdRef.getMessageDestinationLink() == null)) {
00214                     // Ignore the message-destination-link syntax "product.jar#ProductMD"
00215                     throw new DeploymentDescException("message-destination-link missing for message-destination-ref-name " + mdrName);
00216                 }            }
00217             messageDestinationRefs.addElement(new MessageDestinationRefDesc(mdRef, jonasMessageDestinationRef));
00218         }
00219     }
00220 
00230     private void processServiceRef(ClassLoader classLoader, JndiEnvRefsGroupXml app, JonasJndiEnvRefsGroupXml jonasApp, String fileName) throws WSDeploymentDescException {
00231         Map links = linksSR2JSR(app, jonasApp);
00232         List serviceRefList = app.getServiceRefList();
00233         for (Iterator i = serviceRefList.iterator(); i.hasNext();) {
00234             ServiceRef serviceRef = ((ServiceRef) i.next());
00235             JonasServiceRef jsr = (JonasServiceRef) links.get(serviceRef.getServiceRefName());
00236             serviceRefs.addElement(new ServiceRefDesc(classLoader, serviceRef, jsr, fileName));
00237         }
00238     }
00239 
00245     private void processEjbLocalRef(JndiEnvRefsGroupXml app) throws DeploymentDescException {
00246         List ejbLocalRefList = app.getEjbLocalRefList();
00247         for (Iterator i = ejbLocalRefList.iterator(); i.hasNext();) {
00248             EjbLocalRef ejbLocalRef = (EjbLocalRef) i.next();
00249             if ((ejbLocalRef.getEjbLink() == null)) {
00250                 throw new DeploymentDescException("ejb-link missing for ejb-ref-name " + ejbLocalRef.getEjbRefName());
00251             }
00252             ejbLocalRefs.addElement(new EjbLocalRefDesc(ejbLocalRef));
00253         }
00254     }
00255 
00263     private void processEjbRef(JndiEnvRefsGroupXml app, JonasJndiEnvRefsGroupXml jonasApp) throws DeploymentDescException {
00264         List ejbRefList = app.getEjbRefList();
00265         List jonasEjbRefList = jonasApp.getJonasEjbRefList();
00266 
00267         HashMap ejbRef = new HashMap();
00268         for (Iterator i = jonasEjbRefList.iterator(); i.hasNext();) {
00269             JonasEjbRef jonasEjbRef = (JonasEjbRef) i.next();
00270             String brName = jonasEjbRef.getEjbRefName();
00271             boolean findBRef = false;
00272             for (Iterator j = ejbRefList.iterator(); j.hasNext() && !findBRef;) {
00273                 EjbRef eRef = (EjbRef) j.next();
00274                 if (brName.equals(eRef.getEjbRefName())) {
00275                     findBRef = true;
00276                 }
00277             }
00278             if (!findBRef) {
00279                 throw new DeploymentDescException("ejb-ref missing for jonas-ejb-ref " + brName);
00280             }
00281             ejbRef.put(brName, jonasEjbRef);
00282         }
00283         for (Iterator i = ejbRefList.iterator(); i.hasNext();) {
00284             EjbRef eRef = (EjbRef) i.next();
00285             String brName = eRef.getEjbRefName();
00286             JonasEjbRef jonasEjbRef = (JonasEjbRef) ejbRef.get(brName);
00287             if (jonasEjbRef == null) {
00288                 // The ejb-link must be specified when there is no jonas-ejb-ref
00289                 if ((eRef.getEjbLink() == null)) {
00290                     // Ignore the ejb-link syntax "product.jar#ProductEJB"
00291                     throw new DeploymentDescException("ejb-link missing for ejb-ref-name " + brName);
00292                 }
00293             }
00294             ejbRefs.addElement(new EjbRefDesc(eRef, jonasEjbRef));
00295         }
00296     }
00297 
00306     private void processResourceRef(ClassLoader classLoader, JndiEnvRefsGroupXml app, JonasJndiEnvRefsGroupXml jonasApp) throws DeploymentDescException {
00307         List resourceRefList = app.getResourceRefList();
00308         List jonasResourceList = jonasApp.getJonasResourceList();
00309         HashMap resource = new HashMap();
00310         for (Iterator i = jonasResourceList.iterator(); i.hasNext();) {
00311             JonasResource jonasResource = ((JonasResource) i.next());
00312             String rName = jonasResource.getResRefName();
00313             boolean findResRef = false;
00314             for (Iterator j = resourceRefList.iterator(); j.hasNext() && !findResRef;) {
00315                 if (rName.equals(((ResourceRef) j.next()).getResRefName())) {
00316                     findResRef = true;
00317                 }
00318             }
00319             if (!findResRef) {
00320                 throw new DeploymentDescException("resource-ref missing for jonas-resource " + rName);
00321             }
00322             resource.put(rName, jonasResource);
00323         }
00324 
00325         for (Iterator i = resourceRefList.iterator(); i.hasNext();) {
00326             ResourceRef resourceRef = ((ResourceRef) i.next());
00327             String rName = resourceRef.getResRefName();
00328             if (!resource.containsKey(rName)) {
00329                 throw new DeploymentDescException("jonas-resource missing for res-ref-name " + rName);
00330             }
00331             resourceRefs.addElement(new ResourceRefDesc(classLoader, resourceRef, (JonasResource) resource.get(rName)));
00332         }
00333     }
00334 
00343     private void processResourceEnvRef(ClassLoader classLoader, JndiEnvRefsGroupXml app, JonasJndiEnvRefsGroupXml jonasApp) throws DeploymentDescException {
00344         List resourceEnvRefList = app.getResourceEnvRefList();
00345         List jonasResourceEnvList = jonasApp.getJonasResourceEnvList();
00346         HashMap resourceEnv = new HashMap();
00347         for (Iterator i = jonasResourceEnvList.iterator(); i.hasNext();) {
00348             JonasResourceEnv jonasResourceEnv = (JonasResourceEnv) i.next();
00349             String rName = jonasResourceEnv.getResourceEnvRefName();
00350             boolean findResRef = false;
00351             for (Iterator j = resourceEnvRefList.iterator(); j.hasNext() && !findResRef;) {
00352                 ResourceEnvRef resourceEnvRef = (ResourceEnvRef) j.next();
00353                 if (rName.equals(resourceEnvRef.getResourceEnvRefName())) {
00354                     findResRef = true;
00355                 }
00356             }
00357             if (!findResRef) {
00358                 throw new DeploymentDescException("resource-env-ref missing for jonas-resource-env " + rName);
00359             }
00360             resourceEnv.put(rName, jonasResourceEnv);
00361         }
00362         for (Iterator i = resourceEnvRefList.iterator(); i.hasNext();) {
00363             ResourceEnvRef resourceEnvRef = (ResourceEnvRef) i.next();
00364             String rName = resourceEnvRef.getResourceEnvRefName();
00365             if (!resourceEnv.containsKey(rName)) {
00366                 throw new DeploymentDescException("jonas-resource-env missing for resource-env-ref-name " + rName);
00367             }
00368             resourceEnvRefs.addElement(new ResourceEnvRefDesc(classLoader, resourceEnvRef,
00369                     (JonasResourceEnv) resourceEnv.get(rName)));
00370         }
00371     }
00372 
00378     private Map linksSR2JSR(JndiEnvRefsGroupXml app, JonasJndiEnvRefsGroupXml jonasApp) {
00379         Map res = new HashMap();
00380         // for each sr
00381         for (Iterator i = app.getServiceRefList().iterator(); i.hasNext();) {
00382             ServiceRef sr = (ServiceRef) i.next();
00383             res.put(sr.getServiceRefName(), null);
00384         }
00385         // jonas-<desc>.xml
00386         if (jonasApp != null) {
00387 
00388             // get all ServiceRef.name
00389             Set keys = res.keySet();
00390 
00391             // for each jonas service ref
00392             for (Iterator i = jonasApp.getJonasServiceRefList().iterator(); i.hasNext();) {
00393                 JonasServiceRef jsr = (JonasServiceRef) i.next();
00394                 String srName = jsr.getServiceRefName();
00395 
00396                 if (keys.contains(srName)) {
00397                     // jonas-service-ref linked to service-ref
00398                     res.put(srName, jsr);
00399                 } else {
00400                     String err = "jonas-service-ref '" + srName + "' is not linked to any service-ref. It will be ignored."; //getI18n().getMessage("WSDeploymentDesc.wsdlDeclareUnknownPort", wsdlf.getName());
00401                     logger.log(BasicLevel.WARN, err);
00402                 }
00403             }
00404         }
00405         return res;
00406     }
00407 
00413     public ResourceEnvRefDesc[] getResourceEnvRefDesc() {
00414         ResourceEnvRefDesc[] ret = new ResourceEnvRefDesc[resourceEnvRefs.size()];
00415         resourceEnvRefs.copyInto(ret);
00416         return ret;
00417     }
00418 
00424     public ResourceRefDesc[] getResourceRefDesc() {
00425         ResourceRefDesc[] ret = new ResourceRefDesc[resourceRefs.size()];
00426         resourceRefs.copyInto(ret);
00427         return ret;
00428     }
00429 
00435     public EnvEntryDesc[] getEnvEntryDesc() {
00436         EnvEntryDesc[] ret = new EnvEntryDesc[envEntries.size()];
00437         envEntries.copyInto(ret);
00438         return ret;
00439     }
00440 
00446     public EjbRefDesc[] getEjbRefDesc() {
00447         EjbRefDesc[] ret = new EjbRefDesc[ejbRefs.size()];
00448         ejbRefs.copyInto(ret);
00449         return ret;
00450     }
00451 
00457     public EjbLocalRefDesc[] getEjbLocalRefDesc() {
00458         EjbLocalRefDesc[] ret = new EjbLocalRefDesc[ejbLocalRefs.size()];
00459         ejbLocalRefs.copyInto(ret);
00460         return ret;
00461     }
00462 
00468     public ServiceRefDesc[] getServiceRefDesc() {
00469         ServiceRefDesc[] ret = new ServiceRefDesc[serviceRefs.size()];
00470         serviceRefs.copyInto(ret);
00471         return ret;
00472     }
00473 
00478     public MessageDestinationRefDesc[] getMessageDestinationRefDesc() {
00479         MessageDestinationRefDesc[] ret = new MessageDestinationRefDesc[messageDestinationRefs.size()];
00480         messageDestinationRefs.copyInto(ret);
00481         return ret;
00482     }
00483 }

Generated on Tue Feb 15 15:05:50 2005 for JOnAS by  doxygen 1.3.9.1