You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tomcat.apache.org by co...@apache.org on 2001/03/23 03:14:17 UTC
cvs commit: jakarta-tomcat/src/admin/contextAdmin sessionExpire.jsp sessionState.jsp ctxDetail.jsp
costin 01/03/22 18:14:17
Modified: src/admin/WEB-INF admin.tld
src/admin/WEB-INF/classes/tadm TomcatAdmin.java
TomcatAdminTEI.java TomcatIterateTEI.java
src/admin/contextAdmin ctxDetail.jsp
Added: src/admin/WEB-INF/classes/tadm ContextAdmin.java
ModuleAdmin.java ModuleAdminTEI.java
src/admin/contextAdmin sessionExpire.jsp sessionState.jsp
Log:
Added 2 pages and a tag to display informations about sessions.
This was done to debug one of the bugs and to better monitor
what was happening. You can see all active sessions for a context
and invalidate individual sessions.
( of course, this is just better than nothing, a bit of HTML-formating
and more details would be even better )
Revision Changes Path
1.9 +58 -0 jakarta-tomcat/src/admin/WEB-INF/admin.tld
Index: admin.tld
===================================================================
RCS file: /home/cvs/jakarta-tomcat/src/admin/WEB-INF/admin.tld,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- admin.tld 2001/01/29 06:46:17 1.8
+++ admin.tld 2001/03/23 02:14:16 1.9
@@ -55,6 +55,64 @@
</attribute>
</tag>
+ <tag>
+ <name>contextAdmin</name>
+ <tagclass>tadm.ContextAdmin</tagclass>
+ <info>
+ Will set the "ctx" variable based on the ctxPathParam parameter
+ and perform context actions. ( will replace adm:admin which
+ also declares the vars - so can't have multiple instances ).
+ </info>
+ <attribute>
+ <name>action</name>
+ <required>false</required>
+ </attribute>
+ <attribute>
+ <name>ctxPathParam</name>
+ <required>false</required>
+ </attribute>
+ <attribute>
+ <name>docBaseParam</name>
+ <required>false</required>
+ </attribute>
+ <attribute>
+ <name>docBase</name>
+ <required>false</required>
+ </attribute>
+ <attribute>
+ <name>ctxPath</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>ctxHost</name>
+ <required>false</required>
+ <rtexprvalue>true</rtexprvalue>
+ </attribute>
+ <attribute>
+ <name>value</name>
+ <required>false</required>
+ </attribute>
+ </tag>
+
+ <tag>
+ <name>moduleAdmin</name>
+ <tagclass>tadm.ModuleAdmin</tagclass>
+ <teiclass>tadm.ModuleAdminTEI</teiclass>
+ <info>
+ Will set the "module" variable and perform module actions.
+ </info>
+ <attribute>
+ <name>type</name>
+ <required>true</required>
+ </attribute>
+ <attribute>
+ <name>var</name>
+ <required>true</required>
+ </attribute>
+ </tag>
+
+
<!-- this is a "generic" tag, should be moved in a separate tld -->
<tag>
<name>iterate</name>
1.12 +16 -15 jakarta-tomcat/src/admin/WEB-INF/classes/tadm/TomcatAdmin.java
Index: TomcatAdmin.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat/src/admin/WEB-INF/classes/tadm/TomcatAdmin.java,v
retrieving revision 1.11
retrieving revision 1.12
diff -u -r1.11 -r1.12
--- TomcatAdmin.java 2001/03/02 05:26:01 1.11
+++ TomcatAdmin.java 2001/03/23 02:14:16 1.12
@@ -9,7 +9,7 @@
import javax.servlet.jsp.tagext.*;
import org.apache.tomcat.core.*;
import org.apache.tomcat.util.log.*;
-import org.apache.tomcat.util.qlog.*;
+//import org.apache.tomcat.util.qlog.*;
/**
* A context administration class. Contexts can be
@@ -54,6 +54,7 @@
// XXX virtual host
if( ctxPath.equals( ctx.getPath())) {
pageContext.setAttribute("ctx", ctx);
+ System.out.println("Found " + ctx );
break;
}
}
@@ -133,21 +134,21 @@
private void setLogFile( Context ctx, String dest )
throws TomcatException
{
- try {
- QueueLogger logger=new QueueLogger();
- System.out.println("Setting logger " + dest );
- logger.setPath( dest );
- logger.open();
- LogManager logManager=(LogManager)ctx.getContextManager().
- getNote("tc.LogManager");
+// try {
+// QueueLogger logger=new QueueLogger();
+// System.out.println("Setting logger " + dest );
+// logger.setPath( dest );
+// logger.open();
+// LogManager logManager=(LogManager)ctx.getContextManager().
+// getNote("tc.LogManager");
- logManager.addChannel("temp.log", logger );
- Log log=Log.getLog( "temp.log", ctx );
- ctx.setLog( log );
- ctx.setServletLog( log );
- } catch( Exception ex ) {
- ex.printStackTrace();
- }
+// logManager.addChannel("temp.log", logger );
+// Log log=Log.getLog( "temp.log", ctx );
+// ctx.setLog( log );
+// ctx.setServletLog( log );
+// } catch( Exception ex ) {
+// ex.printStackTrace();
+// }
}
private void addContext( ContextManager cm, String host, String path,
1.5 +3 -0 jakarta-tomcat/src/admin/WEB-INF/classes/tadm/TomcatAdminTEI.java
Index: TomcatAdminTEI.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat/src/admin/WEB-INF/classes/tadm/TomcatAdminTEI.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- TomcatAdminTEI.java 2000/12/31 15:39:15 1.4
+++ TomcatAdminTEI.java 2001/03/23 02:14:16 1.5
@@ -23,6 +23,9 @@
new VariableInfo("cm", "org.apache.tomcat.core.ContextManager",
true, VariableInfo.AT_BEGIN),
new VariableInfo("ctx", "org.apache.tomcat.core.Context",
+ true, VariableInfo.AT_BEGIN),
+ new VariableInfo("module",
+ "org.apache.tomcat.core.BaseInterceptor",
true, VariableInfo.AT_BEGIN)
});
1.5 +0 -3 jakarta-tomcat/src/admin/WEB-INF/classes/tadm/TomcatIterateTEI.java
Index: TomcatIterateTEI.java
===================================================================
RCS file: /home/cvs/jakarta-tomcat/src/admin/WEB-INF/classes/tadm/TomcatIterateTEI.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- TomcatIterateTEI.java 2000/12/31 15:39:15 1.4
+++ TomcatIterateTEI.java 2001/03/23 02:14:16 1.5
@@ -24,9 +24,6 @@
data.getAttributeString( "type" ),
true,
VariableInfo.NESTED ),
-
- new VariableInfo("ctx2", "org.apache.tomcat.core.Context",
- true, VariableInfo.NESTED)
});
}
1.1 jakarta-tomcat/src/admin/WEB-INF/classes/tadm/ContextAdmin.java
Index: ContextAdmin.java
===================================================================
package tadm;
import java.util.Vector;
import java.util.Enumeration;
import java.io.*;
import java.net.URL;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
import org.apache.tomcat.core.*;
import org.apache.tomcat.util.log.*;
/**
* A context administration class. Contexts can be
* viewed, added, and removed from the context manager.
*
*/
public class ContextAdmin extends TagSupport {
private ContextManager cm;
String ctxPath;
String docBase;
String ctxPathParam;
String docBaseParam;
String action;
String host;
String value;
// PageContext pageContext;
public ContextAdmin() {}
public int doStartTag() throws JspException {
try {
HttpServletRequest req=(HttpServletRequest)pageContext.
getRequest();
cm=(ContextManager)pageContext.getAttribute("cm");
if( cm==null )
throw new JspException( "Can't find context manager" );
Context ctx=null;
if( ctxPath==null && ctxPathParam!=null ) {
ctxPath=req.getParameter( ctxPathParam );
}
if( docBase==null && docBaseParam!=null) {
docBase=req.getParameter( docBaseParam );
}
if( ctxPath != null ) {
if( debug>0 ) log("Finding " + ctxPath );
Enumeration en=cm.getContexts();
while( en.hasMoreElements() ) {
ctx=(Context)en.nextElement();
// XXX virtual host
if( ctxPath.equals( ctx.getPath())) {
pageContext.setAttribute("ctx", ctx);
break;
}
}
}
if( ctx==null ) {
throw new JspException("Can't find context " + ctxPath );
}
if("removeContext".equals( action ) )
removeContext( cm , ctx);
if("setLogger".equals( action ) )
setLogFile( ctx, value );
if("addContext".equals( action ) )
addContext( cm, host, ctxPath, docBase );
} catch (Exception ex ) {
ex.printStackTrace();
}
return EVAL_BODY_INCLUDE;
}
public int doEndTag() throws JspException {
return EVAL_PAGE;
}
public void setParent( Tag parent ) {
super.setParent( parent);
}
// -------------------- Properties --------------------
public void setCtxPath( String ctx ) {
ctxPath=ctx;
}
public void setCtxPathParam( String ctx ) {
ctxPathParam=ctx;
}
public void setDocBaseParam( String ctx ) {
docBaseParam=ctx;
}
public void setCtxHost( String host ) {
this.host=host;
}
public void setAction( String action ) {
this.action=action;
}
public void setDocBase( String docBase ) {
this.docBase=docBase;
}
public void setValue( String s ) {
this.value=s;
}
private void removeContext( ContextManager cm, Context ctx)
throws TomcatException
{
if( debug > 0 ) log("Removing " + ctx );
cm.removeContext( ctx );
}
private void setLogFile( Context ctx, String dest )
throws TomcatException
{
// try {
// QueueLogger logger=new QueueLogger();
// if( debug > 0 ) log ("Setting logger " + dest );
// logger.setPath( dest );
// logger.open();
// LogManager logManager=(LogManager)ctx.getContextManager().
// getNote("tc.LogManager");
// logManager.addChannel("temp.log", logger );
// Log log=Log.getLog( "temp.log", ctx );
// ctx.setLog( log );
// ctx.setServletLog( log );
// } catch( Exception ex ) {
// ex.printStackTrace();
// }
}
private void addContext( ContextManager cm, String host, String path,
String docBase)
throws TomcatException
{
if( ! docBase.startsWith("/") ) {
docBase=cm.getHome() + "/" + docBase;
}
if( debug > 0 )
log("Adding " + path + " " + docBase);
Context context = new Context();
context.setContextManager(cm);
context.setPath(path);
context.setDocBase(docBase);
cm.addContext(context);
context.init();
}
// --------------------
private static int debug=0;
private void log(String s ) {
System.out.println(s );
}
}
1.1 jakarta-tomcat/src/admin/WEB-INF/classes/tadm/ModuleAdmin.java
Index: ModuleAdmin.java
===================================================================
package tadm;
import java.util.Vector;
import java.util.Enumeration;
import java.io.*;
import java.net.URL;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
import org.apache.tomcat.core.*;
import org.apache.tomcat.util.log.*;
/**
* A context administration class. Contexts can be
* viewed, added, and removed from the context manager.
*
*/
public class ModuleAdmin extends TagSupport {
private ContextManager cm;
String var;
String moduleName;
public ModuleAdmin() {}
/** Will set the "module" attribute, with the instance of the
* named interceptor. If "ctx" attribute is set, look in that
* context
*/
public int doStartTag() throws JspException {
try {
cm=(ContextManager)pageContext.getAttribute("cm");
if( cm==null )
throw new JspException( "Can't find context manager" );
Context ctx=(Context)pageContext.getAttribute("ctx");
Container ct=(ctx==null)? cm.getContainer():ctx.getContainer();
BaseInterceptor bi[]=ct.getInterceptors();
BaseInterceptor found=null;
for( int i=0; i<bi.length; i++ ) {
String cn=bi[i].getClass().getName();
if( cn.equals( moduleName )) {
found=bi[i];
pageContext.setAttribute( var,bi[i],
PageContext.PAGE_SCOPE );
break;
}
}
if( found==null )
throw new JspException("Can't find module " + moduleName +
" in " + ctx );
} catch (Exception ex ) {
ex.printStackTrace();
}
return EVAL_BODY_INCLUDE;
}
// -------------------- Properties --------------------
public void setVar(String m) {
var=m;
}
public void setType( String m ) {
moduleName=m;
}
// --------------------
private static int debug=0;
private void log(String s ) {
System.out.println(s );
}
}
1.1 jakarta-tomcat/src/admin/WEB-INF/classes/tadm/ModuleAdminTEI.java
Index: ModuleAdminTEI.java
===================================================================
package tadm;
import java.util.Vector;
import java.util.Enumeration;
import java.io.File;
import java.net.URL;
import javax.servlet.http.*;
import javax.servlet.jsp.*;
import javax.servlet.jsp.tagext.*;
import org.apache.tomcat.core.Request;
import org.apache.tomcat.core.Context;
import org.apache.tomcat.core.ContextManager;
import javax.servlet.jsp.tagext.TagData;
import javax.servlet.jsp.tagext.TagExtraInfo;
import javax.servlet.jsp.tagext.VariableInfo;
public class ModuleAdminTEI extends TagExtraInfo {
public VariableInfo[] getVariableInfo(TagData data) {
return (new VariableInfo[] {
new VariableInfo(data.getAttributeString( "var" ),
data.getAttributeString( "type" ),
true,
VariableInfo.AT_BEGIN ),
});
}
}
1.3 +2 -1 jakarta-tomcat/src/admin/contextAdmin/ctxDetail.jsp
Index: ctxDetail.jsp
===================================================================
RCS file: /home/cvs/jakarta-tomcat/src/admin/contextAdmin/ctxDetail.jsp,v
retrieving revision 1.2
retrieving revision 1.3
diff -u -r1.2 -r1.3
--- ctxDetail.jsp 2000/12/27 21:41:31 1.2
+++ ctxDetail.jsp 2001/03/23 02:14:17 1.3
@@ -9,7 +9,7 @@
<body bgcolor="white">
-<adm:admin ctxPath='<%= request.getParameter("ctx") %>' />
+<adm:admin ctxPathParam="ctx" />
<%
if( ctx==null ) {
@@ -17,6 +17,7 @@
<h1>Error, no context for <%= request.getParameter( "ctx" ) %> </h1>
<% } else { %>
+ <a href="sessionState.jsp?ctx=<%= request.getParameter( "ctx" ) %>">Session info</a>
<table border="0" cellpad="2" >
<tr bgcolor="#e1e1e1">
1.1 jakarta-tomcat/src/admin/contextAdmin/sessionExpire.jsp
Index: sessionExpire.jsp
===================================================================
<html>
<%@ taglib uri="http://jakarta.apache.org/taglibs/tomcat_admin-1.0"
prefix="adm" %>
<head>
<title>Session info</title>
</head>
<body bgcolor="white">
<adm:admin ctxPathParam="ctx"/>
<adm:moduleAdmin var="store"
type="org.apache.tomcat.modules.session.SimpleSessionStore" />
<h3>Invalidate <%= request.getParameter("id" ) %></h3>
<% org.apache.tomcat.core.ServerSession s=store.findSession( ctx,
request.getParameter("id" ));
s.setState( org.apache.tomcat.core.ServerSession.STATE_EXPIRED );
%>
</body>
</html>
1.1 jakarta-tomcat/src/admin/contextAdmin/sessionState.jsp
Index: sessionState.jsp
===================================================================
<html>
<%@ taglib uri="http://jakarta.apache.org/taglibs/tomcat_admin-1.0"
prefix="adm" %>
<head>
<title>Session info</title>
</head>
<body bgcolor="white">
<adm:admin ctxPathParam="ctx"/>
<adm:moduleAdmin var="store"
type="org.apache.tomcat.modules.session.SimpleSessionStore" />
<h3>Session store info</h3>
<ul>
<li>Context: <%= ctx %>
<li>Default timeout: <%= ctx.getSessionTimeOut() %>
<li>Active sessions: <%= store.getSessionCount(ctx) %>
<li>Recycled sessions: <%= store.getRecycledCount(ctx) %>
<ul>
<table border>
<tr>
<th>Id</th>
<th>Attrs</th>
<th>St</th>
<th>Creation</th>
<th>Access</th>
<th>Exp</th>
<th>New</th>
</tr>
<adm:iterate name="sS"
enumeration="<%= store.getSessions(ctx) %>"
type="org.apache.tomcat.core.ServerSession" >
<tr>
<td><%= sS.getId().toString() %></td>
<td><%= sS.getAttributeCount() %></td>
<td><a href="sessionExpire.jsp?ctx=<%= request.getParameter("ctx") %>&id=<%= sS.getId().toString() %>" >
<%= sS.getState() %></td>
</a>
<td><%= sS.getTimeStamp().getCreationTime() %></td>
<td><%= sS.getTimeStamp().getLastAccessedTime() %></td>
<td><%= sS.getTimeStamp().getMaxInactiveInterval() %></td>
<td><%= sS.getTimeStamp().isNew() %></td>
</tr>
</adm:iterate>
</table>
</body>
</html>