cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session StandardManager.java mbeans-descriptors.xml

2004-10-05 Thread remm
remm2004/10/05 10:12:52

  Modified:catalina/src/share/org/apache/catalina/startup
HostConfig.java
   catalina/src/share/org/apache/catalina/valves ValveBase.java
   catalina/src/share/org/apache/catalina Lifecycle.java
Loader.java Realm.java Valve.java Cluster.java
   catalina/src/share/org/apache/catalina/loader
WebappLoader.java
   modules/cluster/src/share/org/apache/catalina/cluster/tcp
SimpleTcpCluster.java
   catalina/src/share/org/apache/catalina/core
mbeans-descriptors.xml ContainerBase.java
StandardContext.java StandardHost.java
LocalStrings.properties
   webapps/docs/config manager.xml context.xml
   catalina/src/share/org/apache/catalina/realm RealmBase.java
   catalina/src/share/org/apache/catalina/session
StandardManager.java mbeans-descriptors.xml
  Log:
  - Extend background processing to most components.
  - The frequency check field moves to the manager.
  
  Revision  ChangesPath
  1.48  +2 -2  
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/startup/HostConfig.java
  
  Index: HostConfig.java
  ===
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/startup/HostConfig.java,v
  retrieving revision 1.47
  retrieving revision 1.48
  diff -u -r1.47 -r1.48
  --- HostConfig.java   24 Sep 2004 07:25:06 -  1.47
  +++ HostConfig.java   5 Oct 2004 17:12:49 -   1.48
  @@ -288,7 +288,7 @@
*/
   public void lifecycleEvent(LifecycleEvent event) {
   
  -if (event.getType().equals("check"))
  +if (event.getType().equals(Lifecycle.PERIODIC_EVENT))
   check();
   
   // Identify the host we are associated with
  
  
  
  1.16  +10 -1 
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/valves/ValveBase.java
  
  Index: ValveBase.java
  ===
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/valves/ValveBase.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- ValveBase.java29 Aug 2004 16:46:14 -  1.15
  +++ ValveBase.java5 Oct 2004 17:12:49 -   1.16
  @@ -149,6 +149,15 @@
   
   
   /**
  + * Execute a periodic task, such as reloading, etc. This method will be
  + * invoked inside the classloading context of this container. Unexpected
  + * throwables will be caught and logged.
  + */
  +public void backgroundProcess() {
  +}
  +
  +
  +/**
* The implementation-specific logic represented by this Valve.  See the
* Valve description for the normal design patterns for this method.
* 
  
  
  
  1.4   +7 -1  
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/Lifecycle.java
  
  Index: Lifecycle.java
  ===
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/Lifecycle.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- Lifecycle.java23 Jul 2004 22:57:35 -  1.3
  +++ Lifecycle.java5 Oct 2004 17:12:49 -   1.4
  @@ -82,6 +82,12 @@
   public static final String DESTROY_EVENT = "destroy";
   
   
  +/**
  + * The LifecycleEvent type for the "periodic" event.
  + */
  +public static final String PERIODIC_EVENT = "periodic";
  +
  +
   // - Public Methods
   
   
  
  
  
  1.5   +9 -1  
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/Loader.java
  
  Index: Loader.java
  ===
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/Loader.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- Loader.java   16 Aug 2004 09:31:07 -  1.4
  +++ Loader.java   5 Oct 2004 17:12:49 -   1.5
  @@ -59,6 +59,14 @@
   
   
   /**
  + * Execute a periodic task, such as reloading, etc. This method will be
  + * invoked inside the classloading context of this container. Unexpected
  + * throwables will be caught and logged.
  + */
  +public void backgroundProcess();
  +
  +
  +/**
* Return the Java class loader to be used by this Container.
*/
   public ClassLoader getClassLoader();
  
  
  
  1.10  +12 -1 
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/Realm.java
  
  Index: Realm.java
  ==

cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session StandardManager.java

2004-05-26 Thread yoavs
yoavs   2004/05/26 09:14:10

  Modified:catalina/src/share/org/apache/catalina/session
StandardManager.java
  Log:
  Minor JavaDoc fixes (Bugzilla 28335)
  
  Revision  ChangesPath
  1.22  +3 -3  
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/StandardManager.java
  
  Index: StandardManager.java
  ===
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/StandardManager.java,v
  retrieving revision 1.21
  retrieving revision 1.22
  diff -u -r1.21 -r1.22
  --- StandardManager.java  27 Feb 2004 14:58:46 -  1.21
  +++ StandardManager.java  26 May 2004 16:14:10 -  1.22
  @@ -207,7 +207,7 @@
   
   /** Number of session creations that failed due to maxActiveSessions
*
  - * @return
  + * @return The count
*/
   public int getRejectedSessions() {
   return rejectedSessions;
  @@ -219,7 +219,7 @@
   
   /** Number of sessions that expired.
*
  - * @return
  + * @return The count
*/
   public int getExpiredSessions() {
   return expiredSessions;
  
  
  

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session StandardManager.java

2004-02-06 Thread remm
remm2004/02/06 03:45:58

  Modified:catalina/src/share/org/apache/catalina/session
StandardManager.java
  Log:
  - Call endAccess after reading a session from storage so that the session
properly timeouts.
  - Bug 26715, submitted by Jochen Strunk.
  
  Revision  ChangesPath
  1.20  +5 -4  
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/StandardManager.java
  
  Index: StandardManager.java
  ===
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/StandardManager.java,v
  retrieving revision 1.19
  retrieving revision 1.20
  diff -u -r1.19 -r1.20
  --- StandardManager.java  26 Jan 2004 19:47:47 -  1.19
  +++ StandardManager.java  6 Feb 2004 11:45:58 -   1.20
  @@ -464,6 +464,7 @@
   session.setManager(this);
   sessions.put(session.getId(), session);
   session.activate();
  +session.endAccess();
   }
   } catch (ClassNotFoundException e) {
 log.error(sm.getString("standardManager.loading.cnfe", e), e);
  
  
  

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session StandardManager.java PersistentManagerBase.java StandardSession.java PersistentManager.java ManagerBase.java

2004-01-26 Thread remm
remm2004/01/26 11:47:48

  Modified:catalina/src/share/org/apache/catalina/session
StandardManager.java PersistentManagerBase.java
StandardSession.java PersistentManager.java
ManagerBase.java
  Log:
  - Remove compilation warnings.
  
  Revision  ChangesPath
  1.19  +5 -5  
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/StandardManager.java
  
  Index: StandardManager.java
  ===
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/StandardManager.java,v
  retrieving revision 1.18
  retrieving revision 1.19
  diff -u -r1.18 -r1.19
  --- StandardManager.java  12 Jan 2004 05:21:48 -  1.18
  +++ StandardManager.java  26 Jan 2004 19:47:47 -  1.19
  @@ -237,7 +237,7 @@
*/
   public String getInfo() {
   
  -return (this.info);
  +return (info);
   
   }
   
  
  
  
  1.16  +5 -5  
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/PersistentManagerBase.java
  
  Index: PersistentManagerBase.java
  ===
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/PersistentManagerBase.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- PersistentManagerBase.java5 Jan 2004 08:50:00 -   1.15
  +++ PersistentManagerBase.java26 Jan 2004 19:47:47 -  1.16
  @@ -416,7 +416,7 @@
*/
   public String getInfo() {
   
  -return (this.info);
  +return (info);
   
   }
   
  
  
  
  1.33  +5 -5  
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/StandardSession.java
  
  Index: StandardSession.java
  ===
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/StandardSession.java,v
  retrieving revision 1.32
  retrieving revision 1.33
  diff -u -r1.32 -r1.33
  --- StandardSession.java  23 Jan 2004 22:29:32 -  1.32
  +++ StandardSession.java  26 Jan 2004 19:47:48 -  1.33
  @@ -442,7 +442,7 @@
*/
   public String getInfo() {
   
  -return (this.info);
  +return (info);
   
   }
   
  
  
  
  1.2   +5 -5  
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/PersistentManager.java
  
  Index: PersistentManager.java
  ===
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/PersistentManager.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- PersistentManager.java18 Jul 2002 16:47:53 -  1.1
  +++ PersistentManager.java26 Jan 2004 19:47:48 -  1.2
  @@ -107,7 +107,7 @@
*/
   public String getInfo() {
   
  -return (this.info);
  +return (info);
   
   }
   
  
  
  
  1.23  +2 -2  
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/ManagerBase.java
  
  Index: ManagerBase.java
  ===
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/ManagerBase.java,v
  retrieving revision 1.22
  retrieving revision 1.23
  diff -u -r1.22 -r1.23
  --- ManagerBase.java  14 Jan 2004 12:42:30 -  1.22
  +++ ManagerBase.java  26 Jan 2004 19:47:48 -  1.23
  @@ -454,7 +454,7 @@
*/
   public String getInfo() {
   
  -return (this.info);
  +return (info);
   
   }
   
  
  
  

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



RE: cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session StandardManager.java

2004-01-12 Thread Filip Hanik
ok, if no one else objects, I'll add this in.

Filip

-Original Message-
From: [mailto:[EMAIL PROTECTED]
Sent: Monday, January 12, 2004 12:12 PM
To: Tomcat Developers List
Subject: Re: cvs commit:
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session
StandardManager.java


Filip Hanik wrote:
> nope that is it.
> The method I added, and would still like to get buy in, is to add
> backgroundProcess() as a method to the manager interface.
> That way, any manager can take advantage of the background thread from the
> context calling that method.
> If we don't want to change the interface, we can either add in reflection
> which I'm not a big fan of since I think managers should know
what is going
> on, or skip the backgroundProcess for custom managers, I'll just
implement a
> thread in the cluster instead.
>
> what do you think?

I think I'm +0 on adding this.

Rémy


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session StandardManager.java

2004-01-12 Thread Remy Maucherat
Filip Hanik wrote:
nope that is it.
The method I added, and would still like to get buy in, is to add
backgroundProcess() as a method to the manager interface.
That way, any manager can take advantage of the background thread from the
context calling that method.
If we don't want to change the interface, we can either add in reflection
which I'm not a big fan of since I think managers should know what is going
on, or skip the backgroundProcess for custom managers, I'll just implement a
thread in the cluster instead.
what do you think?
I think I'm +0 on adding this.

Rémy

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


RE: cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session StandardManager.java

2004-01-12 Thread Filip Hanik
nope that is it.
The method I added, and would still like to get buy in, is to add
backgroundProcess() as a method to the manager interface.
That way, any manager can take advantage of the background thread from the
context calling that method.
If we don't want to change the interface, we can either add in reflection
which I'm not a big fan of since I think managers should know what is going
on, or skip the backgroundProcess for custom managers, I'll just implement a
thread in the cluster instead.

what do you think?
Filip

-Original Message-
From: Remy Maucherat [mailto:[EMAIL PROTECTED]
Sent: Monday, January 12, 2004 10:32 AM
To: Tomcat Developers List
Subject: Re: cvs commit:
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session
StandardManager.java


Filip Hanik wrote:
> I'll roll back, fix my editor, I just noticed that

Cool. Did you do anything more other than adding the new method ?
Anyway, roll back the changes as a whole, so that diffs work. I think
cosmetic changes to the source code should be separate commits.

Rémy



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session StandardManager.java

2004-01-12 Thread Remy Maucherat
Filip Hanik wrote:
I'll roll back, fix my editor, I just noticed that
Cool. Did you do anything more other than adding the new method ?
Anyway, roll back the changes as a whole, so that diffs work. I think 
cosmetic changes to the source code should be separate commits.

Rémy



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


RE: cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session StandardManager.java

2004-01-12 Thread Filip Hanik
I'll roll back, fix my editor, I just noticed that

Filip

-Original Message-
From: Remy Maucherat [mailto:[EMAIL PROTECTED]
Sent: Monday, January 12, 2004 12:16 AM
To: Tomcat Developers List
Subject: Re: cvs commit:
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session
StandardManager.java


[EMAIL PROTECTED] wrote:
> fhanik  2004/01/11 21:21:48
>
>   Modified:catalina/src/share/org/apache/catalina Manager.java
>catalina/src/share/org/apache/catalina/core
> StandardContext.java
>catalina/src/share/org/apache/catalina/session
> StandardManager.java
>   Log:
>   Refactoring parts of the code. In order for custom managers
(such as the clustering managers) to take advantage of the
background threads that are already implemented, it is better to
have the Manager interface to expose the backgroundProcess method.
That way the context can invoke any other manager in a similar way.
>   I opted for this way instead of using reflection. Yell if you
don't like it, and I will change it back.

-1.
You have to discuss this at least a little bit before making the
changes. It is unacceptable to make a change to the core interfaces without.

BTW, use a different editor, tweaks yours, or do tabs replacement (or
similar) in a separate commit: the diffs are unreadable.

Rémy


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session StandardManager.java

2004-01-12 Thread Remy Maucherat
[EMAIL PROTECTED] wrote:
fhanik  2004/01/11 21:21:48

  Modified:catalina/src/share/org/apache/catalina Manager.java
   catalina/src/share/org/apache/catalina/core
StandardContext.java
   catalina/src/share/org/apache/catalina/session
StandardManager.java
  Log:
  Refactoring parts of the code. In order for custom managers (such as the clustering 
managers) to take advantage of the background threads that are already implemented, it 
is better to have the Manager interface to expose the backgroundProcess method. That 
way the context can invoke any other manager in a similar way.
  I opted for this way instead of using reflection. Yell if you don't like it, and I 
will change it back.
-1.
You have to discuss this at least a little bit before making the 
changes. It is unacceptable to make a change to the core interfaces without.

BTW, use a different editor, tweaks yours, or do tabs replacement (or 
similar) in a separate commit: the diffs are unreadable.

Rémy

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session StandardManager.java

2004-01-11 Thread fhanik
fhanik  2004/01/11 21:21:48

  Modified:catalina/src/share/org/apache/catalina Manager.java
   catalina/src/share/org/apache/catalina/core
StandardContext.java
   catalina/src/share/org/apache/catalina/session
StandardManager.java
  Log:
  Refactoring parts of the code. In order for custom managers (such as the clustering 
managers) to take advantage of the background threads that are already implemented, it 
is better to have the Manager interface to expose the backgroundProcess method. That 
way the context can invoke any other manager in a similar way.
  I opted for this way instead of using reflection. Yell if you don't like it, and I 
will change it back.
  
  Revision  ChangesPath
  1.4   +11 -5 
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/Manager.java
  
  Index: Manager.java
  ===
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/Manager.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- Manager.java  9 Dec 2002 15:57:43 -   1.3
  +++ Manager.java  12 Jan 2004 05:21:48 -  1.4
  @@ -186,7 +186,7 @@
* Get a session from the recycled ones or create a new empty one.
* The PersistentManager manager does not need to create session data
* because it reads it from the Store.
  - */ 
  + */
   public Session createEmptySession();
   
   /**
  @@ -260,5 +260,11 @@
*/
   public void unload() throws IOException;
   
  +/**
  + * This method will be invoked by the context/container on a periodic
  + * basis and allows the manager to implement
  + * a method that executes periodic tasks, such as expiring sessions etc.
  + */
  +public void backgroundProcess();
   
   }
  
  
  
  1.105 +124 -125  
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardContext.java
  
  Index: StandardContext.java
  ===
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/core/StandardContext.java,v
  retrieving revision 1.104
  retrieving revision 1.105
  diff -u -r1.104 -r1.105
  --- StandardContext.java  5 Jan 2004 08:46:20 -   1.104
  +++ StandardContext.java  12 Jan 2004 05:21:48 -  1.105
  @@ -71,6 +71,7 @@
   import java.io.InputStreamReader;
   import java.io.ObjectOutputStream;
   import java.io.Serializable;
  +import java.lang.reflect.Method;
   import java.net.URLDecoder;
   import java.util.ArrayList;
   import java.util.HashMap;
  @@ -206,14 +207,14 @@
   /**
* The set of instantiated application event listener objects.
*/
  -private transient Object applicationEventListenersObjects[] = 
  +private transient Object applicationEventListenersObjects[] =
   new Object[0];
   
   
   /**
* The set of instantiated application lifecycle listener objects.
*/
  -private transient Object applicationLifecycleListenersObjects[] = 
  +private transient Object applicationLifecycleListenersObjects[] =
   new Object[0];
   
   
  @@ -228,12 +229,12 @@
* The application available flag for this Context.
*/
   private boolean available = false;
  -
  +
   /**
  - * The broadcaster that sends j2ee notifications. 
  + * The broadcaster that sends j2ee notifications.
*/
   private NotificationBroadcasterSupport broadcaster = null;
  -
  +
   /**
* The Locale to character set mapper for this application.
*/
  @@ -303,7 +304,7 @@
   private String displayName = null;
   
   
  -/** 
  +/**
* Override the default web xml location. ContextConfig is not configurable
* so the setter is not used.
*/
  @@ -373,7 +374,7 @@
   /**
* The mapper associated with this context.
*/
  -private org.apache.tomcat.util.http.mapper.Mapper mapper = 
  +private org.apache.tomcat.util.http.mapper.Mapper mapper =
   new org.apache.tomcat.util.http.mapper.Mapper();
   
   
  @@ -491,7 +492,7 @@
* The notification sequence number.
*/
   private long sequenceNumber = 0;
  -
  +
   /**
* The status code error pages for this web application, keyed by
* HTTP status code (as an Integer).
  @@ -622,7 +623,7 @@
   private long tldScanTime;
   
   /** Name of the engine. If null, the domain is used.
  - */ 
  + */
   private String engineName = null;
   private String j2EEApplication="none";
   private String j2EEServer="none";
  @@ -1307,7 +1308,7 @@
   
   }
   
  -
  +
   /**
* Set the context path for this Cont

Re: cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session StandardManager.java

2003-12-10 Thread Remy Maucherat
Amy Roh wrote:
Amy Roh wrote:

[EMAIL PROTECTED] wrote:
There doesn't seem many methods changing isValid to false. invalidate is
another one, and it calls expire. As long as all the methods which
invalidate the session right away expire them, it should be ok I think.
IMHO, not calling expire() because no method changes isValid to false
doesn't seem like a clean approach.  Moreover,
Well, where else to expire on access if the maximum interval was reached 
? I like it (but I didn't do it). Does it actually cause a bug ?

PersistentManagerBase.processExpires() keeps expire() making it not
consistent.
Maybe. However, this was because in 4.1.x, isValid didn't expire the 
session, and this code wasn't updated. When I merged all background 
processing threads, I simply did a cut & paste of the code.

Rémy



-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


Re: cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session StandardManager.java

2003-12-10 Thread Amy Roh
> Amy Roh wrote:
> > [EMAIL PROTECTED] wrote:
> >
> >> remm2003/12/05 01:28:55
> >>
> >>   Modified:catalina/src/share/org/apache/catalina/session
> >> StandardManager.java
> >>   Log:
> >>   - isValid already expires sessions, so backgroundProcess shouldn't
call
> >> expire again.
> >
> > isValid doesn't *always* expire session.
>  >
> > StandardSession.isValid() -
> >
> > public boolean isValid() {
> >
> > if (this.expiring){
> > return true;
> > }
> >
> > if (!this.isValid ) {
> > *** return false;
> > }
> >
> > if (maxInactiveInterval >= 0) {
> > long timeNow = System.currentTimeMillis();
> > int timeIdle = (int) ((timeNow - lastAccessedTime) / 1000L);
> > if (timeIdle >= maxInactiveInterval) {
> > *** expire(true);
> > }
> > }
> >
> > return (this.isValid);
> > }
> >
> > If StandardSession.isValid is false, then we want to expire the session.
> >  However, isValid() call doesn't get to expire(true) and just return
> > false.  So removing session.expire() from
> > StandardManager.processExpires() won't work all the time.  Am I missing
> > something?
>
> There doesn't seem many methods changing isValid to false. invalidate is
> another one, and it calls expire. As long as all the methods which
> invalidate the session right away expire them, it should be ok I think.

IMHO, not calling expire() because no method changes isValid to false
doesn't seem like a clean approach.  Moreover,
PersistentManagerBase.processExpires() keeps expire() making it not
consistent.

Amy
>
> Rémy
>
>
> -
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>
>


-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



Re: cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session StandardManager.java

2003-12-09 Thread Remy Maucherat
Amy Roh wrote:
[EMAIL PROTECTED] wrote:

remm2003/12/05 01:28:55

  Modified:catalina/src/share/org/apache/catalina/session
StandardManager.java
  Log:
  - isValid already expires sessions, so backgroundProcess shouldn't call
expire again.
isValid doesn't *always* expire session.
>
StandardSession.isValid() -

public boolean isValid() {

if (this.expiring){
return true;
}
if (!this.isValid ) {
*** return false;
}
if (maxInactiveInterval >= 0) {
long timeNow = System.currentTimeMillis();
int timeIdle = (int) ((timeNow - lastAccessedTime) / 1000L);
if (timeIdle >= maxInactiveInterval) {
*** expire(true);
}
}
return (this.isValid);
}
If StandardSession.isValid is false, then we want to expire the session. 
 However, isValid() call doesn't get to expire(true) and just return 
false.  So removing session.expire() from 
StandardManager.processExpires() won't work all the time.  Am I missing 
something?
There doesn't seem many methods changing isValid to false. invalidate is 
another one, and it calls expire. As long as all the methods which 
invalidate the session right away expire them, it should be ok I think.

Rémy

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


Re: cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session StandardManager.java

2003-12-09 Thread Amy Roh
[EMAIL PROTECTED] wrote:

remm2003/12/05 01:28:55

  Modified:catalina/src/share/org/apache/catalina/session
StandardManager.java
  Log:
  - isValid already expires sessions, so backgroundProcess shouldn't call
expire again.
isValid doesn't *always* expire session.

StandardSession.isValid() -

public boolean isValid() {

if (this.expiring){
return true;
}
if (!this.isValid ) {
*** return false;
}
if (maxInactiveInterval >= 0) {
long timeNow = System.currentTimeMillis();
int timeIdle = (int) ((timeNow - lastAccessedTime) / 1000L);
if (timeIdle >= maxInactiveInterval) {
*** expire(true);
}
}
return (this.isValid);
}
If StandardSession.isValid is false, then we want to expire the session. 
 However, isValid() call doesn't get to expire(true) and just return 
false.  So removing session.expire() from 
StandardManager.processExpires() won't work all the time.  Am I missing 
something?

Thanks,
Amy
  - Bug 25234, submitted by Paul Harvey.
  
  Revision  ChangesPath
  1.16  +5 -11 jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/StandardManager.java
  
  Index: StandardManager.java
  ===
  RCS file: /home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/StandardManager.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- StandardManager.java	29 Nov 2003 18:06:35 -	1.15
  +++ StandardManager.java	5 Dec 2003 09:28:55 -	1.16
  @@ -813,13 +813,7 @@
   for (int i = 0; i < sessions.length; i++) {
   StandardSession session = (StandardSession) sessions[i];
   if (!session.isValid()) {
  -try {
  -expiredSessions++;
  -session.expire();
  -} catch (Throwable t) {
  -log.error(sm.getString
  -  ("standardManager.expireException"), t);
  -}
  +expiredSessions++;
   }
   }
   long timeEnd = System.currentTimeMillis();
  
  
  

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]




-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session StandardManager.java

2003-12-05 Thread remm
remm2003/12/05 01:28:55

  Modified:catalina/src/share/org/apache/catalina/session
StandardManager.java
  Log:
  - isValid already expires sessions, so backgroundProcess shouldn't call
expire again.
  - Bug 25234, submitted by Paul Harvey.
  
  Revision  ChangesPath
  1.16  +5 -11 
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/StandardManager.java
  
  Index: StandardManager.java
  ===
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/StandardManager.java,v
  retrieving revision 1.15
  retrieving revision 1.16
  diff -u -r1.15 -r1.16
  --- StandardManager.java  29 Nov 2003 18:06:35 -  1.15
  +++ StandardManager.java  5 Dec 2003 09:28:55 -   1.16
  @@ -813,13 +813,7 @@
   for (int i = 0; i < sessions.length; i++) {
   StandardSession session = (StandardSession) sessions[i];
   if (!session.isValid()) {
  -try {
  -expiredSessions++;
  -session.expire();
  -} catch (Throwable t) {
  -log.error(sm.getString
  -  ("standardManager.expireException"), t);
  -}
  +expiredSessions++;
   }
   }
   long timeEnd = System.currentTimeMillis();
  
  
  

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session StandardManager.java StandardSession.java

2003-11-29 Thread remm
remm2003/11/29 10:06:35

  Modified:catalina/src/share/org/apache/catalina/session
StandardManager.java StandardSession.java
  Log:
  - private -> protected. A lot of this package should be protected, as there could
be an good use case to reuse code by extending.
  - No functional change.
  
  Revision  ChangesPath
  1.15  +12 -12
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/StandardManager.java
  
  Index: StandardManager.java
  ===
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/StandardManager.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- StandardManager.java  9 Sep 2003 15:27:00 -   1.14
  +++ StandardManager.java  29 Nov 2003 18:06:35 -  1.15
  @@ -145,7 +145,7 @@
   /**
* The descriptive information about this implementation.
*/
  -private static final String info = "StandardManager/1.0";
  +protected static final String info = "StandardManager/1.0";
   
   
   /**
  @@ -157,7 +157,7 @@
   /**
* The maximum number of active Sessions allowed, or -1 for no limit.
*/
  -private int maxActiveSessions = -1;
  +protected int maxActiveSessions = -1;
   
   
   /**
  @@ -174,13 +174,13 @@
* temporary working directory provided by our context, available via
* the javax.servlet.context.tempdir context attribute.
*/
  -private String pathname = "SESSIONS.ser";
  +protected String pathname = "SESSIONS.ser";
   
   
   /**
* Has this component been started yet?
*/
  -private boolean started = false;
  +protected boolean started = false;
   
   
   int rejectedSessions=0;
  @@ -388,7 +388,7 @@
*  found during the reload
* @exception IOException if an input/output error occurs
*/
  -private void doLoad() throws ClassNotFoundException, IOException {
  +protected void doLoad() throws ClassNotFoundException, IOException {
   if (log.isDebugEnabled())
   log.debug("Start: Loading persisted sessions");
   
  @@ -527,7 +527,7 @@
*
* @exception IOException if an input/output error occurs
*/
  -private void doUnload() throws IOException {   
  +protected void doUnload() throws IOException {   
   
   if (log.isDebugEnabled())
   log.debug("Unloading persisted sessions");
  @@ -773,14 +773,14 @@
   }
   
   
  -//  Private Methods
  +// -- Protected Methods
   
   
   /**
* Return a File object representing the pathname to our
* persistence file, if any.
*/
  -private File file() {
  +protected File file() {
   
   if ((pathname == null) || (pathname.length() == 0))
   return (null);
  
  
  
  1.26  +37 -37
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/StandardSession.java
  
  Index: StandardSession.java
  ===
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/StandardSession.java,v
  retrieving revision 1.25
  retrieving revision 1.26
  diff -u -r1.25 -r1.26
  --- StandardSession.java  25 Nov 2003 07:56:27 -  1.25
  +++ StandardSession.java  29 Nov 2003 18:06:35 -  1.26
  @@ -149,14 +149,14 @@
* The dummy attribute value serialized when a NotSerializableException is
* encountered in writeObject().
*/
  -private static final String NOT_SERIALIZED =
  +protected static final String NOT_SERIALIZED =
   "___NOT_SERIALIZABLE_EXCEPTION___";
   
   
   /**
* The collection of user data attributes associated with this Session.
*/
  -private HashMap attributes = new HashMap();
  +protected HashMap attributes = new HashMap();
   
   
   /**
  @@ -164,7 +164,7 @@
* if any.  NOTE:  This value is not included in the serialized
* version of this object.
*/
  -private transient String authType = null;
  +protected transient String authType = null;
   
   
   /**
  @@ -175,13 +175,13 @@
* computed dynamically the first time it is needed, or after
* a session reload (since it is declared transient).
*/
  -private transient Method containerEventMethod = null;
  +protected transient Method containerEventMethod = null;
   
   
   /**
* The method signature for the fireContainerEvent method.
*/
  -private static final Class containerEventTypes[] =
  +protected static final Class containerEventTypes[] =
   { String.class, Object.class };
   
   
  @@ -1

cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session StandardManager.java StandardSession.java

2003-08-26 Thread remm
remm2003/08/26 07:18:54

  Modified:catalina/src/share/org/apache/catalina/session
StandardManager.java StandardSession.java
  Log:
  - Revert my previous fix. I think it could cause sessions to not be invalidated
properly.
  - Instead, don't check for validity when activating and passivating.
  
  Revision  ChangesPath
  1.13  +6 -8  
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/StandardManager.java
  
  Index: StandardManager.java
  ===
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/StandardManager.java,v
  retrieving revision 1.12
  retrieving revision 1.13
  diff -u -r1.12 -r1.13
  --- StandardManager.java  26 Aug 2003 14:11:04 -  1.12
  +++ StandardManager.java  26 Aug 2003 14:18:54 -  1.13
  @@ -449,10 +449,8 @@
   StandardSession session = getNewSession();
   session.readObjectData(ois);
   session.setManager(this);
  -if (session.isValid()) {
  -sessions.put(session.getId(), session);
  -session.activate();
  -}
  +sessions.put(session.getId(), session);
  +session.activate();
   }
   } catch (ClassNotFoundException e) {
 log.error(sm.getString("standardManager.loading.cnfe", e), e);
  
  
  
  1.21  +18 -6 
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/StandardSession.java
  
  Index: StandardSession.java
  ===
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/StandardSession.java,v
  retrieving revision 1.20
  retrieving revision 1.21
  diff -u -r1.20 -r1.21
  --- StandardSession.java  19 Aug 2003 00:49:58 -  1.20
  +++ StandardSession.java  26 Aug 2003 14:18:54 -  1.21
  @@ -731,7 +731,7 @@
   HttpSessionEvent event = null;
   String keys[] = keys();
   for (int i = 0; i < keys.length; i++) {
  -Object attribute = getAttribute(keys[i]);
  +Object attribute = getAttributeInternal(keys[i]);
   if (attribute instanceof HttpSessionActivationListener) {
   if (event == null)
   event = new HttpSessionEvent(this);
  @@ -753,7 +753,7 @@
   HttpSessionEvent event = null;
   String keys[] = keys();
   for (int i = 0; i < keys.length; i++) {
  -Object attribute = getAttribute(keys[i]);
  +Object attribute = getAttributeInternal(keys[i]);
   if (attribute instanceof HttpSessionActivationListener) {
   if (event == null)
   event = new HttpSessionEvent(this);
  @@ -1571,6 +1571,18 @@
   String results[] = new String[0];
   synchronized (attributes) {
   return ((String[]) attributes.keySet().toArray(results));
  +}
  +
  +}
  +
  +
  +/**
  + * Return the value of an attribute without a check for validity.
  + */
  +private Object getAttributeInternal(String name) {
  +
  +synchronized (attributes) {
  +return (attributes.get(name));
   }
   
   }
  
  
  

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session StandardManager.java

2003-08-26 Thread remm
remm2003/08/26 07:11:04

  Modified:catalina/src/share/org/apache/catalina/session
StandardManager.java
  Log:
  - Don't restore invalid sessions. There's no apparent side effect to that. This
fixes bug 22695 (the sessions were really invalid after all if the exception
occurred).
  
  Revision  ChangesPath
  1.12  +8 -6  
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/StandardManager.java
  
  Index: StandardManager.java
  ===
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/StandardManager.java,v
  retrieving revision 1.11
  retrieving revision 1.12
  diff -u -r1.11 -r1.12
  --- StandardManager.java  19 Aug 2003 00:49:58 -  1.11
  +++ StandardManager.java  26 Aug 2003 14:11:04 -  1.12
  @@ -449,8 +449,10 @@
   StandardSession session = getNewSession();
   session.readObjectData(ois);
   session.setManager(this);
  -sessions.put(session.getId(), session);
  -session.activate();
  +if (session.isValid()) {
  +sessions.put(session.getId(), session);
  +session.activate();
  +}
   }
   } catch (ClassNotFoundException e) {
 log.error(sm.getString("standardManager.loading.cnfe", e), e);
  
  
  

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session StandardManager.java

2003-03-17 Thread costin
costin  2003/03/17 11:25:37

  Modified:catalina/src/share/org/apache/catalina/session
StandardManager.java
  Log:
  Registration.
  
  Less verbosity.
  
  Revision  ChangesPath
  1.7   +26 -16
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/StandardManager.java
  
  Index: StandardManager.java
  ===
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/StandardManager.java,v
  retrieving revision 1.6
  retrieving revision 1.7
  diff -u -r1.6 -r1.7
  --- StandardManager.java  9 Jan 2003 19:09:33 -   1.6
  +++ StandardManager.java  17 Mar 2003 19:25:37 -  1.7
  @@ -85,6 +85,9 @@
   import java.util.ArrayList;
   import java.util.Iterator;
   import javax.servlet.ServletContext;
  +import javax.management.MBeanRegistration;
  +import javax.management.ObjectName;
  +import javax.management.MBeanServer;
   import org.apache.catalina.Container;
   import org.apache.catalina.Context;
   import org.apache.catalina.Globals;
  @@ -95,8 +98,11 @@
   import org.apache.catalina.Loader;
   import org.apache.catalina.Manager;
   import org.apache.catalina.Session;
  +import org.apache.catalina.core.StandardContext;
  +import org.apache.catalina.core.StandardHost;
   import org.apache.catalina.util.CustomObjectInputStream;
   import org.apache.catalina.util.LifecycleSupport;
  +import org.apache.commons.modeler.Registry;
   
   
   /**
  @@ -116,7 +122,8 @@
   
   public class StandardManager
   extends ManagerBase
  -implements Lifecycle, PropertyChangeListener, Runnable {
  +implements Lifecycle, PropertyChangeListener, Runnable 
  + {
   
   //  Security Classes
   private class PrivilegedDoLoad
  @@ -194,7 +201,6 @@
*/
   private boolean started = false;
   
  -
   /**
* The background thread.
*/
  @@ -469,8 +475,7 @@
   classLoader = loader.getClassLoader();
   if (classLoader != null) {
   if (log.isDebugEnabled())
  -log.debug("Creating custom object input stream for class loader 
"
  -+ classLoader);
  +log.debug("Creating custom object input stream for class loader 
");
   ois = new CustomObjectInputStream(bis, classLoader);
   } else {
   if (log.isDebugEnabled())
  @@ -714,7 +719,6 @@
   
   }
   
  -
   /**
* Prepare for the beginning of active use of the public methods of this
* component.  This method should be called after configure(),
  @@ -725,13 +729,14 @@
*/
   public void start() throws LifecycleException {
   
  -if (log.isDebugEnabled())
  -log.debug("Starting");
  -
  +if( ! initialized )
  +init();
  +
   // Validate and update our current component state
  -if (started)
  -throw new LifecycleException
  -(sm.getString("standardManager.alreadyStarted"));
  +if (started) {
  +log.info(sm.getString("standardManager.alreadyStarted"));
  +return;
  +}
   lifecycle.fireLifecycleEvent(START_EVENT, null);
   started = true;
   
  @@ -767,7 +772,7 @@
   
   if (log.isDebugEnabled())
   log.debug("Stopping");
  -
  +
   // Validate and update our current component state
   if (!started)
   throw new LifecycleException
  @@ -801,6 +806,9 @@
   // Require a new random number generator if we are restarted
   this.random = null;
   
  +if( initialized ) {
  +destroy();
  +}
   }
   
   
  @@ -965,4 +973,6 @@
   }
   
   }
  +
  +
   }
  
  
  

-
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session StandardManager.java

2002-12-09 Thread remm
remm2002/12/09 23:46:38

  Modified:catalina/src/share/org/apache/catalina/session
StandardManager.java
  Log:
  - Remove getNewSession (moved to the superclass).
  
  Revision  ChangesPath
  1.5   +4 -12 
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/StandardManager.java
  
  Index: StandardManager.java
  ===
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/StandardManager.java,v
  retrieving revision 1.4
  retrieving revision 1.5
  diff -u -r1.4 -r1.5
  --- StandardManager.java  5 Dec 2002 14:05:12 -   1.4
  +++ StandardManager.java  10 Dec 2002 07:46:37 -  1.5
  @@ -399,14 +399,6 @@
   
   
   /**
  - * Get new session class to be used in the doLoad() method.
  - */
  -protected StandardSession getNewSession() {
  -return new StandardSession(this);
  -}
  -
  -
  -/**
* Load any currently active sessions that were previously unloaded
* to the appropriate persistence mechanism, if any.  If persistence is not
* supported, this method returns without doing anything.
  
  
  

--
To unsubscribe, e-mail:   
For additional commands, e-mail: 




cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session StandardManager.java

2002-12-05 Thread remm
remm2002/12/05 06:05:12

  Modified:catalina/src/share/org/apache/catalina/session
StandardManager.java
  Log:
  - Allow specifying the implementation class for sessions when deserializing
(obviously, JG doesn't like StandardSession instances).
  
  Revision  ChangesPath
  1.4   +16 -7 
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/StandardManager.java
  
  Index: StandardManager.java
  ===
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/StandardManager.java,v
  retrieving revision 1.3
  retrieving revision 1.4
  diff -u -r1.3 -r1.4
  --- StandardManager.java  18 Oct 2002 21:39:57 -  1.3
  +++ StandardManager.java  5 Dec 2002 14:05:12 -   1.4
  @@ -396,7 +396,16 @@
   doLoad();
   }   
   }
  -
  +
  +
  +/**
  + * Get new session class to be used in the doLoad() method.
  + */
  +protected StandardSession getNewSession() {
  +return new StandardSession(this);
  +}
  +
  +
   /**
* Load any currently active sessions that were previously unloaded
* to the appropriate persistence mechanism, if any.  If persistence is not
  @@ -466,11 +475,11 @@
   if (debug >= 1)
   log("Loading " + n + " persisted sessions");
   for (int i = 0; i < n; i++) {
  -StandardSession session = new StandardSession(this);
  +StandardSession session = getNewSession();
   session.readObjectData(ois);
   session.setManager(this);
   sessions.put(session.getId(), session);
  -((StandardSession) session).activate();
  +session.activate();
   }
   } catch (ClassNotFoundException e) {
 log(sm.getString("standardManager.loading.cnfe", e), e);
  
  
  

--
To unsubscribe, e-mail:   
For additional commands, e-mail: 




cvs commit: jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session StandardManager.java

2002-10-10 Thread remm

remm2002/10/10 23:58:20

  Modified:catalina/src/share/org/apache/catalina/session
StandardManager.java
  Log:
  - Allow disabling persistence using a blank String (BZ 13513).
  
  Revision  ChangesPath
  1.2   +5 -5  
jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/StandardManager.java
  
  Index: StandardManager.java
  ===
  RCS file: 
/home/cvs/jakarta-tomcat-catalina/catalina/src/share/org/apache/catalina/session/StandardManager.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- StandardManager.java  18 Jul 2002 16:47:53 -  1.1
  +++ StandardManager.java  11 Oct 2002 06:58:19 -  1.2
  @@ -721,7 +721,7 @@
*/
   private File file() {
   
  -if (pathname == null)
  +if ((pathname == null) || (pathname.length() == 0))
   return (null);
   File file = new File(pathname);
   if (!file.isAbsolute()) {
  
  
  

--
To unsubscribe, e-mail:   
For additional commands, e-mail: