You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tomee.apache.org by tv...@apache.org on 2012/11/23 21:44:43 UTC

svn commit: r1413051 - in /openejb/trunk/openejb: ./ arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/ tomee/tomee-common/src/main/java/org/apache/tomee/installer/ tomee/tomee-webapp/ tomee/tomee-webapp/src/mai...

Author: tveronezi
Date: Fri Nov 23 20:44:35 2012
New Revision: 1413051

URL: http://svn.apache.org/viewvc?rev=1413051&view=rev
Log:
https://issues.apache.org/jira/browse/TOMEE-605
-replace the current installer servlet by a installer command
-add custom growl notification
-add status panel (installer)
-add Makefile to help development

Added:
    openejb/trunk/openejb/Makefile
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/GetStatus.java
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/RunInstaller.java
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/listeners/ApplicationListener.java
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/servlet/AutoInstallerServlet.java
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/templates/application-growl-message.handlebars
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/templates/application-growl.handlebars
      - copied, changed from r1412789, openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/templates/application.handlebars
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/templates/application-tab-status-lines.handlebars
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/templates/application-tab-status.handlebars
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/view/GrowlNotification.js
      - copied, changed from r1412789, openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/view/ApplicationView.js
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/view/panels/status.js
Removed:
    openejb/trunk/openejb/tomee/tomee-common/src/main/java/org/apache/tomee/installer/InstallerServlet.java
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/listeners/SessionListener.java
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/default.css
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/index.jsp
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/installer-view.jsp
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/invokeobj.jsp
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/testejb.jsp
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/testhome.jsp
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/testint.jsp
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/testsuite.jsp
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/viewclass.jsp
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/viewconsole.jsp
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/viewejb.jsp
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/viewjndi.jsp
Modified:
    openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappContainer.java
    openejb/trunk/openejb/tomee/tomee-webapp/pom.xml
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/Application.java
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/servlet/CommandExecutorServlet.java
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/README.txt
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/WEB-INF/web.xml
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/ApplicationController.js
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/ApplicationModel.js
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/ApplicationTemplates.js
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/templates/application-toolbar.handlebars
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/util/I18N.js
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/util/Log.js
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/util/Obj.js
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/view/ApplicationToolbarView.js
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/view/ApplicationView.js
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/view/panels/console.js
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/view/panels/jndi.js
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/view/panels/log.js
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/view/panels/webservices.js
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/tomee.less
    openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/index.html
    openejb/trunk/openejb/tomee/tomee-webapp/src/test/conf/tomcat-users.xml

Added: openejb/trunk/openejb/Makefile
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/Makefile?rev=1413051&view=auto
==============================================================================
--- openejb/trunk/openejb/Makefile (added)
+++ openejb/trunk/openejb/Makefile Fri Nov 23 20:44:35 2012
@@ -0,0 +1,67 @@
+# This file is used during development only.
+# It has just some handy shortcuts.
+TOMEE_VERSION=1.5.1-SNAPSHOT
+TOMCAT_ZIP_NAME=apache-tomcat-7.0.33
+TOMCAT_ZIP=tomee/apache-tomcat/target/$(TOMCAT_ZIP_NAME)-SNAPSHOT.zip
+TOMEEPLUS_WAR=tomee/tomee-plus-webapp/target/tomee-plus-webapp-$(TOMEE_VERSION).war
+TOMEE_WAR=/home/tveronezi/dev/ws/openejb/trunk/tomee/tomee-webapp/target/tomee-webapp-$(TOMEE_VERSION).war
+TOMEEPLUS_ZIP=tomee/apache-tomee/target/apache-tomee-plus-$(TOMEE_VERSION).tar.gz
+
+$(TOMEE_WAR):
+	cd tomee/tomee-webapp/ && mvn clean install -DskipTests=true	
+
+$(TOMEEPLUS_WAR): $(TOMEE_WAR)
+	cd tomee/tomee-plus-webapp/ && mvn clean install -DskipTests=true	
+
+$(TOMCAT_ZIP):
+	cd tomee/apache-tomcat && mvn clean install	
+
+tomcat: $(TOMCAT_ZIP)
+
+tomee: tomcat $(TOMEEPLUS_WAR)
+
+kill-tomee: 
+	@if test -f target/runnner/tomcat-pid.txt; then \
+		kill -9 `cat target/runnner/tomcat-pid.txt`; \
+		rm target/runnner/tomcat-pid.txt; \
+	fi
+
+start-plus: kill-tomee tomee
+	mkdir -p target/runnner
+	cp $(TOMEEPLUS_ZIP) target/runnner/
+	rm -Rf target/runnner/apache-tomee-plus-$(TOMEE_VERSION) 
+	cd target/runnner/ && tar -xvzf apache-tomee-plus-$(TOMEE_VERSION).tar.gz
+	rm target/runnner/apache-tomee-plus-$(TOMEE_VERSION)/conf/tomcat-users.xml 	
+	cp tomee/tomee-webapp/src/test/conf/tomcat-users.xml target/runnner/apache-tomee-plus-$(TOMEE_VERSION)/conf/
+	export JPDA_SUSPEND=y && export CATALINA_PID=target/runnner/tomcat-pid.txt && ./target/runnner/apache-tomee-plus-$(TOMEE_VERSION)/bin/catalina.sh jpda start
+
+start-tomee: kill-tomee tomee
+	mkdir -p target/runnner
+	cp $(TOMCAT_ZIP) target/runnner/
+	rm -Rf target/runnner/$(TOMCAT_ZIP_NAME) 
+	cd target/runnner/ && unzip $(TOMCAT_ZIP_NAME)-SNAPSHOT.zip
+	cp tomee/tomee-plus-webapp/target/tomee-plus-webapp-$(TOMEE_VERSION).war \
+		target/runnner/$(TOMCAT_ZIP_NAME)/webapps/
+	rm target/runnner/apache-tomcat-7.0.33/conf/tomcat-users.xml 	
+	cp tomee/tomee-webapp/src/test/conf/tomcat-users.xml target/runnner/apache-tomcat-7.0.33/conf/
+	chmod +x target/runnner/$(TOMCAT_ZIP_NAME)/bin/startup.sh
+	chmod +x target/runnner/apache-tomcat-7.0.33/bin/catalina.sh
+	export JPDA_SUSPEND=y && export CATALINA_PID=target/runnner/tomcat-pid.txt && ./target/runnner/$(TOMCAT_ZIP_NAME)/bin/catalina.sh jpda start
+
+reload-tomee: kill-tomee
+	chmod +x target/runnner/$(TOMCAT_ZIP_NAME)/bin/startup.sh
+	chmod +x target/runnner/apache-tomcat-7.0.33/bin/catalina.sh
+	export CATALINA_PID=target/runnner/tomcat-pid.txt && ./target/runnner/$(TOMCAT_ZIP_NAME)/bin/catalina.sh jpda start
+
+up-static:
+	rm -Rf target/runnner/$(TOMCAT_ZIP_NAME)/webapps/tomee-plus-webapp-$(TOMEE_VERSION)/app
+	cp -r tomee/tomee-webapp/src/main/webapp/app target/runnner/$(TOMCAT_ZIP_NAME)/webapps/tomee-plus-webapp-$(TOMEE_VERSION)/
+	
+
+install-tomee: $(TOMCAT_ZIP) 
+	cd tomee && mvn clean install -DskipTests=true
+
+install-all:
+	mvn clean && mvn install -DskipTests=true
+
+.PHONY: install-all install-tomee tomcat tomee start-tomee reload-tomee kill-tomee up-static

Modified: openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappContainer.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappContainer.java?rev=1413051&r1=1413050&r2=1413051&view=diff
==============================================================================
--- openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappContainer.java (original)
+++ openejb/trunk/openejb/arquillian/arquillian-tomee-webapp-remote/src/main/java/org/apache/tomee/arquillian/webapp/TomEEWebappContainer.java Fri Nov 23 20:44:35 2012
@@ -143,7 +143,7 @@ public class TomEEWebappContainer extend
                         .append(configuration.getHost())
                         .append(":")
                         .append(configuration.getHttpPort())
-                        .append("/tomee/installer?action=install&auto=true");
+                        .append("/tomee/installer");
 
                 installer.addTomEEAdminConfInTomcatUsers(true);
 

Modified: openejb/trunk/openejb/tomee/tomee-webapp/pom.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/pom.xml?rev=1413051&r1=1413050&r2=1413051&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/pom.xml (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/pom.xml Fri Nov 23 20:44:35 2012
@@ -212,7 +212,7 @@
       <groupId>org.apache.openejb</groupId>
       <artifactId>tomee-common</artifactId>
       <version>${tomee.version}</version>
-      <scope>runtime</scope>
+      <scope>compile</scope>
       <exclusions>
         <exclusion>
           <groupId>org.apache.openejb</groupId>

Modified: openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/Application.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/Application.java?rev=1413051&r1=1413050&r2=1413051&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/Application.java (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/Application.java Fri Nov 23 20:44:35 2012
@@ -23,6 +23,7 @@ import org.apache.tomee.webapp.command.U
 import javax.naming.Context;
 import javax.naming.InitialContext;
 import javax.naming.NamingException;
+import java.io.File;
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Properties;
@@ -30,6 +31,7 @@ import java.util.Properties;
 public class Application {
     private static final Application INSTANCE = new Application();
 
+    private String rootPath;
     private final Map<String, Session> sessions = new HashMap<String, Session>();
 
     private Application() {
@@ -40,6 +42,14 @@ public class Application {
         return INSTANCE;
     }
 
+    public String getRootPath() {
+        return rootPath;
+    }
+
+    public void setRootPath(String rootPath) {
+        this.rootPath = rootPath;
+    }
+
     public Session getExistingSession(String id) {
         Session session;
         synchronized (this.sessions) {
@@ -53,7 +63,7 @@ public class Application {
         synchronized (this.sessions) {
             session = this.sessions.get(id);
             if (session == null) {
-                session = new Session();
+                session = new Session(new File(rootPath));
                 this.sessions.put(id, session);
             }
         }
@@ -68,6 +78,11 @@ public class Application {
 
     public class Session {
         private Context context;
+        private final File rootFolder;
+
+        public Session(File rootFolder) {
+            this.rootFolder = rootFolder;
+        }
 
         public Context getContext() {
             return context;
@@ -76,7 +91,7 @@ public class Application {
         public Context login(String user, String pass) {
             final Properties props = new Properties();
             props.setProperty(Context.INITIAL_CONTEXT_FACTORY, "org.apache.openejb.client.RemoteInitialContextFactory");
-            props.put("java.naming.provider.url", "http://127.0.0.1:8080/tomee/ejb");
+            props.put("java.naming.provider.url", "http://127.0.0.1:8080/" + this.rootFolder.getName() + "/ejb");
             props.setProperty(Context.SECURITY_PRINCIPAL, user);
             props.setProperty(Context.SECURITY_CREDENTIALS, pass);
             try {

Added: openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/GetStatus.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/GetStatus.java?rev=1413051&view=auto
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/GetStatus.java (added)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/GetStatus.java Fri Nov 23 20:44:35 2012
@@ -0,0 +1,77 @@
+/*
+ * 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.tomee.webapp.command.impl;
+
+import org.apache.tomee.installer.Installer;
+import org.apache.tomee.installer.Paths;
+import org.apache.tomee.webapp.Application;
+import org.apache.tomee.webapp.command.Command;
+import org.apache.tomee.webapp.command.IsProtected;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
+
+@IsProtected
+public class GetStatus implements Command {
+
+    @Override
+    public Object execute(final Map<String, Object> params) throws Exception {
+        final String path = Application.getInstance().getRootPath();
+        File openejbWarDir = null;
+        if (path != null) {
+            openejbWarDir = new File(path);
+        }
+        final Paths paths = new Paths(openejbWarDir);
+
+        final Map<String, Object> json = new HashMap<String, Object>();
+        json.put("isListenerInstalled", Installer.isListenerInstalled());
+        json.put("isAgentInstalled", Installer.isAgentInstalled());
+
+
+        final Map<String, String> strPaths = new HashMap<String, String>();
+        strPaths.put("catalina-conf", getSafePath(paths.getCatalinaConfDir()));
+        strPaths.put("catalina-lib", getSafePath(paths.getCatalinaLibDir()));
+        strPaths.put("catalina-bin", getSafePath(paths.getCatalinaBinDir()));
+        strPaths.put("catalina-catalina-sh", getSafePath(paths.getCatalinaShFile()));
+        strPaths.put("catalina-catalina-bat", getSafePath(paths.getCatalinaBatFile()));
+        strPaths.put("openEJB-lib", getSafePath(paths.getOpenEJBLibDir()));
+        strPaths.put("openEJB-loader-jar", getSafePath(paths.getOpenEJBTomcatLoaderJar()));
+        strPaths.put("openEJB-javaagent-jar", getSafePath(paths.getOpenEJBJavaagentJar()));
+
+
+        final Map<String, String> strMainPaths = new HashMap<String, String>();
+        strMainPaths.put("catalina-home", getSafePath(paths.getCatalinaHomeDir()));
+        strMainPaths.put("catalina-base", getSafePath(paths.getCatalinaBaseDir()));
+        strMainPaths.put("catalina-server-xml", getSafePath(paths.getServerXmlFile()));
+
+        json.put("paths", strPaths);
+        json.put("mainPaths", strMainPaths);
+
+        final Installer installer = new Installer(paths);
+        json.put("installerStatus", installer.getStatus());
+        return json;
+    }
+
+    private String getSafePath(File file) {
+        if (file == null) {
+            return "";
+        }
+        return file.getPath();
+    }
+}

Added: openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/RunInstaller.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/RunInstaller.java?rev=1413051&view=auto
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/RunInstaller.java (added)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/command/impl/RunInstaller.java Fri Nov 23 20:44:35 2012
@@ -0,0 +1,70 @@
+/*
+ * 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.tomee.webapp.command.impl;
+
+import org.apache.tomee.installer.Installer;
+import org.apache.tomee.installer.Paths;
+import org.apache.tomee.webapp.Application;
+import org.apache.tomee.webapp.command.Command;
+import org.apache.tomee.webapp.command.IsProtected;
+
+import java.io.File;
+import java.util.HashMap;
+import java.util.Map;
+
+@IsProtected
+public class RunInstaller implements Command {
+
+    @Override
+    public Object execute(final Map<String, Object> params) throws Exception {
+        final String path = Application.getInstance().getRootPath();
+        File openejbWarDir = null;
+        if (path != null) {
+            openejbWarDir = new File(path);
+        }
+        final Paths paths = new Paths(openejbWarDir);
+        final Installer installer = new Installer(paths);
+
+        final Map<String, Object> json = new HashMap<String, Object>();
+
+        if (Installer.Status.NONE.equals(installer.getStatus())) {
+            paths.reset();
+            installer.reset();
+
+            if (Boolean.valueOf(String.valueOf(params.get("auto")))) {
+                paths.setCatalinaHomeDir(System.getProperty("catalina.home"));
+                paths.setCatalinaBaseDir(System.getProperty("catalina.base"));
+                paths.setServerXmlFile(System.getProperty("catalina.base") + "/conf/server.xml");
+            } else {
+                paths.setCatalinaHomeDir((String) params.get("catalina-home"));
+                paths.setCatalinaBaseDir((String) params.get("catalina-base"));
+                paths.setServerXmlFile((String) params.get("catalina-server-xml"));
+            }
+
+            if (paths.verify()) {
+                installer.installAll();
+            }
+        }
+        json.put("status", installer.getStatus());
+        json.put("errors", installer.getAlerts().getErrors());
+        json.put("warnings", installer.getAlerts().getWarnings());
+        json.put("infos", installer.getAlerts().getInfos());
+
+        return json;
+    }
+}

Added: openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/listeners/ApplicationListener.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/listeners/ApplicationListener.java?rev=1413051&view=auto
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/listeners/ApplicationListener.java (added)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/listeners/ApplicationListener.java Fri Nov 23 20:44:35 2012
@@ -0,0 +1,36 @@
+/*
+ * 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.tomee.webapp.listeners;
+
+import org.apache.tomee.webapp.Application;
+
+import javax.servlet.ServletContextEvent;
+import javax.servlet.ServletContextListener;
+
+public class ApplicationListener implements ServletContextListener {
+    @Override
+    public void contextInitialized(ServletContextEvent ev) {
+        final String rootPath = ev.getServletContext().getRealPath("/");
+        Application.getInstance().setRootPath(rootPath);
+    }
+
+    @Override
+    public void contextDestroyed(ServletContextEvent servletContextEvent) {
+        //no-op
+    }
+}

Added: openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/servlet/AutoInstallerServlet.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/servlet/AutoInstallerServlet.java?rev=1413051&view=auto
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/servlet/AutoInstallerServlet.java (added)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/servlet/AutoInstallerServlet.java Fri Nov 23 20:44:35 2012
@@ -0,0 +1,55 @@
+/*
+ * 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.tomee.webapp.servlet;
+
+import org.apache.tomee.webapp.JsonExecutor;
+import org.apache.tomee.webapp.command.impl.RunInstaller;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServlet;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.util.HashMap;
+import java.util.Map;
+
+
+public class AutoInstallerServlet extends HttpServlet {
+
+    @Override
+    protected void doPost(HttpServletRequest req, final HttpServletResponse resp) throws ServletException, IOException {
+        writeJson(req, resp);
+    }
+
+    @Override
+    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+        writeJson(req, resp);
+    }
+
+    private void writeJson(final HttpServletRequest req, final HttpServletResponse resp) throws IOException {
+        JsonExecutor.execute(req, resp, new JsonExecutor.Executor() {
+            @Override
+            public void call(Map<String, Object> json) throws Exception {
+                final RunInstaller runInstaller = new RunInstaller();
+                final Map<String, Object> params = new HashMap<String, Object>();
+                params.put("auto", "true");
+                json.put("result", runInstaller.execute(params));
+            }
+        });
+    }
+}

Modified: openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/servlet/CommandExecutorServlet.java
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/servlet/CommandExecutorServlet.java?rev=1413051&r1=1413050&r2=1413051&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/servlet/CommandExecutorServlet.java (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/java/org/apache/tomee/webapp/servlet/CommandExecutorServlet.java Fri Nov 23 20:44:35 2012
@@ -31,6 +31,15 @@ public class CommandExecutorServlet exte
 
     @Override
     protected void doPost(final HttpServletRequest req, final HttpServletResponse resp) throws ServletException, IOException {
+        execute(req, resp);
+    }
+
+    @Override
+    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
+        execute(req, resp);
+    }
+
+    private void execute(final HttpServletRequest req, final HttpServletResponse resp) throws ServletException, IOException {
         JsonExecutor.execute(req, resp, new JsonExecutor.Executor() {
             @Override
             public void call(Map<String, Object> json) throws Exception {
@@ -40,4 +49,5 @@ public class CommandExecutorServlet exte
             }
         });
     }
+
 }

Modified: openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/README.txt
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/README.txt?rev=1413051&r1=1413050&r2=1413051&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/README.txt (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/README.txt Fri Nov 23 20:44:35 2012
@@ -6,24 +6,13 @@ OpenEJB ${pom.version}      http://opene
 ___________________
 Installation
 ===================
- 
- The OpenEJB Plugin for Tomcat installation process is fairly simple, so if
- you are comfortable with the command line and Tomcat, the following
- instructions will get you going ASAP; otherwise, please visit the OpenEJB
- Tomcat site for detailed instructions with examples.
-
-   http://openejb.apache.org/tomcat.html
 
-
- Assuming you have a normal working Tomcat 5.5 or 6.x installation:
+ Assuming you have a normal working Tomcat 7.x installation:
 
  1. Copy tomee.war to ${catalina.base}/webapps/tomee.war
         (Note: the file must be named tomee.war)
  2. Start Tomcat if it is not already running
- 3. (optional) Visit http://localhost:8080/openejb/installer and click the 'install' button
 
-___________________
-___________________
 Support
 ===================
  
@@ -32,9 +21,6 @@ Support
  Follow this link for other subscription and list information:
  http://openejb.apache.org/mailing-lists.html
 
-
-
-
 =========================================================================
 ==  Cryptographic Software Notice                                      ==
 =========================================================================

Modified: openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/WEB-INF/web.xml?rev=1413051&r1=1413050&r2=1413051&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/WEB-INF/web.xml (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/WEB-INF/web.xml Fri Nov 23 20:44:35 2012
@@ -24,7 +24,7 @@
   <display-name>Tomee Application</display-name>
 
   <listener>
-    <listener-class>org.apache.tomee.webapp.listeners.SessionListener</listener-class>
+    <listener-class>org.apache.tomee.webapp.listeners.ApplicationListener</listener-class>
   </listener>
 
   <servlet>
@@ -50,7 +50,7 @@
   </servlet>
   <servlet>
     <servlet-name>InstallerServlet</servlet-name>
-    <servlet-class>org.apache.tomee.installer.InstallerServlet</servlet-class>
+    <servlet-class>org.apache.tomee.webapp.servlet.AutoInstallerServlet</servlet-class>
   </servlet>
   <servlet>
     <servlet-name>FileUploadServlet</servlet-name>
@@ -98,7 +98,7 @@
 
   <!-- ************************************************************************************** -->
   <welcome-file-list>
-    <welcome-file>index.jsp</welcome-file>
+    <welcome-file>index.html</welcome-file>
   </welcome-file-list>
 
   <error-page>
@@ -109,38 +109,4 @@
       /error
     </location>
   </error-page>
-  <!-- basic security to replace context.xml and allow remote accesses -->
-  <security-constraint>
-    <web-resource-collection>
-      <web-resource-name>Application</web-resource-name>
-      <url-pattern>/*</url-pattern>
-    </web-resource-collection>
-    <auth-constraint>
-      <role-name>tomee-admin</role-name>
-    </auth-constraint>
-  </security-constraint>
-
-  <!-- /ejb/* has no auth-constraint. It is has public access. -->
-  <security-constraint>
-    <web-resource-collection>
-      <web-resource-name>Server EJB</web-resource-name>
-      <url-pattern>/ejb/*</url-pattern>
-    </web-resource-collection>
-  </security-constraint>
-
-  <!-- /socket has no auth-constraint. It is has public access. -->
-  <security-constraint>
-    <web-resource-collection>
-      <web-resource-name>Socket</web-resource-name>
-      <url-pattern>/socket</url-pattern>
-    </web-resource-collection>
-  </security-constraint>
-
-  <login-config>
-    <auth-method>BASIC</auth-method>
-    <realm-name>TomEE Webapp</realm-name>
-  </login-config>
-  <security-role>
-    <role-name>tomee-admin</role-name>
-  </security-role>
 </web-app>

Modified: openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/ApplicationController.js
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/ApplicationController.js?rev=1413051&r1=1413050&r2=1413051&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/ApplicationController.js (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/ApplicationController.js Fri Nov 23 20:44:35 2012
@@ -23,9 +23,10 @@
 TOMEE.ApplicationController = function () {
     "use strict";
 
-    var channel = TOMEE.ApplicationChannel,
-        model = TOMEE.ApplicationModel(),
-        view = TOMEE.ApplicationView();
+    var channel = TOMEE.ApplicationChannel;
+    var model = TOMEE.ApplicationModel();
+    var view = TOMEE.ApplicationView();
+    var growl = TOMEE.GrowlNotification();
 
     view.render();
 
@@ -56,6 +57,12 @@ TOMEE.ApplicationController = function (
         });
     });
 
+    channel.bind('ui-actions', 'load-status', function () {
+        model.sendMessage({
+            cmdName:'GetStatus'
+        });
+    });
+
     channel.bind('ui-actions', 'log-file-selected', function (param) {
         model.sendMessage({
             cmdName:'GetLog',
@@ -75,8 +82,17 @@ TOMEE.ApplicationController = function (
         });
     });
 
-    channel.bind('server-command-callback', 'RunScript', function (data) {
-        //TODO: add growl notification
+    channel.bind('ui-actions', 'openejb-installer-clicked', function (data) {
+        data.cmdName = 'RunInstaller';
+        model.sendMessage(data);
+    });
+
+    channel.bind('server-command-callback-error', 'RunScript', function (data) {
+        growl.showNotification(TOMEE.I18N.get('application.console.run.error'), 'error');
+    });
+
+    channel.bind('ui-actions', 'show-notification', function(data) {
+        growl.showNotification(data.message, data.messageType);
     });
 
     channel.bind('server-command-callback', 'Logout', function (data) {
@@ -87,6 +103,16 @@ TOMEE.ApplicationController = function (
         model.connectSocket();
     });
 
+    channel.bind('server-command-callback-success', 'Login', function (params) {
+        if (!params.output.loginSuccess) {
+            growl.showNotification(TOMEE.I18N.get('application.log.bad'), 'error');
+        }
+    });
+
+    channel.bind('server-command-callback-error', 'Login', function (params) {
+        growl.showNotification(TOMEE.I18N.get('application.log.error'), 'error');
+    });
+
     return {
 
     };

Modified: openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/ApplicationModel.js
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/ApplicationModel.js?rev=1413051&r1=1413050&r2=1413051&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/ApplicationModel.js (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/ApplicationModel.js Fri Nov 23 20:44:35 2012
@@ -24,10 +24,15 @@
 TOMEE.ApplicationModel = function () {
     "use strict";
 
-    var channel = TOMEE.ApplicationChannel,
-        appSocket = null,
-        reconnectTask = TOMEE.DelayedTask(),
-        reconnectDelay = 5000;
+    var channel = TOMEE.ApplicationChannel;
+    var appSocket = null;
+    var reconnectTask = TOMEE.DelayedTask();
+    var reconnectDelay = 5000;
+    var urlBase = window.document.URL;
+
+    urlBase = urlBase.replace(new RegExp('^' + window.location.protocol + '//'), '');
+    urlBase = urlBase.replace(new RegExp('^' + window.document.location.host), '');
+    urlBase = urlBase.replace('#', '');
 
     channel.bind('server-callback', 'socket-connection-message-received', function (data) {
         var bean = $.parseJSON(data);
@@ -66,16 +71,16 @@ TOMEE.ApplicationModel = function () {
     }
 
     function createSocket() {
-        var isFake = false,
-            socket = null,
-            host = (function () {
-                var suffix = '/tomee/socket';
-                var path = window.document.location.host + suffix;
-                if (window.location.protocol == 'http:') {
-                    return 'ws://' + path;
-                }
-                return 'wss://' + path;
-            })();
+        var isFake = false;
+        var socket = null;
+        var host = (function () {
+            var suffix = urlBase + 'socket';
+            var path = window.document.location.host + suffix;
+            if (window.location.protocol == 'http:') {
+                return 'ws://' + path;
+            }
+            return 'wss://' + path;
+        })();
 
         if ('WebSocket' in window) {
             socket = new WebSocket(host);
@@ -91,7 +96,7 @@ TOMEE.ApplicationModel = function () {
 
                 function send(str) {
                     $.ajax({
-                            url:'/tomee/command',
+                            url:urlBase + 'command',
                             type:'POST',
                             dataType:'text',
                             data:{
@@ -175,7 +180,7 @@ TOMEE.ApplicationModel = function () {
 
     function sendRequest(bean) {
         $.ajax({
-                url:'/tomee/' + bean.servlet,
+                url:urlBase + bean.servlet,
                 method:'POST',
                 dataType:'json',
                 data:bean.params,

Modified: openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/ApplicationTemplates.js
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/ApplicationTemplates.js?rev=1413051&r1=1413050&r2=1413051&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/ApplicationTemplates.js (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/ApplicationTemplates.js Fri Nov 23 20:44:35 2012
@@ -45,6 +45,8 @@ TOMEE.ApplicationTemplates = (function (
     };
 })([
     'application',
+    'application-growl',
+    'application-growl-message',
     'application-disabled',
     'application-toolbar',
     'application-toolbar-logout-btn',
@@ -55,6 +57,8 @@ TOMEE.ApplicationTemplates = (function (
     'application-tab-log',
     'application-tab-log-file',
     'application-tab-log-lines',
+    'application-tab-status',
+    'application-tab-status-lines',
     'application-disconnected-popup',
     'application-tab-webservices',
     'application-tab-webservices-table',

Added: openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/templates/application-growl-message.handlebars
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/templates/application-growl-message.handlebars?rev=1413051&view=auto
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/templates/application-growl-message.handlebars (added)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/templates/application-growl-message.handlebars Fri Nov 23 20:44:35 2012
@@ -0,0 +1,4 @@
+<div id="{{alertId}}" class="growl alert alert-block {{messageType}}">
+    <button type="button" class="close" data-dismiss="alert">×</button>
+    <div class="message"></div>
+</div>
\ No newline at end of file

Copied: openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/templates/application-growl.handlebars (from r1412789, openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/templates/application.handlebars)
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/templates/application-growl.handlebars?p2=openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/templates/application-growl.handlebars&p1=openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/templates/application.handlebars&r1=1412789&r2=1413051&rev=1413051&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/templates/application.handlebars (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/templates/application-growl.handlebars Fri Nov 23 20:44:35 2012
@@ -1 +1 @@
-<div class="tomee"></div>
\ No newline at end of file
+<div class="growl-container"></div>
\ No newline at end of file

Added: openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/templates/application-tab-status-lines.handlebars
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/templates/application-tab-status-lines.handlebars?rev=1413051&view=auto
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/templates/application-tab-status-lines.handlebars (added)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/templates/application-tab-status-lines.handlebars Fri Nov 23 20:44:35 2012
@@ -0,0 +1,10 @@
+<form class="form-horizontal status-lines">
+    {{#properties}}
+    <div class="control-group">
+        <label class="control-label" for="{{uniqueId}}-{{this.key}}">{{this.key}}</label>
+        <div class="controls">
+            <input type="text" id="{{uniqueId}}-{{this.key}}" class="path" param-key="{{this.key}}" value="{{this.value}}">
+        </div>
+    </div>
+    {{/properties}}
+</form>

Added: openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/templates/application-tab-status.handlebars
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/templates/application-tab-status.handlebars?rev=1413051&view=auto
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/templates/application-tab-status.handlebars (added)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/templates/application-tab-status.handlebars Fri Nov 23 20:44:35 2012
@@ -0,0 +1,15 @@
+<div class="tomee-status">
+    <div class="tomee-status-output"></div>
+    <div class="navbar navbar-inverse bbar">
+        <div class="navbar-inner">
+            <div class="buttons">
+                <button class="btn btn-primary hidden install">
+                    <span>{{i18n "application.status.install"}}</span>
+                </button>
+                <button class="btn btn-primary hidden reinstall">
+                    <span>{{i18n "application.status.reinstall"}}</span>
+                </button>
+            </div>
+        </div>
+    </div>
+</div>
\ No newline at end of file

Modified: openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/templates/application-toolbar.handlebars
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/templates/application-toolbar.handlebars?rev=1413051&r1=1413050&r2=1413051&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/templates/application-toolbar.handlebars (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/templates/application-toolbar.handlebars Fri Nov 23 20:44:35 2012
@@ -4,8 +4,9 @@
             <a class="brand" href="#">{{i18n "application.name"}}</a>
             <ul class="nav">
                 <li class="toolbar-item active" tab-key="home"><a href="#">{{i18n "application.home"}}</a></li>
-                <li class="toolbar-item" tab-key="console"><a href="#">{{i18n "application.console"}}</a></li>
-                <li class="toolbar-item" tab-key="log"><a href="#">{{i18n "application.log"}}</a></li>
+                <li class="toolbar-item hidden" tab-key="console"><a href="#">{{i18n "application.console"}}</a></li>
+                <li class="toolbar-item hidden" tab-key="log"><a href="#">{{i18n "application.log"}}</a></li>
+                <li class="toolbar-item hidden" tab-key="status"><a href="#">{{i18n "application.status"}}</a></li>
             </ul>
             <div class="pull-right">
                 <ul class="nav">

Modified: openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/util/I18N.js
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/util/I18N.js?rev=1413051&r1=1413050&r2=1413051&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/util/I18N.js (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/util/I18N.js Fri Nov 23 20:44:35 2012
@@ -19,6 +19,7 @@
 
 TOMEE.I18N = (function () {
 
+    var missing = Handlebars.compile('[!{{key}}!]');
     var messages = {
         'application.name':'Apache TomEE',
 
@@ -29,11 +30,18 @@ TOMEE.I18N = (function () {
 
         'application.home':'Home',
 
+        'application.status':'Status',
+        'application.status.install':'install',
+        'application.status.reinstall':'re-install',
+        'application.status.isAgentInstalled':'Is the agent installed? {{message}}',
+        'application.status.isListenerInstalled':'Is the listener installed? {{message}}',
+
         'application.jndi':'JNDI',
         'application.jndi.path':'Path',
 
         'application.console':'Console',
         'application.console.run':'Execute',
+        'application.console.run.error':'Script error.',
         'application.console.clear.output':'Clear output',
         'application.console.done':'Script executed.',
         'application.console.run.time':'Time',
@@ -51,18 +59,29 @@ TOMEE.I18N = (function () {
         'application.sign.in':'Sign In',
         'application.sign.out':'Sign Out',
         'application.log.in':'Login',
+        'application.log.error':'Login error. Please try again.',
+        'application.log.bad':'Bad user or password. Please try again.',
         'application.password':'Password',
 
         'dummy':'dummy'
     };
 
-    var get = function (key) {
-        var result = messages[key];
-        if (!result) {
-            result = '[!' + key + '!]';
+    TOMEE.utils.forEachKey(messages, function (key, value) {
+        var template = Handlebars.compile(value);
+        messages[key] = template;
+    });
+
+    var get = function (key, values) {
+        var template = messages[key];
+        var cfg = values;
+        if (!template) {
+            template = missing;
+            cfg = {
+                key:key
+            };
             console.error('Missing i18n message.', key);
         }
-        return result;
+        return template(cfg);
     };
 
     Handlebars.registerHelper('i18n', function (key) {

Modified: openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/util/Log.js
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/util/Log.js?rev=1413051&r1=1413050&r2=1413051&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/util/Log.js (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/util/Log.js Fri Nov 23 20:44:35 2012
@@ -14,50 +14,22 @@
  *  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.
- "use strict";
  */
 
-(function () {
-    var winConsole = window.console,
-
-        // These are the available methods. Add more to this list if necessary.
-        consoleEmpty = {
-            error:function () {},
-            log:function () {}
-        },
-
-        consoleProxy = (function () {
-            // This object wraps the "window.console"
-            var consoleWrapper = {};
+"use strict";
 
-            function buildMethodProxy(key) {
-                if (winConsole[key] && typeof winConsole[key] === 'function') {
-                    consoleWrapper[key] = function () {
-                        var cFunc = winConsole[key];
-                        cFunc.call(winConsole, arguments);
-                    };
-                } else {
-                    consoleWrapper[key] = function () {
-                        consoleEmpty[key]();
-                    };
-                }
-            }
-
-            // Checking if the browser has the "console" object
-            if (winConsole) {
-                // Only the methods defined by the consoleMock
-                // are available for use.
-                for (var key in consoleEmpty) {
-                    if (consoleEmpty.hasOwnProperty(key)) {
-                        buildMethodProxy(key);
-                    }
-                }
-            } else {
-                consoleWrapper = consoleEmpty;
-            }
-
-            return consoleWrapper;
-        })();
+(function () {
+    var noOp = function() {};
 
-    window.console = consoleProxy;
+    if(!window.console) {
+        window.console = {};
+    }
+
+    if(!window.console.error) {
+        window.console.error = noOp;
+    }
+
+    if(!window.console.log) {
+        window.console.log = noOp;
+    }
 })();
\ No newline at end of file

Modified: openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/util/Obj.js
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/util/Obj.js?rev=1413051&r1=1413050&r2=1413051&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/util/Obj.js (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/util/Obj.js Fri Nov 23 20:44:35 2012
@@ -134,6 +134,17 @@ TOMEE.utils = (function () {
         }
     }
 
+    function forEachKey(obj, callback) {
+        if(!obj) {
+            return;
+        }
+        for (var key in obj) {
+            if (obj.hasOwnProperty(key)) {
+                callback(key, obj[key]);
+            }
+        }
+    }
+
     return {
         keyCodeToString: keyCodeToString,
         isPrimitive:isPrimitive,
@@ -142,6 +153,7 @@ TOMEE.utils = (function () {
         getArray:getArray,
         getObject:getObject,
         stringFormat:stringFormat,
-        forEach:forEach
+        forEach:forEach,
+        forEachKey:forEachKey
     }
 })();
\ No newline at end of file

Modified: openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/view/ApplicationToolbarView.js
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/view/ApplicationToolbarView.js?rev=1413051&r1=1413050&r2=1413051&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/view/ApplicationToolbarView.js (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/view/ApplicationToolbarView.js Fri Nov 23 20:44:35 2012
@@ -32,6 +32,19 @@ TOMEE.ApplicationToolbarView = function 
         });
     });
 
+    channel.bind('ui-actions', 'locked-change', function (data) {
+        el.find('.toolbar-item').each(function (index, htmlElement) {
+            var element = $(htmlElement);
+            if (data.panel === element.attr('tab-key')) {
+                if (data.locked) {
+                    element.addClass('hidden');
+                } else {
+                    element.removeClass('hidden');
+                }
+            }
+        });
+    });
+
     channel.bind('ui-actions', 'panel-switch', function (data) {
         el.find('.toolbar-item').removeClass('active');
         el.find('.toolbar-item').each(function (index, htmlEl) {

Modified: openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/view/ApplicationView.js
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/view/ApplicationView.js?rev=1413051&r1=1413050&r2=1413051&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/view/ApplicationView.js (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/view/ApplicationView.js Fri Nov 23 20:44:35 2012
@@ -23,7 +23,8 @@ TOMEE.ApplicationView = function () {
         panelMap = {
             'home':TOMEE.ApplicationTabHome(),
             'console':TOMEE.ApplicationTabConsole(),
-            'log':TOMEE.ApplicationTabLog()
+            'log':TOMEE.ApplicationTabLog(),
+            'status': TOMEE.ApplicationTabStatus()
         },
         selected = null,
         container = $(TOMEE.ApplicationTemplates.getValue('application', {})),
@@ -166,8 +167,8 @@ TOMEE.ApplicationView = function () {
             containerWidth,
             toolbarHeight = toolbar.getEl().outerHeight();
 
-        containerHeight = myWindow.outerHeight();
-        containerWidth = myWindow.outerWidth();
+        containerHeight = Math.max(myWindow.outerHeight(),600);
+        containerWidth = Math.max(myWindow.outerWidth(), 800);
 
         container.css('height', containerHeight + 'px');
         container.css('width', containerWidth + 'px');

Copied: openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/view/GrowlNotification.js (from r1412789, openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/view/ApplicationView.js)
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/view/GrowlNotification.js?p2=openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/view/GrowlNotification.js&p1=openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/view/ApplicationView.js&r1=1412789&r2=1413051&rev=1413051&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/view/ApplicationView.js (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/view/GrowlNotification.js Fri Nov 23 20:44:35 2012
@@ -16,180 +16,46 @@
  *  limitations under the License.
  */
 
-TOMEE.ApplicationView = function () {
+TOMEE.GrowlNotification = function () {
     "use strict";
 
-    var channel = TOMEE.ApplicationChannel,
-        panelMap = {
-            'home':TOMEE.ApplicationTabHome(),
-            'console':TOMEE.ApplicationTabConsole(),
-            'log':TOMEE.ApplicationTabLog()
-        },
-        selected = null,
-        container = $(TOMEE.ApplicationTemplates.getValue('application', {})),
-        toolbar = TOMEE.ApplicationToolbarView(),
-        myWindow = $(window),
-        delayedContainerResize = TOMEE.DelayedTask(),
-        connectionPopupVisible = false,
-        applicationDisabled = $(TOMEE.ApplicationTemplates.getValue('application-disabled', {})),
-        connectionPopup = $(TOMEE.ApplicationTemplates.getValue('application-disconnected-popup', {}));
-
-    channel.bind('server-connection', 'socket-connection-opened', function (data) {
-        hideConnectionPopup();
-    });
-
-    channel.bind('server-connection', 'socket-connection-closed', function (data) {
-        showConnectionPopup();
-    });
-
-    channel.bind('server-connection', 'socket-connection-error', function (data) {
-        showConnectionPopup();
-    });
-
-    channel.bind('ui-actions', 'toolbar-click', function (data) {
-        switchPanelAndSendEvent(data.key);
-    });
-
-    //disable default contextmenu
-    $(document).bind("contextmenu", function (e) {
-        return false;
-    });
-
-    myWindow.on('resize', function () {
-        delayedContainerResize.delay(updateContainerSize, 500);
-    });
-
-    myWindow.on('keyup', function (ev) {
-        var result = {
-            consumed:false
-        };
-
-        if (ev.keyCode === 18) { //ALT
-            result = channel.send('ui-actions', 'window-alt-released', {});
-        } else if (ev.keyCode === 17) { //CONTROL
-            result = channel.send('ui-actions', 'window-ctrl-released', {});
-        } else if (ev.keyCode === 16) { //SHIFT
-            result = channel.send('ui-actions', 'window-shift-released', {});
-        }
-
-        if (result.consumed) {
-            ev.preventDefault();
-        }
-    });
-
-    myWindow.on('keydown', function (ev) {
-        var key = [],
-            keyStr = null;
-
-        if (ev.altKey) {
-            key.push('alt');
-        } else if (ev.ctrlKey) {
-            key.push('ctrl');
-        } else if (ev.shiftKey) {
-            key.push('shift');
-        }
-
-        if (key.length === 0 &&
-            !(ev.keyCode >= 112 && ev.keyCode <= 123 || ev.keyCode === 27)) { // F1...F12 or esc
-            return; //nothing to do
-        }
-
-        keyStr = TOMEE.utils.keyCodeToString(ev.keyCode);
-        if (!keyStr) {
-            keyStr = ev.keyCode;
-        }
-        key.push(keyStr);
-
-        var result = channel.send('ui-actions', 'window-' + key.join('-') + '-pressed', {});
-        if (result.consumed) {
-            ev.preventDefault();
-        }
-    });
-
-    channel.bind('ui-actions', 'window-alt-1-pressed', function () {
-        switchPanelAndSendEvent('home');
-    });
-    channel.bind('ui-actions', 'window-alt-2-pressed', function () {
-        switchPanelAndSendEvent('console');
-    });
-    channel.bind('ui-actions', 'window-alt-3-pressed', function () {
-        switchPanelAndSendEvent('log');
-    });
-
-    function showConnectionPopup() {
-        if (connectionPopupVisible) {
-            return;
-        }
-        connectionPopupVisible = true;
-        container.append(applicationDisabled);
-        container.append(connectionPopup);
-    }
-
-    function hideConnectionPopup() {
-        if (!connectionPopupVisible) {
-            return;
-        }
-        connectionPopupVisible = false;
-        applicationDisabled.detach();
-        connectionPopup.detach();
-    }
-
-    function switchPanelAndSendEvent(key) {
-        if (switchPanel(key)) {
-            channel.send('ui-actions', 'panel-switch', {
-                key:key
-            });
-        }
-    }
-
-    function switchPanel(key) {
-        if (panelMap[key].isLocked && panelMap[key].isLocked()) {
-            //The panel is locked. The user should login first.
-            return false;
-        }
-
-        if (selected) {
-            selected.getEl().detach();
-            selected.onDetach();
+    var channel = TOMEE.ApplicationChannel;
+    var container = $(TOMEE.ApplicationTemplates.getValue('application-growl', {}));
+    var myBody = $('body');
+    var active = false;
+    var timeout = {};
+
+    function showNotification(message, messageType) {
+        if (!active) {
+            active = true;
+            myBody.append(container);
         }
-        selected = panelMap[key];
-        selected.getEl().appendTo(container);
-        selected.onAppend();
+        var alertId = TOMEE.Sequence.next('alert');
+        var alert = $(TOMEE.ApplicationTemplates.getValue('application-growl-message', {
+            alertId:alertId,
+            messageType:'alert-' + messageType
+        }));
+        var messageEl = alert.find('.message');
+        messageEl.append(message);
+        container.append(alert);
+        alert.fadeIn();
+
+        timeout[alertId] = TOMEE.DelayedTask();
+        timeout[alertId].delay(function() {
+            try {
+                alert.fadeOut(null, function () {
+                    try {
+                        alert.remove();
+                    } catch (e) { /* noop */ }
+                });
+            } catch (e) { /* noop */ }
+            delete timeout[alertId];
+        }, 5000);
 
-        updateContainerSize();
 
-        return true;
-    }
-
-    function updateContainerSize() {
-        var containerHeight,
-            containerWidth,
-            toolbarHeight = toolbar.getEl().outerHeight();
-
-        containerHeight = myWindow.outerHeight();
-        containerWidth = myWindow.outerWidth();
-
-        container.css('height', containerHeight + 'px');
-        container.css('width', containerWidth + 'px');
-
-        channel.send('ui-actions', 'container-resized', {
-            containerHeight:containerHeight - toolbarHeight,
-            containerWidth:containerWidth - toolbarHeight
-        });
     }
 
     return {
-        render:function () {
-            var myBody = $('body');
-            container.append(toolbar.getEl());
-            myBody.append(container);
-
-
-            switchPanel('home');
-
-            showConnectionPopup();
-
-            delayedContainerResize.delay(updateContainerSize, 500);
-        }
+        showNotification:showNotification
     };
 };
\ No newline at end of file

Modified: openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/view/panels/console.js
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/view/panels/console.js?rev=1413051&r1=1413050&r2=1413051&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/view/panels/console.js (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/view/panels/console.js Fri Nov 23 20:44:35 2012
@@ -19,30 +19,38 @@
 TOMEE.ApplicationTabConsole = function () {
     "use strict";
 
-    var channel = TOMEE.ApplicationChannel,
-        container = $(TOMEE.ApplicationTemplates.getValue('application-tab-console', {})),
-        innerPanels = {
-            webservices:TOMEE.ApplicationTabWebservices(),
-            jndi:TOMEE.ApplicationTabJndi()
-        },
+    var channel = TOMEE.ApplicationChannel;
+    var container = $(TOMEE.ApplicationTemplates.getValue('application-tab-console', {}));
+    var innerPanels = {
+        webservices:TOMEE.ApplicationTabWebservices(),
+        jndi:TOMEE.ApplicationTabJndi()
+    };
 
-        codeArea = null,
-        active = false,
-        locked = true,
-        delayedContainerResize = TOMEE.DelayedTask();
+    var codeArea = null;
+    var active = false;
+    var locked = true;
+    var delayedContainerResize = TOMEE.DelayedTask();
+
+    function setLocked(value) {
+        locked = value;
+        channel.send('ui-actions', 'locked-change', {
+            locked: value,
+            panel:'console'
+        });
+    }
 
     container.find('.webservices-div').append(innerPanels.webservices.getEl());
     container.find('.jndi-div').append(innerPanels.jndi.getEl());
 
     container.find('.dropdown-toggle').on('click', function (ev) {
-        var button = $(ev.currentTarget),
-            customAttr = 'tab-name',
-            group = button.parent('.btn-group'),
-            tab = group.attr(customAttr);
+        var button = $(ev.currentTarget);
+        var customAttr = 'tab-name';
+        var group = button.parent('.btn-group');
+        var tab = group.attr(customAttr);
 
         container.find('.btn-group').each(function (index, grpHtmlEl) {
-            var grpEl = $(grpHtmlEl),
-                grpTabName = grpEl.attr(customAttr);
+            var grpEl = $(grpHtmlEl);
+            var grpTabName = grpEl.attr(customAttr);
             if (tab === grpTabName) {
                 return;
             }
@@ -110,17 +118,17 @@ TOMEE.ApplicationTabConsole = function (
 
     channel.bind('server-command-callback-success', 'Login', function (params) {
         if (params.output.loginSuccess) {
-            locked = false;
+            setLocked(false);
         } else {
-            locked = true;
+            setLocked(true);
         }
     });
 
     channel.bind('server-command-callback-success', 'session', function (params) {
         if (params.data.userName) {
-            locked = false;
+            setLocked(false);
         } else {
-            locked = true;
+            setLocked(true);
         }
     });
 

Modified: openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/view/panels/jndi.js
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/view/panels/jndi.js?rev=1413051&r1=1413050&r2=1413051&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/view/panels/jndi.js (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/view/panels/jndi.js Fri Nov 23 20:44:35 2012
@@ -19,9 +19,9 @@
 TOMEE.ApplicationTabJndi = function () {
     "use strict";
 
-    var channel = TOMEE.ApplicationChannel,
-        container = $(TOMEE.ApplicationTemplates.getValue('application-tab-jndi', {})),
-        active = false;
+    var channel = TOMEE.ApplicationChannel;
+    var container = $(TOMEE.ApplicationTemplates.getValue('application-tab-jndi', {}));
+    var active = false;
 
     channel.bind('ui-actions', 'window-F5-pressed', function () {
         triggerRefresh();

Modified: openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/view/panels/log.js
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/view/panels/log.js?rev=1413051&r1=1413050&r2=1413051&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/view/panels/log.js (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/view/panels/log.js Fri Nov 23 20:44:35 2012
@@ -19,11 +19,19 @@
 TOMEE.ApplicationTabLog = function () {
     "use strict";
 
-    var channel = TOMEE.ApplicationChannel,
-        container = $(TOMEE.ApplicationTemplates.getValue('application-tab-log', {})),
-        selectedFile = null,
-        active = false,
-        locked = true;
+    var channel = TOMEE.ApplicationChannel;
+    var container = $(TOMEE.ApplicationTemplates.getValue('application-tab-log', {}));
+    var selectedFile = null;
+    var active = false;
+    var locked = true;
+
+    function setLocked(value) {
+        locked = value;
+        channel.send('ui-actions', 'locked-change', {
+            locked: value,
+            panel:'log'
+        });
+    }
 
     channel.bind('ui-actions', 'container-resized', function (data) {
         var consoleOutput = container.find('.tomee-log-output'),
@@ -77,17 +85,17 @@ TOMEE.ApplicationTabLog = function () {
 
     channel.bind('server-command-callback-success', 'Login', function (params) {
         if (params.output.loginSuccess) {
-            locked = false;
+            setLocked(false);
         } else {
-            locked = true;
+            setLocked(true);
         }
     });
 
     channel.bind('server-command-callback-success', 'session', function (params) {
         if (params.data.userName) {
-            locked = false;
+            setLocked(false);
         } else {
-            locked = true;
+            setLocked(true);
         }
     });
 

Added: openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/view/panels/status.js
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/view/panels/status.js?rev=1413051&view=auto
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/view/panels/status.js (added)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/view/panels/status.js Fri Nov 23 20:44:35 2012
@@ -0,0 +1,158 @@
+/**
+ *
+ * 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.
+ */
+
+TOMEE.ApplicationTabStatus = function () {
+    "use strict";
+
+    var channel = TOMEE.ApplicationChannel;
+    var container = $(TOMEE.ApplicationTemplates.getValue('application-tab-status', {}));
+    var active = false;
+    var locked = true;
+    var loaded = false;
+
+    function setLocked(value) {
+        locked = value;
+        channel.send('ui-actions', 'locked-change', {
+            locked:value,
+            panel:'status'
+        });
+    }
+
+    function getPaths() {
+        var result = {};
+        container.find('.path').each(function (index, el) {
+            var field = $(el);
+            result[field.attr('param-key')] = field.val();
+        });
+        return result;
+    }
+
+    container.find('.buttons').on('click', function () {
+        channel.send('ui-actions', 'openejb-installer-clicked', getPaths());
+    });
+
+    channel.bind('ui-actions', 'container-resized', function (data) {
+        var consoleOutput = container.find('.tomee-status-output');
+        var bbar = container.find('.bbar');
+        var outputHeight = data.containerHeight - bbar.height() - 3;
+
+        consoleOutput.height(outputHeight);
+    });
+
+    channel.bind('server-command-callback-success', 'Login', function (params) {
+        if (params.output.loginSuccess) {
+            setLocked(false);
+        } else {
+            setLocked(true);
+        }
+    });
+
+    channel.bind('server-command-callback-success', 'session', function (params) {
+        if (params.data.userName) {
+            setLocked(false);
+        } else {
+            setLocked(true);
+        }
+    });
+
+    function showAlert(outMessages, messageType) {
+        var messages = TOMEE.utils.getArray(outMessages);
+        if (messages.length < 1) {
+            return;
+        }
+        channel.send('ui-actions', 'show-notification', {
+            message:messages.join('<BR>'),
+            messageType:'alert-' + messageType
+        });
+    }
+
+    channel.bind('server-command-callback-success', 'RunInstaller', function (params) {
+        showAlert(params.output.infos, 'success');
+        showAlert(params.output.warnings, 'warning');
+        showAlert(params.output.errors, 'error');
+    });
+
+    channel.bind('server-command-callback-success', 'GetStatus', function (data) {
+        var output = container.find('.tomee-status-output');
+        var buttons = container.find('.buttons');
+
+        var properties = [];
+
+        TOMEE.utils.forEachKey(data.output.mainPaths, function (key, value) {
+            properties.push({
+                key:key,
+                value:value
+            });
+        });
+
+        output.empty();
+        output.append($(TOMEE.ApplicationTemplates.getValue('application-tab-status-lines', {
+            uniqueId:TOMEE.Sequence.next('path'),
+            properties:properties
+        })));
+
+        buttons.find('.install').each(function (index, element) {
+            var btn = $(element);
+            if (data.output.isAgentInstalled || data.output.isAgentInstalled) {
+                btn.addClass('hidden');
+            } else {
+                btn.removeClass('hidden');
+            }
+        });
+
+        buttons.find('.reinstall').each(function (index, element) {
+            var btn = $(element);
+            if (!data.output.isAgentInstalled && !data.output.isListenerInstalled) {
+                btn.addClass('hidden');
+            } else {
+                btn.removeClass('hidden');
+            }
+        });
+
+
+        showAlert([
+            TOMEE.I18N.get('application.status.isAgentInstalled', {
+                message:data.output.isAgentInstalled + ''
+
+            }),
+            TOMEE.I18N.get('application.status.isListenerInstalled', {
+                message:data.output.isListenerInstalled + ''
+            })
+        ], 'success');
+
+        loaded = true;
+    });
+
+    return {
+        getEl:function () {
+            return container;
+        },
+        onAppend:function () {
+            active = true;
+            if (!loaded) {
+                channel.send('ui-actions', 'load-status', {});
+            }
+        },
+        onDetach:function () {
+            active = false;
+        },
+        isLocked:function () {
+            return locked;
+        }
+    };
+};
\ No newline at end of file

Modified: openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/view/panels/webservices.js
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/view/panels/webservices.js?rev=1413051&r1=1413050&r2=1413051&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/view/panels/webservices.js (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/js/view/panels/webservices.js Fri Nov 23 20:44:35 2012
@@ -19,9 +19,9 @@
 TOMEE.ApplicationTabWebservices = function () {
     "use strict";
 
-    var channel = TOMEE.ApplicationChannel,
-        container = $(TOMEE.ApplicationTemplates.getValue('application-tab-webservices', {})),
-        active = false;
+    var channel = TOMEE.ApplicationChannel;
+    var container = $(TOMEE.ApplicationTemplates.getValue('application-tab-webservices', {}));
+    var active = false;
 
     channel.bind('ui-actions', 'window-F5-pressed', function () {
         triggerRefresh();
@@ -37,9 +37,9 @@ TOMEE.ApplicationTabWebservices = functi
     });
 
     function buildTableData(data) {
-        var rest = TOMEE.utils.getArray(data.rest),
-            soap = TOMEE.utils.getArray(data.soap),
-            result = [];
+        var rest = TOMEE.utils.getArray(data.rest);
+        var soap = TOMEE.utils.getArray(data.soap);
+        var result = [];
 
         function buildAppData(app, wsType) {
             var services = TOMEE.utils.getArray(app.services);

Modified: openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/tomee.less
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/tomee.less?rev=1413051&r1=1413050&r2=1413051&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/tomee.less (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/app/tomee.less Fri Nov 23 20:44:35 2012
@@ -17,9 +17,25 @@
 
 body {
     overflow: hidden;
+
+    .growl-container {
+        position: absolute;
+        bottom: 40px;
+        left: 40px;
+        z-index: 5000;
+
+        .growl {
+            display: none;
+            width: 300px;
+        }
+    }
 }
 
 .tomee {
+    .hidden {
+        display: none;
+    }
+
     overflow: hidden;
 
     .splitter {
@@ -77,6 +93,10 @@ body {
     }
 
     .tomee-console {
+        .dropdown-menu {
+            overflow: auto;
+        }
+
         .tomee-console-output {
             background-color: #F7F7F9;
             border: 1px solid #E1E1E8;
@@ -97,6 +117,10 @@ body {
             border-bottom: 1px solid white;
         }
 
+        .navbar-inner {
+            position: relative;
+        }
+
         .tomee-execute-webservices-group {
             position: absolute;
             bottom: 5px;
@@ -148,8 +172,40 @@ body {
         }
     }
 
+    .tomee-status {
+        .navbar-inner {
+            position: relative;
+
+            .buttons {
+                position: absolute;
+                right: 5px;
+                top: 0px;
+            }
+        }
+
+        .tomee-status-output {
+            overflow: auto;
+            margin-bottom: 0px;
+            padding-top: 5px;
+
+            input {
+                width: 500px;
+            }
+
+            .alert {
+                margin-bottom: 5px;
+                margin-left: 5px;
+                margin-right: 5px;
+            }
+
+            .messages {
+                list-style: none;
+                margin-left: 5px;
+            }
+        }
+    }
+
     .tomee-webservices {
         padding: 5px;
     }
-
 }
\ No newline at end of file

Modified: openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/index.html
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/index.html?rev=1413051&r1=1413050&r2=1413051&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/index.html (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/main/webapp/index.html Fri Nov 23 20:44:35 2012
@@ -32,10 +32,10 @@
 
     <script src="app/js/Application.js"></script>
 
+    <script src="app/js/util/Obj.js"></script>
     <script src="app/js/util/DelayedTask.js"></script>
     <script src="app/js/util/I18N.js"></script>
     <script src="app/js/util/Log.js"></script>
-    <script src="app/js/util/Obj.js"></script>
     <script src="app/js/util/Sequence.js"></script>
 
     <script src="app/js/ApplicationTemplates.js"></script>
@@ -45,10 +45,12 @@
 
     <script src="app/js/view/ApplicationView.js"></script>
     <script src="app/js/view/ApplicationToolbarView.js"></script>
+    <script src="app/js/view/GrowlNotification.js"></script>
 
     <script src="app/js/view/panels/home.js"></script>
     <script src="app/js/view/panels/console.js"></script>
     <script src="app/js/view/panels/log.js"></script>
+    <script src="app/js/view/panels/status.js"></script>
     <script src="app/js/view/panels/webservices.js"></script>
     <script src="app/js/view/panels/jndi.js"></script>
 

Modified: openejb/trunk/openejb/tomee/tomee-webapp/src/test/conf/tomcat-users.xml
URL: http://svn.apache.org/viewvc/openejb/trunk/openejb/tomee/tomee-webapp/src/test/conf/tomcat-users.xml?rev=1413051&r1=1413050&r2=1413051&view=diff
==============================================================================
--- openejb/trunk/openejb/tomee/tomee-webapp/src/test/conf/tomcat-users.xml (original)
+++ openejb/trunk/openejb/tomee/tomee-webapp/src/test/conf/tomcat-users.xml Fri Nov 23 20:44:35 2012
@@ -19,8 +19,11 @@
 -->
 
 <!-- $Rev: 597221 $ $Date: 2007-11-21 22:51:05 +0100 (Wed, 21 Nov 2007) $ -->
-
-<tomcat-users>
-    <user name="admin" password="admin" roles="manager,user" />
-    <user name="jane" password="doe" roles="user" />
-</tomcat-users>
+
+<tomcat-users>
+    <role rolename="manager"/>
+    <role rolename="user"/>
+    <role rolename="tomee-admin"/>
+    <user name="admin" password="admin" roles="manager,user,tomee-admin" />
+    <user name="jane" password="doe" roles="user" />
+</tomcat-users>