Coder Social home page Coder Social logo

memcached-session-manager's People

Contributors

magro avatar

Watchers

 avatar

memcached-session-manager's Issues

memcached-session-manager not java 1.5 compatible

As reported here [1], memcached-session-manager cannot be run with java 1.5.

This should be changed.

[1] 
http://groups.google.com/group/memcached/browse_thread/thread/b7d9aab5f8aeb7
96

Original issue reported on code.google.com by martin.grotzke on 21 Nov 2009 at 11:16

msm-javolution-serializer should support serialization of java.util.Collections$UnmodifiableMap

msm-javolution-serializer in version 1.1 does not support deserialization 
of java.util.Collections$UnmodifiableMap, this fails with this exception:

Jan 4, 2010 1:29:34 AM 
de.javakaffee.web.msm.serializer.javolution.ReflectionFormat readElements
SEVERE: Could not set field value for field private java.util.Map 
org.app.SomeClass._someField                                                    

java.lang.UnsupportedOperationException                                         

        at java.util.Collections$UnmodifiableMap.put(Collections.java:1285)                                                 
        at 
de.javakaffee.web.msm.serializer.javolution.ReflectionBinding$XMLMapFormat.
read(ReflectionBinding.java:362)      
        at 
de.javakaffee.web.msm.serializer.javolution.ReflectionBinding$XMLMapFormat.
read(ReflectionBinding.java:329)      
        at 
javolution.xml.XMLFormat$InputElement.readInstanceOf(XMLFormat.java:507)        

        at javolution.xml.XMLFormat$InputElement.get(XMLFormat.java:403)

Original issue reported on code.google.com by martin.grotzke on 4 Jan 2010 at 12:34

Support reconfiguration of memcached nodes at runtime via jmx

When a new memcached node is added or an existing one is removed the 
configuration of the memcached-session-manager needs to be updated: both the 
memcachedNodes have to be updated and perhaps also the failoverNodes.

This should be possible via jmx.

Original issue reported on code.google.com by martin.grotzke on 14 Mar 2010 at 11:18

Use same logging system as Tomcat

What steps will reproduce the problem?
1. Use memcached-session-manager with an application that uses Log4j.

What is the expected output? What do you see instead?
Log messages should be handled by the configured logging system, but they
are instead written to System.err stream.


What version of the product are you using? On what operating system?
1.1

Please provide any additional information below.
Tomcat uses commons logging (http://commons.apache.org/logging/) internally
which allows it to be used easily with different logging systems.
Unfortunately memcached-session-manager is hard coded to use Java Logging,
which causes some pain when the rest of the application is using other
logging mechanisms.

P.S. Thank you for this great piece of software. We are planning to use it
in our web application, which is running on a cluster of four highly loaded
web servers.

Original issue reported on code.google.com by [email protected] on 16 Feb 2010 at 1:55

Check how session relocation might cause issues with applications bound to the session id

Wicket has an AbstractHttpSessionStore.SessionBindingListener class 
(implementing HttpSessionBindingListener and Serializable) that stores the 
session id. When valueUnbound is invoked by the servlet container, the 
SessionBindingListener invokes 
application.getSessionStore().unbind(sessionId) which in turn cleans up the 
PageStore (used by the SecondLevelCacheSessionStore) and the 
bufferedResponses held by the WebApplication.

The question is what does happen when a session is relocated and therefore 
the session id is changed.

Original issue reported on code.google.com by martin.grotzke on 22 Feb 2010 at 8:25

Make serialization strategy pluggable

Right now the session is serialized using the standard jdk serialization.

It should be possible to plug-in other serialization strategies, to support 
backward/forward compatibility of user types / classes.

Another advantage/goal might be performance improvements.

Original issue reported on code.google.com by martin.grotzke on 18 Oct 2009 at 11:23

Store modified sessions only

Right now sessions are sent to memcached for each request, even if the 
session was not modified by this request.

To improve performance sessions should only be sent to memcached if they 
were modified, that is they differ from the session that is already stored 
in memcached.

As the session can contain complex objects modifications of such object 
graphs cannot be detected by the memcached session manager.
To detect a modification of the data stored in the session a hash over the 
serialized session can be used: the session is stored with this hash in 
memcached (and in the tomcats session map) and when the session shall be 
sent again to memcached the hash can be computed again and compared with the 
previous hash. The hash of course must not be included in the serialized 
byte array but has to be stored separately.

One thing to consider is the expiration in memcached. Possible solutions:
- Increase the expiration significantly
- Use the (requested) touch operation to extend the expiration, 
unfortunately this is not yet possible - 
http://code.google.com/p/memcached/issues/detail?id=110
- Send the session following some algorithm even if it was not modified to 
extend the expiration (e.g. after a certain time period)
Still need to figure out what's the best solution for this.

Original issue reported on code.google.com by martin.grotzke on 16 Feb 2010 at 10:41

Use some kind of cache for failed memcached nodes

For memcached failover we should use some kind of cache (with a short ttl,
~1 sec) to store unavailable memcached nodes. This prevents us from trying
to store sessions in unavailable nodes, or reduces the number of times this
is done.

Original issue reported on code.google.com by martin.grotzke on 9 May 2009 at 11:37

msm-javolution-serializer should support deserialization of java.util.Collections$SynchronizedMap

msm-javolution-serializer in version 1.1 seems to not support 
deserialization of java.util.Collections$SynchronizedMap, this fails with:

Jan 4, 2010 12:58:17 AM 
de.javakaffee.web.msm.serializer.javolution.ReflectionFormat readElements
SEVERE: Could not set field value for field protected java.util.Map 
org.apache.catalina.session.StandardSession.attributes
javolution.xml.stream.XMLStreamException caused by 
java.lang.InstantiationException: java.util.Collections$SynchronizedMap
    at javolution.xml.XMLFormat.newInstance(XMLFormat.java:262)
    at 
javolution.xml.XMLFormat$InputElement.readInstanceOf(XMLFormat.java:499)
    at javolution.xml.XMLFormat$InputElement.get(XMLFormat.java:403)

Original issue reported on code.google.com by martin.grotzke on 3 Jan 2010 at 11:59

Check if session backup is necessary triggers a memcached lookup

Right now the SessionTrackerValve checks if session backup is necessary by
asking for the current session at the end of the request. If there's a
sessoin existing, the session backup must be performed.

Unfortunately, this leads to MemcachedBackupSessionManager.findSession
which performs a loadFromMemcached. This is not ideal in terms of
performance and should be changed.
E.g. the request and response cookies could be used for this.

Original issue reported on code.google.com by martin.grotzke on 10 Apr 2009 at 9:39

Cleanup code

I know of one main function which was introduced for just testing a regex.
This has to be removed, and other potential dummies as well.

Original issue reported on code.google.com by martin.grotzke on 9 May 2009 at 11:18

Hi ! I want to ask some questions ,thanks alot !

Hi ! tank you for helping !
my case is that:
I have a haproxy & tomcats cluster .
the haproxy:80 works at the front of this cluster ,
and there are some tomcats work together .
  haproxy can check the healthy of the tomcats , so one or more tomcats 
die doesn't make trouble to me ,but the haproxy cannot cache the 
JsessionID, so I was wondering if there is a good way to do that ,so I 
google it , I saw your work "memcached-session-manager" project,but I 
think your high-aviliablity clusters just like heartbeat , how to add more 
tomcats  servers ? and I cant understand the configuration clearly , for 
example "where is the memcached server and howto configur it ?" and , I 
dont know how to use your idea on my situation . I hop you can give me a 
help ! thanks you very much !

Original issue reported on code.google.com by [email protected] on 8 Mar 2010 at 7:50

createSession might take a possibly provided sessionId into account.

The MemcachedBackupSessionManager.createSession right now does not set the 
sessionId that might be provided but creates a new one.

IIRC I did not see this case when I implemented it and therefore skipped it.

The question is, in which case this might happen and what's the value of the 
session id - e.g. is it a session id for a session that could not be loaded 
from memcached, an id for a expired session etc.?

Original issue reported on code.google.com by martin.grotzke on 24 Feb 2010 at 3:25

msm-javolution-serializer: java.util.Currency gets deserialized with ReflectionFormat

java.util.Currency gets serialized and deserialized with the
ReflectionFormat which always creates new instances during deserialization.

The transient field defaultFractionDigits is then always zero and a
comparision with equals may return false even if the currencyCode is equal
since it is just Object.equals(). Only one instance should exist for each
currencyCode.

This applies to all Versions up to and including 1.2-SNAPSHOT.

I've added a patch that provides a special XMLFormat for Currency that
resolves the issue.

Thomas

Original issue reported on code.google.com by [email protected] on 10 Feb 2010 at 11:13

Attachments:

Notify HttpSessionListeners and HttpSessionActivationListeners when loading a session from memcached

The servlet spec #SRV.7.7.2 "Distributed Environments" says:

"Containers must notify any session attributes implementing the 
HttpSessionActivationListener during migration of a session. They must 
notify listeners of passivation prior to serialization of a session, and of 
activation after deserialization of a session."

This semantics should be supported by the msm-javolution-serializer.

Original issue reported on code.google.com by martin.grotzke on 19 Feb 2010 at 2:07

msm-javolution-serializer: add xmlformat implementations for more jdk types

Right now the msm-javolution-serializer provides some special xmlformat 
implementations for specific java types. Others are handled by the 
ReflectionFormat.

It should be checked if for some types (e.g. Locale, Currency, Pattern) 
specific xmlformat implementations would be useful.

A good idea of type candidates gives the xstream converters overview: 
http://xstream.codehaus.org/converters.html

Original issue reported on code.google.com by martin.grotzke on 29 Dec 2009 at 9:48

Improve documentation

For 1.0 there must be basic documentation: how to install and configure
this session manager.

Original issue reported on code.google.com by martin.grotzke on 17 May 2009 at 9:41

support java 5

Right now the code compiles to java 6, this should be changed to support
java 5.

Original issue reported on code.google.com by martin.grotzke on 9 May 2009 at 10:19

memcached node selection fails if no "regular" node exists

As reported by Erik there's an error if all configured nodes are also set as 
failover nodes ([1]), so that no "regular" nodes are registered.

This case needs to be handled.


[1] http://groups.google.com/group/memcached-session-
manager/browse_thread/thread/3cfcc2fe58879ae4

Original issue reported on code.google.com by martin.grotzke on 1 Sep 2009 at 11:14

Document handling of HttpSession(Binding|Attribute)Listener by JavaSerializationTranscoder

The default transcoder (created by JavaSerializationTranscoderFactory) uses 
tomcats StandardSession to serialize/deserialize sessions and their 
attributes (writeObject/readObject).

All session attribute values that are not Serializable but implement 
HttpSessionBindingListener or HttpSessionActivationListener get their 
appropriate methods invoked (valueUnbound/attributeRemoved).

This should be documented as users need to be aware of this when starting to 
use msm.

Original issue reported on code.google.com by martin.grotzke on 19 Feb 2010 at 2:04

Support comma-separated list of nodes

Currently the list of nodes in the configuration is whitespace-separated. 
Due to problems in passing such lists to the tomcat in environment-
variables, an alternative format using commas as separators would be 
helpful.

Original issue reported on code.google.com by [email protected] on 5 Mar 2010 at 1:06

Tomcat does not stop gracefully on shutdown

What steps will reproduce the problem?
1. $CATALINA_HOME/bin/shutdown.sh
2. ps auxww | grep -i tomcat | grep -v grep
3. Tomcat is still running and the process needs to be killed manually

Our Tomcat instance did gracefully shutdown before adding memcached
session manager.

Adding '_memcached.shutdown()' in the 'stop' method in
MemcachedBackupSessionManager.java appears to resolve 
the issue:

   public void stop() throws LifecycleException {
       if ( initialized )
       {
           _memcached.shutdown();
           destroy();
       }
   }

Thanks!

-kenan

p.s.
This implementation was exactly what we were looking for to provide
high availability sessions in a clustered environment.  Really nice work!
Thanks!

Original issue reported on code.google.com by [email protected] on 4 Jun 2009 at 10:37

Cookie set on memcached failure doesn't honor request's secure property

When the memcached node fails a session is associated with and the session
therefore gets relocated to another memcached node, the
memcached-session-manager sets a new JSESSIONID cookie (with the session id
containing the new memcached node id).

This cookie does not have the "Secure" property set if the request was done
over a secure connection (https).

Original issue reported on code.google.com by martin.grotzke on 16 Mar 2010 at 10:05

webapp sets cookie for every page if memcached process is missing

From context.xml: 

  <Manager className="de.javakaffee.web.msm.MemcachedBackupSessionManager"
             memcachedNodes="n1:server1.mydomain.com:11211 
n2:server2.mydomain.com:11211"
             failoverNodes="n1"
             transcoderFactoryClass="de.javakaffee.web.msm.serializer.javolution.JavolutionTranscoderFactory"
             requestUriIgnorePattern=".*\.(png|gif|jpg|css|js)$"
    />

Assuming that we run our app on server1, now run the webapp on server1 but 
don't run memcached on server2.

What is the expected output? What do you see instead?

Normally the app should be able to handle sessions, but it is not. Instead 
for every page a session cookie is set.

What version of the product are you using? On what operating system?

memcached-session-manager-1.1.jar, msm-javolution-serializer-1.1.jar

$ uname -a
Linux app-01 2.6.18-164.9.1.el5 #1 SMP Wed Dec 9 03:27:37 EST 2009 x86_64 
x86_64 x86_64 GNU/Linux

Redhat Enterprise

Original issue reported on code.google.com by [email protected] on 23 Feb 2010 at 9:19

memcached failover must work when several tried memcacheds fail

There's nearly everything in place so that memcached failover is fully
supported, just the relocation does not handle it fully.

So, when a backup fails, relocate() is invoked which also stores the
session in another memcached, but if this fails again, it won't be handled
correctly.

Needs to be implemented.

Original issue reported on code.google.com by martin.grotzke on 9 May 2009 at 11:32

Get code review from tomcat developers

It would be great if one of the tomcat developers that know how session 
managers work in tomcat could review this solution and implementation.

Original issue reported on code.google.com by martin.grotzke on 24 Oct 2009 at 11:23

msm-javolution-serializer should support serialization of java.util.Collections$EmptyList

With version 1.1 of msm-javolution-serializer a 
java.util.Collections$EmptyList cannot be deserialized. When a session is 
loaded from memcached with such an element (class attribute), this fails 
with the following exception:

Jan 4, 2010 12:11:59 AM 
de.javakaffee.web.msm.serializer.javolution.ReflectionFormat readElements
SEVERE: Could not set field value for field private final java.util.List 
org.app.SomeClass._someField                                                    

javolution.xml.stream.XMLStreamException caused by 
java.lang.IllegalAccessException: Class javolution.xml.XMLFormat can not 
access a member of class java.util.Collections$EmptyList with modifiers 
"private"                                           
        at javolution.xml.XMLFormat.newInstance(XMLFormat.java:264)                                                         
        at 
javolution.xml.XMLFormat$InputElement.readInstanceOf(XMLFormat.java:499)        

        at javolution.xml.XMLFormat$InputElement.get(XMLFormat.java:403)                                                    
        at 
de.javakaffee.web.msm.serializer.javolution.ReflectionFormat.readElements(R
eflectionFormat.java:226)

Original issue reported on code.google.com by martin.grotzke on 3 Jan 2010 at 11:16

Allow configuration of memcached protocol to use

It should be possible to configure, if text or binary protocol shall be used 
for memcached communication.

Original issue reported on code.google.com by martin.grotzke on 22 Mar 2010 at 11:46

test issues

can we use <em>markup</em>?

How does <code>this look</code>?

What about
<p>
paragraphs?
</p>

Original issue reported on code.google.com by martin.grotzke on 17 May 2009 at 10:08

failoverNodes should be separated by whitespace

failoverNodes right now are separated by colon (":"). To be consistent with 
the memcachedNodes attribute, they should be separated by whitespace.

Documentation also needs to reflect this.

Original issue reported on code.google.com by martin.grotzke on 17 Oct 2009 at 10:44

Test that response-commit-hook required for memcached-failover-handling

There's a hook that intercepts the committing of the response to be able to 
send the JSESSIONID cookie with a new memcached-id to the client.

There should be tests, that show that this hook works for various scenarios, 
e.g. very small and very large responses.

Original issue reported on code.google.com by martin.grotzke on 24 Oct 2009 at 8:04

createSession should take maxActiveSessions into account

The MemcachedBackupSessionManager.createSession right now does not check the 
configured maxActiveSessions and therefore does not support limiting the 
maximum number of created sessions. The implementation should follow  
org.apache.catalina.session.StandardManager.createSession.

Original issue reported on code.google.com by martin.grotzke on 24 Feb 2010 at 3:14

Change session id format to $sid + "-" + $memcachedId [ + "." + $jvmRoute ]

To prevent conflicts with the jvmRoute the sessionId format should be
changed. The jvmRoute is appended to the sessionId with a dot (".").

So the new format might be $sessionId + "-" + $memcachedId [+ "." + $jvmRoute]
which would be the following regexp: [^-.]+-[^.]+(\.[\w]+)?

Original issue reported on code.google.com by martin.grotzke on 25 Apr 2009 at 10:24

Create performance test

A performance test that shows the difference of tomcat with and w/o the msm 
in terms of response time/throughput.

Original issue reported on code.google.com by martin.grotzke on 24 Oct 2009 at 11:26

Make backup storage pluggable

Make backup storage pluggable, so that another backend instead of memcached 
might be used, e.g. [http://ehcache.org/documentation/cache_server.html 
ehcache server]

Original issue reported on code.google.com by martin.grotzke on 24 Oct 2009 at 11:21

msm-javolution-serializer should be able to load classes from webapp context

msm-javolution-serializer in version 1.1 does not support deserialization 
of java.util.EnumSet, this fails with this exception:

Jan 4, 2010 1:47:32 AM 
de.javakaffee.web.msm.serializer.javolution.ReflectionFormat readElements
SEVERE: Could not set field value for field final java.lang.Class 
java.util.EnumSet.elementType 
javolution.xml.stream.XMLStreamException: Class null not found (see 
javolution.lang.Reflection) 
        at javolution.xml.XMLFormat$2.newInstance(XMLFormat.java:1128)                          
        at 
javolution.xml.XMLFormat$InputElement.readInstanceOf(XMLFormat.java:499)        

        at javolution.xml.XMLFormat$InputElement.get(XMLFormat.java:403)                        
        at 
de.javakaffee.web.msm.serializer.javolution.ReflectionFormat.readElements(R
eflectionFormat.java:226)
        at 
de.javakaffee.web.msm.serializer.javolution.ReflectionFormat.read(Reflectio
nFormat.java:205)        
        at 
javolution.xml.XMLFormat$InputElement.readInstanceOf(XMLFormat.java:507)

Original issue reported on code.google.com by martin.grotzke on 4 Jan 2010 at 12:49

Release 1.0

It might be a good idea to track the release with an issue.

Code cleanup, documentation and stuff needs to be done - is already done. 
The next version should get also release nodes.

Original issue reported on code.google.com by martin.grotzke on 24 Oct 2009 at 11:29

msm-javolution-serializer should provide more efficient serialization of joda DateTime

Right now msm-javolution-serializer handles joda DateTime using reflection. 
This results in rather verbose xml. It would save space if a more efficient 
representation of joda datetime would be provided.

Right the xml for joda DateTime looks like this:

<_date class="org.joda.time.DateTime" __id="23" iMillis="1262297099473">
    <iChronology class="org.joda.time.chrono.ISOChronology"
        __id="24">
        <iBase class="org.joda.time.chrono.ZonedChronology" 
__id="25">
            <iBase class="org.joda.time.chrono.ISOChronology" 
__id="26">
                <iBase 
class="org.joda.time.chrono.GregorianChronology"
                    __id="27" iMinDaysInFirstWeek="4" 
/>
            </iBase>
            <iParam class="org.joda.time.tz.CachedDateTimeZone"
                __id="28" iID="Europe/Berlin">
                <iZone

class="org.joda.time.tz.DateTimeZoneBuilder$PrecalculatedZone"
                    __id="29" iID="Europe/Berlin">
                    <iTransitions class="[J" __id="30" 
length="62">
                        <java.lang.Long value="-
9223372036854775808" />
                        <java.lang.Long value="-
2422054408000" />
                        <java.lang.Long value="-
1693706400000" />
                        <java.lang.Long value="-
1680483600000" />
                        <java.lang.Long value="-
1663455600000" />
                        <java.lang.Long value="-
1650150000000" />
                        <java.lang.Long value="-
1632006000000" />
                        <java.lang.Long value="-
1618700400000" />
                        <java.lang.Long value="-
938905200000" />
                        <java.lang.Long value="-
857257200000" />
                        <java.lang.Long value="-
844556400000" />
                        <java.lang.Long value="-
828226800000" />
                        <java.lang.Long value="-
812502000000" />
                        <java.lang.Long value="-
796777200000" />
                        <java.lang.Long value="-
781052400000" />
                        <java.lang.Long value="-
776559600000" />
                        <java.lang.Long value="-
765936000000" />
                        <java.lang.Long value="-
761180400000" />
                        <java.lang.Long value="-
748479600000" />
                        <java.lang.Long value="-
733273200000" />
                        <java.lang.Long value="-
717631200000" />
                        <java.lang.Long value="-
714610800000" />
                        <java.lang.Long value="-
710380800000" />
                        <java.lang.Long value="-
701910000000" />
                        <java.lang.Long value="-
684975600000" />
                        <java.lang.Long value="-
670460400000" />
                        <java.lang.Long value="-
654130800000" />
                        <java.lang.Long value="-
639010800000" />
                        <java.lang.Long 
value="323830800000" />
                        <java.lang.Long 
value="338950800000" />
                        <java.lang.Long 
value="354675600000" />
                        <java.lang.Long 
value="370400400000" />
                        <java.lang.Long 
value="386125200000" />
                        <java.lang.Long 
value="401850000000" />
                        <java.lang.Long 
value="417574800000" />
                        <java.lang.Long 
value="433299600000" />
                        <java.lang.Long 
value="449024400000" />
                        <java.lang.Long 
value="465354000000" />
                        <java.lang.Long 
value="481078800000" />
                        <java.lang.Long 
value="496803600000" />
                        <java.lang.Long 
value="512528400000" />
                        <java.lang.Long 
value="528253200000" />
                        <java.lang.Long 
value="543978000000" />
                        <java.lang.Long 
value="559702800000" />
                        <java.lang.Long 
value="575427600000" />
                        <java.lang.Long 
value="591152400000" />
                        <java.lang.Long 
value="606877200000" />
                        <java.lang.Long 
value="622602000000" />
                        <java.lang.Long 
value="638326800000" />
                        <java.lang.Long 
value="654656400000" />
                        <java.lang.Long 
value="670381200000" />
                        <java.lang.Long 
value="686106000000" />
                        <java.lang.Long 
value="701830800000" />
                        <java.lang.Long 
value="717555600000" />
                        <java.lang.Long 
value="733280400000" />
                        <java.lang.Long 
value="749005200000" />
                        <java.lang.Long 
value="764730000000" />
                        <java.lang.Long 
value="780454800000" />
                        <java.lang.Long 
value="796179600000" />
                        <java.lang.Long 
value="811904400000" />
                        <java.lang.Long 
value="828234000000" />
                        <java.lang.Long 
value="846378000000" />
                    </iTransitions>
                    <iWallOffsets class="[I" __id="31" 
length="62">
                        <java.lang.Integer 
value="3208000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="7200000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="7200000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="7200000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="7200000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="7200000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="7200000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="7200000" />
                        <java.lang.Integer 
value="10800000" />
                        <java.lang.Integer 
value="7200000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="7200000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="7200000" />
                        <java.lang.Integer 
value="10800000" />
                        <java.lang.Integer 
value="7200000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="7200000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="7200000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="7200000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="7200000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="7200000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="7200000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="7200000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="7200000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="7200000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="7200000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="7200000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="7200000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="7200000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="7200000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="7200000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="7200000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="7200000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="7200000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="7200000" />
                        <java.lang.Integer 
value="3600000" />
                    </iWallOffsets>
                    <iStandardOffsets class="[I" 
__id="32"
                        length="62">
                        <java.lang.Integer 
value="3208000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                        <java.lang.Integer 
value="3600000" />
                    </iStandardOffsets>
                    <iNameKeys 
class="[Ljava.lang.String;" __id="33"
                        type="array" 
componentType="java.lang.String" length="62">
                        <java.lang.String __id="34" 
value="LMT" />
                        <java.lang.String __id="35" 
value="CET" />
                        <java.lang.String __id="36" 
value="CEST" />
                        <java.lang.String 
__ref="35" />
                        <java.lang.String 
__ref="36" />
                        <java.lang.String 
__ref="35" />
                        <java.lang.String 
__ref="36" />
                        <java.lang.String 
__ref="35" />
                        <java.lang.String 
__ref="36" />
                        <java.lang.String 
__ref="35" />
                        <java.lang.String 
__ref="36" />
                        <java.lang.String 
__ref="35" />
                        <java.lang.String 
__ref="36" />
                        <java.lang.String 
__ref="35" />
                        <java.lang.String 
__ref="36" />
                        <java.lang.String __id="37" 
value="CEMT" />
                        <java.lang.String 
__ref="36" />
                        <java.lang.String 
__ref="35" />
                        <java.lang.String 
__ref="36" />
                        <java.lang.String 
__ref="35" />
                        <java.lang.String 
__ref="36" />
                        <java.lang.String 
__ref="37" />
                        <java.lang.String 
__ref="36" />
                        <java.lang.String 
__ref="35" />
                        <java.lang.String 
__ref="36" />
                        <java.lang.String 
__ref="35" />
                        <java.lang.String 
__ref="36" />
                        <java.lang.String 
__ref="35" />
                        <java.lang.String 
__ref="36" />
                        <java.lang.String 
__ref="35" />
                        <java.lang.String 
__ref="36" />
                        <java.lang.String 
__ref="35" />
                        <java.lang.String 
__ref="36" />
                        <java.lang.String 
__ref="35" />
                        <java.lang.String 
__ref="36" />
                        <java.lang.String 
__ref="35" />
                        <java.lang.String 
__ref="36" />
                        <java.lang.String 
__ref="35" />
                        <java.lang.String 
__ref="36" />
                        <java.lang.String 
__ref="35" />
                        <java.lang.String 
__ref="36" />
                        <java.lang.String 
__ref="35" />
                        <java.lang.String 
__ref="36" />
                        <java.lang.String 
__ref="35" />
                        <java.lang.String 
__ref="36" />
                        <java.lang.String 
__ref="35" />
                        <java.lang.String 
__ref="36" />
                        <java.lang.String 
__ref="35" />
                        <java.lang.String 
__ref="36" />
                        <java.lang.String 
__ref="35" />
                        <java.lang.String 
__ref="36" />
                        <java.lang.String 
__ref="35" />
                        <java.lang.String 
__ref="36" />
                        <java.lang.String 
__ref="35" />
                        <java.lang.String 
__ref="36" />
                        <java.lang.String 
__ref="35" />
                        <java.lang.String 
__ref="36" />
                        <java.lang.String 
__ref="35" />
                        <java.lang.String 
__ref="36" />
                        <java.lang.String 
__ref="35" />
                        <java.lang.String 
__ref="36" />
                        <java.lang.String 
__ref="35" />
                    </iNameKeys>
                    <iTailZone 
class="org.joda.time.tz.DateTimeZoneBuilder$DSTZone"
                        __id="38" 
iStandardOffset="3600000" iID="Europe/Berlin">
                        <iStartRecurrence

class="org.joda.time.tz.DateTimeZoneBuilder$Recurrence"
                            __id="39" 
iNameKey="CEST" iSaveMillis="3600000">
                            <iOfYear 
class="org.joda.time.tz.DateTimeZoneBuilder$OfYear"
                                __id="40" 
iMode="u" iMonthOfYear="3" iDayOfMonth="-1"

iDayOfWeek="7" iAdvance="false" iMillisOfDay="3600000" />
                        </iStartRecurrence>
                        <iEndRecurrence

class="org.joda.time.tz.DateTimeZoneBuilder$Recurrence"
                            __id="41" 
iNameKey="CET" iSaveMillis="0">
                            <iOfYear 
class="org.joda.time.tz.DateTimeZoneBuilder$OfYear"
                                __id="42" 
iMode="u" iMonthOfYear="10" iDayOfMonth="-1"

iDayOfWeek="7" iAdvance="false" iMillisOfDay="3600000" />
                        </iEndRecurrence>
                    </iTailZone>
                </iZone>
            </iParam>
        </iBase>
    </iChronology>
</_date>

Original issue reported on code.google.com by martin.grotzke on 5 Jan 2010 at 7:57

tests and configuration for sessionBackupAsync

If session backup shall be performed asynchronously shall be configurable.

Also this option needs tests.

Original issue reported on code.google.com by martin.grotzke on 9 May 2009 at 11:26

Serialization of AtomicInteger fails for msm-javolution-serializer

When the session contains an AtomicInteger, there's an exception thrown 
during serialization:

java.lang.IllegalArgumentException: Existing static binding for class class 
java.util.concurrent.atomic.AtomicInteger can only be overriden through 
custom XMLBinding (see XMLFormat(Class) documentation)
        at javolution.xml.XMLFormat.<init>(XMLFormat.java:182)
        at 
de.javakaffee.web.msm.serializer.javolution.ReflectionFormat$XMLNumberForma
t.<init>(ReflectionFormat.java:591)
        at 
de.javakaffee.web.msm.serializer.javolution.ReflectionFormat$XMLNumberIntFo
rmat.<init>(ReflectionFormat.java:662)
        at 
de.javakaffee.web.msm.serializer.javolution.ReflectionFormat.createNumberFo
rmat(ReflectionFormat.java:569)

Original issue reported on code.google.com by martin.grotzke on 2 Jan 2010 at 2:13

Memcached failover / session relocation not supported when cookies are disabled

When the memcached node the session is associated with is not available the
session is relocated to another memcached node. This means the session id
is changed (so that it contains the new memcached node id), and the session
is internally (in the jvm local session map) bound to the new id.

To notify the browser about the new session id a new JSESSIONID cookie
(with the new session id) is sent.

When cookies are disabled this cookie is just ignored. The session id is
transported in the url via url-rewriting, and this contains still the old
session id - in more detail, the markup sent to the browser still contains
links with the old session id. Therefore the next request contains a
session id that is no longer existing - the client gets a new session.

Original issue reported on code.google.com by martin.grotzke on 16 Mar 2010 at 11:25

_memcachedSessionTTL needs to be configurable

_memcachedSessionTTL in MemcachedBackupSessionManager needs to be
configurable.  I suppose it could be a separate attribute to the Manager,
but it should probably use the same value as the session timeout
(maxInactiveInterval), no?

[XREF issue ID 4]

Original issue reported on code.google.com by [email protected] on 8 May 2009 at 2:43

Fix license headers

The java code contains wrong licence headers. Those must be changed
according to the license of this lib.

Original issue reported on code.google.com by martin.grotzke on 19 Mar 2009 at 9:53

Calculate statistics for serialization time / backup time / load time / skips etc

It would be great to get some stats on
- number of requests with sessions
- number of requests with sessions without access -> skipped backup
- number of requests with sessions without session modification -> skipped 
backup
- number of requests with sessions with backup
- number of sessions loaded from memcached

for each of the following there should be min, avg, max:
- serialization time
- time it took to store it in memcached (the duration of 
MemcachedClient.set)
- load time (sessions loaded from memcached)

These stats should be available via jmx

Original issue reported on code.google.com by martin.grotzke on 27 Feb 2010 at 2:16

msm-javolution-serializer: ReflectionBinding does not honor XMLSerializable interface

When using javolution, one can create a custom XMLFormat by use of the
XMLSerializable interface.

But this interface is ignored by the ReflectionBinding.getFormat() method.

This applies to all Versions up to and including 1.2-SNAPSHOT.

I've attached a patch that solves the issue. I've used the patch in my
project to implement a custom XMLFormat and it worked. 

Would be nice to add it to the master.

Thomas

Original issue reported on code.google.com by [email protected] on 5 Feb 2010 at 11:09

Attachments:

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.