Thanks Chuck,

no OutOfMemory errors (at least in the log) 
and no override of sleep()

but we do override terminate()

        @Override
        public void terminate() {
                log.info("TERMINATE " + sessionID());
                 
                ec().lock();
                try {
                        if (cart != null && shouldDeleteCart) {
                                log.debug("Deleting cart " + sessionID());
                                int saveCounter = 0;
                                do {
                                        if (cart.cleanAll()) {
                                                ec().deleteObject(cart);
                                        }
                                        saveCounter++;
                                } while (!save() && saveCounter <= 
Application.SAVE_ATTEMPTS);
                        }
                } catch (Exception e) {
                        e.printStackTrace();
                }
                ec().unlock();
                
                log.info("Terminating session with ID:" + sessionID());
                super.terminate();
        }


ec() simply returns defaultEditingContext() (it's an ERXSession subclass)

and save() is this:

        public boolean save() {
                boolean hasSaved = false;
                EOEditingContext editingContext = ec();
                try {
                        editingContext.saveChanges();
                        hasSaved = true;
                        //Thrown for each eo that fails to save.
                } catch (EOGeneralAdaptorException saveException) {
                        log.error("/*** OPTIMISTIC LOCKING FAILURE ***/ 
"+sessionID());
                        log.error(saveException.getMessage());
                        editingContext.revert();
                }
                return hasSaved;
        }

This method makes me nervous, I don't trust it very much…

Also I'm not sure about the explicit lock and unlock in the terminate method 
but since it's not in a R-R loop it might make sense to explicitly lock the ec, 
or not?


Matteo

On 19/mar/2013, at 18:51, Chuck Hill <ch...@global-village.net> wrote:

> Hi Matteo,
> 
> You have one or more Zombie (aka Immortal) Sessions, as shown by stack traces 
> like this:
> "WorkerThread11" prio=10 tid=0x0000000041848800 nid=0x1010 in Object.wait() 
> [0x00007f16f7cfa000]
>   java.lang.Thread.State: WAITING (on object monitor)
>       at java.lang.Object.wait(Native Method)
>       - waiting on <0x00000000d120b328> (a 
> com.webobjects.appserver.WOSessionStore$TimeoutEntry)
>       at java.lang.Object.wait(Object.java:485)
>       at 
> com.webobjects.appserver.WOSessionStore.checkOutSessionWithID(WOSessionStore.java:191)
>       - locked <0x00000000d120b328> (a 
> com.webobjects.appserver.WOSessionStore$TimeoutEntry)
>       at 
> com.webobjects.appserver.WOApplication.restoreSessionWithID(WOApplication.java:1913)
>       at 
> er.extensions.appserver.ERXApplication.restoreSessionWithID(ERXApplication.java:2403)
>       at 
> er.extensions.appserver.ERXWOContext.existingSession(ERXWOContext.java:57)
>       at er.extensions.appserver.ERXWOContext.hasSession(ERXWOContext.java:69)
>       at com.webobjects.appserver.WOAction.existingSession(WOAction.java:190)
>       at com.tla.calendar.DirectAction.goToAction(DirectAction.java:454)
> 
> 
> This likely has one of two causes:
> 1. The application is getting OutOfMemory errors, which can leave the session 
> store in an insane state
> 2. The app is throwing an exception from sleep() in Session.  If you 
> overrride sleep() it should use a try...finally block
> 
> public void sleep() {
>       try {
>               // Your code here!
>       } finally {
>               super.sleep();
>       }
> }
> 
> 
> Chuck
> 
> 
> 
> On 2013-03-19, at 9:38 AM, Altera WO Team wrote:
> 
>> Hi all,
>> 
>> I'm having a strange issue on a WO installation on EC2 (oracle jvm).
>> Same strange application which had immortal sessions… 
>> 
>> Sometimes (quite rarely) a bounced application (put in refuse new sessions) 
>> never quits and it's not accessible from JavaMonitor.
>> If I look at the logs i see:
>> 
>> Mar 19 12:38:52 B2C[2002] (ERXNSLogLog4jBridge.java:44) WARN  NSLog  - 
>> <com.tla.calendar.Application>: refusing new clients and below min active 
>> session threshold
>> Mar 19 12:38:52 B2C[2002] (ERXNSLogLog4jBridge.java:44) WARN  NSLog  - 
>> <com.tla.calendar.Application>: about to terminate...
>> 
>> The only thing left is to kill the instance… Which is not nice.
>> 
>> I'm not overriding the terminate() method in Application.
>> 
>> I am attaching a stack trace if it helps.
>> <B2Cjstack.txt>
>> 
>> Thanks,
>> 
>> 
>> 
>> Matteo Centro
>> _______________________________________________
>> Do not post admin requests to the list. They will be ignored.
>> Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com)
>> Help/Unsubscribe/Update your Subscription:
>> https://lists.apple.com/mailman/options/webobjects-dev/chill%40global-village.net
>> 
>> This email sent to ch...@global-village.net
> 
> -- 
> Chuck Hill             
> Executive Managing Partner, VP Development and Technical Services
> 
> Practical WebObjects - for developers who want to increase their overall 
> knowledge of WebObjects or who are trying to solve specific problems.    
> http://www.global-village.net/gvc/practical_webobjects
> 
> Global Village Consulting ranks 13th in 2012 in BIV's Top 100 Fastest Growing 
> Companies in B.C! 
> Global Village Consulting ranks 76th in 24th annual PROFIT 200 ranking of 
> Canada’s Fastest-Growing Companies by PROFIT Magazine!
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 
> 

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

This email sent to arch...@mail-archive.com

Reply via email to