Well -

It has been three consecutive days without a problem! It looks as though this bit of code did the trick. Before this code, every morning javamonitor would be stuck because of one bad instance.

So far no problems and I am now sleeping much better, let alone not being obsessed with checking
the javamonitor every darn hour.

I still have no idea why my session was/is throwing an exception. And, at this point, I don't care as
I can sleep again.

Thanks again,
James Cicenia


On Mar 5, 2007, at 12:03 PM, Gary Teter wrote:

My best guess is that an exception is being thrown during session check-in/check-out or sleep. Here's some code that I use in Application.java to prevent this. I believe Wonder also has some of these fixes.

Application.java:

public WOResponse handleActionRequestError(WORequest aRequest, Exception exception, String reason, WORequestHandler aHandler, String actionClassName, String actionName, Class actionClass, WOAction actionInstance) {
        if (actionInstance != null) {
return handleException(exception, actionInstance.context ());
        } else {
            //return super.handleException(exception, null);
            return handleException(exception, null);
        }
    }


    /*
Adapted from http://wocode.com/cgi-bin/WebObjects/WOCode.woa/ wa/ShareCodeItem?itemId=322 See also http://www.omnigroup.com/mailman/archive/webobjects- dev/2003-November/037140.html
     */
    public WOContext createContextForRequest(WORequest request) {
        //new RuntimeException().printStackTrace();
        /* setup user mutable dictionary to available for the
        rest of this request. request.userInfo() always
        will return a immutable dictionary.
        */
        NSMutableDictionary contextDict = new NSMutableDictionary();
        NSDictionary userInfo = request.userInfo();
        if (userInfo == null) {
            /* from scratch */
request.setUserInfo(new NSDictionary(contextDict, "contextDict"));
        } else {
            /* incorporate existing userInfo */
NSMutableDictionary mutableUserInfo = userInfo.mutableClone(); mutableUserInfo.setObjectForKey(contextDict, "contextDict");
            request.setUserInfo(mutableUserInfo);
        }
        WOContext context = super.createContextForRequest(request);
        //WOContext context = new WOContext(request);
        contextDict.setObjectForKey(context, "context");
        return context;
    }

    public WOResponse dispatchRequest(WORequest request) {
        WOResponse response = null;
        try {
            response = super.dispatchRequest(request);
        } finally {
            WOContext context = _contextFromRequest(request);
            if (context != null && context.hasSession()) {
                try {
//NSLog.debug.appendln("dispatchRequest() - checking in session for context " + context);
                    context._session()._sleepInContext(context);
                    sessionStore().checkInSessionForContext(context);
                    context._setSession(null);
//NSLog.debug.appendln("dispatchRequest() - finished checking in session, context.hasSession() is: " + context.hasSession());
                } catch (Exception e) {
NSLog.debug.appendln("Caught exception checking in session: " + e);
                }
            }
        }
        return response;
    }

    private WOContext _contextFromRequest(WORequest r) {
        NSDictionary userInfo = r.userInfo();
        if (hasElements(userInfo)) {
NSDictionary contextDict = (NSDictionary) userInfo.objectForKey("contextDict");
            if (hasElements(contextDict)) {
                return (WOContext)contextDict.objectForKey("context");
            }
        }
        return null;
    }


    /*
Adapted from http://wocode.com/cgi-bin/WebObjects/WOCode.woa/ wa/ShareCodeItem?itemId=322 See also http://www.omnigroup.com/mailman/archive/webobjects- dev/2003-November/037140.html
     */
    public void saveSessionForContext(WOContext context) {
//NSLog.debug.appendln("Application.saveSessionForContext() - howdy! context.hasSession() is: " + context.hasSession());
        try {
            super.saveSessionForContext(context);
        } catch (Throwable t) {
NSLog.debug.appendln("Caught exception saving session: " + t);
            t.printStackTrace();
            try {
                sessionStore().checkInSessionForContext(context);
            } catch (Exception e) {
NSLog.debug.appendln("Caught exception checking in session: " + e);
            }
        }
//NSLog.debug.appendln("Application.saveSessionForContext() - howdy! context.hasSession() is: " + context.hasSession() + ", context: " + context);
    }


    public static boolean hasElements(NSDictionary dictionary) {
        return (dictionary != null && dictionary.count() > 0);
    }


On Mar 5, 2007, at 7:59 AM, James Cicenia wrote:

OK-

I think I got the correct thread dump from a frozen instance this morning:

What does it all mean?

Thanks
James Cicenia


Full thread dump Java HotSpot(TM) Server VM (1.5.0_06-68 mixed mode):


"WorkerThread15" prio=5 tid=0x00622ba0 nid=0x1834a00 in Object.wait () [0xb161c000..0xb161cd10]
        at java.lang.Object.wait(Native Method)
- waiting on <0x07f3c500> (a com.webobjects.appserver.WOSessionStore$TimeoutEntry)
        at java.lang.Object.wait(Object.java:474)
at com.webobjects.appserver.WOSessionStore.checkOutSessionWithID (WOSessionStore.java:207) - locked <0x07f3c500> (a com.webobjects.appserver.WOSessionStore $TimeoutEntry) at com.webobjects.appserver.WOApplication.restoreSessionWithID (WOApplication.java:1546)
        at com.webobjects.appserver.WOContext.session(WOContext.java:248)
        at com.webobjects.appserver.WOAction.session(WOAction.java:138)
        at com.hb.DirectAction.showCategoryAction(DirectAction.java:119)

"WorkerThread14" prio=5 tid=0x006226f0 nid=0x1834600 in Object.wait () [0xb159b000..0xb159bd10]
        at java.lang.Object.wait(Native Method)
- waiting on <0x07f3c750> (a com.webobjects.appserver.WOSessionStore$TimeoutEntry)
        at java.lang.Object.wait(Object.java:474)
at com.webobjects.appserver.WOSessionStore.checkOutSessionWithID (WOSessionStore.java:207) - locked <0x07f3c750> (a com.webobjects.appserver.WOSessionStore $TimeoutEntry) at com.webobjects.appserver.WOApplication.restoreSessionWithID (WOApplication.java:1546)
        at com.webobjects.appserver.WOContext.session(WOContext.java:248)
        at com.webobjects.appserver.WOAction.session(WOAction.java:138)
        at com.hb.DirectAction.showCategoryAction(DirectAction.java:119)

"WorkerThread13" prio=5 tid=0x00622240 nid=0x1834200 in Object.wait () [0xb151a000..0xb151ad10]
        at java.lang.Object.wait(Native Method)
- waiting on <0x07f3c750> (a com.webobjects.appserver.WOSessionStore$TimeoutEntry)
        at java.lang.Object.wait(Object.java:474)
at com.webobjects.appserver.WOSessionStore.checkOutSessionWithID (WOSessionStore.java:207) - locked <0x07f3c750> (a com.webobjects.appserver.WOSessionStore $TimeoutEntry) at com.webobjects.appserver.WOApplication.restoreSessionWithID (WOApplication.java:1546)
        at com.webobjects.appserver.WOContext.session(WOContext.java:248)
        at com.webobjects.appserver.WOAction.session(WOAction.java:138)
        at com.hb.DirectAction.showCategoryAction(DirectAction.java:119)

"WorkerThread12" prio=5 tid=0x00621d90 nid=0x1833e00 in Object.wait () [0xb1499000..0xb1499d10]
        at java.lang.Object.wait(Native Method)
- waiting on <0x07f3c750> (a com.webobjects.appserver.WOSessionStore$TimeoutEntry)
        at java.lang.Object.wait(Object.java:474)
at com.webobjects.appserver.WOSessionStore.checkOutSessionWithID (WOSessionStore.java:207) - locked <0x07f3c750> (a com.webobjects.appserver.WOSessionStore $TimeoutEntry) at com.webobjects.appserver.WOApplication.restoreSessionWithID (WOApplication.java:1546)
        at com.webobjects.appserver.WOContext.session(WOContext.java:248)
        at com.webobjects.appserver.WOAction.session(WOAction.java:138)
        at com.hb.DirectAction.showCategoryAction(DirectAction.java:119)

"WorkerThread11" prio=5 tid=0x00621920 nid=0x1833600 in Object.wait () [0xb1418000..0xb1418d10]
        at java.lang.Object.wait(Native Method)
- waiting on <0x07f3c750> (a com.webobjects.appserver.WOSessionStore$TimeoutEntry)
        at java.lang.Object.wait(Object.java:474)
at com.webobjects.appserver.WOSessionStore.checkOutSessionWithID (WOSessionStore.java:207) - locked <0x07f3c750> (a com.webobjects.appserver.WOSessionStore $TimeoutEntry) at com.webobjects.appserver.WOApplication.restoreSessionWithID (WOApplication.java:1546)
        at com.webobjects.appserver.WOContext.session(WOContext.java:248)
        at com.webobjects.appserver.WOAction.session(WOAction.java:138)
        at com.hb.DirectAction.showCategoryAction(DirectAction.java:119)

"WorkerThread10" prio=5 tid=0x006215c0 nid=0x1833200 in Object.wait () [0xb1397000..0xb1397d10]
        at java.lang.Object.wait(Native Method)
- waiting on <0x07f3c500> (a com.webobjects.appserver.WOSessionStore$TimeoutEntry)
        at java.lang.Object.wait(Object.java:474)
at com.webobjects.appserver.WOSessionStore.checkOutSessionWithID (WOSessionStore.java:207) - locked <0x07f3c500> (a com.webobjects.appserver.WOSessionStore $TimeoutEntry) at com.webobjects.appserver.WOApplication.restoreSessionWithID (WOApplication.java:1546)
        at com.webobjects.appserver.WOContext.session(WOContext.java:248)
        at com.webobjects.appserver.WOAction.session(WOAction.java:138)
        at com.hb.DirectAction.showCategoryAction(DirectAction.java:119)

"WorkerThread8" prio=5 tid=0x00620c50 nid=0x1832e00 in Object.wait () [0xb1295000..0xb1295d10]
        at java.lang.Object.wait(Native Method)
- waiting on <0x07f3c500> (a com.webobjects.appserver.WOSessionStore$TimeoutEntry)
        at java.lang.Object.wait(Object.java:474)
at com.webobjects.appserver.WOSessionStore.checkOutSessionWithID (WOSessionStore.java:207) - locked <0x07f3c500> (a com.webobjects.appserver.WOSessionStore $TimeoutEntry) at com.webobjects.appserver.WOApplication.restoreSessionWithID (WOApplication.java:1546)
        at com.webobjects.appserver.WOContext.session(WOContext.java:248)
        at com.webobjects.appserver.WOAction.session(WOAction.java:138)
        at com.hb.DirectAction.showCategoryAction(DirectAction.java:119)


"Finalizer" daemon prio=8 tid=0x006083f0 nid=0x1813400 in Object.wait() [0xb0a04000..0xb0a04d10]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x073cba88> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:116)
        - locked <0x073cba88> (a java.lang.ref.ReferenceQueue$Lock)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:132)
        at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:159)

"Reference Handler" daemon prio=10 tid=0x00607ff0 nid=0x1813000 in Object.wait() [0xb0983000..0xb0983d10]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x073cbb08> (a java.lang.ref.Reference$Lock)
        at java.lang.Object.wait(Object.java:474)
        at java.lang.ref.Reference$ReferenceHandler.run(Reference.java:116)
        - locked <0x073cbb08> (a java.lang.ref.Reference$Lock)

"main" prio=5 tid=0x00601620 nid=0x1804a00 in Object.wait() [0xb07ff000..0xb08000dc]
        at java.lang.Object.wait(Native Method)
        - waiting on <0x06c34270> (a java.lang.Thread)
        at java.lang.Thread.join(Thread.java:1113)
        - locked <0x06c34270> (a java.lang.Thread)
        at java.lang.Thread.join(Thread.java:1166)
at com.webobjects.appserver.WOApplication.run(WOApplication.java: 918) at com.webobjects.appserver.WOApplication.main(WOApplication.java: 324)
        at com.hb.Application.main(Application.java:70)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke (NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke (DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at com.webobjects._bootstrap.WOBootstrap.main(WOBootstrap.java:71)

"VM Thread" prio=9 tid=0x006077c0 nid=0x1812c00 runnable

"VM Periodic Task Thread" prio=9 tid=0x0060b360 nid=0x1819400 waiting on condition

"Exception Catcher Thread" prio=10 tid=0x00601840 nid=0x1805200 runnable


--
WireHose: Smart metadata and personalization for WebObjects.
http://wirehose.com/



_______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      ([email protected])
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

This email sent to [email protected]

Reply via email to