You are viewing a plain text version of this content. The canonical link for it is here.
Posted to scm@geronimo.apache.org by ga...@apache.org on 2011/05/25 03:32:00 UTC
svn commit: r1127356 - in /geronimo/server/trunk/plugins:
jasper/geronimo-jasper-builder/src/main/java/org/apache/geronimo/jasper/deployment/
jasper/geronimo-jasper/
jasper/geronimo-jasper/src/main/java/org/apache/geronimo/jasper/
jasper/geronimo-jaspe...
Author: gawor
Date: Wed May 25 01:31:59 2011
New Revision: 1127356
URL: http://svn.apache.org/viewvc?rev=1127356&view=rev
Log:
GERONIMO-5976: Load JSP tag libraries from bundles
Added:
geronimo/server/trunk/plugins/jasper/geronimo-jasper/src/main/java/org/apache/geronimo/jasper/TldRegistry.java (with props)
geronimo/server/trunk/plugins/jasper/geronimo-jasper/src/main/java/org/apache/geronimo/jasper/internal/
geronimo/server/trunk/plugins/jasper/geronimo-jasper/src/main/java/org/apache/geronimo/jasper/internal/Activator.java (with props)
geronimo/server/trunk/plugins/jasper/geronimo-jasper/src/main/java/org/apache/geronimo/jasper/internal/TldRegistryImpl.java (with props)
Removed:
geronimo/server/trunk/plugins/jasper/geronimo-jasper/src/main/java/org/apache/geronimo/jasper/TldRegistration.java
Modified:
geronimo/server/trunk/plugins/jasper/geronimo-jasper-builder/src/main/java/org/apache/geronimo/jasper/deployment/JspModuleBuilderExtension.java
geronimo/server/trunk/plugins/jasper/geronimo-jasper/pom.xml
geronimo/server/trunk/plugins/jasper/geronimo-jasper/src/main/java/org/apache/geronimo/jasper/GeronimoTldLocationsCache.java
geronimo/server/trunk/plugins/jasper/jasper/src/main/plan/plan.xml
geronimo/server/trunk/plugins/myfaces/myfaces/src/main/plan/plan.xml
Modified: geronimo/server/trunk/plugins/jasper/geronimo-jasper-builder/src/main/java/org/apache/geronimo/jasper/deployment/JspModuleBuilderExtension.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/jasper/geronimo-jasper-builder/src/main/java/org/apache/geronimo/jasper/deployment/JspModuleBuilderExtension.java?rev=1127356&r1=1127355&r2=1127356&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/jasper/geronimo-jasper-builder/src/main/java/org/apache/geronimo/jasper/deployment/JspModuleBuilderExtension.java (original)
+++ geronimo/server/trunk/plugins/jasper/geronimo-jasper-builder/src/main/java/org/apache/geronimo/jasper/deployment/JspModuleBuilderExtension.java Wed May 25 01:31:59 2011
@@ -54,6 +54,7 @@ import org.apache.geronimo.j2ee.deployme
import org.apache.geronimo.j2ee.j2eeobjectnames.NameFactory;
import org.apache.geronimo.jasper.JasperServletContextCustomizer;
import org.apache.geronimo.jasper.TldProvider;
+import org.apache.geronimo.jasper.TldRegistry;
import org.apache.geronimo.kernel.GBeanAlreadyExistsException;
import org.apache.geronimo.kernel.Naming;
import org.apache.geronimo.kernel.config.ConfigurationStore;
@@ -75,7 +76,6 @@ import org.apache.xbean.finder.ClassFind
import org.apache.xmlbeans.XmlObject;
import org.osgi.framework.Bundle;
import org.osgi.framework.BundleContext;
-import org.osgi.framework.InvalidSyntaxException;
import org.osgi.framework.ServiceReference;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -299,23 +299,15 @@ public class JspModuleBuilderExtension i
private List<URL> scanGlobalTlds(Bundle bundle) throws DeploymentException {
BundleContext bundleContext = bundle.getBundleContext();
- ServiceReference[] references;
- try {
- references = bundleContext.getServiceReferences(TldProvider.class.getName(), null);
- } catch (InvalidSyntaxException e) {
- // this should not happen
- throw new DeploymentException("Invalid filter expression", e);
- }
+ ServiceReference reference = bundleContext.getServiceReference(TldRegistry.class.getName());
List<URL> tldURLs = new ArrayList<URL>();
- if (references != null) {
- for (ServiceReference reference : references) {
- TldProvider provider = (TldProvider) bundleContext.getService(reference);
- for (TldProvider.TldEntry entry : provider.getTlds()) {
- URL url = entry.getURL();
- tldURLs.add(url);
- }
- bundleContext.ungetService(reference);
+ if (reference != null) {
+ TldRegistry tldRegistry = (TldRegistry) bundleContext.getService(reference);
+ for (TldProvider.TldEntry entry : tldRegistry.getDependentTlds(bundle)) {
+ URL url = entry.getURL();
+ tldURLs.add(url);
}
+ bundleContext.ungetService(reference);
}
return tldURLs;
}
Modified: geronimo/server/trunk/plugins/jasper/geronimo-jasper/pom.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/jasper/geronimo-jasper/pom.xml?rev=1127356&r1=1127355&r2=1127356&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/jasper/geronimo-jasper/pom.xml (original)
+++ geronimo/server/trunk/plugins/jasper/geronimo-jasper/pom.xml Wed May 25 01:31:59 2011
@@ -106,6 +106,19 @@
<!--<artifactId>catalina</artifactId>-->
<!--</dependency>-->
</dependencies>
-
+
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.felix</groupId>
+ <artifactId>maven-bundle-plugin</artifactId>
+ <configuration>
+ <instructions>
+ <Bundle-Activator>org.apache.geronimo.jasper.internal.Activator</Bundle-Activator>
+ </instructions>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
</project>
Modified: geronimo/server/trunk/plugins/jasper/geronimo-jasper/src/main/java/org/apache/geronimo/jasper/GeronimoTldLocationsCache.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/jasper/geronimo-jasper/src/main/java/org/apache/geronimo/jasper/GeronimoTldLocationsCache.java?rev=1127356&r1=1127355&r2=1127356&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/jasper/geronimo-jasper/src/main/java/org/apache/geronimo/jasper/GeronimoTldLocationsCache.java (original)
+++ geronimo/server/trunk/plugins/jasper/geronimo-jasper/src/main/java/org/apache/geronimo/jasper/GeronimoTldLocationsCache.java Wed May 25 01:31:59 2011
@@ -287,20 +287,18 @@ public class GeronimoTldLocationsCache e
private void tldScanGlobal(Bundle bundle) throws JasperException, IOException, InvalidSyntaxException {
BundleContext bundleContext = bundle.getBundleContext();
- ServiceReference[] references = bundleContext.getServiceReferences(TldProvider.class.getName(), null);
- if (references != null) {
- for (ServiceReference reference : references) {
- TldProvider provider = (TldProvider) bundleContext.getService(reference);
- for (TldProvider.TldEntry entry : provider.getTlds()) {
- URL url = entry.getURL();
- if (entry.getJarUrl() != null) {
- tldScanStream(url, new TldLocation(entry.getName(), entry.getJarUrl().toExternalForm()));
- } else {
- tldScanStream(url, new TldLocation(entry.getName(), new BundleJarResource(entry.getBundle())));
- }
+ ServiceReference reference = bundleContext.getServiceReference(TldRegistry.class.getName());
+ if (reference != null) {
+ TldRegistry tldRegistry = (TldRegistry) bundleContext.getService(reference);
+ for (TldProvider.TldEntry entry : tldRegistry.getDependentTlds(bundle)) {
+ URL url = entry.getURL();
+ if (entry.getJarUrl() != null) {
+ tldScanStream(url, new TldLocation(entry.getName(), entry.getJarUrl().toExternalForm()));
+ } else {
+ tldScanStream(url, new TldLocation(entry.getName(), new BundleJarResource(entry.getBundle())));
}
- bundleContext.ungetService(reference);
}
+ bundleContext.ungetService(reference);
}
}
Added: geronimo/server/trunk/plugins/jasper/geronimo-jasper/src/main/java/org/apache/geronimo/jasper/TldRegistry.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/jasper/geronimo-jasper/src/main/java/org/apache/geronimo/jasper/TldRegistry.java?rev=1127356&view=auto
==============================================================================
--- geronimo/server/trunk/plugins/jasper/geronimo-jasper/src/main/java/org/apache/geronimo/jasper/TldRegistry.java (added)
+++ geronimo/server/trunk/plugins/jasper/geronimo-jasper/src/main/java/org/apache/geronimo/jasper/TldRegistry.java Wed May 25 01:31:59 2011
@@ -0,0 +1,31 @@
+/**
+ * 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.geronimo.jasper;
+
+import java.util.Collection;
+
+import org.osgi.framework.Bundle;
+
+public interface TldRegistry {
+
+ Collection<TldProvider.TldEntry> getTls();
+
+ Collection<TldProvider.TldEntry> getTlds(Bundle bundle);
+
+ Collection<TldProvider.TldEntry> getDependentTlds(Bundle bundle);
+
+}
Propchange: geronimo/server/trunk/plugins/jasper/geronimo-jasper/src/main/java/org/apache/geronimo/jasper/TldRegistry.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: geronimo/server/trunk/plugins/jasper/geronimo-jasper/src/main/java/org/apache/geronimo/jasper/TldRegistry.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: geronimo/server/trunk/plugins/jasper/geronimo-jasper/src/main/java/org/apache/geronimo/jasper/TldRegistry.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: geronimo/server/trunk/plugins/jasper/geronimo-jasper/src/main/java/org/apache/geronimo/jasper/internal/Activator.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/jasper/geronimo-jasper/src/main/java/org/apache/geronimo/jasper/internal/Activator.java?rev=1127356&view=auto
==============================================================================
--- geronimo/server/trunk/plugins/jasper/geronimo-jasper/src/main/java/org/apache/geronimo/jasper/internal/Activator.java (added)
+++ geronimo/server/trunk/plugins/jasper/geronimo-jasper/src/main/java/org/apache/geronimo/jasper/internal/Activator.java Wed May 25 01:31:59 2011
@@ -0,0 +1,51 @@
+/**
+ * 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.geronimo.jasper.internal;
+
+import org.apache.geronimo.jasper.TldRegistry;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceRegistration;
+import org.osgi.util.tracker.BundleTracker;
+
+public class Activator implements BundleActivator {
+
+ private ServiceRegistration tldRegistryRegistration;
+ private BundleTracker tldBundleTracker;
+
+ @Override
+ public void start(BundleContext context) throws Exception {
+ TldRegistryImpl tldRegistry = new TldRegistryImpl(context);
+ tldRegistryRegistration = context.registerService(TldRegistry.class.getName(), tldRegistry, null);
+
+ tldBundleTracker = new BundleTracker(context, Bundle.ACTIVE, tldRegistry);
+ tldBundleTracker.open();
+ }
+
+ @Override
+ public void stop(BundleContext context) throws Exception {
+ if (tldRegistryRegistration != null) {
+ tldRegistryRegistration.unregister();
+ }
+
+ if (tldBundleTracker != null) {
+ tldBundleTracker.close();
+ }
+ }
+
+}
Propchange: geronimo/server/trunk/plugins/jasper/geronimo-jasper/src/main/java/org/apache/geronimo/jasper/internal/Activator.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: geronimo/server/trunk/plugins/jasper/geronimo-jasper/src/main/java/org/apache/geronimo/jasper/internal/Activator.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: geronimo/server/trunk/plugins/jasper/geronimo-jasper/src/main/java/org/apache/geronimo/jasper/internal/Activator.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: geronimo/server/trunk/plugins/jasper/geronimo-jasper/src/main/java/org/apache/geronimo/jasper/internal/TldRegistryImpl.java
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/jasper/geronimo-jasper/src/main/java/org/apache/geronimo/jasper/internal/TldRegistryImpl.java?rev=1127356&view=auto
==============================================================================
--- geronimo/server/trunk/plugins/jasper/geronimo-jasper/src/main/java/org/apache/geronimo/jasper/internal/TldRegistryImpl.java (added)
+++ geronimo/server/trunk/plugins/jasper/geronimo-jasper/src/main/java/org/apache/geronimo/jasper/internal/TldRegistryImpl.java Wed May 25 01:31:59 2011
@@ -0,0 +1,178 @@
+/**
+ * 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.geronimo.jasper.internal;
+
+import java.io.InputStream;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.zip.ZipEntry;
+
+import org.apache.geronimo.jasper.TldProvider;
+import org.apache.geronimo.jasper.TldRegistry;
+import org.apache.geronimo.system.configuration.DependencyManager;
+import org.apache.xbean.osgi.bundle.util.BundleResourceFinder;
+import org.apache.xbean.osgi.bundle.util.BundleUtils;
+import org.apache.xbean.osgi.bundle.util.BundleResourceFinder.ResourceFinderCallback;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.BundleEvent;
+import org.osgi.framework.ServiceReference;
+import org.osgi.service.packageadmin.PackageAdmin;
+import org.osgi.util.tracker.BundleTrackerCustomizer;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+public class TldRegistryImpl implements TldRegistry, BundleTrackerCustomizer {
+
+ private static final Logger LOGGER = LoggerFactory.getLogger(TldRegistryImpl.class);
+
+ private Map<Bundle, Collection<TldProvider.TldEntry>> map = new ConcurrentHashMap<Bundle, Collection<TldProvider.TldEntry>>();
+
+ private final BundleContext bundleContext;
+
+ public TldRegistryImpl(BundleContext bundleContext) {
+ this.bundleContext = bundleContext;
+ }
+
+ public Collection<TldProvider.TldEntry> getTls() {
+ List<TldProvider.TldEntry> allTlds = new ArrayList<TldProvider.TldEntry>();
+ for (Collection<TldProvider.TldEntry> tlds : map.values()) {
+ allTlds.addAll(tlds);
+ }
+ return allTlds;
+ }
+
+ public Collection<TldProvider.TldEntry> getTlds(Bundle bundle) {
+ Collection<TldProvider.TldEntry> tlds = map.get(bundle);
+ return (tlds == null) ? Collections.<TldProvider.TldEntry>emptyList() : tlds;
+ }
+
+ private Set<Bundle> getDependentBundles(Bundle bundle) {
+ Set<Bundle> dependentBundles = null;
+
+ // add in bundles from dependency manager
+ ServiceReference serviceReference = bundleContext.getServiceReference(DependencyManager.class.getName());
+ if (serviceReference != null) {
+ DependencyManager dependencyManager = (DependencyManager) bundleContext.getService(serviceReference);
+ try {
+ dependentBundles = dependencyManager.getFullDependentBundles(bundle.getBundleId());
+ } finally {
+ bundleContext.ungetService(serviceReference);
+ }
+ } else {
+ dependentBundles = new HashSet<Bundle>();
+ }
+
+ // add in wired bundles if WAB
+ String contextPath = (String) bundle.getHeaders().get("Web-ContextPath");
+ if (contextPath != null) {
+ Set<Bundle> wiredBundles = BundleUtils.getWiredBundles(bundle);
+ dependentBundles.addAll(wiredBundles);
+ }
+
+ return dependentBundles;
+ }
+
+ public Collection<TldProvider.TldEntry> getDependentTlds(Bundle bundle) {
+ List<TldProvider.TldEntry> allTlds = new ArrayList<TldProvider.TldEntry>();
+ Set<Bundle> dependentBundles = getDependentBundles(bundle);
+ for (Bundle dependentBundle : dependentBundles) {
+ Collection<TldProvider.TldEntry> tlds = map.get(dependentBundle);
+ if (tlds != null) {
+ allTlds.addAll(tlds);
+ }
+ }
+ return allTlds;
+ }
+
+ @Override
+ public Object addingBundle(Bundle bundle, BundleEvent event) {
+ Collection<TldProvider.TldEntry> tlds = scanBundle(bundle);
+ if (tlds.isEmpty()) {
+ return null;
+ } else {
+ map.put(bundle, tlds);
+ return bundle;
+ }
+ }
+
+ @Override
+ public void modifiedBundle(Bundle bundle, BundleEvent event, Object object) {
+ Collection<TldProvider.TldEntry> tlds = scanBundle(bundle);
+ if (tlds.isEmpty()) {
+ map.remove(bundle);
+ } else {
+ map.put(bundle, tlds);
+ }
+ }
+
+ @Override
+ public void removedBundle(Bundle bundle, BundleEvent event, Object object) {
+ map.remove(bundle);
+ }
+
+ private Collection<TldProvider.TldEntry> scanBundle(Bundle bundle) {
+ ServiceReference reference = bundleContext.getServiceReference(PackageAdmin.class.getName());
+ PackageAdmin packageAdmin = (PackageAdmin) bundle.getBundleContext().getService(reference);
+ try {
+ BundleResourceFinder resourceFinder = new BundleResourceFinder(packageAdmin, bundle, "META-INF/", ".tld");
+ TldResourceFinderCallback callback = new TldResourceFinderCallback();
+ resourceFinder.find(callback);
+ return callback.getTlds();
+ } catch (Exception e) {
+ LOGGER.warn("Error scanning bundle for JSP tag libraries", e);
+ return Collections.emptyList();
+ } finally {
+ bundleContext.ungetService(reference);
+ }
+ }
+
+ private static class TldResourceFinderCallback implements ResourceFinderCallback, TldProvider {
+
+ private final List<TldProvider.TldEntry> tlds = new ArrayList<TldProvider.TldEntry>();
+
+ private TldResourceFinderCallback() {
+ }
+
+ public Collection<TldProvider.TldEntry> getTlds() {
+ return tlds;
+ }
+
+ public boolean foundInDirectory(Bundle bundle, String basePath, URL url) throws Exception {
+ LOGGER.debug("Found {} TLD in bundle {}", url, bundle);
+ tlds.add(new TldProvider.TldEntry(bundle, url));
+ return true;
+ }
+
+ public boolean foundInJar(Bundle bundle, String jarName, ZipEntry entry, InputStream in) throws Exception {
+ URL jarURL = bundle.getEntry(jarName);
+ URL url = new URL("jar:" + jarURL.toString() + "!/" + entry.getName());
+ LOGGER.debug("Found {} TLD in bundle {}", url, bundle);
+ tlds.add(new TldProvider.TldEntry(bundle, url, jarURL));
+ return false;
+ }
+
+ }
+
+}
Propchange: geronimo/server/trunk/plugins/jasper/geronimo-jasper/src/main/java/org/apache/geronimo/jasper/internal/TldRegistryImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: geronimo/server/trunk/plugins/jasper/geronimo-jasper/src/main/java/org/apache/geronimo/jasper/internal/TldRegistryImpl.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: geronimo/server/trunk/plugins/jasper/geronimo-jasper/src/main/java/org/apache/geronimo/jasper/internal/TldRegistryImpl.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: geronimo/server/trunk/plugins/jasper/jasper/src/main/plan/plan.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/jasper/jasper/src/main/plan/plan.xml?rev=1127356&r1=1127355&r2=1127356&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/jasper/jasper/src/main/plan/plan.xml (original)
+++ geronimo/server/trunk/plugins/jasper/jasper/src/main/plan/plan.xml Wed May 25 01:31:59 2011
@@ -26,7 +26,4 @@
<gbean name="JasperJSPFactoryConfigurer" class="org.apache.geronimo.jasper.JasperJSPFactoryConfigurer">
</gbean>
- <gbean name="JstlTldRegistration" class="org.apache.geronimo.jasper.TldRegistration">
- <attribute name="packageNameList">org.apache.taglibs.standard</attribute>
- </gbean>
</module>
Modified: geronimo/server/trunk/plugins/myfaces/myfaces/src/main/plan/plan.xml
URL: http://svn.apache.org/viewvc/geronimo/server/trunk/plugins/myfaces/myfaces/src/main/plan/plan.xml?rev=1127356&r1=1127355&r2=1127356&view=diff
==============================================================================
--- geronimo/server/trunk/plugins/myfaces/myfaces/src/main/plan/plan.xml (original)
+++ geronimo/server/trunk/plugins/myfaces/myfaces/src/main/plan/plan.xml Wed May 25 01:31:59 2011
@@ -22,8 +22,4 @@
<gbean name="MyFacesLifecycleProviderFactory" class="org.apache.geronimo.myfaces.LifecycleProviderFactoryGBean"/>
- <gbean name="MyfacesTldRegistration" class="org.apache.geronimo.jasper.TldRegistration">
- <attribute name="packageNameList">org.apache.myfaces.webapp</attribute>
- </gbean>
-
</module>