You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@clerezza.apache.org by re...@apache.org on 2010/06/23 15:18:36 UTC

svn commit: r957188 - in /incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform: pom.xml src/main/java/org/apache/clerezza/platform/BootMonitor.java

Author: reto
Date: Wed Jun 23 13:18:35 2010
New Revision: 957188

URL: http://svn.apache.org/viewvc?rev=957188&view=rev
Log:
faster boot by starting early doing the scala-compile (pairing with tommaso)

Modified:
    incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform/pom.xml
    incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform/src/main/java/org/apache/clerezza/platform/BootMonitor.java

Modified: incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform/pom.xml
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform/pom.xml?rev=957188&r1=957187&r2=957188&view=diff
==============================================================================
--- incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform/pom.xml (original)
+++ incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform/pom.xml Wed Jun 23 13:18:35 2010
@@ -22,6 +22,10 @@
 			<groupId>org.apache.felix</groupId>
 			<artifactId>org.apache.felix.scr.annotations</artifactId>
 		</dependency>
+		<dependency>
+			<groupId>org.osgi</groupId>
+			<artifactId>org.osgi.compendium</artifactId>
+		</dependency>
 	</dependencies>
 </project>
 

Modified: incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform/src/main/java/org/apache/clerezza/platform/BootMonitor.java
URL: http://svn.apache.org/viewvc/incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform/src/main/java/org/apache/clerezza/platform/BootMonitor.java?rev=957188&r1=957187&r2=957188&view=diff
==============================================================================
--- incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform/src/main/java/org/apache/clerezza/platform/BootMonitor.java (original)
+++ incubator/clerezza/trunk/org.apache.clerezza.parent/org.apache.clerezza.platform/src/main/java/org/apache/clerezza/platform/BootMonitor.java Wed Jun 23 13:18:35 2010
@@ -21,7 +21,6 @@ package org.apache.clerezza.platform;
 import java.util.Collections;
 import java.util.HashSet;
 import java.util.Set;
-import java.util.logging.Level;
 import javax.script.Compilable;
 import javax.script.ScriptEngineFactory;
 import javax.script.ScriptException;
@@ -31,6 +30,7 @@ import org.slf4j.LoggerFactory;
 import org.apache.felix.scr.annotations.Component;
 import org.apache.felix.scr.annotations.ReferenceCardinality;
 import org.apache.felix.scr.annotations.ReferencePolicy;
+import org.osgi.service.component.ComponentContext;
 
 /**
  * This component logs a message when Apache Clerezza was launched successfully.
@@ -50,50 +50,61 @@ import org.apache.felix.scr.annotations.
  *
  * see thread starting at http://www.mail-archive.com/users@felix.apache.org/msg07647.html
  */
-
-@Component(enabled=true, immediate=true)
-@Reference(name="jaxrsResource",
-		cardinality=ReferenceCardinality.OPTIONAL_MULTIPLE,
-		policy=ReferencePolicy.DYNAMIC,
-		referenceInterface=Object.class,
-		target="(javax.ws.rs=true)")
+@Component(enabled = true, immediate = true)
+@Reference(name = "jaxrsResource",
+cardinality = ReferenceCardinality.OPTIONAL_MULTIPLE,
+policy = ReferencePolicy.DYNAMIC,
+referenceInterface = Object.class,
+target = "(javax.ws.rs=true)")
 public class BootMonitor {
 
-	@Reference(target="(javax.script.language=scala)")
+	@Reference(target = "(javax.script.language=scala)")
 	private ScriptEngineFactory scalaScriptEngineFactory;
-	
 	private Set<Object> rootResources =
 			Collections.synchronizedSet(new HashSet<Object>());
-
 	/**
 	 * true when the user has been notified that clerezza started
 	 */
-	private boolean started = false;
-
+	private boolean clerezzaStarted = false;
+	private volatile boolean activated = false;
 	private final Logger logger = LoggerFactory.getLogger(BootMonitor.class);
 
+	protected void activate(ComponentContext context) {
+		//compile a script to initialize scala-compiler (needed by scal a server pages)
+		Thread t = new Thread() {
+
+			@Override
+			public void run() {
+				try {
+					((Compilable) scalaScriptEngineFactory.getScriptEngine()).compile("println(\"helo\")");
+				} catch (ScriptException ex) {
+					logger.warn(ex.toString());
+				}
+				activated = true;
+			}
+		};
+		t.start();
+	}
+
 	protected void bindJaxrsResource(Object p) {
 		rootResources.add(p);
-		if (!started && (rootResources.size() == 35)) {
+		if (!clerezzaStarted && (rootResources.size() == 35)) {
 			Thread t = new Thread() {
+
 				@Override
 				public void run() {
 					int lastSize = 0;
 					for (int i = 0; i < 100; i++) {
 						if (rootResources.size() == lastSize) {
-							//compile a script to initialize scala-compiler (needed by scal a server pages)
-							try {
-								((Compilable)scalaScriptEngineFactory.getScriptEngine()).compile("println(\"helo\")");
-							} catch (ScriptException ex) {
-								logger.warn(ex.toString());
+							clerezzaStarted = true;
+							if (activated) {
+								logger.info("The Apache Clerezza Platform is now operational.");
+								return;
 							}
-							started = true;
-							logger.info("The Apache Clerezza Platform is now operational.");
-							return;
 						}
 						lastSize = rootResources.size();
 						try {
-							Thread.sleep(1000);
+							Thread.sleep(500);
 						} catch (InterruptedException ex) {
 							throw new RuntimeException();
 						}
@@ -107,5 +118,4 @@ public class BootMonitor {
 	protected void unbindJaxrsResource(Object p) {
 		rootResources.remove(p);
 	}
-
 }