Author: rmannibucau
Date: Sun Jul  1 18:22:29 2012
New Revision: 1355970

URL: http://svn.apache.org/viewvc?rev=1355970&view=rev
Log:
TOMEE-259 TOMEE-261 basic mojarra integration and some more way to enrich a 
webapp (from prefix)

Added:
    
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEContainerListener.java
    openejb/trunk/openejb/tomee/tomee-mojarra/
    openejb/trunk/openejb/tomee/tomee-mojarra/pom.xml
    openejb/trunk/openejb/tomee/tomee-mojarra/src/
    openejb/trunk/openejb/tomee/tomee-mojarra/src/main/
    openejb/trunk/openejb/tomee/tomee-mojarra/src/main/java/
    openejb/trunk/openejb/tomee/tomee-mojarra/src/main/java/org/
    openejb/trunk/openejb/tomee/tomee-mojarra/src/main/java/org/apache/
    openejb/trunk/openejb/tomee/tomee-mojarra/src/main/java/org/apache/tomee/
    
openejb/trunk/openejb/tomee/tomee-mojarra/src/main/java/org/apache/tomee/mojarra/
    
openejb/trunk/openejb/tomee/tomee-mojarra/src/main/java/org/apache/tomee/mojarra/TomEEInjectionProvider.java
    openejb/trunk/openejb/tomee/tomee-mojarra/src/main/resources/
    openejb/trunk/openejb/tomee/tomee-mojarra/src/main/resources/META-INF/
    
openejb/trunk/openejb/tomee/tomee-mojarra/src/main/resources/META-INF/services/
    
openejb/trunk/openejb/tomee/tomee-mojarra/src/main/resources/META-INF/services/com.sun.faces.spi.injectionprovider
Modified:
    openejb/trunk/openejb/tomee/pom.xml
    
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/JavaeeInstanceManager.java
    
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEClassLoaderHelper.java
    
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
    openejb/trunk/openejb/tomee/tomee-webapp/pom.xml

Modified: openejb/trunk/openejb/tomee/pom.xml
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/pom.xml?rev=1355970&r1=1355969&r2=1355970&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/pom.xml (original)
+++ openejb/trunk/openejb/tomee/pom.xml Sun Jul  1 18:22:29 2012
@@ -43,6 +43,7 @@
     <module>tomee-jaxrs-webapp</module>
     <module>apache-tomee</module>
     <module>apache-tomcat</module>
+    <module>tomee-mojarra</module>
   </modules>
 
   <repositories>

Modified: 
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/JavaeeInstanceManager.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/JavaeeInstanceManager.java?rev=1355970&r1=1355969&r2=1355970&view=diff
==============================================================================
--- 
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/JavaeeInstanceManager.java
 (original)
+++ 
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/JavaeeInstanceManager.java
 Sun Jul  1 18:22:29 2012
@@ -79,6 +79,14 @@ public class JavaeeInstanceManager imple
         webContext.destroy(o);
     }
 
+    public void inject(final Object o) {
+        try {
+            webContext.inject(o);
+        } catch (OpenEJBException e) {
+            throw new InjectionFailedException(e);
+        }
+    }
+
     /**
      * Call postConstruct method on the specified instance recursively from 
deepest superclass to actual class.
      *
@@ -88,7 +96,7 @@ public class JavaeeInstanceManager imple
      * @throws java.lang.reflect.InvocationTargetException
      *                                if call fails
      */
-    protected void postConstruct(Object instance, final Class<?> clazz)
+    public void postConstruct(Object instance, final Class<?> clazz)
             throws IllegalAccessException, InvocationTargetException {
         Class<?> superClass = clazz.getSuperclass();
         if (superClass != Object.class) {

Modified: 
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEClassLoaderHelper.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEClassLoaderHelper.java?rev=1355970&r1=1355969&r2=1355970&view=diff
==============================================================================
--- 
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEClassLoaderHelper.java
 (original)
+++ 
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEClassLoaderHelper.java
 Sun Jul  1 18:22:29 2012
@@ -18,7 +18,10 @@ package org.apache.tomee.catalina;
 
 import org.apache.openejb.OpenEJB;
 import org.apache.openejb.loader.SystemInstance;
+import org.apache.tomee.installer.Paths;
 
+import java.io.File;
+import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.ArrayList;
 import java.util.Arrays;
@@ -26,7 +29,9 @@ import java.util.Collection;
 
 public final class TomEEClassLoaderHelper {
     public static final String TOMEE_WEBAPP_CLASSLOADER_ENRICHMENT_SKIP = 
"tomee.webapp.classloader.enrichment.skip";
-    public static final String TOMEE_WEBAPP_CLASSLOADER_ENRICHMENT = 
"tomee.webapp.classloader.enrichment";
+
+    public static final String TOMEE_WEBAPP_CLASSLOADER_ENRICHMENT_CLASSES = 
"tomee.webapp.classloader.enrichment.classes";
+    public static final String TOMEE_WEBAPP_CLASSLOADER_ENRICHMENT_PREFIXES = 
"tomee.webapp.classloader.enrichment.prefixes";
 
     private static final String[] DEFAULT_JAR_TO_ADD_CLASS_HELPERS = new 
String[] {
             // openejb-jsf and openwebbeans-jsf to be able to embedded the jsf 
impl keeping CDI features
@@ -34,23 +39,37 @@ public final class TomEEClassLoaderHelpe
             "org.apache.webbeans.jsf.OwbApplicationFactory",
 
             // JPA integration: mainly JTA integration
-            "org.apache.openejb.jpa.integration.MakeTxLookup"
+            "org.apache.openejb.jpa.integration.MakeTxLookup",
     };
     private static final String[] JAR_TO_ADD_CLASS_HELPERS;
 
+    private static final String[] DEFAULT_PREFIXES_TO_ADD = new String[] {
+            "tomee-mojarra"
+    };
+    private static final String[] PREFIXES_TO_ADD;
+
     static {
         final Collection<String> classes = new ArrayList<String>();
+        final Collection<String> prefixes = new ArrayList<String>();
         if 
(!SystemInstance.get().getOptions().get(TOMEE_WEBAPP_CLASSLOADER_ENRICHMENT_SKIP,
 false)) {
+            final String additionalEnrichments = 
SystemInstance.get().getOptions().get(TOMEE_WEBAPP_CLASSLOADER_ENRICHMENT_CLASSES,
 "");
             classes.addAll(Arrays.asList(DEFAULT_JAR_TO_ADD_CLASS_HELPERS));
-
-            final String additionalEnrichments = 
SystemInstance.get().getOptions().get(TOMEE_WEBAPP_CLASSLOADER_ENRICHMENT, "");
             if (additionalEnrichments != null && 
!additionalEnrichments.isEmpty()) {
                 for (String name : additionalEnrichments.split(",")) {
                     classes.add(name.trim());
                 }
             }
+
+            final String additionalPrefixes = 
SystemInstance.get().getOptions().get(TOMEE_WEBAPP_CLASSLOADER_ENRICHMENT_PREFIXES,
 "");
+            prefixes.addAll(Arrays.asList(DEFAULT_PREFIXES_TO_ADD));
+            if (additionalPrefixes != null && !additionalPrefixes.isEmpty()) {
+                for (String name : additionalPrefixes.split(",")) {
+                    prefixes.add(name.trim());
+                }
+            }
         }
         JAR_TO_ADD_CLASS_HELPERS = classes.toArray(new String[classes.size()]);
+        PREFIXES_TO_ADD = prefixes.toArray(new String[prefixes.size()]);
     }
 
     private TomEEClassLoaderHelper() {
@@ -58,8 +77,10 @@ public final class TomEEClassLoaderHelpe
     }
 
     public static URL[] tomEEWebappIntegrationLibraries() {
-        final ClassLoader cl = TomEEClassLoaderHelper.class.getClassLoader(); 
// reference classloader = standardclassloader
         final Collection<URL> urls = new ArrayList<URL>();
+
+        // from class
+        final ClassLoader cl = TomEEClassLoaderHelper.class.getClassLoader(); 
// reference classloader = standardclassloader
         for (String name : JAR_TO_ADD_CLASS_HELPERS) {
             try {
                 final Class<?> clazz = cl.loadClass(name);
@@ -77,6 +98,20 @@ public final class TomEEClassLoaderHelpe
                 // ignore
             }
         }
+
+        // from prefix
+        final Paths paths = new Paths(new 
File(System.getProperty("openejb.home"))); // parameter is useless
+        for (String prefix : PREFIXES_TO_ADD) {
+            final File file = paths.findTomEELibJar(prefix);
+            if (file != null) {
+                try {
+                    urls.add(file.toURI().toURL());
+                } catch (MalformedURLException e) {
+                    // ignored
+                }
+            }
+        }
+
         return urls.toArray(new URL[urls.size()]);
     }
 }

Added: 
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEContainerListener.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEContainerListener.java?rev=1355970&view=auto
==============================================================================
--- 
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEContainerListener.java
 (added)
+++ 
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomEEContainerListener.java
 Sun Jul  1 18:22:29 2012
@@ -0,0 +1,22 @@
+package org.apache.tomee.catalina;
+
+import org.apache.catalina.ContainerEvent;
+import org.apache.catalina.ContainerListener;
+import org.apache.catalina.core.StandardContext;
+
+public class TomEEContainerListener implements ContainerListener {
+    private static final ThreadLocal<StandardContext> context = new 
ThreadLocal<StandardContext>();
+
+    @Override
+    public void containerEvent(final ContainerEvent event) {
+        if ("beforeContextInitialized".equals(event.getType())) {
+            context.set((StandardContext) event.getContainer());
+        } else if ("afterContextInitialized".equals(event.getType())) {
+            context.remove();
+        }
+    }
+
+    public static StandardContext get() {
+        return context.get();
+    }
+}

Modified: 
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java?rev=1355970&r1=1355969&r2=1355970&view=diff
==============================================================================
--- 
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
 (original)
+++ 
openejb/trunk/openejb/tomee/tomee-catalina/src/main/java/org/apache/tomee/catalina/TomcatWebAppBuilder.java
 Sun Jul  1 18:22:29 2012
@@ -558,6 +558,9 @@ public class TomcatWebAppBuilder impleme
         standardContext.setNamingContextListener(ncl);
         standardContext.addLifecycleListener(ncl);
         standardContext.addLifecycleListener(new TomcatJavaJndiBinder());
+
+        // listen some events
+        standardContext.addContainerListener(new TomEEContainerListener());
     }
 
     public class StandardContextInfo {

Added: openejb/trunk/openejb/tomee/tomee-mojarra/pom.xml
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-mojarra/pom.xml?rev=1355970&view=auto
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-mojarra/pom.xml (added)
+++ openejb/trunk/openejb/tomee/tomee-mojarra/pom.xml Sun Jul  1 18:22:29 2012
@@ -0,0 +1,57 @@
+<?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.
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0";
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
+  <parent>
+    <artifactId>tomee</artifactId>
+    <groupId>org.apache.openejb</groupId>
+    <version>1.1.0-SNAPSHOT</version>
+  </parent>
+  <modelVersion>4.0.0</modelVersion>
+
+  <artifactId>tomee-mojarra</artifactId>
+  <name>OpenEJB :: TomEE :: Mojarra</name>
+
+  <dependencies>
+    <!--
+    provided = in the webapp
+    since MyFaces is our default implementation
+    -->
+    <dependency>
+      <groupId>org.glassfish</groupId>
+      <artifactId>javax.faces</artifactId>
+      <version>2.1.9</version>
+      <scope>provided</scope>
+    </dependency>
+    <dependency>
+      <groupId>javax.faces</groupId>
+      <artifactId>javax.faces-api</artifactId>
+      <version>2.1</version>
+      <scope>provided</scope>
+    </dependency>
+
+    <dependency>
+      <groupId>org.apache.openejb</groupId>
+      <artifactId>tomee-catalina</artifactId>
+      <version>${tomee.version}</version>
+      <scope>provided</scope>
+    </dependency>
+  </dependencies>
+</project>

Added: 
openejb/trunk/openejb/tomee/tomee-mojarra/src/main/java/org/apache/tomee/mojarra/TomEEInjectionProvider.java
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-mojarra/src/main/java/org/apache/tomee/mojarra/TomEEInjectionProvider.java?rev=1355970&view=auto
==============================================================================
--- 
openejb/trunk/openejb/tomee/tomee-mojarra/src/main/java/org/apache/tomee/mojarra/TomEEInjectionProvider.java
 (added)
+++ 
openejb/trunk/openejb/tomee/tomee-mojarra/src/main/java/org/apache/tomee/mojarra/TomEEInjectionProvider.java
 Sun Jul  1 18:22:29 2012
@@ -0,0 +1,46 @@
+package org.apache.tomee.mojarra;
+
+import com.sun.faces.spi.DiscoverableInjectionProvider;
+import com.sun.faces.spi.InjectionProviderException;
+import org.apache.catalina.core.StandardContext;
+import org.apache.tomee.catalina.JavaeeInstanceManager;
+import org.apache.tomee.catalina.TomEEContainerListener;
+
+public class TomEEInjectionProvider extends DiscoverableInjectionProvider {
+    private JavaeeInstanceManager instanceManager;
+
+    public TomEEInjectionProvider() {
+        final StandardContext context = TomEEContainerListener.get();
+        if (context == null) {
+            throw new IllegalArgumentException("standard context cannot be 
found");
+        }
+        instanceManager = (JavaeeInstanceManager) context.getInstanceManager();
+    }
+
+    @Override
+    public void inject(final Object managedBean) throws 
InjectionProviderException {
+        try {
+            instanceManager.inject(managedBean);
+        } catch (Exception e) {
+            throw new InjectionProviderException(e);
+        }
+    }
+
+    @Override
+    public void invokePreDestroy(final Object managedBean) throws 
InjectionProviderException {
+        try {
+            instanceManager.destroyInstance(managedBean);
+        } catch (Exception e) {
+            throw new InjectionProviderException(e);
+        }
+    }
+
+    @Override
+    public void invokePostConstruct(final Object managedBean) throws 
InjectionProviderException {
+        try {
+            instanceManager.postConstruct(managedBean, managedBean.getClass());
+        } catch (Exception e) {
+            throw new InjectionProviderException(e);
+        }
+    }
+}

Added: 
openejb/trunk/openejb/tomee/tomee-mojarra/src/main/resources/META-INF/services/com.sun.faces.spi.injectionprovider
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-mojarra/src/main/resources/META-INF/services/com.sun.faces.spi.injectionprovider?rev=1355970&view=auto
==============================================================================
--- 
openejb/trunk/openejb/tomee/tomee-mojarra/src/main/resources/META-INF/services/com.sun.faces.spi.injectionprovider
 (added)
+++ 
openejb/trunk/openejb/tomee/tomee-mojarra/src/main/resources/META-INF/services/com.sun.faces.spi.injectionprovider
 Sun Jul  1 18:22:29 2012
@@ -0,0 +1 @@
+org.apache.tomee.mojarra.TomEEInjectionProvider:org.apache.tomee.catalina.JavaeeInstanceManager

Modified: openejb/trunk/openejb/tomee/tomee-webapp/pom.xml
URL: 
http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/pom.xml?rev=1355970&r1=1355969&r2=1355970&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/pom.xml (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/pom.xml Sun Jul  1 18:22:29 2012
@@ -194,6 +194,12 @@
     </dependency>
     <dependency>
       <groupId>org.apache.openejb</groupId>
+      <artifactId>tomee-mojarra</artifactId>
+      <version>${tomee.version}</version>
+      <scope>runtime</scope>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.openejb</groupId>
       <artifactId>tomee-common</artifactId>
       <version>${tomee.version}</version>
       <scope>runtime</scope>


Reply via email to