[Carbon-dev] svn commit r42769 - in trunk/carbon-components: javascript-hostobjects/hostObject-service/src/main/java/org/wso2/carbon/javascript/hostobjects/hostobjectservice javascript-hostobjects/hostObject-service/src/main/java/org/wso2/carbon/javascript/hostobjects/hostobjectservice/service javascript-hostobjects/system javascript-hostobjects/system/src/main/java/org/wso2/carbon/javascript/hostobjects/system/internal javascript-hostobjects/system/src/main/java/org/wso2/carbon/javascript/hostobjects/system/service javascript-hostobjects/wsrequest javascript-hostobjects/wsrequest/src/main/java/org/wso2/carbon/javascript/hostobjects/wsrequest/internal javascript-hostobjects/wsrequest/src/main/java/org/wso2/carbon/javascript/hostobjects/wsrequest/service js-services/org.wso2.carbon.jsservices/src/main/java/org/wso2/carbon/jsservices/internal mashup-utils/src/main/java/org/wso2/carbon/mashup

keith at wso2.com keith at wso2.com
Sat Aug 8 00:06:39 PDT 2009


Author: keith
Date: Sat Aug  8 00:06:39 2009
New Revision: 42769
URL: http://wso2.org/svn/browse/wso2?view=rev&revision=42769

Log:
Fix for Mashup-1190. Fixing this not registering the JS Deployer untill all required services of Host Objects are satisfied.


Added:
   trunk/carbon-components/javascript-hostobjects/system/src/main/java/org/wso2/carbon/javascript/hostobjects/system/service/
   trunk/carbon-components/javascript-hostobjects/system/src/main/java/org/wso2/carbon/javascript/hostobjects/system/service/SystemHostObjectService.java
   trunk/carbon-components/javascript-hostobjects/wsrequest/src/main/java/org/wso2/carbon/javascript/hostobjects/wsrequest/service/
   trunk/carbon-components/javascript-hostobjects/wsrequest/src/main/java/org/wso2/carbon/javascript/hostobjects/wsrequest/service/WSRequestHostObjectService.java
   trunk/carbon-components/js-services/org.wso2.carbon.jsservices/src/main/java/org/wso2/carbon/jsservices/internal/HostObjectServiceListener.java
   trunk/carbon-components/mashup-utils/src/main/java/org/wso2/carbon/mashup/HostObjectServiceInterface.java
Modified:
   trunk/carbon-components/javascript-hostobjects/hostObject-service/src/main/java/org/wso2/carbon/javascript/hostobjects/hostobjectservice/HostObjectDetails.java
   trunk/carbon-components/javascript-hostobjects/hostObject-service/src/main/java/org/wso2/carbon/javascript/hostobjects/hostobjectservice/HostObjectRegistry.java
   trunk/carbon-components/javascript-hostobjects/hostObject-service/src/main/java/org/wso2/carbon/javascript/hostobjects/hostobjectservice/service/HostObjectService.java
   trunk/carbon-components/javascript-hostobjects/system/pom.xml
   trunk/carbon-components/javascript-hostobjects/system/src/main/java/org/wso2/carbon/javascript/hostobjects/system/internal/SystemHostObjectServiceComponent.java
   trunk/carbon-components/javascript-hostobjects/wsrequest/pom.xml
   trunk/carbon-components/javascript-hostobjects/wsrequest/src/main/java/org/wso2/carbon/javascript/hostobjects/wsrequest/internal/WSRequestServiceComponent.java
   trunk/carbon-components/js-services/org.wso2.carbon.jsservices/src/main/java/org/wso2/carbon/jsservices/internal/JSServicesServiceComponent.java

Modified: trunk/carbon-components/javascript-hostobjects/hostObject-service/src/main/java/org/wso2/carbon/javascript/hostobjects/hostobjectservice/HostObjectDetails.java
URL: http://wso2.org/svn/browse/wso2/trunk/carbon-components/javascript-hostobjects/hostObject-service/src/main/java/org/wso2/carbon/javascript/hostobjects/hostobjectservice/HostObjectDetails.java?rev=42769&r1=42768&r2=42769&view=diff
==============================================================================
--- trunk/carbon-components/javascript-hostobjects/hostObject-service/src/main/java/org/wso2/carbon/javascript/hostobjects/hostobjectservice/HostObjectDetails.java	(original)
+++ trunk/carbon-components/javascript-hostobjects/hostObject-service/src/main/java/org/wso2/carbon/javascript/hostobjects/hostobjectservice/HostObjectDetails.java	Sat Aug  8 00:06:39 2009
@@ -5,6 +5,7 @@
     private String className;
     private String hostObjectName;
     private String globalObjectName;
+    private boolean hostObjectServiceNeeded = false;
 
     public String getClassName() {
         return className;
@@ -29,4 +30,12 @@
     public void setGlobalObjectName(String globalObjectName) {
         this.globalObjectName = globalObjectName;
     }
+
+    public boolean isHostObjectServiceNeeded() {
+        return hostObjectServiceNeeded;
+    }
+
+    public void setHostObjectServiceNeeded(boolean hostObjectServiceNeeded) {
+        this.hostObjectServiceNeeded = hostObjectServiceNeeded;
+    }
 }

Modified: trunk/carbon-components/javascript-hostobjects/hostObject-service/src/main/java/org/wso2/carbon/javascript/hostobjects/hostobjectservice/HostObjectRegistry.java
URL: http://wso2.org/svn/browse/wso2/trunk/carbon-components/javascript-hostobjects/hostObject-service/src/main/java/org/wso2/carbon/javascript/hostobjects/hostobjectservice/HostObjectRegistry.java?rev=42769&r1=42768&r2=42769&view=diff
==============================================================================
--- trunk/carbon-components/javascript-hostobjects/hostObject-service/src/main/java/org/wso2/carbon/javascript/hostobjects/hostobjectservice/HostObjectRegistry.java	(original)
+++ trunk/carbon-components/javascript-hostobjects/hostObject-service/src/main/java/org/wso2/carbon/javascript/hostobjects/hostobjectservice/HostObjectRegistry.java	Sat Aug  8 00:06:39 2009
@@ -12,7 +12,8 @@
     Set<Bundle> activated = new HashSet<Bundle>();
     HostObjectService hostObjectService = HostObjectService.instance();
     private static final Log log = LogFactory.getLog(HostObjectRegistry.class);
-    private static final String HOSSTOBJECT_HEADER = "JavaScript-HostObject";
+    private static final String HOSTOBJECT_HEADER = "JavaScript-HostObject";
+    private static final String HOSTOBJECT_SERVICE_NEEDED = "HostObjectServiceNeeded";
 
     public void register(Bundle bundle) {
       synchronized (activated) {
@@ -40,8 +41,12 @@
       if (clazz != null) {
           hostObjectService.addHostObjectClass(className);
           String hostObjectName = hostObjectDetails.getHostObjectName();
-          if (hostObjectName != null)
-          hostObjectService.addGlobalObject(hostObjectName, hostObjectDetails.getGlobalObjectName());
+          if (hostObjectName != null) {
+            hostObjectService.addGlobalObject(hostObjectName, hostObjectDetails.getGlobalObjectName());
+          }
+          if (hostObjectDetails.isHostObjectServiceNeeded()) {
+            hostObjectService.addHostObjectThatNeedServices(className); 
+          }
       } else throw new IllegalArgumentException(
           "Can not find class " + className);
     }
@@ -62,18 +67,24 @@
 
     private List<HostObjectDetails> getHostObjectDetails(Bundle bundle) {
         List<HostObjectDetails> hostObjectList = new ArrayList<HostObjectDetails>();
-      String header = (String) bundle.getHeaders().get(HOSSTOBJECT_HEADER);
+      String header = (String) bundle.getHeaders().get(HOSTOBJECT_HEADER);
       if (header != null) {
           String clauses[] = header.split(",");
           for (String clause : clauses) {
               String parts[] = clause.split(";");
               HostObjectDetails hostObjectDetails = new HostObjectDetails();
               hostObjectDetails.setClassName(parts[0]);
-              if (parts.length == 2) {
-                  String innerParts[] = parts[1].trim().split("\\s*=\\s*");
-                  if (innerParts.length == 2) {
-                      hostObjectDetails.setHostObjectName(innerParts[0]);
-                      hostObjectDetails.setGlobalObjectName(innerParts[1]);
+              if (parts.length > 1) {
+                  for (int i = 1; i < parts.length; i++) {
+                      String innerParts[] = parts[i].trim().split("\\s*=\\s*");
+                      if (innerParts.length == 2) {
+                          if (HOSTOBJECT_SERVICE_NEEDED.equals(innerParts[0]) && Boolean.valueOf(innerParts[1])) {
+                              hostObjectDetails.setHostObjectServiceNeeded(true);
+                          } else {
+                            hostObjectDetails.setHostObjectName(innerParts[0]);
+                            hostObjectDetails.setGlobalObjectName(innerParts[1]);
+                          }
+                      }
                   }
               }
               hostObjectList.add(hostObjectDetails);

Modified: trunk/carbon-components/javascript-hostobjects/hostObject-service/src/main/java/org/wso2/carbon/javascript/hostobjects/hostobjectservice/service/HostObjectService.java
URL: http://wso2.org/svn/browse/wso2/trunk/carbon-components/javascript-hostobjects/hostObject-service/src/main/java/org/wso2/carbon/javascript/hostobjects/hostobjectservice/service/HostObjectService.java?rev=42769&r1=42768&r2=42769&view=diff
==============================================================================
--- trunk/carbon-components/javascript-hostobjects/hostObject-service/src/main/java/org/wso2/carbon/javascript/hostobjects/hostobjectservice/service/HostObjectService.java	(original)
+++ trunk/carbon-components/javascript-hostobjects/hostObject-service/src/main/java/org/wso2/carbon/javascript/hostobjects/hostobjectservice/service/HostObjectService.java	Sat Aug  8 00:06:39 2009
@@ -8,6 +8,7 @@
 public class HostObjectService {
 
     private List<String> hostObjectClasses = new ArrayList<String>();
+    private List<String> hostObjectsThatNeedServices = new ArrayList<String>();
     private Map<String,String> globalObjects = new HashMap<String, String>();
 
     private HostObjectService() {
@@ -31,6 +32,14 @@
         return globalObjects;
     }
 
+    public void addHostObjectThatNeedServices(String className) {
+        hostObjectsThatNeedServices.add(className);
+    }
+
+    public List<String> getHostObjectsThatNeedServices() {
+        return hostObjectsThatNeedServices;
+    }
+
     public void addHostObjectClass(String className) {
         hostObjectClasses.add(className);
     }

Modified: trunk/carbon-components/javascript-hostobjects/system/pom.xml
URL: http://wso2.org/svn/browse/wso2/trunk/carbon-components/javascript-hostobjects/system/pom.xml?rev=42769&r1=42768&r2=42769&view=diff
==============================================================================
--- trunk/carbon-components/javascript-hostobjects/system/pom.xml	(original)
+++ trunk/carbon-components/javascript-hostobjects/system/pom.xml	Sat Aug  8 00:06:39 2009
@@ -147,7 +147,7 @@
                             org.w3c.dom,
                             *;resolution:=optional
                         </Import-Package>
-                        <JavaScript-HostObject>org.wso2.carbon.javascript.hostobjects.system.SystemHostObject;System=system</JavaScript-HostObject>
+                        <JavaScript-HostObject>org.wso2.carbon.javascript.hostobjects.system.SystemHostObject;System=system;HostObjectServiceNeeded=true</JavaScript-HostObject>
                     </instructions>
                 </configuration>
             </plugin>

Modified: trunk/carbon-components/javascript-hostobjects/system/src/main/java/org/wso2/carbon/javascript/hostobjects/system/internal/SystemHostObjectServiceComponent.java
URL: http://wso2.org/svn/browse/wso2/trunk/carbon-components/javascript-hostobjects/system/src/main/java/org/wso2/carbon/javascript/hostobjects/system/internal/SystemHostObjectServiceComponent.java?rev=42769&r1=42768&r2=42769&view=diff
==============================================================================
--- trunk/carbon-components/javascript-hostobjects/system/src/main/java/org/wso2/carbon/javascript/hostobjects/system/internal/SystemHostObjectServiceComponent.java	(original)
+++ trunk/carbon-components/javascript-hostobjects/system/src/main/java/org/wso2/carbon/javascript/hostobjects/system/internal/SystemHostObjectServiceComponent.java	Sat Aug  8 00:06:39 2009
@@ -21,12 +21,14 @@
 import org.apache.synapse.task.service.TaskManagementService;
 import org.apache.synapse.task.TaskScheduler;
 import org.osgi.service.component.ComponentContext;
+import org.osgi.framework.BundleContext;
 import org.wso2.carbon.task.services.JobMetaDataProviderService;
 import org.wso2.carbon.task.services.TaskDescriptionRepositoryService;
 import org.wso2.carbon.task.services.TaskSchedulerService;
 import org.wso2.carbon.javascript.hostobjects.system.FunctionSchedulingAdminService;
 import org.wso2.carbon.javascript.hostobjects.system.FunctionSchedulingJobMetaDataProviderService;
 import org.wso2.carbon.javascript.hostobjects.system.FunctionSchedulingManager;
+import org.wso2.carbon.javascript.hostobjects.system.service.SystemHostObjectService;
 import org.wso2.carbon.utils.ConfigurationContextService;
 
 import java.util.Properties;
@@ -73,10 +75,13 @@
             FunctionSchedulingManager.getInstance().init(configCtxSvc,
                         repositoryService.getTaskDescriptionRepository(), taskScheduler);
 
-            context.getBundleContext().registerService(TaskManagementService.class.getName(),
+            BundleContext bundleContext = context.getBundleContext();
+            bundleContext.registerService(TaskManagementService.class.getName(),
                     new FunctionSchedulingAdminService(), null);
-            context.getBundleContext().registerService(JobMetaDataProviderService.class.getName(),
+            bundleContext.registerService(JobMetaDataProviderService.class.getName(),
                     new FunctionSchedulingJobMetaDataProviderService(), null);
+            bundleContext.registerService(SystemHostObjectService.class.getName(),
+                    new SystemHostObjectService(), null);
         }
     }
 

Added: trunk/carbon-components/javascript-hostobjects/system/src/main/java/org/wso2/carbon/javascript/hostobjects/system/service/SystemHostObjectService.java
URL: http://wso2.org/svn/browse/wso2/trunk/carbon-components/javascript-hostobjects/system/src/main/java/org/wso2/carbon/javascript/hostobjects/system/service/SystemHostObjectService.java?pathrev=42769
==============================================================================
--- (empty file)
+++ trunk/carbon-components/javascript-hostobjects/system/src/main/java/org/wso2/carbon/javascript/hostobjects/system/service/SystemHostObjectService.java	Sat Aug  8 00:06:39 2009
@@ -0,0 +1,11 @@
+package org.wso2.carbon.javascript.hostobjects.system.service;
+
+import org.wso2.carbon.mashup.HostObjectServiceInterface;
+import org.wso2.carbon.javascript.hostobjects.system.SystemHostObject;
+
+public class SystemHostObjectService implements HostObjectServiceInterface {
+
+    public String getHostObjectClassName() {
+        return SystemHostObject.class.getName();
+    }
+}

Modified: trunk/carbon-components/javascript-hostobjects/wsrequest/pom.xml
URL: http://wso2.org/svn/browse/wso2/trunk/carbon-components/javascript-hostobjects/wsrequest/pom.xml?rev=42769&r1=42768&r2=42769&view=diff
==============================================================================
--- trunk/carbon-components/javascript-hostobjects/wsrequest/pom.xml	(original)
+++ trunk/carbon-components/javascript-hostobjects/wsrequest/pom.xml	Sat Aug  8 00:06:39 2009
@@ -160,7 +160,7 @@
                             javax.xml.stream.*,
                             *;resolution:=optional
                         </Import-Package>
-                        <JavaScript-HostObject>org.wso2.carbon.javascript.hostobjects.wsrequest.WSRequestHostObject,org.wso2.carbon.javascript.hostobjects.wsrequest.WebServiceErrorHostObject</JavaScript-HostObject>
+                        <JavaScript-HostObject>org.wso2.carbon.javascript.hostobjects.wsrequest.WSRequestHostObject;HostObjectServiceNeeded=true,org.wso2.carbon.javascript.hostobjects.wsrequest.WebServiceErrorHostObject</JavaScript-HostObject>
                     </instructions>
                 </configuration>
             </plugin>

Modified: trunk/carbon-components/javascript-hostobjects/wsrequest/src/main/java/org/wso2/carbon/javascript/hostobjects/wsrequest/internal/WSRequestServiceComponent.java
URL: http://wso2.org/svn/browse/wso2/trunk/carbon-components/javascript-hostobjects/wsrequest/src/main/java/org/wso2/carbon/javascript/hostobjects/wsrequest/internal/WSRequestServiceComponent.java?rev=42769&r1=42768&r2=42769&view=diff
==============================================================================
--- trunk/carbon-components/javascript-hostobjects/wsrequest/src/main/java/org/wso2/carbon/javascript/hostobjects/wsrequest/internal/WSRequestServiceComponent.java	(original)
+++ trunk/carbon-components/javascript-hostobjects/wsrequest/src/main/java/org/wso2/carbon/javascript/hostobjects/wsrequest/internal/WSRequestServiceComponent.java	Sat Aug  8 00:06:39 2009
@@ -3,8 +3,10 @@
 import org.osgi.framework.BundleActivator;
 import org.osgi.framework.BundleContext;
 import org.osgi.util.tracker.ServiceTracker;
+import org.osgi.service.component.ComponentContext;
 import org.wso2.carbon.utils.ConfigurationContextService;
 import org.wso2.carbon.javascript.hostobjects.hostobjectservice.service.HostObjectService;
+import org.wso2.carbon.javascript.hostobjects.wsrequest.service.WSRequestHostObjectService;
 
 
 /**
@@ -27,5 +29,11 @@
 
     public static ConfigurationContextService getConfigurationContextService() {
         return configurationContextService;
-    }    
+    }
+
+    protected void activate(ComponentContext context) {
+
+        context.getBundleContext().registerService(WSRequestHostObjectService.class.getName(),
+                    new WSRequestHostObjectService(), null);
+    }
 }

Added: trunk/carbon-components/javascript-hostobjects/wsrequest/src/main/java/org/wso2/carbon/javascript/hostobjects/wsrequest/service/WSRequestHostObjectService.java
URL: http://wso2.org/svn/browse/wso2/trunk/carbon-components/javascript-hostobjects/wsrequest/src/main/java/org/wso2/carbon/javascript/hostobjects/wsrequest/service/WSRequestHostObjectService.java?pathrev=42769
==============================================================================
--- (empty file)
+++ trunk/carbon-components/javascript-hostobjects/wsrequest/src/main/java/org/wso2/carbon/javascript/hostobjects/wsrequest/service/WSRequestHostObjectService.java	Sat Aug  8 00:06:39 2009
@@ -0,0 +1,11 @@
+package org.wso2.carbon.javascript.hostobjects.wsrequest.service;
+
+import org.wso2.carbon.mashup.HostObjectServiceInterface;
+import org.wso2.carbon.javascript.hostobjects.wsrequest.WSRequestHostObject;
+
+public class WSRequestHostObjectService implements HostObjectServiceInterface {
+
+    public String getHostObjectClassName() {
+        return WSRequestHostObject.class.getName();
+    }
+}

Added: trunk/carbon-components/js-services/org.wso2.carbon.jsservices/src/main/java/org/wso2/carbon/jsservices/internal/HostObjectServiceListener.java
URL: http://wso2.org/svn/browse/wso2/trunk/carbon-components/js-services/org.wso2.carbon.jsservices/src/main/java/org/wso2/carbon/jsservices/internal/HostObjectServiceListener.java?pathrev=42769
==============================================================================
--- (empty file)
+++ trunk/carbon-components/js-services/org.wso2.carbon.jsservices/src/main/java/org/wso2/carbon/jsservices/internal/HostObjectServiceListener.java	Sat Aug  8 00:06:39 2009
@@ -0,0 +1,92 @@
+package org.wso2.carbon.jsservices.internal;
+
+import org.osgi.framework.*;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.wso2.carbon.mashup.HostObjectServiceInterface;
+import org.wso2.carbon.utils.Utils;
+
+import java.util.*;
+
+public class HostObjectServiceListener implements ServiceListener {
+    private static Log log = LogFactory.getLog(HostObjectServiceListener.class);
+
+    private Map<String, Bundle> requiredHostObjectsMap = new HashMap<String, Bundle>();
+    private List<String> hostObjectsThatNeedServices;
+
+    private BundleContext bundleContext;
+    private boolean listenerRegistered;
+
+    public HostObjectServiceListener(BundleContext bundleContext, List<String> hostObjectsThatNeedServices) {
+        this.bundleContext = bundleContext;
+        this.hostObjectsThatNeedServices = hostObjectsThatNeedServices;
+    }
+
+    /**
+     * Registering HostObjectServiceListener as a ServiceListener
+     *
+     * @return boolean : whether the listener is registered
+     */
+    boolean registerServiceListener() {
+        if (requiredHostObjectsMap.isEmpty()) {
+            //There are no required Host Objects
+            listenerRegistered = false;
+        } else {
+            //Registering HostObjectServiceListener as a ServiceListener
+            bundleContext.addServiceListener(this);
+            listenerRegistered = true;
+        }
+        return listenerRegistered;
+    }
+
+    void unregisterServiceListener() {
+        if (listenerRegistered) {
+            bundleContext.removeServiceListener(this);
+        }
+    }
+
+    synchronized void start() {
+        try {
+            //Getting the registered required OSGi services
+            ServiceReference[] references = bundleContext.getServiceReferences(HostObjectServiceInterface.class.getName(), null);
+            if (references != null && references.length > 0) {
+                for (ServiceReference reference : references) {
+                    HostObjectServiceInterface hostObjectServiceInterface = (HostObjectServiceInterface) bundleContext.getService(reference);
+                    String className = hostObjectServiceInterface.getHostObjectClassName();
+                    hostObjectsThatNeedServices.remove(className);
+                }
+            }
+        } catch (InvalidSyntaxException e) {
+            //SyntaxError Occured. Ignoring
+            log.error(e.getCause(), e);
+        }
+    }
+
+    void addRequiredServiceBundle(Bundle bundle, String hostObjectName) {
+        requiredHostObjectsMap.put(hostObjectName, bundle);
+    }
+
+    public synchronized void serviceChanged(ServiceEvent event) {
+        if (event.getType() == ServiceEvent.REGISTERED) {
+            Object service = bundleContext.getService(event.getServiceReference());
+            if (service instanceof HostObjectServiceInterface) {
+                HostObjectServiceInterface hostObjectServiceInterface = (HostObjectServiceInterface) service;
+                hostObjectsThatNeedServices.remove(hostObjectServiceInterface.getHostObjectClassName());
+            }
+            if (hostObjectsThatNeedServices.isEmpty()) {
+                try {
+                    bundleContext.removeServiceListener(this);
+                    Utils.registerDeployerServices(bundleContext);
+                } catch (Exception e) {
+                    String msg = "Failed to register JSDeployer as an OSGi service.";
+                    log.error(msg, e);
+                }
+            }
+        }
+    }
+
+    public List<String> getHostObjectsThatNeedServices() {
+        return hostObjectsThatNeedServices;
+    }
+}
+

Modified: trunk/carbon-components/js-services/org.wso2.carbon.jsservices/src/main/java/org/wso2/carbon/jsservices/internal/JSServicesServiceComponent.java
URL: http://wso2.org/svn/browse/wso2/trunk/carbon-components/js-services/org.wso2.carbon.jsservices/src/main/java/org/wso2/carbon/jsservices/internal/JSServicesServiceComponent.java?rev=42769&r1=42768&r2=42769&view=diff
==============================================================================
--- trunk/carbon-components/js-services/org.wso2.carbon.jsservices/src/main/java/org/wso2/carbon/jsservices/internal/JSServicesServiceComponent.java	(original)
+++ trunk/carbon-components/js-services/org.wso2.carbon.jsservices/src/main/java/org/wso2/carbon/jsservices/internal/JSServicesServiceComponent.java	Sat Aug  8 00:06:39 2009
@@ -20,9 +20,12 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.wso2.carbon.utils.Utils;
-//import org.wso2.carbon.javascript.messagereceiver.JavaScriptEngineUtils;
 import org.wso2.carbon.javascript.hostobjects.hostobjectservice.service.HostObjectService;
 
+import java.util.List;
+import java.util.Timer;
+import java.util.TimerTask;
+
 
 /**
  * @scr.component name="JSServices.ServiceComponent"" immediate="true"
@@ -33,11 +36,37 @@
 public class JSServicesServiceComponent {
     private static Log log = LogFactory.getLog(JSServicesServiceComponent.class);
     private HostObjectService hostObjectService = null;
-
+    List<String> hostObjectsThatNeedServices;
     public void activate(ComponentContext componentContext){
         try {
             BundleContext bundleContext = componentContext.getBundleContext();
-            Utils.registerDeployerServices(bundleContext);
+            hostObjectsThatNeedServices = hostObjectService.getHostObjectsThatNeedServices();
+            if (hostObjectsThatNeedServices.isEmpty()) {
+                Utils.registerDeployerServices(bundleContext);
+            } else {
+                HostObjectServiceListener listener = new HostObjectServiceListener(componentContext.getBundleContext(), hostObjectsThatNeedServices);
+                bundleContext.addServiceListener(listener);
+                listener.start();
+                if (!hostObjectsThatNeedServices.isEmpty()) {
+                Timer timer = new Timer();
+                timer.scheduleAtFixedRate(new TimerTask() {
+                    public void run() {
+                        try {
+                            if (!hostObjectsThatNeedServices.isEmpty()) {
+                                log.warn("JS Deployer initialization is delayed due to the following unsatisfied Host Objects..");
+                                for (String configItem : hostObjectsThatNeedServices) {
+                                    log.warn("Waiting for required Host Object : " + configItem);
+                                }
+                            }
+                        } catch (Exception ignored) {
+                        }
+                    }
+                }, 5000, 10000);
+            } else {
+                    bundleContext.removeServiceListener(listener);
+                    Utils.registerDeployerServices(bundleContext);                    
+                }
+            }
             //JavaScriptEngineUtils.setHostObjectService(hostObjectService);
         } catch (Exception e) {
             String msg = "Failed to register JSDeployer as an OSGi service.";

Added: trunk/carbon-components/mashup-utils/src/main/java/org/wso2/carbon/mashup/HostObjectServiceInterface.java
URL: http://wso2.org/svn/browse/wso2/trunk/carbon-components/mashup-utils/src/main/java/org/wso2/carbon/mashup/HostObjectServiceInterface.java?pathrev=42769
==============================================================================
--- (empty file)
+++ trunk/carbon-components/mashup-utils/src/main/java/org/wso2/carbon/mashup/HostObjectServiceInterface.java	Sat Aug  8 00:06:39 2009
@@ -0,0 +1,6 @@
+package org.wso2.carbon.mashup;
+
+public interface HostObjectServiceInterface {
+
+    public String getHostObjectClassName();
+}



More information about the Carbon-dev mailing list