static ServiceElement create( final ServiceDetails serviceDetails, final ServiceDeployment deployment) throws IOException { ServiceElement service = new ServiceElement(); String websterUrl; if (serviceDetails.webster == null) { if (deployment.getWebsterUrl() == null) { websterUrl = Sorcer.getWebsterUrl(); if (logger.isDebugEnabled()) logger.debug("Set code base derived from Sorcer.getWebsterUrl: " + websterUrl); } else { websterUrl = deployment.getWebsterUrl(); if (logger.isDebugEnabled()) logger.debug("Set code base derived from Deployment: " + websterUrl); } } else { websterUrl = serviceDetails.webster; } /* Create client (export) ClassBundle */ List<ClassBundle> exports = new ArrayList<ClassBundle>(); for (String s : serviceDetails.interfaces) { ClassBundle export = new ClassBundle(s); if (serviceDetails.codebaseJars.length == 1 && Artifact.isArtifact(serviceDetails.codebaseJars[0])) { export.setArtifact(serviceDetails.codebaseJars[0]); } else { export.setJARs(appendJars(commonDLJars, serviceDetails.codebaseJars)); export.setCodebase(websterUrl); } exports.add(export); } /* Create service implementation ClassBundle */ ClassBundle main = new ClassBundle( serviceDetails.providerClass == null ? deployment.getImpl() : serviceDetails.providerClass); if (serviceDetails.implJars.length == 1 && Artifact.isArtifact(serviceDetails.implJars[0])) { main.setArtifact(serviceDetails.implJars[0]); } else { main.setJARs(serviceDetails.implJars); main.setCodebase(websterUrl); } /* Set ClassBundles to ServiceElement */ service.setComponentBundle(main); service.setExportBundles(exports.toArray(new ClassBundle[exports.size()])); String serviceName; if (serviceDetails.name == null) { /* Get the (simple) name from the fully qualified interface */ if (deployment.getName() == null) { StringBuilder nameBuilder = new StringBuilder(); for (String s : serviceDetails.interfaces) { String value; int ndx = s.lastIndexOf("."); if (ndx > 0) { value = s.substring(ndx + 1); } else { value = s; } if (nameBuilder.length() > 0) { nameBuilder.append(" | "); } nameBuilder.append(value); } serviceName = nameBuilder.toString(); } else { serviceName = deployment.getName(); } } else { serviceName = serviceDetails.name; } if (serviceDetails.maxPerNode > 0) { service.setMaxPerMachine(serviceDetails.maxPerNode); } if (serviceDetails.architecture != null || serviceDetails.operatingSystems.length > 0) { ServiceLevelAgreements slas = new ServiceLevelAgreements(); SystemRequirements systemRequirements = new SystemRequirements(); if (serviceDetails.architecture != null) { Map<String, Object> attributeMap = new HashMap<String, Object>(); attributeMap.put(ProcessorArchitecture.ARCHITECTURE, serviceDetails.architecture); SystemComponent systemComponent = new SystemComponent("Processor", ProcessorArchitecture.class.getName(), attributeMap); systemRequirements.addSystemComponent(systemComponent); } for (String s : serviceDetails.operatingSystems) { String opSys = checkAndMaybeFixOpSys(s); Map<String, Object> attributeMap = new HashMap<String, Object>(); attributeMap.put(OperatingSystem.NAME, opSys); SystemComponent operatingSystem = new SystemComponent("OperatingSystem", OperatingSystem.class.getName(), attributeMap); systemRequirements.addSystemComponent(operatingSystem); } slas.setServiceRequirements(systemRequirements); service.setServiceLevelAgreements(slas); } if (serviceDetails.ips.length > 0) { SystemRequirements systemRequirements = service.getServiceLevelAgreements().getSystemRequirements(); systemRequirements.addSystemComponent(getSystemComponentAddresses(false, serviceDetails.ips)); } if (serviceDetails.excludeIps.length > 0) { SystemRequirements systemRequirements = service.getServiceLevelAgreements().getSystemRequirements(); systemRequirements.addSystemComponent( getSystemComponentAddresses(true, serviceDetails.excludeIps)); } /* Create simple ServiceBeanConfig */ Map<String, Object> configMap = new HashMap<String, Object>(); configMap.put(ServiceBeanConfig.NAME, serviceName); configMap.put(ServiceBeanConfig.GROUPS, Sorcer.getLookupGroups()); ServiceBeanConfig sbc = new ServiceBeanConfig(configMap, new String[] {deployment.getConfig()}); sbc.addAdditionalEntries( new DeployInfo( deployment.getType().name(), deployment.getUnique().name(), deployment.getIdle())); service.setServiceBeanConfig(sbc); service.setPlanned(deployment.getMultiplicity()); /* If the service is to be forked, create an ExecDescriptor */ if (serviceDetails.fork) { service.setFork(true); if (serviceDetails.jvmArgs != null) { ExecDescriptor execDescriptor = new ExecDescriptor(); execDescriptor.setInputArgs(serviceDetails.jvmArgs); service.setExecDescriptor(execDescriptor); } } if (logger.isDebugEnabled()) logger.debug("Generated Service Element :" + service); return service; }