00001
00027 package org.objectweb.jonas_lib.deployment.api;
00028
00029
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
00133 if (classLoader == null) {
00134 throw new DeploymentDescException("Classloader is null");
00135 }
00136
00137 displayName = null;
00138 if (app.getDisplayName() != null) {
00139 displayName = app.getDisplayName();
00140 }
00141
00142
00143 processResourceEnvRef(classLoader, app, jonasApp);
00144
00145
00146 processResourceRef(classLoader, app, jonasApp);
00147
00148
00149 processEnvEntry(app);
00150
00151
00152 processEjbRef(app, jonasApp);
00153
00154
00155 processEjbLocalRef(app);
00156
00157
00158 processServiceRef(classLoader, app, jonasApp, fileName);
00159
00160
00161 processMessageDestinationRef(app, jonasApp);
00162
00163
00164 }
00165
00171 private void processEnvEntry(JndiEnvRefsGroupXml app) throws DeploymentDescException {
00172
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
00213 if ((mdRef.getMessageDestinationLink() == null)) {
00214
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
00289 if ((eRef.getEjbLink() == null)) {
00290
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
00381 for (Iterator i = app.getServiceRefList().iterator(); i.hasNext();) {
00382 ServiceRef sr = (ServiceRef) i.next();
00383 res.put(sr.getServiceRefName(), null);
00384 }
00385
00386 if (jonasApp != null) {
00387
00388
00389 Set keys = res.keySet();
00390
00391
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
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.";
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 }