Increase application context tracker timeout and make it configurable
authorMathieu Baudier <mbaudier@argeo.org>
Thu, 28 Apr 2011 04:50:08 +0000 (04:50 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Thu, 28 Apr 2011 04:50:08 +0000 (04:50 +0000)
ASSIGNED - bug 17: Generalize agent management and registration beyond JMS
https://bugzilla.argeo.org/show_bug.cgi?id=17

git-svn-id: https://svn.argeo.org/commons/trunk@4480 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

eclipse/runtime/org.argeo.eclipse.ui/src/main/java/org/argeo/eclipse/spring/ApplicationContextTracker.java

index 805d11d8a580632bc71acc7eb72bc2e19f8e35fc..816edc1be864edc0173b187b342907c5e66208d3 100644 (file)
@@ -30,6 +30,8 @@ import org.osgi.util.tracker.ServiceTracker;
 import org.springframework.context.ApplicationContext;\r
 \r
 /**\r
+ * Tracks Spring application context published as services.\r
+ * \r
  * @author Heiko Seeberger\r
  * @author Mathieu Baudier\r
  */\r
@@ -40,6 +42,11 @@ class ApplicationContextTracker {
        private static final String FILTER = "(&(objectClass=org.springframework.context.ApplicationContext)" //$NON-NLS-1$\r
                        + "(org.springframework.context.service.name={0}))"; //$NON-NLS-1$\r
 \r
+       public final static String APPLICATION_CONTEXT_TRACKER_TIMEOUT = "org.argeo.eclipse.spring.applicationContextTrackerTimeout";\r
+\r
+       private static Long defaultTimeout = Long.parseLong(System.getProperty(\r
+                       APPLICATION_CONTEXT_TRACKER_TIMEOUT, "30000"));\r
+\r
        private ServiceTracker applicationContextServiceTracker;\r
 \r
        /**\r
@@ -59,12 +66,18 @@ class ApplicationContextTracker {
                        applicationContextServiceTracker = new ServiceTracker(\r
                                        factoryBundleContext, FrameworkUtil.createFilter(filter),\r
                                        null);\r
-                       applicationContextServiceTracker.open();\r
+                       // applicationContextServiceTracker.open();\r
                } catch (final InvalidSyntaxException e) {\r
                        e.printStackTrace();\r
                }\r
        }\r
 \r
+       public void open() {\r
+               if (applicationContextServiceTracker != null) {\r
+                       applicationContextServiceTracker.open();\r
+               }\r
+       }\r
+\r
        public void close() {\r
                if (applicationContextServiceTracker != null) {\r
                        applicationContextServiceTracker.close();\r
@@ -76,7 +89,7 @@ class ApplicationContextTracker {
                if (applicationContextServiceTracker != null) {\r
                        try {\r
                                applicationContext = (ApplicationContext) applicationContextServiceTracker\r
-                                               .waitForService(5000);\r
+                                               .waitForService(defaultTimeout);\r
                        } catch (InterruptedException e) {\r
                                e.printStackTrace();\r
                        }\r
@@ -114,6 +127,7 @@ class ApplicationContextTracker {
                                contributorBundle, contributorBundle.getBundleContext());\r
                ApplicationContext applicationContext = null;\r
                try {\r
+                       applicationContextTracker.open();\r
                        applicationContext = applicationContextTracker\r
                                        .getApplicationContext();\r
                } finally {\r