Persistent Session Storage
-
Upload
wo-community -
Category
Documents
-
view
695 -
download
0
description
Transcript of Persistent Session Storage
![Page 1: Persistent Session Storage](https://reader035.fdocuments.in/reader035/viewer/2022062220/555a6a58d8b42a972b8b4aef/html5/thumbnails/1.jpg)
MONTREAL JUNE 30, JULY 1ST AND 2ND 2012
MONTREAL JUNE 30, JULY 1ST AND 2ND 2012
Persistent Session StorageHenceforth referred to as PSS :)
- Ramsey Gurley
![Page 2: Persistent Session Storage](https://reader035.fdocuments.in/reader035/viewer/2022062220/555a6a58d8b42a972b8b4aef/html5/thumbnails/2.jpg)
Demo
![Page 3: Persistent Session Storage](https://reader035.fdocuments.in/reader035/viewer/2022062220/555a6a58d8b42a972b8b4aef/html5/thumbnails/3.jpg)
MONTREAL JUNE 30, JULY 1ST AND 2ND 2012
MONTREAL JUNE 30, JULY 1ST AND 2ND 2012
Robust, scalable, front end apps using component actions.
What does this mean?
![Page 4: Persistent Session Storage](https://reader035.fdocuments.in/reader035/viewer/2022062220/555a6a58d8b42a972b8b4aef/html5/thumbnails/4.jpg)
Advantages of PSS
• Memory consumption
• Long sessions
• Distribution
![Page 5: Persistent Session Storage](https://reader035.fdocuments.in/reader035/viewer/2022062220/555a6a58d8b42a972b8b4aef/html5/thumbnails/5.jpg)
Memory Consumption
• Sessions storage handled by EOF
• Session memory freed after each request
• Drastically improves stateful performance under load
![Page 6: Persistent Session Storage](https://reader035.fdocuments.in/reader035/viewer/2022062220/555a6a58d8b42a972b8b4aef/html5/thumbnails/6.jpg)
Long Sessions
• WOSessionTimeOut=0
• Bookmarkable component actions
![Page 7: Persistent Session Storage](https://reader035.fdocuments.in/reader035/viewer/2022062220/555a6a58d8b42a972b8b4aef/html5/thumbnails/7.jpg)
Distribution
• WOSession’s setDistributionEnabled()
• Restart instances anytime
• Improved scaling
![Page 8: Persistent Session Storage](https://reader035.fdocuments.in/reader035/viewer/2022062220/555a6a58d8b42a972b8b4aef/html5/thumbnails/8.jpg)
How do I enable PSS?
![Page 9: Persistent Session Storage](https://reader035.fdocuments.in/reader035/viewer/2022062220/555a6a58d8b42a972b8b4aef/html5/thumbnails/9.jpg)
Demo
![Page 10: Persistent Session Storage](https://reader035.fdocuments.in/reader035/viewer/2022062220/555a6a58d8b42a972b8b4aef/html5/thumbnails/10.jpg)
Steps to enable PSS
• Add ERPersistentSessionStorage framework
• Set up the connection dictionary for the model
• Generate the schema from the model (Enable migrations)
![Page 11: Persistent Session Storage](https://reader035.fdocuments.in/reader035/viewer/2022062220/555a6a58d8b42a972b8b4aef/html5/thumbnails/11.jpg)
MONTREAL JUNE 30, JULY 1ST AND 2ND 2012
MONTREAL JUNE 30, JULY 1ST AND 2ND 2012
How now brown cow?Why has no one done this before now?
![Page 12: Persistent Session Storage](https://reader035.fdocuments.in/reader035/viewer/2022062220/555a6a58d8b42a972b8b4aef/html5/thumbnails/12.jpg)
Serialization Bug
![Page 13: Persistent Session Storage](https://reader035.fdocuments.in/reader035/viewer/2022062220/555a6a58d8b42a972b8b4aef/html5/thumbnails/13.jpg)
EOGenericRecord
• Serialize EO
• Serializes EC
• Deserialize EO
• Deserialize EC
• Populate EO
EO EC
![Page 14: Persistent Session Storage](https://reader035.fdocuments.in/reader035/viewer/2022062220/555a6a58d8b42a972b8b4aef/html5/thumbnails/14.jpg)
Workaround?
• Serialize EC first!
• Fails :(
![Page 15: Persistent Session Storage](https://reader035.fdocuments.in/reader035/viewer/2022062220/555a6a58d8b42a972b8b4aef/html5/thumbnails/15.jpg)
EOGenericRecord
• Serialize EO
• Serializes related
• Deserialize EO
• Deserialize related
• Populate EO
EO EO
![Page 16: Persistent Session Storage](https://reader035.fdocuments.in/reader035/viewer/2022062220/555a6a58d8b42a972b8b4aef/html5/thumbnails/16.jpg)
What happens?
• EOCustomObject classDescription
• EOGenericRecord serializes classDescription
• Deserialize EOCustomObject sets values
• Dictionary not created until EOGenericRecord sets classDescription
• NullPointerException
![Page 17: Persistent Session Storage](https://reader035.fdocuments.in/reader035/viewer/2022062220/555a6a58d8b42a972b8b4aef/html5/thumbnails/17.jpg)
Serialization Bug Fix
• Re-implement core classes
• EOCustomObject
• EOGenericRecord
![Page 18: Persistent Session Storage](https://reader035.fdocuments.in/reader035/viewer/2022062220/555a6a58d8b42a972b8b4aef/html5/thumbnails/18.jpg)
Other WO Serialization Erros
• WODisplayGroup
• D2WPage
![Page 19: Persistent Session Storage](https://reader035.fdocuments.in/reader035/viewer/2022062220/555a6a58d8b42a972b8b4aef/html5/thumbnails/19.jpg)
Serialization
• Classpath order - ERD2W & ERPSS
• General rule - Wonder first
![Page 20: Persistent Session Storage](https://reader035.fdocuments.in/reader035/viewer/2022062220/555a6a58d8b42a972b8b4aef/html5/thumbnails/20.jpg)
PSS Requirements
![Page 21: Persistent Session Storage](https://reader035.fdocuments.in/reader035/viewer/2022062220/555a6a58d8b42a972b8b4aef/html5/thumbnails/21.jpg)
PSS Requirements
• Serializable components and classes
• Serializable session
• No memory leaks
![Page 22: Persistent Session Storage](https://reader035.fdocuments.in/reader035/viewer/2022062220/555a6a58d8b42a972b8b4aef/html5/thumbnails/22.jpg)
Serializable Classes
![Page 23: Persistent Session Storage](https://reader035.fdocuments.in/reader035/viewer/2022062220/555a6a58d8b42a972b8b4aef/html5/thumbnails/23.jpg)
serialVersionUID/**
* Do I need to update serialVersionUID? See section 5.6 <cite>Type Changes * Affecting Serialization</cite> on page 51 of the <a * href="http://java.sun.com/j2se/1.4/pdf/serial-spec.pdf">Java Object * Serialization Spec</a> */ private static final long serialVersionUID = 1L;
![Page 24: Persistent Session Storage](https://reader035.fdocuments.in/reader035/viewer/2022062220/555a6a58d8b42a972b8b4aef/html5/thumbnails/24.jpg)
Update serialVersionUID?
• Change class hierarchy
• Delete fields
• Make non-static into static
• Make non-transient into transient
• Change type of a primitive field
![Page 25: Persistent Session Storage](https://reader035.fdocuments.in/reader035/viewer/2022062220/555a6a58d8b42a972b8b4aef/html5/thumbnails/25.jpg)
Serializable Session
![Page 26: Persistent Session Storage](https://reader035.fdocuments.in/reader035/viewer/2022062220/555a6a58d8b42a972b8b4aef/html5/thumbnails/26.jpg)
Serializable Session
• Serializable instance variables
• Serializable object store contents
![Page 27: Persistent Session Storage](https://reader035.fdocuments.in/reader035/viewer/2022062220/555a6a58d8b42a972b8b4aef/html5/thumbnails/27.jpg)
No Memory Leaks
![Page 28: Persistent Session Storage](https://reader035.fdocuments.in/reader035/viewer/2022062220/555a6a58d8b42a972b8b4aef/html5/thumbnails/28.jpg)
Helpful Tools
• FindBugs
• jvisualvm
• jMeter
![Page 29: Persistent Session Storage](https://reader035.fdocuments.in/reader035/viewer/2022062220/555a6a58d8b42a972b8b4aef/html5/thumbnails/29.jpg)
Find Serialization Errors
![Page 30: Persistent Session Storage](https://reader035.fdocuments.in/reader035/viewer/2022062220/555a6a58d8b42a972b8b4aef/html5/thumbnails/30.jpg)
FindBugshttp://findbugs.cs.umd.edu/eclipse/
![Page 31: Persistent Session Storage](https://reader035.fdocuments.in/reader035/viewer/2022062220/555a6a58d8b42a972b8b4aef/html5/thumbnails/31.jpg)
FindBugs
![Page 32: Persistent Session Storage](https://reader035.fdocuments.in/reader035/viewer/2022062220/555a6a58d8b42a972b8b4aef/html5/thumbnails/32.jpg)
Serialization Debug Propertysun.io.serialization.extendedDebugInfo=true
![Page 33: Persistent Session Storage](https://reader035.fdocuments.in/reader035/viewer/2022062220/555a6a58d8b42a972b8b4aef/html5/thumbnails/33.jpg)
Serialization Debug PropertyCaused by: java.io.NotSerializableException: er.extensions.localization.ERXLocalizer
- field (class "er.modern.directtoweb.components.ERMDBatchSizeControl", name: "_localizer", ... - object (class "er.modern.directtoweb.components.ERMDBatchSizeControl",... - element of array (index: 5) - array (class "[Ljava.lang.Object;", size: 7) - field (class "com.webobjects.foundation.NSDictionary", name: "objects", type: "class [Ljava.lang.Object;") - custom writeObject data (class "com.webobjects.foundation.NSDictionary") - object (class "com.webobjects.foundation.NSMutableDictionary", ... - custom writeObject data (class "com.webobjects.appserver.WOComponent") - object (class "er.modern.look.pages.ERMODListPage", ... - field (class "com.webobjects.appserver._private.WOTransactionRecord", name: ... - object (class "com.webobjects.appserver._private.WOTransactionRecord", ... - element of array (index: 1) - array (class "[Ljava.lang.Object;", size: 2) - field (class "com.webobjects.foundation.NSDictionary", name: "objects", type: "class [Ljava.lang.Object;") - custom writeObject data (class "com.webobjects.foundation.NSDictionary") - object (class "com.webobjects.foundation.NSMutableDictionary", - field (class "com.webobjects.appserver.WOSession", name: "_contextRecords", ... - root object (class "wowodc.modernpss.Session", ...
![Page 34: Persistent Session Storage](https://reader035.fdocuments.in/reader035/viewer/2022062220/555a6a58d8b42a972b8b4aef/html5/thumbnails/34.jpg)
Other Serialization Issues
![Page 35: Persistent Session Storage](https://reader035.fdocuments.in/reader035/viewer/2022062220/555a6a58d8b42a972b8b4aef/html5/thumbnails/35.jpg)
D2WContext
• D2WContext is not serializable
• ERD2WContext is serializable
• Use ERD2WContext factory
![Page 36: Persistent Session Storage](https://reader035.fdocuments.in/reader035/viewer/2022062220/555a6a58d8b42a972b8b4aef/html5/thumbnails/36.jpg)
ERD2WContext
• Does not serialize entire context
• frame
• task
• entity
• propertyKey
• pageConfiguration
• object
![Page 37: Persistent Session Storage](https://reader035.fdocuments.in/reader035/viewer/2022062220/555a6a58d8b42a972b8b4aef/html5/thumbnails/37.jpg)
ERXEC
• calls dispose() during writeObject()
![Page 38: Persistent Session Storage](https://reader035.fdocuments.in/reader035/viewer/2022062220/555a6a58d8b42a972b8b4aef/html5/thumbnails/38.jpg)
Find Memory Leaks
![Page 39: Persistent Session Storage](https://reader035.fdocuments.in/reader035/viewer/2022062220/555a6a58d8b42a972b8b4aef/html5/thumbnails/39.jpg)
jvisualvm
• Installed with Java 1.6+
• Just type ‘jvisualvm’ into Terminal.app to launch
• View CPU and memory usage
![Page 40: Persistent Session Storage](https://reader035.fdocuments.in/reader035/viewer/2022062220/555a6a58d8b42a972b8b4aef/html5/thumbnails/40.jpg)
No Memory Leak
![Page 41: Persistent Session Storage](https://reader035.fdocuments.in/reader035/viewer/2022062220/555a6a58d8b42a972b8b4aef/html5/thumbnails/41.jpg)
Memory Leak
![Page 42: Persistent Session Storage](https://reader035.fdocuments.in/reader035/viewer/2022062220/555a6a58d8b42a972b8b4aef/html5/thumbnails/42.jpg)
Analyzing Memory
• Heap Dump
• Object Query Language (OQL)
• http://visualvm.java.net/oqlhelp.html
![Page 43: Persistent Session Storage](https://reader035.fdocuments.in/reader035/viewer/2022062220/555a6a58d8b42a972b8b4aef/html5/thumbnails/43.jpg)
Load Testing With JMeter
![Page 45: Persistent Session Storage](https://reader035.fdocuments.in/reader035/viewer/2022062220/555a6a58d8b42a972b8b4aef/html5/thumbnails/45.jpg)
Finding a Memory Leak Demo
![Page 46: Persistent Session Storage](https://reader035.fdocuments.in/reader035/viewer/2022062220/555a6a58d8b42a972b8b4aef/html5/thumbnails/46.jpg)
Q & A