You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by we...@apache.org on 2012/04/05 15:42:42 UTC
svn commit: r1309857 - in
/myfaces/extensions/scripting/trunk/extscript-core-root:
extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/core/
extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/listener/
extscript...
Author: werpu
Date: Thu Apr 5 13:42:42 2012
New Revision: 1309857
URL: http://svn.apache.org/viewvc?rev=1309857&view=rev
Log:
EXTSCRIPT-107: ongoing works for the cdi integration
Added:
myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/core/
myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/core/ReloadingListener.java
- copied, changed from r1309793, myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/listener/ReloadingListener.java
myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/startup/CDIServletContainerInitializer.java
- copied, changed from r1309793, myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/startup/StartupServletContextListener.java
myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/startup/ExtScriptStartupPlugin.java
- copied, changed from r1309793, myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/startup/StartupPlugin.java
myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/resources/META-INF/services/javax.servlet.ServletContainerInitializer
- copied, changed from r1309793, myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/resources/META-INF/services/org.apache.myfaces.extensions.scripting.core.api.Plugin
Removed:
myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/listener/ReloadingListener.java
myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/startup/StartupPlugin.java
myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/startup/StartupServletContextListener.java
Modified:
myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/startup/StartupExtension.java
myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension
myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/resources/META-INF/services/org.apache.myfaces.extensions.scripting.core.api.Plugin
myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/monitor/ResourceMonitor.java
myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/jsf/startup/StartupServletContextPluginChainLoader.java
Copied: myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/core/ReloadingListener.java (from r1309793, myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/listener/ReloadingListener.java)
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/core/ReloadingListener.java?p2=myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/core/ReloadingListener.java&p1=myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/listener/ReloadingListener.java&r1=1309793&r2=1309857&rev=1309857&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/listener/ReloadingListener.java (original)
+++ myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/core/ReloadingListener.java Thu Apr 5 13:42:42 2012
@@ -17,7 +17,7 @@
* under the License.
*/
-package org.apache.myfaces.extensions.scripting.cdi.listener;
+package org.apache.myfaces.extensions.scripting.cdi.core;
import org.apache.myfaces.extensions.scripting.cdi.api.CdiContainerLoader;
import org.apache.myfaces.extensions.scripting.core.api.eventhandling.WeavingEvent;
Copied: myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/startup/CDIServletContainerInitializer.java (from r1309793, myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/startup/StartupServletContextListener.java)
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/startup/CDIServletContainerInitializer.java?p2=myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/startup/CDIServletContainerInitializer.java&p1=myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/startup/StartupServletContextListener.java&r1=1309793&r2=1309857&rev=1309857&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/startup/StartupServletContextListener.java (original)
+++ myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/startup/CDIServletContainerInitializer.java Thu Apr 5 13:42:42 2012
@@ -19,24 +19,36 @@
package org.apache.myfaces.extensions.scripting.cdi.startup;
-import javax.servlet.ServletContextEvent;
-import javax.servlet.ServletContextListener;
-import javax.servlet.annotation.WebListener;
+import javax.servlet.ServletContainerInitializer;
+import javax.servlet.ServletContext;
+import java.lang.ref.WeakReference;
+import java.util.Set;
/**
* @author Werner Punz (latest modification by $Author$)
* @version $Revision$ $Date$
+ *
+ * Initializer which stores the servlet context
+ * for later non servlet based references.
+ *
+ * This is the first stage in the servlet lifecycle
+ * and starts before the cdi container.
+ *
+ * Stage 0 of our startup cycle
*/
-@WebListener
-public class StartupServletContextListener implements ServletContextListener
+public class CDIServletContainerInitializer implements ServletContainerInitializer
{
+ private static WeakReference<ServletContext> _contextHolder = null;
- public void contextInitialized(ServletContextEvent sce)
+ public void onStartup(Set<Class<?>> c, ServletContext cx)
{
+ _contextHolder = new WeakReference(cx);
}
- public void contextDestroyed(ServletContextEvent sce)
+ public static ServletContext getContext()
{
+ return _contextHolder.get();
}
+
}
Copied: myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/startup/ExtScriptStartupPlugin.java (from r1309793, myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/startup/StartupPlugin.java)
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/startup/ExtScriptStartupPlugin.java?p2=myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/startup/ExtScriptStartupPlugin.java&p1=myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/startup/StartupPlugin.java&r1=1309793&r2=1309857&rev=1309857&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/startup/StartupPlugin.java (original)
+++ myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/startup/ExtScriptStartupPlugin.java Thu Apr 5 13:42:42 2012
@@ -20,15 +20,23 @@
package org.apache.myfaces.extensions.scripting.cdi.startup;
import javax.servlet.ServletContextEvent;
+
+import org.apache.myfaces.extensions.scripting.cdi.core.ReloadingListener;
import org.apache.myfaces.extensions.scripting.core.api.Plugin;
import org.apache.myfaces.extensions.scripting.core.api.WeavingContext;
/**
* @author Werner Punz (latest modification by $Author$)
* @version $Revision$ $Date$
+ *
+ * An Ext-Scripting startup plugin
+ * which is called at the various
+ * stages of the startup lifecycle
+ *
+ * Stage 2 of our startup cycle
*/
-public class StartupPlugin implements Plugin
+public class ExtScriptStartupPlugin implements Plugin
{
/**
* This method is called before myfaces initializes
@@ -38,6 +46,7 @@ public class StartupPlugin implements Pl
public void preInit(ServletContextEvent evt)
{
//WeavingContext.getInstance().
+ System.out.println("Starting up the jsf subsystem extension");
}
/**
@@ -47,7 +56,7 @@ public class StartupPlugin implements Pl
*/
public void postInit(ServletContextEvent evt)
{
-
+ WeavingContext.getInstance().addListener(new ReloadingListener());
}
/**
Modified: myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/startup/StartupExtension.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/startup/StartupExtension.java?rev=1309857&r1=1309856&r2=1309857&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/startup/StartupExtension.java (original)
+++ myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/java/org/apache/myfaces/extensions/scripting/cdi/startup/StartupExtension.java Thu Apr 5 13:42:42 2012
@@ -19,10 +19,15 @@
package org.apache.myfaces.extensions.scripting.cdi.startup;
+import org.apache.myfaces.extensions.scripting.core.engine.ThrowAwayClassloader;
+import org.apache.myfaces.extensions.scripting.jsf.startup.StartupServletContextPluginChainLoader;
+
import javax.enterprise.event.Observes;
import javax.enterprise.inject.spi.AfterBeanDiscovery;
+import javax.enterprise.inject.spi.AfterDeploymentValidation;
import javax.enterprise.inject.spi.BeforeBeanDiscovery;
import javax.enterprise.inject.spi.Extension;
+import java.io.IOException;
/**
* @author Werner Punz (latest modification by $Author$)
@@ -31,15 +36,40 @@ import javax.enterprise.inject.spi.Exten
* An extension for cdi which does the initial lifecycle
* trigger from CDI instead of JSF since CDI is enabled
* before JSF we have to do it that way
+ *
+ * Stage 1 of our startup cycle
*/
public class StartupExtension implements Extension
{
+ static ThreadLocal<ClassLoader> _classLoaderHolder = new ThreadLocal<ClassLoader>();
+
void beforeBeanDiscovery(@Observes BeforeBeanDiscovery bbd)
{
+ //We have to trigger our initial lifecycle with
+ //the compile runs but not with the daemon thread
+ //after that we can load the classes
+ //by temporarily plugging in our throw away classloader
+ try
+ {
+ StartupServletContextPluginChainLoader.startup(CDIServletContainerInitializer.getContext());
+ _classLoaderHolder.set(Thread.currentThread().getContextClassLoader());
+ Thread.currentThread().setContextClassLoader(new ThrowAwayClassloader());
+ }
+ catch (IOException e)
+ {
+ e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates.
+ }
}
void afterBeanDiscovery(@Observes AfterBeanDiscovery abd)
{
+ //here we unplug our temporary classloader
}
+
+
+ void afterDeploymentValidation(@Observes AfterDeploymentValidation abv)
+ {
+ Thread.currentThread().setContextClassLoader(_classLoaderHolder.get());
+ }
}
Modified: myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension?rev=1309857&r1=1309856&r2=1309857&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension (original)
+++ myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/resources/META-INF/services/javax.enterprise.inject.spi.Extension Thu Apr 5 13:42:42 2012
@@ -1 +1,20 @@
+#####################################################################################
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements. See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership. The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied. See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#####################################################################################
+
org.apache.myfaces.extensions.scripting.cdi.startup.StartupExtension
\ No newline at end of file
Copied: myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/resources/META-INF/services/javax.servlet.ServletContainerInitializer (from r1309793, myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/resources/META-INF/services/org.apache.myfaces.extensions.scripting.core.api.Plugin)
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/resources/META-INF/services/javax.servlet.ServletContainerInitializer?p2=myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/resources/META-INF/services/javax.servlet.ServletContainerInitializer&p1=myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/resources/META-INF/services/org.apache.myfaces.extensions.scripting.core.api.Plugin&r1=1309793&r2=1309857&rev=1309857&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/resources/META-INF/services/org.apache.myfaces.extensions.scripting.core.api.Plugin (original)
+++ myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/resources/META-INF/services/javax.servlet.ServletContainerInitializer Thu Apr 5 13:42:42 2012
@@ -17,4 +17,4 @@
# under the License.
#####################################################################################
-org.apache.myfaces.extensions.scripting.cdi.startup.StartupPlugin
\ No newline at end of file
+org.apache.myfaces.extensions.scripting.cdi.startup.CDIServletContainerInitializer
\ No newline at end of file
Modified: myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/resources/META-INF/services/org.apache.myfaces.extensions.scripting.core.api.Plugin
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/resources/META-INF/services/org.apache.myfaces.extensions.scripting.core.api.Plugin?rev=1309857&r1=1309856&r2=1309857&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/resources/META-INF/services/org.apache.myfaces.extensions.scripting.core.api.Plugin (original)
+++ myfaces/extensions/scripting/trunk/extscript-core-root/extscript-cdi/src/main/resources/META-INF/services/org.apache.myfaces.extensions.scripting.core.api.Plugin Thu Apr 5 13:42:42 2012
@@ -17,4 +17,4 @@
# under the License.
#####################################################################################
-org.apache.myfaces.extensions.scripting.cdi.startup.StartupPlugin
\ No newline at end of file
+org.apache.myfaces.extensions.scripting.cdi.startup.ExtScriptStartupPlugin
\ No newline at end of file
Modified: myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/monitor/ResourceMonitor.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/monitor/ResourceMonitor.java?rev=1309857&r1=1309856&r2=1309857&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/monitor/ResourceMonitor.java (original)
+++ myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/core/monitor/ResourceMonitor.java Thu Apr 5 13:42:42 2012
@@ -96,6 +96,7 @@ public class ResourceMonitor extends Thr
{
//we do it in this complicated manner because of find bugs
//practically this cannot really happen except for shutdown were it is not important anymore
+ if(_externalContext == null) return null;
ServletContext context = _externalContext.get();
if (context != null)
{
Modified: myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/jsf/startup/StartupServletContextPluginChainLoader.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/jsf/startup/StartupServletContextPluginChainLoader.java?rev=1309857&r1=1309856&r2=1309857&view=diff
==============================================================================
--- myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/jsf/startup/StartupServletContextPluginChainLoader.java (original)
+++ myfaces/extensions/scripting/trunk/extscript-core-root/extscript-core/src/main/java/org/apache/myfaces/extensions/scripting/jsf/startup/StartupServletContextPluginChainLoader.java Thu Apr 5 13:42:42 2012
@@ -45,7 +45,7 @@ import java.util.logging.Logger;
public class StartupServletContextPluginChainLoader implements StartupListener
{
- final Logger _log = Logger.getLogger(this.getClass().getName());
+ static final Logger _log = Logger.getLogger(StartupServletContextPluginChainLoader.class.getName());
Plugin[] _plugins = new Plugin[]{};
public StartupServletContextPluginChainLoader()
@@ -65,26 +65,7 @@ public class StartupServletContextPlugin
ServletContext servletContext = servletContextEvent.getServletContext();
try
{
- WeavingContext context = WeavingContext.getInstance();
- _log.info("[EXT-SCRIPTING] Instantiating StartupServletContextPluginChainLoader");
- context.initEngines();
- _log.info("[EXT-SCRIPTING] Loading configuration");
- context.getConfiguration().init(servletContext);
- _log.info("[EXT-SCRIPTING] Loading Scripting end");
- _log.info("[EXT-SCRIPTING] initializing startup daemon");
- ResourceMonitor.init(servletContext);
- _log.info("[EXT-SCRIPTING] initializing startup daemon end");
- _log.info("[EXT-SCRIPTING] Initial Scan and compile");
- //the initial scan should happen synchronsously
- ResourceMonitor.getInstance().performMonitoringTask();
- _log.info("[EXT-SCRIPTING] Starting Change Monitor");
- ResourceMonitor.getInstance().start();
- _log.info("[EXT-SCRIPTING] Startup done");
- _log.info("[EXT-SCRIPTING] init the chain loader for class loading");
- //TODO make this more generic depending on the implementation
- MyFacesSPI.getInstance().registerClassloadingExtension(servletContext);
- _log.info("[EXT-SCRIPTING] registering the JSF Implementation");
- WeavingContext.getInstance().setImplementation(MyFacesSPI.getInstance());
+ startup(servletContext);
for (Plugin plugin : _plugins)
{
@@ -98,6 +79,32 @@ public class StartupServletContextPlugin
}
+ public static void startup(ServletContext servletContext) throws IOException
+ {
+ if(ResourceMonitor.getInstance() != null && ResourceMonitor.getInstance().isAlive()) return;
+
+ WeavingContext context = WeavingContext.getInstance();
+ _log.info("[EXT-SCRIPTING] Instantiating StartupServletContextPluginChainLoader");
+ context.initEngines();
+ _log.info("[EXT-SCRIPTING] Loading configuration");
+ context.getConfiguration().init(servletContext);
+ _log.info("[EXT-SCRIPTING] Loading Scripting end");
+ _log.info("[EXT-SCRIPTING] initializing startup daemon");
+ ResourceMonitor.init(servletContext);
+ _log.info("[EXT-SCRIPTING] initializing startup daemon end");
+ _log.info("[EXT-SCRIPTING] Initial Scan and compile");
+ //the initial scan should happen synchronsously
+ ResourceMonitor.getInstance().performMonitoringTask();
+ _log.info("[EXT-SCRIPTING] Starting Change Monitor");
+ ResourceMonitor.getInstance().start();
+ _log.info("[EXT-SCRIPTING] Startup done");
+ _log.info("[EXT-SCRIPTING] init the chain loader for class loading");
+ //TODO make this more generic depending on the implementation
+ MyFacesSPI.getInstance().registerClassloadingExtension(servletContext);
+ _log.info("[EXT-SCRIPTING] registering the JSF Implementation");
+ WeavingContext.getInstance().setImplementation(MyFacesSPI.getInstance());
+ }
+
public void postInit(ServletContextEvent evt)
{
//tell the system that the startup phase is done