DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=7850>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=7850

Can not access env-entries by using JNDI when Tomcat de-serializes sesssions

           Summary: Can not access env-entries by using JNDI when Tomcat de-
                    serializes sesssions
           Product: Tomcat 4
           Version: 4.0.3 Final
          Platform: PC
               URL: http://http://
        OS/Version: Linux
            Status: NEW
          Severity: Critical
          Priority: Other
         Component: Catalina
        AssignedTo: [EMAIL PROTECTED]
        ReportedBy: [EMAIL PROTECTED]


SORRY !!! - I resend the bug report. The previous bug report had a "bug". I
wanted to say: "lookup throws an exception", instead ·of "lookup returns null".

* Short description
  -----------------

When sessions are de-serialized (from SESSIONS.ser), *just in that moment*, it
is not possible to access env-entries by using JNDI (lookup throws an exception).

* Full description
  ----------------

My web application (distributable) inserts a serializable object of type X in
the user session. The corresponding class (X) has a static block which
initializes a static attribute by reading an env-entry (using JNDI). Of course,
I know that static attributes are not saved for a serializable class. In a
normal scenario, all works fine. OK ?

For the explanation, assume that there is only one active session. If I stop
Tomcat (shutdown.sh), the object in the session is serialized and stored in
$TOMCAT_HOME/work/localhost/MyWebApplication/SESSIONS.ser. If now I start Tomcat
again (startup.sh), Tomcat de-serializes the object from SESSIONS.ser. Just
before the de-serialization occurs, the class loader loads the class X (still
not loaded at this moment), and the static block is executed. The static block
tries to read an env-entry, and the lookup operation throws an exception (it
should return an String). In other words, when Tomcat starts and re-creates
sessions from SESSIONS.ser, *just in that moment*, env-entries are still not
initialized. If now I invalidate the session and reload the web application
(with the Tomcat manager application), all works fine (the static block is
executed again the first time the class is referenced, and accesses env-entries
without problems). I have checked this scenario inserting System.out.println's
in the static block and having a look at catalina.log. Note that this
explanation has nothing to do with the use of static block. This error would
still occur if I redefine serialization for class X, by redefining readObject,
and try to access env-entries from it. Summing up, the problem is that
env-entries are not initialized when de-serialization of sessions occur.

If you are curious why I use a static block in class X, which initializes a
static attribute, the reason it is that this block initializes a configuration
parameter which is the same for all instances.

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

Reply via email to