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 2013/11/14 14:39:56 UTC

svn commit: r1541905 - in /tomee/tomee/trunk/tomee/tomee-webaccess: ./ src/main/groovy/org/apache/tomee/webaccess/data/dto/ src/main/groovy/org/apache/tomee/webaccess/rest/ src/main/groovy/org/apache/tomee/webaccess/service/ src/main/webapp/app/ src/ma...

Author: tveronezi
Date: Thu Nov 14 13:39:55 2013
New Revision: 1541905

URL: http://svn.apache.org/r1541905
Log:
TOMEE-1074
Done

Added:
    tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/data/dto/SessionResultDto.groovy
    tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/rest/Session.groovy
    tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/service/SessionServiceImpl.groovy
    tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/handlebarsHelpers.js
      - copied, changed from r1541661, tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/i18n.js
    tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/templates/sessions.handlebars
    tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/view/sessions.js
Modified:
    tomee/tomee/trunk/tomee/tomee-webaccess/Makefile
    tomee/tomee/trunk/tomee/tomee-webaccess/pom.xml
    tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/rest/ApplicationConfig.groovy
    tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/rest/KeepAlive.groovy
    tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/rest/Log.groovy
    tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/rest/Scripting.groovy
    tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/rest/WebServices.groovy
    tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/service/WsServiceImpl.groovy
    tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/app.less
    tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/application.js
    tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/i18n.js
    tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/templates.js
    tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/templates/container.handlebars

Modified: tomee/tomee/trunk/tomee/tomee-webaccess/Makefile
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-webaccess/Makefile?rev=1541905&r1=1541904&r2=1541905&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-webaccess/Makefile (original)
+++ tomee/tomee/trunk/tomee/tomee-webaccess/Makefile Thu Nov 14 13:39:55 2013
@@ -13,8 +13,8 @@
 #
 
 up-static:
-	rm -rf target/apache-tomee/webapps/ROOT/app
-	cp -r src/main/webapp/app target/apache-tomee/webapps/ROOT/
+	rm -rf target/apache-tomee/webapps/webaccess/app
+	cp -r src/main/webapp/app target/apache-tomee/webapps/webaccess/
 
 run:
 	mvn clean install -DskipTests=true

Modified: tomee/tomee/trunk/tomee/tomee-webaccess/pom.xml
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-webaccess/pom.xml?rev=1541905&r1=1541904&r2=1541905&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-webaccess/pom.xml (original)
+++ tomee/tomee/trunk/tomee/tomee-webaccess/pom.xml Thu Nov 14 13:39:55 2013
@@ -172,7 +172,7 @@
         <version>${project.version}</version>
         <configuration>
           <simpleLog>true</simpleLog>
-          <context>ROOT</context>
+          <context>webaccess</context>
           <tomeeClassifier>jaxrs</tomeeClassifier>
         </configuration>
       </plugin>

Added: tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/data/dto/SessionResultDto.groovy
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/data/dto/SessionResultDto.groovy?rev=1541905&view=auto
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/data/dto/SessionResultDto.groovy (added)
+++ tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/data/dto/SessionResultDto.groovy Thu Nov 14 13:39:55 2013
@@ -0,0 +1,45 @@
+/**
+ *
+ * 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.webaccess.data.dto
+
+import javax.xml.bind.annotation.XmlAccessType
+import javax.xml.bind.annotation.XmlAccessorType
+import javax.xml.bind.annotation.XmlElement
+import javax.xml.bind.annotation.XmlRootElement
+
+@XmlAccessorType(XmlAccessType.NONE)
+@XmlRootElement
+class SessionResultDto {
+
+    @XmlElement
+    String context
+
+    @XmlElement
+    String sessionId
+
+    @XmlElement
+    Long lastAccessTs
+
+    @XmlElement
+    Long creationTs
+
+    @XmlElement
+    Long expirationTs
+
+}

Modified: tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/rest/ApplicationConfig.groovy
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/rest/ApplicationConfig.groovy?rev=1541905&r1=1541904&r2=1541905&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/rest/ApplicationConfig.groovy (original)
+++ tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/rest/ApplicationConfig.groovy Thu Nov 14 13:39:55 2013
@@ -23,7 +23,9 @@ import javax.ws.rs.core.Application
 
 @ApplicationPath("/rest")
 class ApplicationConfig extends Application {
+
     Set<Class<?>> getClasses() {
-        [KeepAlive, Log, Scripting, WebServices]
+        [KeepAlive, Log, Scripting, WebServices, Session]
     }
+
 }

Modified: tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/rest/KeepAlive.groovy
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/rest/KeepAlive.groovy?rev=1541905&r1=1541904&r2=1541905&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/rest/KeepAlive.groovy (original)
+++ tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/rest/KeepAlive.groovy Thu Nov 14 13:39:55 2013
@@ -23,8 +23,10 @@ import javax.ws.rs.Path
 
 @Path("/keep-alive")
 class KeepAlive {
+
     @GET
     void ping() {
         // no-op
     }
+
 }

Modified: tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/rest/Log.groovy
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/rest/Log.groovy?rev=1541905&r1=1541904&r2=1541905&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/rest/Log.groovy (original)
+++ tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/rest/Log.groovy Thu Nov 14 13:39:55 2013
@@ -27,6 +27,7 @@ import javax.ws.rs.*
 
 @Path("/log")
 class Log {
+
     @EJB
     private LogServiceImpl service
 
@@ -43,4 +44,5 @@ class Log {
     LogFileResultDto load(@PathParam('fileName') String fileName) {
         service.load(fileName)
     }
+
 }

Modified: tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/rest/Scripting.groovy
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/rest/Scripting.groovy?rev=1541905&r1=1541904&r2=1541905&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/rest/Scripting.groovy (original)
+++ tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/rest/Scripting.groovy Thu Nov 14 13:39:55 2013
@@ -29,6 +29,7 @@ import javax.ws.rs.Produces
 
 @Path("/scripting")
 class Scripting {
+
     @EJB
     private ScriptingServiceImpl service
 
@@ -37,4 +38,5 @@ class Scripting {
     ScriptingResultDto execute(@FormParam('engine') String engine, @FormParam('script') String script) {
         service.execute(engine, script)
     }
+
 }

Added: tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/rest/Session.groovy
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/rest/Session.groovy?rev=1541905&view=auto
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/rest/Session.groovy (added)
+++ tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/rest/Session.groovy Thu Nov 14 13:39:55 2013
@@ -0,0 +1,44 @@
+/**
+ *
+ * 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.webaccess.rest
+
+import org.apache.tomee.webaccess.data.dto.SessionResultDto
+import org.apache.tomee.webaccess.service.SessionServiceImpl
+
+import javax.ejb.EJB
+import javax.ws.rs.*
+
+@Path("/session")
+class Session {
+
+    @EJB
+    private SessionServiceImpl service
+
+    @DELETE
+    @Path("/expire/{context}/{sessionId}")
+    void expireSession(@PathParam("context") String context, @PathParam("sessionId") String sessionId) {
+        service.expireSession(context, sessionId)
+    }
+
+    @GET
+    @Produces("application/json")
+    List<SessionResultDto> list() {
+        service.listSessions()
+    }
+}

Modified: tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/rest/WebServices.groovy
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/rest/WebServices.groovy?rev=1541905&r1=1541904&r2=1541905&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/rest/WebServices.groovy (original)
+++ tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/rest/WebServices.groovy Thu Nov 14 13:39:55 2013
@@ -28,6 +28,7 @@ import javax.ws.rs.Produces
 
 @Path("/ws")
 class WebServices {
+
     @EJB
     private WsServiceImpl service
 
@@ -36,4 +37,5 @@ class WebServices {
     WsListResultDto list() {
         service.list()
     }
+
 }

Added: tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/service/SessionServiceImpl.groovy
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/service/SessionServiceImpl.groovy?rev=1541905&view=auto
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/service/SessionServiceImpl.groovy (added)
+++ tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/service/SessionServiceImpl.groovy Thu Nov 14 13:39:55 2013
@@ -0,0 +1,87 @@
+/**
+ *
+ * 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.webaccess.service
+
+import org.apache.tomee.webaccess.data.dto.SessionResultDto
+
+import javax.annotation.security.RolesAllowed
+import javax.ejb.Stateless
+import javax.ejb.TransactionAttribute
+import javax.ejb.TransactionAttributeType
+import javax.management.InstanceNotFoundException
+import javax.management.ObjectName
+import javax.ws.rs.PathParam
+import java.lang.management.ManagementFactory
+
+@TransactionAttribute(TransactionAttributeType.SUPPORTS)
+@Stateless
+@RolesAllowed('tomee-admin')
+class SessionServiceImpl {
+
+    static void expireSession(@PathParam("context") String context, @PathParam("sessionId") String sessionId) {
+        def server = ManagementFactory.getPlatformMBeanServer()
+        def name = "Catalina:type=Manager,context=/$context,host=localhost" as String
+        try {
+            def contextBean = server.getObjectInstance(new ObjectName(name))
+            server.invoke(contextBean.objectName, 'expireSession', [sessionId] as Object[], [String.class.name] as String[])
+        } catch (InstanceNotFoundException ignore) {
+            // no-op
+        }
+    }
+
+    static List<SessionResultDto> listSessions() {
+        def server = ManagementFactory.getPlatformMBeanServer()
+        def localhostBean = server.getObjectInstance(new ObjectName('Catalina:type=Host,host=localhost'))
+        def children = server.getAttribute(localhostBean.objectName, 'children')
+        def baseNames = children.collect { ObjectName objectName ->
+            server.getAttribute(objectName, 'baseName')
+        }
+        def result = []
+        baseNames.each { baseName ->
+            def name = "Catalina:type=Manager,context=/$baseName,host=localhost" as String
+            try {
+                def contextBean = server.getObjectInstance(new ObjectName(name))
+                def maxInactiveInterval = server.getAttribute(contextBean.objectName, 'maxInactiveInterval') as Long
+
+                def getValue = { String operationName, String sessionId ->
+                    server.invoke(contextBean.objectName, operationName, [sessionId] as Object[], [String.class.name] as String[])
+                }
+
+                server.invoke(contextBean.objectName, 'listSessionIds', null, null).split(' ').each { String sessionId ->
+                    if (sessionId != '') {
+                        def accessedTs = getValue('getLastAccessedTimestamp', sessionId) as Long
+                        def expirationTs = maxInactiveInterval * 1000 + accessedTs
+                        def creationTs = getValue('getCreationTimestamp', sessionId) as Long
+                        result << new SessionResultDto(
+                                context: baseName,
+                                sessionId: sessionId,
+                                creationTs: creationTs,
+                                expirationTs: expirationTs,
+                                lastAccessTs: accessedTs
+                        )
+                    }
+                }
+            } catch (InstanceNotFoundException ignore) {
+                // no-op
+            }
+        }
+        result
+    }
+
+}

Modified: tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/service/WsServiceImpl.groovy
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/service/WsServiceImpl.groovy?rev=1541905&r1=1541904&r2=1541905&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/service/WsServiceImpl.groovy (original)
+++ tomee/tomee/trunk/tomee/tomee-webaccess/src/main/groovy/org/apache/tomee/webaccess/service/WsServiceImpl.groovy Thu Nov 14 13:39:55 2013
@@ -36,6 +36,7 @@ import javax.ejb.TransactionAttributeTyp
 @Stateless
 @RolesAllowed('tomee-admin')
 class WsServiceImpl {
+
     private static def log = Logger.getInstance(LogCategory.OPENEJB_ADMIN, WsServiceImpl)
 
     private static ApplicationDto getApplicationByName(WsListResultDto queryResult, String name) {
@@ -117,4 +118,5 @@ class WsServiceImpl {
         soapWebServices(queryResult)
         queryResult
     }
+
 }

Modified: tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/app.less
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/app.less?rev=1541905&r1=1541904&r2=1541905&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/app.less (original)
+++ tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/app.less Thu Nov 14 13:39:55 2013
@@ -37,6 +37,15 @@ body {
     padding: 0;
   }
 
+  .ux-sessions {
+    position: absolute;
+    top: @topOffset;
+    bottom: @offset;
+    left: @offset;
+    right: @offset;
+    margin-bottom: 0;
+  }
+
   .ux-logfile-output {
     position: absolute;
     top: @topOffset;

Modified: tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/application.js
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/application.js?rev=1541905&r1=1541904&r2=1541905&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/application.js (original)
+++ tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/application.js Thu Nov 14 13:39:55 2013
@@ -21,13 +21,14 @@
 
     var deps = [
         'app/js/view/container',
-        'app/js/view/scripting', 'app/js/view/logfiles', 'app/js/view/growl',
+        'app/js/view/scripting', 'app/js/view/logfiles', 'app/js/view/sessions', 'app/js/view/growl',
         'lib/underscore',
         'app/js/i18n',
+        'app/js/handlebarsHelpers',
         'lib/less', 'lib/backbone', 'lib/jquery', 'lib/bootstrap',
         'app/js/keep-alive'
     ];
-    define(deps, function (containerView, scriptingView, logfilesView) {
+    define(deps, function (containerView, scriptingView, logfilesView, sessionsView) {
         containerView.render();
 
         $.ajaxSetup({ cache: false });
@@ -36,7 +37,9 @@
             //Starting the backbone router.
             var Router = Backbone.Router.extend({
                 routes: {
-                    '': 'showScripting',
+                    '': 'showSessions',
+                    '/': 'showSessions',
+                    'sessions': 'showSessions',
                     'scripting': 'showScripting',
                     'scripting/': 'showScripting',
                     'scripting/:scriptType': 'showScripting',
@@ -45,6 +48,21 @@
                     'log-files/:fileName': 'showLogFile'
                 },
 
+                showSessions: function () {
+                    containerView.showView(sessionsView);
+                    $.ajax({
+                        url: window.ux.ROOT_URL + 'rest/session',
+                        method: 'GET',
+                        dataType: 'json',
+                        data: {},
+                        success: function (data) {
+                            sessionsView.render({
+                                sessions: data.sessionResultDto
+                            });
+                        }
+                    });
+                },
+
                 showScripting: function (scriptType) {
                     containerView.showView(scriptingView);
                     if (scriptType) {
@@ -67,6 +85,18 @@
                 });
             });
 
+            sessionsView.on('expire-session', function (data) {
+                $.ajax({
+                    url: window.ux.ROOT_URL + 'rest/session/expire/' + data.context + '/' + data.sessionId,
+                    method: 'DELETE',
+                    dataType: 'json',
+                    data: {},
+                    success: function (data) {
+                        router.showSessions();
+                    }
+                });
+            });
+
             scriptingView.on('execute-action', function (data) {
                 $.ajax({
                     url: window.ux.ROOT_URL + 'rest/scripting/',

Copied: tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/handlebarsHelpers.js (from r1541661, tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/i18n.js)
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/handlebarsHelpers.js?p2=tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/handlebarsHelpers.js&p1=tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/i18n.js&r1=1541661&r2=1541905&rev=1541905&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/i18n.js (original)
+++ tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/handlebarsHelpers.js Thu Nov 14 13:39:55 2013
@@ -17,47 +17,16 @@
  "use strict";
  */
 
-define(['lib/underscore', 'lib/handlebars', 'app/js/log'], function (underscore) {
+define(['app/js/i18n', 'lib/handlebars'], function (i18n) {
     'use strict';
 
-    var missing = Handlebars.compile('[!{{key}}!]');
-    var messages = {
-        'application.name': 'Apache TomEE',
-        'visitor': 'visitor',
-        'scripting': 'Scripting',
-        'source': 'Source Code',
-        'output': 'Output',
-        'execute': 'Execute',
-        'clean.execute': 'Clean and execute',
-        'groovy': 'Groovy',
-        'javascript': 'JavaScript',
-        'log.files': 'Log Files',
-        'log.file': 'Choose file'
-    };
-
-    underscore.each(underscore.keys(messages), function (key) {
-        var template = Handlebars.compile(messages[key]);
-        messages[key] = template;
+    Handlebars.registerHelper('i18n', function (key) {
+        return i18n.get(key);
     });
 
-    var get = function (key, values) {
-        var template = messages[key];
-        var cfg = values;
-        if (!template) {
-            template = missing;
-            cfg = {
-                key: key
-            };
-            window.console.error('Missing i18n message.', key);
-        }
-        return template(cfg);
-    };
-
-    Handlebars.registerHelper('i18n', function (key) {
-        return get(key);
+    Handlebars.registerHelper('timeStampToDate', function (value) {
+        var date = new Date(value);
+        return date.toUTCString();
     });
 
-    return {
-        get: get
-    };
 });

Modified: tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/i18n.js
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/i18n.js?rev=1541905&r1=1541904&r2=1541905&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/i18n.js (original)
+++ tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/i18n.js Thu Nov 14 13:39:55 2013
@@ -32,7 +32,13 @@ define(['lib/underscore', 'lib/handlebar
         'groovy': 'Groovy',
         'javascript': 'JavaScript',
         'log.files': 'Log Files',
-        'log.file': 'Choose file'
+        'log.file': 'Choose file',
+        'sessions': 'Sessions',
+        'session.id': 'Session Id',
+        'session.context': 'Context',
+        'session.creation.date': 'Created',
+        'session.last.access': 'Accessed',
+        'session.expiration.date': 'Expire'
     };
 
     underscore.each(underscore.keys(messages), function (key) {
@@ -53,10 +59,6 @@ define(['lib/underscore', 'lib/handlebar
         return template(cfg);
     };
 
-    Handlebars.registerHelper('i18n', function (key) {
-        return get(key);
-    });
-
     return {
         get: get
     };

Modified: tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/templates.js
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/templates.js?rev=1541905&r1=1541904&r2=1541905&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/templates.js (original)
+++ tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/templates.js Thu Nov 14 13:39:55 2013
@@ -27,7 +27,8 @@
         'script-sample-javascript',
         'script-sample-groovy',
         'logfiles',
-        'logfile-link'
+        'logfile-link',
+        'sessions'
     ];
 
     function loop(values, callback) {

Modified: tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/templates/container.handlebars
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/templates/container.handlebars?rev=1541905&r1=1541904&r2=1541905&view=diff
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/templates/container.handlebars (original)
+++ tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/templates/container.handlebars Thu Nov 14 13:39:55 2013
@@ -10,6 +10,7 @@
     </div>
     <div class="collapse navbar-collapse navbar-ex8-collapse">
         <ul class="nav navbar-nav">
+            <li class="ux-app-menu-item ux-sessions"><a href="sessions">{{i18n "sessions"}}</a></li>
             <li class="ux-app-menu-item ux-scripting"><a href="scripting">{{i18n "scripting"}}</a></li>
             <li class="ux-app-menu-item ux-log-files"><a href="log-files">{{i18n "log.files"}}</a></li>
         </ul>

Added: tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/templates/sessions.handlebars
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/templates/sessions.handlebars?rev=1541905&view=auto
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/templates/sessions.handlebars (added)
+++ tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/templates/sessions.handlebars Thu Nov 14 13:39:55 2013
@@ -0,0 +1,27 @@
+<table class="table table-striped">
+    <thead>
+    <tr>
+        <th>{{i18n "session.id"}}</th>
+        <th>{{i18n "session.context"}}</th>
+        <th>{{i18n "session.creation.date"}}</th>
+        <th>{{i18n "session.last.access"}}</th>
+        <th>{{i18n "session.expiration.date"}}</th>
+    </tr>
+    </thead>
+    <tbody>
+    {{#each sessions}}
+    <tr>
+        <td>{{this.sessionId}}</td>
+        <td>{{this.context}}</td>
+        <td>{{timeStampToDate this.creationTs}}</td>
+        <td>{{timeStampToDate this.lastAccessTs}}</td>
+        <td>{{timeStampToDate this.expirationTs}}
+            <a class="ux-expire-btn" href="expire">
+                <span data-session-id="{{this.sessionId}}" data-context-id="{{this.context}}"
+                      class="glyphicon glyphicon-trash"></span>
+            </a>
+        </td>
+    </tr>
+    {{/each}}
+    </tbody>
+</table>

Added: tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/view/sessions.js
URL: http://svn.apache.org/viewvc/tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/view/sessions.js?rev=1541905&view=auto
==============================================================================
--- tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/view/sessions.js (added)
+++ tomee/tomee/trunk/tomee/tomee-webaccess/src/main/webapp/app/js/view/sessions.js Thu Nov 14 13:39:55 2013
@@ -0,0 +1,57 @@
+/**
+ *
+ * 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.
+ */
+
+(function () {
+    'use strict';
+
+    var deps = ['app/js/templates', 'lib/underscore', 'lib/backbone'];
+    define(deps, function (templates, underscore) {
+
+        var View = Backbone.View.extend({
+            tagName: 'div',
+            className: 'ux-sessions',
+            events: {
+                'click .ux-refresh-btn': function (evt) {
+                    evt.preventDefault();
+                    var me = this;
+                    me.trigger('refresh-sessions', {});
+                },
+                'click .ux-expire-btn': function (evt) {
+                    // TRICK to avoid full page reload.
+                    evt.preventDefault();
+                    var myLink = $(evt.target);
+                    this.trigger('expire-session', {
+                        sessionId: myLink.attr('data-session-id'),
+                        context: myLink.attr('data-context-id')
+                    });
+                }
+            },
+            render: function (data) {
+                var me = this;
+                me.$el.empty();
+                var tplValues = {};
+                if (data) {
+                    tplValues = data;
+                }
+                me.$el.append(templates.getValue('sessions', tplValues));
+                return me;
+            }
+        });
+        return new View();
+    });
+}());