You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shale.apache.org by ra...@apache.org on 2006/11/19 06:10:57 UTC

svn commit: r476713 - in /shale/framework/trunk/shale-dialog-scxml: pom.xml src/main/java/org/apache/shale/dialog/scxml/SCXMLLifecycleListener.java src/main/resources/META-INF/taglib.tld

Author: rahul
Date: Sat Nov 18 21:10:57 2006
New Revision: 476713

URL: http://svn.apache.org/viewvc?view=rev&rev=476713
Log:
Clean up static resources, parse dialog configs at startup/deploy rather than first access. Same scheme as one in shale-dialog-basic from r473638.
SHALE-274

Added:
    shale/framework/trunk/shale-dialog-scxml/src/main/java/org/apache/shale/dialog/scxml/SCXMLLifecycleListener.java   (with props)
    shale/framework/trunk/shale-dialog-scxml/src/main/resources/META-INF/taglib.tld   (with props)
Modified:
    shale/framework/trunk/shale-dialog-scxml/pom.xml

Modified: shale/framework/trunk/shale-dialog-scxml/pom.xml
URL: http://svn.apache.org/viewvc/shale/framework/trunk/shale-dialog-scxml/pom.xml?view=diff&rev=476713&r1=476712&r2=476713
==============================================================================
--- shale/framework/trunk/shale-dialog-scxml/pom.xml (original)
+++ shale/framework/trunk/shale-dialog-scxml/pom.xml Sat Nov 18 21:10:57 2006
@@ -52,6 +52,11 @@
             <scope>provided</scope>
         </dependency>
 
+        <dependency>
+            <groupId>javax.servlet</groupId>
+            <artifactId>servlet-api</artifactId>
+            <scope>provided</scope>
+        </dependency>
 
         <dependency>
             <groupId>org.apache.shale</groupId>

Added: shale/framework/trunk/shale-dialog-scxml/src/main/java/org/apache/shale/dialog/scxml/SCXMLLifecycleListener.java
URL: http://svn.apache.org/viewvc/shale/framework/trunk/shale-dialog-scxml/src/main/java/org/apache/shale/dialog/scxml/SCXMLLifecycleListener.java?view=auto&rev=476713
==============================================================================
--- shale/framework/trunk/shale-dialog-scxml/src/main/java/org/apache/shale/dialog/scxml/SCXMLLifecycleListener.java (added)
+++ shale/framework/trunk/shale-dialog-scxml/src/main/java/org/apache/shale/dialog/scxml/SCXMLLifecycleListener.java Sat Nov 18 21:10:57 2006
@@ -0,0 +1,212 @@
+/*
+ * 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.
+ */
+
+package org.apache.shale.dialog.scxml;
+
+import java.net.URL;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Map;
+
+import javax.faces.FacesException;
+import javax.servlet.ServletContextEvent;
+import javax.servlet.ServletContextListener;
+
+import org.apache.commons.beanutils.PropertyUtils;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.apache.shale.dialog.scxml.config.ConfigurationParser;
+
+/**
+ * <p>ServletContextListener that loads dialog configuration resources
+ * at application startup, and cleans up the libraries we depend on at
+ * application shutdown.</p>
+ *
+ * $Id$
+ *
+ * @since 1.0.4
+ */
+public class SCXMLLifecycleListener implements ServletContextListener {
+
+
+    // -------------------------------------------------------- Static Variables
+
+
+    /**
+     * <p>The default configuration resource we will process (if present),
+     * even if it is not explicitly configured.</p>
+     */
+    private static final String DEFAULT_CONFIGURATION_RESOURCE =
+            "/WEB-INF/dialog-config.xml";
+
+
+    /**
+     * <p>Resource name for dialog configuration resource(s) embedded in
+     * JAR files inside the application.</p>
+     */
+    private static final String EMBEDDED_CONFIGURATION_RESOURCE =
+            "META-INF/dialog-config.xml";
+
+
+    // ------------------------------------------------------ Instance Variables
+
+
+    /**
+     * <p>The <code>Log</code> instance we will use for this listener.</p>
+     */
+    private Log log = LogFactory.getLog(SCXMLLifecycleListener.class);
+
+
+    // ------------------------------------------ ServletContextListener Methods
+
+
+    /**
+     * <p>Process the application shutdown event, cleanup resources.</p>
+     *
+     * @param event Shutdown event to be processed
+     */
+    public void contextDestroyed(ServletContextEvent event) {
+
+        if (log.isInfoEnabled()) {
+            log.info("Finalizing Dialog SCXML Implementation");
+        }
+
+        // Clean up our cache of dialog configuration information
+        event.getServletContext().removeAttribute(Globals.DIALOGS);
+
+        // Clean up dependency libraries we have used
+        PropertyUtils.clearDescriptors();
+        LogFactory.release(Thread.currentThread().getContextClassLoader());
+        log = null;
+
+    }
+
+
+    /**
+     * <p>Process the application startup event, parse dialog
+     * configurations.</p>
+     *
+     * @param event Startup event to be processed
+     */
+    public void contextInitialized(ServletContextEvent event) {
+
+        if (log.isInfoEnabled()) {
+            log.info("Initializing Dialog SCXML Implementation");
+        }
+
+        // Set up to parse our specified configuration resources and cache the results
+        boolean didDefault = false;
+        ConfigurationParser parser = new ConfigurationParser();
+        parser.setDialogs(new HashMap());
+
+        // Parse implicitly specified resources embedded in JAR files
+        ClassLoader loader = Thread.currentThread().getContextClassLoader();
+        if (loader == null) {
+            loader = this.getClass().getClassLoader();
+        }
+        try {
+            Enumeration resources = loader.getResources(EMBEDDED_CONFIGURATION_RESOURCE);
+            while (resources.hasMoreElements()) {
+                URL resource = (URL) resources.nextElement();
+                if (log.isDebugEnabled()) {
+                    log.debug("Parsing configuration resource '"
+                            + resource + "'");
+                }
+                parser.setResource(resource);
+                parser.parse();
+            }
+        } catch (RuntimeException e) {
+            throw e;
+        } catch (Exception e) {
+            throw new FacesException(e);
+        }
+
+        // Parse explicitly specified resources
+        String resources =
+          event.getServletContext().getInitParameter(Globals.CONFIGURATION);
+        if (resources == null) {
+            resources = "";
+        }
+        int comma = 0;
+        String path = null;
+        try {
+            while (true) {
+                comma = resources.indexOf(",");
+                if (comma < 0) {
+                    path = resources.trim();
+                    resources = "";
+                } else {
+                    path = resources.substring(0, comma).trim();
+                    resources = resources.substring(comma + 1);
+                }
+                if (path.length() < 1) {
+                    break;
+                }
+                URL resource = event.getServletContext().getResource(path);
+                if (log.isDebugEnabled()) {
+                    log.debug("Parsing configuration resource '"
+                            + resource + "'");
+                }
+                parser.setResource(resource);
+                parser.parse();
+                if (DEFAULT_CONFIGURATION_RESOURCE.equals(path)) {
+                    didDefault = true;
+                }
+            }
+        } catch (RuntimeException e) {
+            throw e;
+        } catch (Exception e) {
+            throw new FacesException(e);
+        }
+
+        // Parse the default configuration resource if it exists and has not
+        // already been parsed
+        if (!didDefault) {
+            try {
+                URL resource =
+                  event.getServletContext().getResource(DEFAULT_CONFIGURATION_RESOURCE);
+                if (resource != null) {
+                    if (log.isDebugEnabled()) {
+                        log.debug("Parsing configuration resource '"
+                                + resource + "'");
+                    }
+                    parser.setResource(resource);
+                    parser.parse();
+                }
+            } catch (RuntimeException e) {
+                throw e;
+            } catch (Exception e) {
+                throw new FacesException(e);
+            }
+        }
+
+        // Cache the results in application scope
+        Map dialogs = parser.getDialogs();
+
+        if (dialogs.size() == 0) {
+            if (log.isWarnEnabled()) {
+                log.warn("No dialog configuration information present.  No default configuration found at: "
+                    + DEFAULT_CONFIGURATION_RESOURCE + ".  No embedded configuration found at: "
+                    + EMBEDDED_CONFIGURATION_RESOURCE);
+            }
+        }
+        event.getServletContext().setAttribute(Globals.DIALOGS, dialogs);
+
+    }
+
+
+}

Propchange: shale/framework/trunk/shale-dialog-scxml/src/main/java/org/apache/shale/dialog/scxml/SCXMLLifecycleListener.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: shale/framework/trunk/shale-dialog-scxml/src/main/java/org/apache/shale/dialog/scxml/SCXMLLifecycleListener.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Added: shale/framework/trunk/shale-dialog-scxml/src/main/resources/META-INF/taglib.tld
URL: http://svn.apache.org/viewvc/shale/framework/trunk/shale-dialog-scxml/src/main/resources/META-INF/taglib.tld?view=auto&rev=476713
==============================================================================
--- shale/framework/trunk/shale-dialog-scxml/src/main/resources/META-INF/taglib.tld (added)
+++ shale/framework/trunk/shale-dialog-scxml/src/main/resources/META-INF/taglib.tld Sat Nov 18 21:10:57 2006
@@ -0,0 +1,53 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ 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.
+
+ $Id$
+
+-->
+
+<!DOCTYPE taglib PUBLIC
+ "-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN"
+ "http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd">
+
+<taglib>
+
+
+  <tlib-version>1.0</tlib-version>
+  <jsp-version>1.2</jsp-version>
+  <short-name>s</short-name>
+  <uri>http://shale.apache.org/dialog-scxml</uri>
+  <display-name>Shale Framework SCXML Dialog Tag Library</display-name>
+  <description>
+    This tag library contains no live custom tag handlers.  It exists
+    solely to declare the lifecycle context listener without requiring
+    any entries in the application's WEB-INF/web.xml resource
+  </description>
+
+
+  <!-- ===================== Servlet Listeners ============================= -->
+
+
+  <listener>
+    <listener-class>org.apache.shale.dialog.scxml.SCXMLLifecycleListener</listener-class>
+  </listener>
+  
+
+  <!-- ================= JSF Component Tags ================================ -->
+
+
+</taglib>

Propchange: shale/framework/trunk/shale-dialog-scxml/src/main/resources/META-INF/taglib.tld
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: shale/framework/trunk/shale-dialog-scxml/src/main/resources/META-INF/taglib.tld
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL