Author: rmannibucau
Date: Thu Nov 24 12:58:43 2011
New Revision: 1205810
URL: http://svn.apache.org/viewvc?rev=1205810&view=rev
Log:
adding tomee-webapp-ng
Added:
openejb/trunk/sandbox/tomee-webapp-ng/
openejb/trunk/sandbox/tomee-webapp-ng/pom.xml
openejb/trunk/sandbox/tomee-webapp-ng/src/
openejb/trunk/sandbox/tomee-webapp-ng/src/main/
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/EJBHelper.java
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/EJBInvocationHelper.java
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/EJBInvokerHelper.java
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/EJBMethodsHelper.java
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/Invocation.java
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/JSFHelper.java
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/JndiHelper.java
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/OpenEJBHelper.java
openejb/trunk/sandbox/tomee-webapp-ng/src/main/resources/
openejb/trunk/sandbox/tomee-webapp-ng/src/main/resources/META-INF/
openejb/trunk/sandbox/tomee-webapp-ng/src/main/resources/META-INF/beans.xml
openejb/trunk/sandbox/tomee-webapp-ng/src/main/tomcat/
openejb/trunk/sandbox/tomee-webapp-ng/src/main/tomcat/conf/
openejb/trunk/sandbox/tomee-webapp-ng/src/main/tomcat/conf/logging.properties
openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/
openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/WEB-INF/
openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/WEB-INF/template.xhtml
openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/WEB-INF/web.xml
openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/ejb-invocation.xhtml
openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/ejb-invoker.xhtml
openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/ejb-methods.xhtml
openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/ejb.xhtml
openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/index.xhtml
openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/jndi.xhtml
openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/resources/
openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/resources/css/
openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/resources/css/bootstrap.css
openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/resources/images/
openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/resources/images/mock.png
(with props)
openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/resources/js/
openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/resources/js/widgets.js
openejb/trunk/sandbox/tomee-webapp-ng/src/test/
openejb/trunk/sandbox/tomee-webapp-ng/src/test/java/
Added: openejb/trunk/sandbox/tomee-webapp-ng/pom.xml
URL:
http://svn.apache.org/viewvc/openejb/trunk/sandbox/tomee-webapp-ng/pom.xml?rev=1205810&view=auto
==============================================================================
--- openejb/trunk/sandbox/tomee-webapp-ng/pom.xml (added)
+++ openejb/trunk/sandbox/tomee-webapp-ng/pom.xml Thu Nov 24 12:58:43 2011
@@ -0,0 +1,85 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<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">
+ <modelVersion>4.0.0</modelVersion>
+
+ <groupId>tomee-webapp-ng</groupId>
+ <artifactId>tomee-webapp-ng</artifactId>
+ <version>1.0.0-beta-2-SNAPSHOT</version>
+ <packaging>war</packaging>
+
+ <repositories>
+ <repository>
+ <id>primefaces</id>
+ <name>PrimeFaces repository</name>
+ <url>http://repository.primefaces.org/</url>
+ </repository>
+ </repositories>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.primefaces</groupId>
+ <artifactId>primefaces</artifactId>
+ <version>3.0.M4</version>
+ </dependency>
+ <dependency>
+ <groupId>org.primefaces.themes</groupId>
+ <artifactId>rocket</artifactId>
+ <version>1.0.2</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.openejb</groupId>
+ <artifactId>tomee-webapp</artifactId>
+ <version>4.0.0-beta-2-SNAPSHOT</version>
+ <scope>provided</scope>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.tomcat</groupId>
+ <artifactId>tomcat-catalina</artifactId>
+ <version>7.0.21</version>
+ <scope>provided</scope>
+ </dependency>
+ </dependencies>
+
+ <build>
+ <defaultGoal>package</defaultGoal>
+ <plugins>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <version>2.3.2</version>
+ <configuration>
+ <source>1.6</source>
+ <target>1.6</target>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-war-plugin</artifactId>
+ <version>2.1.1</version>
+ <configuration>
+ <packagingExcludes>WEB-INF/web.xml</packagingExcludes>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>com.googlecode.t7mp</groupId>
+ <artifactId>maven-t7-plugin</artifactId>
+ <version>0.9.7</version>
+ <configuration>
+ <tomcatHttpPort>1234</tomcatHttpPort>
+ <tomcatShutdownPort>13245</tomcatShutdownPort>
+ <tomcatVersion>7.0.21</tomcatVersion>
+ <webapps>
+ <webappArtifact>
+ <groupId>org.apache.openejb</groupId>
+ <artifactId>tomee-webapp</artifactId>
+ <version>4.0.0-beta-2-SNAPSHOT</version>
+ <contextPath>openejb</contextPath>
+ </webappArtifact>
+ </webapps>
+ </configuration>
+ </plugin>
+ </plugins>
+ </build>
+</project>
Added:
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/EJBHelper.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/EJBHelper.java?rev=1205810&view=auto
==============================================================================
---
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/EJBHelper.java
(added)
+++
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/EJBHelper.java
Thu Nov 24 12:58:43 2011
@@ -0,0 +1,73 @@
+package org.apache.tomee.webapp.jsf;
+
+import org.apache.openejb.AppContext;
+import org.apache.openejb.BeanContext;
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.spi.ContainerSystem;
+import org.primefaces.model.DefaultTreeNode;
+import org.primefaces.model.TreeNode;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Named;
+import javax.naming.NamingException;
+import java.util.List;
+
+/**
+ * @author rmannibucau
+ */
+@Named("ejbHelper")
+@ApplicationScoped
+public class EJBHelper {
+ public static final String EMPTY_NODE_TYPE = "empty";
+ public static final String EJB_NODE_TYPE = "ejb";
+ public static final String APPLICATION_NODE_TYPE = "application";
+ public static final String ROOT_NODE_TYPE = "root";
+
+ private static final ContainerSystem CONTAINER_SYSTEM =
SystemInstance.get().getComponent(ContainerSystem.class);
+
+ public TreeNode getEJB() throws NamingException {
+ final TreeNode root = new DefaultTreeNode(ROOT_NODE_TYPE, "/", null);
+ for (AppContext appContext : CONTAINER_SYSTEM.getAppContexts()) {
+ final String appName = appContext.getId();
+ final TreeNode appNode = new
DefaultTreeNode(APPLICATION_NODE_TYPE, appName, root);
+ final List<BeanContext> contexts = appContext.getBeanContexts();
+ if (!contexts.isEmpty()) {
+ for (BeanContext beanContext : appContext.getBeanContexts()) {
+ if
(beanContext.getBeanClass().equals(BeanContext.Comp.class)) {
+ continue;
+ }
+
+ final EJBInfo info = new EJBInfo(appName, (String)
beanContext.getDeploymentID(), beanContext.getBeanClass().getName());
+ new DefaultTreeNode(EJB_NODE_TYPE, info, appNode);
+ }
+ } else {
+ new DefaultTreeNode(EMPTY_NODE_TYPE, "no ejb", appNode);
+ }
+ }
+ return root;
+ }
+
+ public static class EJBInfo {
+ private String app;
+ private String name;
+ private String classname;
+
+ public EJBInfo(final String app, final String name, final String
classname) {
+ this.app = app;
+ this.name = name;
+ this.classname = classname;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public String getClassname() {
+ return classname;
+ }
+
+ public String getApp() {
+ return app;
+ }
+ }
+}
Added:
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/EJBInvocationHelper.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/EJBInvocationHelper.java?rev=1205810&view=auto
==============================================================================
---
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/EJBInvocationHelper.java
(added)
+++
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/EJBInvocationHelper.java
Thu Nov 24 12:58:43 2011
@@ -0,0 +1,81 @@
+package org.apache.tomee.webapp.jsf;
+
+import javax.enterprise.context.SessionScoped;
+import javax.inject.Inject;
+import javax.inject.Named;
+import java.io.Serializable;
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.apache.tomee.webapp.jsf.JSFHelper.param;
+import static org.apache.tomee.webapp.jsf.OpenEJBHelper.method;
+
+/**
+ * @author rmannibucau
+ */
+@Named("ejbInvocationHelper")
+@SessionScoped
+public class EJBInvocationHelper implements Serializable {
+ @Inject @Named("invocation") @SessionScoped private Invocation invocation;
+ private List<ParameterInfo> methodParameters;
+
+ public List<ParameterInfo> getMethodParameters() {
+ if (methodParameters == null) {
+ final String app = param("app");
+ final String name = param("name");
+ final String rawId = param("methodId");
+
+ methodParameters = new ArrayList<ParameterInfo>();
+ if (app == null || name == null || rawId == null) {
+ return methodParameters;
+ }
+
+ invocation.setApp(app);
+ invocation.setName(name);
+ invocation.setId(Long.parseLong(rawId));
+
+ final Method mtd = method(invocation.getApp(),
invocation.getName(), invocation.getId());
+ if (mtd != null) {
+ for (Class<?> parameter : mtd.getParameterTypes()) {
+ methodParameters.add(new
ParameterInfo(parameter.getName().replace("java.lang.", "")));
+ }
+ }
+ }
+ return methodParameters;
+ }
+
+ public String submit() {
+ invocation.getMethodParameters().clear();
+ for (ParameterInfo info : methodParameters) {
+ invocation.getMethodParameters().add(info.getValue());
+ }
+ methodParameters.clear();
+ methodParameters = null;
+ return "ejb-invoker?faces-redirect=true";
+ }
+
+
+
+ public static class ParameterInfo {
+ private String value;
+ private String type;
+
+ public ParameterInfo(String type) {
+ this.type = type;
+ this.value = null;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public String getValue() {
+ return value;
+ }
+
+ public void setValue(String value) {
+ this.value = value;
+ }
+ }
+}
Added:
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/EJBInvokerHelper.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/EJBInvokerHelper.java?rev=1205810&view=auto
==============================================================================
---
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/EJBInvokerHelper.java
(added)
+++
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/EJBInvokerHelper.java
Thu Nov 24 12:58:43 2011
@@ -0,0 +1,86 @@
+package org.apache.tomee.webapp.jsf;
+
+import org.apache.openejb.BeanContext;
+import org.apache.openejb.InterfaceType;
+import org.apache.openejb.assembler.classic.JndiBuilder;
+import org.apache.xbean.recipe.RecipeHelper;
+
+import javax.enterprise.context.SessionScoped;
+import javax.faces.application.FacesMessage;
+import javax.faces.context.FacesContext;
+import javax.inject.Inject;
+import javax.inject.Named;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+import java.io.PrintWriter;
+import java.io.StringWriter;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.List;
+
+import static org.apache.tomee.webapp.jsf.OpenEJBHelper.baseClass;
+import static org.apache.tomee.webapp.jsf.OpenEJBHelper.bean;
+import static org.apache.tomee.webapp.jsf.OpenEJBHelper.method;
+
+/**
+ * @author rmannibucau
+ */
+@Named("ejbInvokerHelper")
+public class EJBInvokerHelper {
+ @Inject @Named("invocation") @SessionScoped private Invocation invocation;
+
+ public String getInvoke() {
+ if (invocation.isReady()) {
+ FacesContext.getCurrentInstance().addMessage(null, new
FacesMessage("invoke this EJB from EJB view, session was lost"));
+ return "can't do invokation";
+ }
+
+ Object o = result();
+ if (o == null) {
+ return null;
+ }
+ return o.toString();
+ }
+
+ private Object result() {
+ final BeanContext context = bean(invocation.getApp(),
invocation.getName());
+ final Class<?> itf = baseClass(context);
+ final InterfaceType type = context.getInterfaceType(itf);
+ final String jndi =
"openejb:Deployment/".concat(JndiBuilder.format(invocation.getName(),
itf.getName(), type));
+ final Object bean;
+ try {
+ bean = new InitialContext().lookup(jndi);
+ } catch (NamingException e) {
+ return exceptionToStr(e);
+ }
+
+ final Method mtd = method(invocation.getApp(), invocation.getName(),
invocation.getId());
+ try {
+ return mtd.invoke(bean, getArgs(invocation.getMethodParameters(),
mtd.getParameterTypes()));
+ } catch (InvocationTargetException e) {
+ return exceptionToStr(e.getCause());
+ } catch (Exception e) {
+ return exceptionToStr(e);
+ }
+ }
+
+ private String exceptionToStr(Throwable e) {
+ StringWriter writer = new StringWriter();
+ e.printStackTrace(new PrintWriter(writer));
+ return writer.toString().replace("\n", "<br/>");
+ }
+
+ private Object[] getArgs(List<String> methodParameters, Class<?>[] types) {
+ Object[] obj = new Object[methodParameters.size()];
+ int i = 0;
+ for (String p : methodParameters) {
+ obj[i] = convert(p, types[i]);
+ i++;
+ }
+ return obj;
+ }
+
+ private Object convert(String p, Class<?> type) {
+ return RecipeHelper.convert(type, p, true);
+ }
+}
Added:
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/EJBMethodsHelper.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/EJBMethodsHelper.java?rev=1205810&view=auto
==============================================================================
---
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/EJBMethodsHelper.java
(added)
+++
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/EJBMethodsHelper.java
Thu Nov 24 12:58:43 2011
@@ -0,0 +1,54 @@
+package org.apache.tomee.webapp.jsf;
+
+import org.apache.openejb.AppContext;
+import org.apache.openejb.BeanContext;
+
+import javax.faces.application.FacesMessage;
+import javax.faces.context.FacesContext;
+import javax.inject.Named;
+import java.util.ArrayList;
+import java.util.List;
+
+import static org.apache.tomee.webapp.jsf.JSFHelper.param;
+import static org.apache.tomee.webapp.jsf.OpenEJBHelper.app;
+import static org.apache.tomee.webapp.jsf.OpenEJBHelper.baseClass;
+import static org.apache.tomee.webapp.jsf.OpenEJBHelper.methods;
+
+/**
+ * @author rmannibucau
+ */
+@Named("ejbMethodsHelper")
+public class EJBMethodsHelper {
+ private List<OpenEJBHelper.MethodInfo> dataTable;
+
+ public void init() {
+ final String app = param("app");
+ final String name = param("name");
+
+ if (app == null || name == null) {
+ FacesContext.getCurrentInstance().addMessage(null, new
FacesMessage("app and ejb name are mandatory"));
+ }
+
+ final AppContext appContext = app(app);
+ if (appContext != null) {
+ dataTable = new ArrayList<OpenEJBHelper.MethodInfo>();
+ for (BeanContext beanContext : appContext.getBeanContexts()) {
+ if (beanContext.getDeploymentID().equals(name)) {
+ dataTable = methods(baseClass(beanContext));
+ }
+ }
+ }
+ }
+
+
+ public List<OpenEJBHelper.MethodInfo> getDataTable() {
+ if (dataTable == null) {
+ init();
+ }
+ return dataTable;
+ }
+
+ public void setDataTable(List<OpenEJBHelper.MethodInfo> dataTable) {
+ this.dataTable = dataTable;
+ }
+}
Added:
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/Invocation.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/Invocation.java?rev=1205810&view=auto
==============================================================================
---
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/Invocation.java
(added)
+++
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/Invocation.java
Thu Nov 24 12:58:43 2011
@@ -0,0 +1,51 @@
+package org.apache.tomee.webapp.jsf;
+
+import javax.enterprise.context.SessionScoped;
+import javax.inject.Named;
+import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * @author rmannibucau
+ */
+@Named("invocation")
+@SessionScoped
+public class Invocation implements Serializable {
+ private String app;
+ private String name;
+ private long id;
+ private List<String> methodParameters = new ArrayList<String>();
+
+ public String getApp() {
+ return app;
+ }
+
+ public void setApp(String app) {
+ this.app = app;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public long getId() {
+ return id;
+ }
+
+ public void setId(long id) {
+ this.id = id;
+ }
+
+ public List<String> getMethodParameters() {
+ return methodParameters;
+ }
+
+ public boolean isReady() {
+ return app != null && name != null && id > 0;
+ }
+}
Added:
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/JSFHelper.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/JSFHelper.java?rev=1205810&view=auto
==============================================================================
---
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/JSFHelper.java
(added)
+++
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/JSFHelper.java
Thu Nov 24 12:58:43 2011
@@ -0,0 +1,16 @@
+package org.apache.tomee.webapp.jsf;
+
+import javax.faces.context.FacesContext;
+
+/**
+ * @author rmannibucau
+ */
+public final class JSFHelper {
+ private JSFHelper() {
+ // no-op
+ }
+
+ public static String param(String name) {
+ return
FacesContext.getCurrentInstance().getExternalContext().getRequestParameterMap().get(name);
+ }
+}
Added:
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/JndiHelper.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/JndiHelper.java?rev=1205810&view=auto
==============================================================================
---
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/JndiHelper.java
(added)
+++
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/JndiHelper.java
Thu Nov 24 12:58:43 2011
@@ -0,0 +1,141 @@
+package org.apache.tomee.webapp.jsf;
+
+import org.apache.openejb.AppContext;
+import org.apache.openejb.BeanContext;
+import org.apache.openejb.ModuleContext;
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.spi.ContainerSystem;
+import org.primefaces.model.DefaultTreeNode;
+import org.primefaces.model.TreeNode;
+
+import javax.enterprise.context.ApplicationScoped;
+import javax.inject.Named;
+import javax.naming.Binding;
+import javax.naming.Context;
+import javax.naming.NamingEnumeration;
+import javax.naming.NamingException;
+import java.util.HashMap;
+import java.util.Map;
+
+import static
org.apache.tomee.webapp.jsf.JndiHelper.JndiTreeHelper.runOnJndiTree;
+
+/**
+ * @author rmannibucau
+ */
+@Named
+@ApplicationScoped
+public class JndiHelper {
+ public static final String CONTEXT_NODE_TYPE = "context";
+ public static final String LEAF_NODE_TYPE = "leaf";
+ public static final String APPLICATION_NODE_TYPE = "application";
+ public static final String MODULE_NODE_TYPE = "module";
+ public static final String ROOT_NODE_TYPE = "root";
+
+ private static final ContainerSystem CONTAINER_SYSTEM =
SystemInstance.get().getComponent(ContainerSystem.class);
+
+ public TreeNode getJndi() throws NamingException {
+ final TreeNode root = new DefaultTreeNode(ROOT_NODE_TYPE, "/", null);
+
+ for (AppContext appContext : CONTAINER_SYSTEM.getAppContexts()) {
+ final TreeNode appNode = new
DefaultTreeNode(APPLICATION_NODE_TYPE, appContext.getId(), root);
+
+ // is there a simpler way?
+ // id = guarantee unity
+ final Map<String, ModuleContext> modules = new HashMap<String,
ModuleContext>();
+ for (BeanContext beanContext : appContext.getBeanContexts()) {
+ if
(!beanContext.getBeanClass().equals(BeanContext.Comp.class)) {
+ final ModuleContext moduleContext =
beanContext.getModuleContext();
+ modules.put(moduleContext.getUniqueId(), moduleContext);
+ }
+ }
+
+ for (ModuleContext module : modules.values()) {
+ final TreeNode moduleNode = new
DefaultTreeNode(MODULE_NODE_TYPE, appContext.getId(), appNode);
+ addSubContext(module.getModuleJndiContext(), "module",
moduleNode);
+ }
+
+ addSubContext(appContext.getAppJndiContext(), "app", appNode);
+ addSubContext(appContext.getGlobalJndiContext(), "global",
appNode);
+ }
+
+ return root;
+ }
+
+ private static void addSubContext(final Context context, final String
subContext, final TreeNode parent) throws NamingException {
+ final TreeNode subNode = new DefaultTreeNode("context", subContext,
parent);
+ runOnJndiTree((Context) context.lookup(subContext), subNode);
+ }
+
+ protected static class JndiTreeHelper {
+ private Context context;
+ private String path;
+
+ private JndiTreeHelper(Context ctx, String name) {
+ path = name;
+ context = ctx;
+ }
+
+ private TreeNode runOnTree(final TreeNode root) {
+ final NamingEnumeration<Binding> ne;
+ try {
+ ne = context.listBindings(path);
+ } catch (NamingException e) {
+ return root;
+ }
+
+ while (ne.hasMoreElements()) {
+ final Binding current;
+ try {
+ current = ne.next();
+ } catch (NamingException nnfe) {
+ continue;
+ }
+
+ final String name = current.getName();
+ final String fullName = path.concat("/").concat(name);
+ final Object obj = current.getObject();
+
+ if (obj != null && obj instanceof Context) {
+ runOnJndiTree(context, new
DefaultTreeNode(CONTEXT_NODE_TYPE, name, root), fullName);
+ } else {
+ new DefaultTreeNode(LEAF_NODE_TYPE, new Leaf(name,
value(context, fullName)), root);
+ }
+ }
+ return root;
+ }
+
+ private static Object value(Context context, String fullName) {
+ try {
+ return context.lookup(fullName);
+ } catch (NamingException nnfe) {
+ return null;
+ }
+ }
+
+ private static TreeNode runOnJndiTree(final Context ctx, final
TreeNode root, final String prefix) {
+ return new JndiTreeHelper(ctx, prefix).runOnTree(root);
+ }
+
+ public static TreeNode runOnJndiTree(final Context ctx, final TreeNode
root) {
+ return new JndiTreeHelper(ctx, "").runOnTree(root);
+ }
+
+ public static class Leaf {
+ private String name;
+ private Object value;
+
+ public Leaf(String name, Object value) {
+ this.name = name;
+ this.value = value;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public Object getValue() {
+ return value;
+ }
+ }
+ }
+}
Added:
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/OpenEJBHelper.java
URL:
http://svn.apache.org/viewvc/openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/OpenEJBHelper.java?rev=1205810&view=auto
==============================================================================
---
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/OpenEJBHelper.java
(added)
+++
openejb/trunk/sandbox/tomee-webapp-ng/src/main/java/org/apache/tomee/webapp/jsf/OpenEJBHelper.java
Thu Nov 24 12:58:43 2011
@@ -0,0 +1,104 @@
+package org.apache.tomee.webapp.jsf;
+
+import org.apache.openejb.AppContext;
+import org.apache.openejb.BeanContext;
+import org.apache.openejb.loader.SystemInstance;
+import org.apache.openejb.spi.ContainerSystem;
+
+import java.lang.reflect.Method;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * @author rmannibucau
+ */
+public final class OpenEJBHelper {
+ private static final ContainerSystem CONTAINER_SYSTEM =
SystemInstance.get().getComponent(ContainerSystem.class);
+
+ public static AppContext app(final String name) {
+ for (AppContext appContext : CONTAINER_SYSTEM.getAppContexts()) {
+ final String appName = appContext.getId();
+ if (appName.equals(name)) {
+ return appContext;
+ }
+ }
+ return null;
+ }
+
+ public static BeanContext bean(final String app, final String name) {
+ AppContext appCtx = app(app);
+ if (appCtx == null) {
+ return null;
+ }
+ for (BeanContext ctx : appCtx.getBeanContexts()) {
+ if (ctx.getDeploymentID().equals(name)) {
+ return ctx;
+ }
+ }
+ return null;
+ }
+
+ public static Method method(final String app, final String name, final
long id) {
+ final BeanContext bean = bean(app, name);
+ if (bean != null) {
+ final Collection<MethodInfo> methods = methods(baseClass(bean));
+ for (OpenEJBHelper.MethodInfo method : methods) {
+ if (method.getId() == id) {
+ return method.getMethod();
+ }
+ }
+ }
+ return null;
+ }
+
+ public static Class<?> baseClass(BeanContext beanContext) {
+ if (beanContext.isLocalbean()) {
+ return beanContext.getBeanClass();
+ } else if (beanContext.getBusinessLocalInterfaces().size() > 0) {
+ return beanContext.getBusinessLocalInterface();
+ } else if (beanContext.getBusinessRemoteInterface() != null) {
+ return beanContext.getBusinessRemoteInterface();
+ }
+ return beanContext.getBeanClass();
+ }
+
+ public static List<MethodInfo> methods(Class<?> beanClass) {
+ final List<MethodInfo> methods = new ArrayList<MethodInfo>();
+ Class<?> current = beanClass;
+ do {
+ for (Method method : current.getDeclaredMethods()) {
+ methods.add(new MethodInfo(method.toGenericString()
+ .replace(beanClass.getName().concat("."), "")
+ .replace("java.lang.", ""),
+ method.hashCode(), method));
+ }
+ current = current.getSuperclass();
+ } while (current != null && !current.equals(Object.class));
+ return methods;
+ }
+
+ public static class MethodInfo {
+ private String signature;
+ private long id;
+ private Method method;
+
+ public MethodInfo(String signature, long id, Method mtd) {
+ this.signature = signature;
+ this.id = id;
+ this.method = mtd;
+ }
+
+ public String getSignature() {
+ return signature;
+ }
+
+ public long getId() {
+ return id;
+ }
+
+ public Method getMethod() {
+ return method;
+ }
+ }
+}
Added:
openejb/trunk/sandbox/tomee-webapp-ng/src/main/resources/META-INF/beans.xml
URL:
http://svn.apache.org/viewvc/openejb/trunk/sandbox/tomee-webapp-ng/src/main/resources/META-INF/beans.xml?rev=1205810&view=auto
==============================================================================
--- openejb/trunk/sandbox/tomee-webapp-ng/src/main/resources/META-INF/beans.xml
(added)
+++ openejb/trunk/sandbox/tomee-webapp-ng/src/main/resources/META-INF/beans.xml
Thu Nov 24 12:58:43 2011
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://java.sun.com/xml/ns/javaee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
+</beans>
Added:
openejb/trunk/sandbox/tomee-webapp-ng/src/main/tomcat/conf/logging.properties
URL:
http://svn.apache.org/viewvc/openejb/trunk/sandbox/tomee-webapp-ng/src/main/tomcat/conf/logging.properties?rev=1205810&view=auto
==============================================================================
---
openejb/trunk/sandbox/tomee-webapp-ng/src/main/tomcat/conf/logging.properties
(added)
+++
openejb/trunk/sandbox/tomee-webapp-ng/src/main/tomcat/conf/logging.properties
Thu Nov 24 12:58:43 2011
@@ -0,0 +1,23 @@
+#
+# Copyright (C) 2010 Joerg Bellmann <[email protected]>
+#
+# Licensed 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.
+#
+
+#
+# OpenEJB logs
+#
+log4j.rootLogger = INFO, stdout
+log4j.appender.stdout = org.apache.log4j.ConsoleAppender
+log4j.appender.stdout.layout = org.apache.log4j.SimpleLayout
+
Added:
openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/WEB-INF/template.xhtml
URL:
http://svn.apache.org/viewvc/openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/WEB-INF/template.xhtml?rev=1205810&view=auto
==============================================================================
---
openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/WEB-INF/template.xhtml
(added)
+++
openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/WEB-INF/template.xhtml
Thu Nov 24 12:58:43 2011
@@ -0,0 +1,44 @@
+<html xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:ui="http://java.sun.com/jsf/facelets"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:p="http://primefaces.org/ui">
+ <h:head>
+ <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
+ <h:outputStylesheet library="css" name="bootstrap.css"/>
+ <h:outputScript library="js" name="widgets.js" target="head"/>
+
+ <title>Apache TomEE Admin | <ui:insert name="title"/></title>
+ </h:head>
+ <h:body>
+ <div class="topbar">
+ <div class="fill">
+ <div class="container">
+ <a class="brand" href="http://openejb.apache.org/">Apache OpenEJB
&TomEE Website</a>
+ <ul class="nav">
+ <li><h:link value="Home" outcome="index"/></li>
+ <li><h:link value="Jndi Tree" outcome="jndi"/></li>
+ <li><h:link value="EJB" outcome="ejb"/></li>
+ </ul>
+ </div>
+ </div>
+ </div>
+
+ <div class="container">
+ <ui:insert name="content"/>
+
+ <footer>
+ <p>
+ Copyright © 2011 The Apache Software Foundation, Licensed under
the Apache License, Version 2.0.
+ Apache and the Apache feather logo are trademarks of The Apache
Software Foundation.
+ </p>
+ </footer>
+ </div>
+
+ <p:dock>
+ <p:menuitem value="Website" icon="/resources/images/mock.png"
url="http://openejb.apache.org/"/>
+ <p:menuitem value="Home" icon="/resources/images/mock.png"
url="/index.xhtml"/>
+ <p:menuitem value="Jndi" icon="/resources/images/mock.png"
url="/jndi.xhtml"/>
+ <p:menuitem value="EJB" icon="/resources/images/mock.png"
url="/ejb.xhtml"/>
+ </p:dock>
+ </h:body>
+</html>
\ No newline at end of file
Added: openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/WEB-INF/web.xml
URL:
http://svn.apache.org/viewvc/openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/WEB-INF/web.xml?rev=1205810&view=auto
==============================================================================
--- openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/WEB-INF/web.xml
(added)
+++ openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/WEB-INF/web.xml Thu
Nov 24 12:58:43 2011
@@ -0,0 +1,48 @@
+<?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.
+ -->
+<web-app xmlns="http://java.sun.com/xml/ns/javaee"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
+ metadata-complete="false"
+ version="2.5">
+ <display-name>TomEE Webapp</display-name>
+
+ <context-param>
+ <param-name>primefaces.THEME</param-name>
+ <param-value>rocket</param-value>
+ </context-param>
+
+ <context-param>
+ <param-name>javax.faces.DEFAULT_SUFFIX</param-name>
+ <param-value>.xhtml</param-value>
+ </context-param>
+
+ <servlet>
+ <servlet-name>Faces Servlet</servlet-name>
+ <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
+ <load-on-startup>1</load-on-startup>
+ </servlet>
+ <servlet-mapping>
+ <servlet-name>Faces Servlet</servlet-name>
+ <url-pattern>*.xhtml</url-pattern>
+ </servlet-mapping>
+
+ <welcome-file-list>
+ <welcome-file>index.xhtml</welcome-file>
+ </welcome-file-list>
+</web-app>
Added:
openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/ejb-invocation.xhtml
URL:
http://svn.apache.org/viewvc/openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/ejb-invocation.xhtml?rev=1205810&view=auto
==============================================================================
--- openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/ejb-invocation.xhtml
(added)
+++ openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/ejb-invocation.xhtml
Thu Nov 24 12:58:43 2011
@@ -0,0 +1,27 @@
+<ui:composition template="WEB-INF/template.xhtml"
+ xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:ui="http://java.sun.com/jsf/facelets">
+ <ui:define name="title">Method invocation configuration</ui:define>
+ <ui:define name="content">
+ <h:form>
+ <h:dataTable value="#{ejbInvocationHelper.methodParameters}"
var="methodInfo">
+ <h:column>
+ <f:facet name="header">
+ <h:outputText value="Type" />
+ </f:facet>
+ <h:outputText value="#{methodInfo.type}" />
+ </h:column>
+ <h:column>
+ <f:facet name="header">
+ <h:outputText value="Value" />
+ </f:facet>
+ <h:inputText value="#{methodInfo.value}" />
+ </h:column>
+ </h:dataTable>
+ <h:messages />
+ <h:commandButton action="#{ejbInvocationHelper.submit}" value="Submit" />
+ </h:form>
+ </ui:define>
+</ui:composition>
Added: openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/ejb-invoker.xhtml
URL:
http://svn.apache.org/viewvc/openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/ejb-invoker.xhtml?rev=1205810&view=auto
==============================================================================
--- openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/ejb-invoker.xhtml
(added)
+++ openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/ejb-invoker.xhtml Thu
Nov 24 12:58:43 2011
@@ -0,0 +1,9 @@
+<ui:composition template="WEB-INF/template.xhtml"
+ xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:ui="http://java.sun.com/jsf/facelets">
+ <ui:define name="title">Method invocation</ui:define>
+ <ui:define name="content">
+ <h:outputText value="Result: #{ejbInvokerHelper.invoke}" />
+ </ui:define>
+</ui:composition>
Added: openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/ejb-methods.xhtml
URL:
http://svn.apache.org/viewvc/openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/ejb-methods.xhtml?rev=1205810&view=auto
==============================================================================
--- openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/ejb-methods.xhtml
(added)
+++ openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/ejb-methods.xhtml Thu
Nov 24 12:58:43 2011
@@ -0,0 +1,20 @@
+<ui:composition template="WEB-INF/template.xhtml"
+ xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:ui="http://java.sun.com/jsf/facelets">
+ <ui:define name="title"><h:outputText value="#{param.name}
Methods"/></ui:define>
+ <ui:define name="content">
+ <ul>
+ <ui:repeat var="method" value="#{ejbMethodsHelper.dataTable}">
+ <li>
+ <h:link outcome="ejb-invocation?faces-redirect=true"
styleClass="method" value="#{method.signature}">
+ <f:param name="app" value="#{param.app}" />
+ <f:param name="name" value="#{param.name}" />
+ <f:param name="methodId" value="#{method.id}" />
+ </h:link>
+ </li>
+ </ui:repeat>
+ </ul>
+ </ui:define>
+</ui:composition>
Added: openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/ejb.xhtml
URL:
http://svn.apache.org/viewvc/openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/ejb.xhtml?rev=1205810&view=auto
==============================================================================
--- openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/ejb.xhtml (added)
+++ openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/ejb.xhtml Thu Nov 24
12:58:43 2011
@@ -0,0 +1,27 @@
+<ui:composition template="WEB-INF/template.xhtml"
+ xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:ui="http://java.sun.com/jsf/facelets"
+ xmlns:f="http://java.sun.com/jsf/core"
+ xmlns:p="http://primefaces.org/ui">
+ <ui:define name="title"> EJB(s)</ui:define>
+ <ui:define name="content">
+ <p:tree value="#{ejbHelper.EJB}" var="node" dynamic="true"
style="width:100%;">
+ <p:treeNode type="root">
+ <h:outputText value="#{node}" styleClass="root" />
+ </p:treeNode>
+ <p:treeNode type="empty">
+ <h:outputText value="#{node}" styleClass="empty" />
+ </p:treeNode>
+ <p:treeNode type="application">
+ <h:outputText value="#{node}" styleClass="application" />
+ </p:treeNode>
+ <p:treeNode type="ejb">
+ <h:link outcome="ejb-methods" value="#{node.name} (#{node.classname})">
+ <f:param name="app" value="#{node.app}"/>
+ <f:param name="name" value="#{node.name}"/>
+ </h:link>
+ </p:treeNode>
+ </p:tree>
+ </ui:define>
+</ui:composition>
Added: openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/index.xhtml
URL:
http://svn.apache.org/viewvc/openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/index.xhtml?rev=1205810&view=auto
==============================================================================
--- openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/index.xhtml (added)
+++ openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/index.xhtml Thu Nov
24 12:58:43 2011
@@ -0,0 +1,8 @@
+<ui:composition template="WEB-INF/template.xhtml"
+ xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:ui="http://java.sun.com/jsf/facelets">
+ <ui:define name="title">Home</ui:define>
+ <ui:define name="content">
+ This is the TomEE Admin webapp.
+ </ui:define>
+</ui:composition>
Added: openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/jndi.xhtml
URL:
http://svn.apache.org/viewvc/openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/jndi.xhtml?rev=1205810&view=auto
==============================================================================
--- openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/jndi.xhtml (added)
+++ openejb/trunk/sandbox/tomee-webapp-ng/src/main/webapp/jndi.xhtml Thu Nov 24
12:58:43 2011
@@ -0,0 +1,26 @@
+<ui:composition template="WEB-INF/template.xhtml"
+ xmlns="http://www.w3.org/1999/xhtml"
+ xmlns:h="http://java.sun.com/jsf/html"
+ xmlns:ui="http://java.sun.com/jsf/facelets"
+ xmlns:p="http://primefaces.org/ui">
+ <ui:define name="title"> Jndi Tree(s)</ui:define>
+ <ui:define name="content">
+ <p:tree value="#{jndiHelper.jndi}" var="node" dynamic="true"
style="width:100%;">
+ <p:treeNode type="root">
+ <h:outputText value="#{node}" styleClass="root" />
+ </p:treeNode>
+ <p:treeNode type="application">
+ <h:outputText value="#{node}" styleClass="application" />
+ </p:treeNode>
+ <p:treeNode type="module">
+ <h:outputText value="#{node}" styleClass="module" />
+ </p:treeNode>
+ <p:treeNode type="context">
+ <h:outputText value="#{node}" styleClass="context" />
+ </p:treeNode>
+ <p:treeNode type="leaf">
+ <h:outputText value="#{node.name} > #{node.value}" styleClass="leaf" />
+ </p:treeNode>
+ </p:tree>
+ </ui:define>
+</ui:composition>