Hello Scott,

This is done, it is  "CAS-816 - Proposal : EH Cache based distributed
TicketRegistry".

Once again, thank you very much for the simplicity, the extensibility
and the robustness of CAS. I had 18 months of pleasure using it on a
high volume web portal. I currently work on another subject but it is
a very nice souvenir :-)

Cyrille

--
Cyrille Le Clerc
[email protected]
http://blog.xebia.fr


On Tue, Nov 24, 2009 at 4:19 AM, Scott Battaglia
<[email protected]> wrote:
>
> Any chance you'd be interested in putting this in a JIRA issue? ;-)
>
> Cheers,
> Scott
>
>
> On Sun, Nov 8, 2009 at 1:21 PM, Cyrille Le Clerc <[email protected]> wrote:
>>
>> Hello Dean,
>>
>> Sorry for the delay. Here is the EhCacheTicketRegistry.java with a
>> JA-SIG Licence. I send it both as an attachment and doing a copy-paste
>> in the email body in case the mailing mist would reject attachments.
>>
>> Hope this helps,
>>
>> Cyrille
>>
>>
>> /*
>>  * Copyright 2007 The JA-SIG Collaborative. All rights reserved. See license
>>  * distributed with this file and available online at
>>  * http://www.uportal.org/license.html
>>  */
>>  package org.jasig.cas.ticket.registry.ehcache;
>>
>> import java.util.Collection;
>>
>> import net.sf.ehcache.Cache;
>> import net.sf.ehcache.Element;
>>
>> import org.inspektr.common.ioc.annotation.NotNull;
>> import org.jasig.cas.ticket.ServiceTicket;
>> import org.jasig.cas.ticket.Ticket;
>> import org.jasig.cas.ticket.TicketGrantingTicket;
>> import org.jasig.cas.ticket.registry.AbstractDistributedTicketRegistry;
>> import org.jasig.cas.ticket.registry.TicketRegistry;
>> import org.springframework.core.style.ToStringCreator;
>>
>> /**
>>  * <p>
>>  * <a href="http://ehcache.sourceforge.net/";>EHCache</a> based
>> distributed ticket registry.
>>  * </p>
>>  * <p>
>>  * Use distinct caches for ticket granting tickets (TGT) and service
>> tickets (ST) for:
>>  * <ul>
>>  * <li>Tuning : use cache level time to live with different values for
>> TGT an ST.</li>
>>  * <li>Tuning : have different replication strategies for TGT and ST
>> (ST should be synchronized more quickly).</li>
>>  * <li>Monitoring : follow separately the number of TGT and ST.</li>
>>  * <ul>
>>  * </p>
>>  *
>>  * @author <a href="mailto:[email protected]";>Cyrille Le Clerc</a>
>>  */
>> public class EhCacheTicketRegistry extends
>> AbstractDistributedTicketRegistry implements TicketRegistry {
>>
>>   �...@notnull
>>    protected Cache serviceTicketsCache;
>>
>>   �...@notnull
>>    protected Cache ticketGrantingTicketsCache;
>>
>>   �...@override
>>    public void addTicket(Ticket ticket) {
>>        Element element = new Element(ticket.getId(), ticket);
>>        if (ticket instanceof ServiceTicket) {
>>            serviceTicketsCache.put(element);
>>        } else if (ticket instanceof TicketGrantingTicket) {
>>            ticketGrantingTicketsCache.put(element);
>>        } else {
>>            throw new IllegalArgumentException("Invalid ticket type " + 
>> ticket);
>>        }
>>    }
>>
>>   �...@override
>>    public boolean deleteTicket(String ticketId) {
>>        boolean result;
>>        if (ticketId.startsWith(TicketGrantingTicket.PREFIX)) {
>>            result = ticketGrantingTicketsCache.remove(ticketId);
>>        } else if (ticketId.startsWith(ServiceTicket.PREFIX)) {
>>            result = serviceTicketsCache.remove(ticketId);
>>        } else {
>>            result = false;
>>            if (log.isInfoEnabled()) {
>>                log.info("Unsupported ticket prefix for ticketId '" +
>> ticketId + "', return " + result);
>>            }
>>        }
>>        return result;
>>    }
>>
>>   �...@override
>>    public Ticket getTicket(String ticketId) {
>>        Element element;
>>        if (ticketId.startsWith(TicketGrantingTicket.PREFIX)) {
>>            element = ticketGrantingTicketsCache.get(ticketId);
>>        } else if (ticketId.startsWith(ServiceTicket.PREFIX)) {
>>            element = serviceTicketsCache.get(ticketId);
>>        } else {
>>            element = null;
>>            if (log.isInfoEnabled()) {
>>                log.info("Unsupported ticket prefix for ticketId '" +
>> ticketId + "', return " + element);
>>            }
>>        }
>>        return element == null ? null :
>> getProxiedTicketInstance((Ticket)element.getValue());
>>    }
>>
>>   �...@override
>>    public Collection<Ticket> getTickets() {
>>        throw new UnsupportedOperationException("GetTickets not supported.");
>>    }
>>
>>    public void setServiceTicketsCache(Cache serviceTicketsCache) {
>>        this.serviceTicketsCache = serviceTicketsCache;
>>    }
>>
>>    public void setTicketGrantingTicketsCache(Cache
>> ticketGrantingTicketsCache) {
>>        this.ticketGrantingTicketsCache = ticketGrantingTicketsCache;
>>    }
>>
>>   �...@override
>>    public String toString() {
>>        return new
>> ToStringCreator(this).append("ticketGrantingTicketsCache",
>> this.ticketGrantingTicketsCache)
>>            .append("serviceTicketsCache", 
>> this.serviceTicketsCache).toString();
>>    }
>>
>>   �...@override
>>    protected void updateTicket(Ticket ticket) {
>>        addTicket(ticket);
>>    }
>> }
>>
>> On Tue, Nov 3, 2009 at 9:52 PM, Dean Heisey <[email protected]> 
>> wrote:
>> >
>> > Hi Cyrille,
>> >
>> >   Thanks for sharing your experience.  If you can share the code that 
>> > would be great, if not.  I will implement my own.
>> >
>> > Dean
>> >
>> > -----Original Message-----
>> > From: Cyrille Le Clerc [mailto:[email protected]]
>> > Sent: Tuesday, November 03, 2009 12:56 AM
>> > To: [email protected]
>> > Subject: Re: [cas-user] CAS + EHCache Ticket Registry
>> >
>> >  Hello Dean,
>> >
>> >  We happily use a Distributed EHCache Ticket Registry on a high
>> > volume french portal that reaches a max of 40 ticket granting tickets
>> > and 80 service tickets created per second. That is about 120 tickets
>> > replicated per second.
>> >
>> >  This EH Cache Ticket Registry has been used for more than six month
>> > without causing major issues and the traffic is increasing. We are
>> > very happy with EH Cache and RMI because they almost do not require
>> > configuration and tuning. We would have been interested in Memcached
>> > but we didn't have skills to provide 7x24 support on this technology
>> > we don't use in-house.
>> >
>> > For this, we have a cluster of three nodes :
>> > * HP ProLiant G5 dual quad cores 54xx Intel Xeon.
>> > * Red Hat Enterprise Linux 4 / 2.6.9-78.0.8.ELsmp 32 bits
>> > * Sun jdk 1.6.0.13
>> > * Tomcat 6.0.18
>> > * CAS 3.3.1
>> > * EHCache 1.6.1 with :
>> >  ** Auto discovery of the peers
>> >  ** RMI Synchronous Replicator for service tickets :
>> >      service tickets validation doesn't benefit of server affinity
>> > and can occur few ms after creation
>> >  ** RMI Asynchronous Replicator for the ticket granting tickets :
>> >      ticket granting ticket benefit of server affinity because they
>> > are always accessed via the end user browser
>> >      (no server-to-server exchanges)
>> >
>> >  The CPU consumed by this application remain quite low and we have
>> > deployed other high traffic web applications on these physical
>> > servers.
>> >
>> >  The biggest problem we faced was the saturation of the Network
>> > Interface Cards because we didn't know but we used and 100 Mbits/s
>> > switch (pretty surprising in 2009 ;-) ). The servers froze on RMI
>> > socket establishment calls. Once we upgraded to a Giga Bits Ethernet
>> > switch, everything came back to normal.
>> >
>> >  Another point you may worry about is long
>> > stop-the-world-garbage-collection phases on peer servers if you set
>> > aggressive RMI read timeouts.
>> >  We didn't feel the need to define RMI timeouts on our CAS cluster
>> > but we use it on another application that also heavily rely on
>> > Distributed Sync RMI EHCache and face sparse RMI timeouts that seem to
>> > be caused by long stop-the-world-garbage collections on peer servers.
>> >
>> >  I am no longer member of the SSO team but I am sure we can give you
>> > the one hundred lines of code of the EHCacheTicketRegistry.
>> >
>> >  Hope this helps,
>> >
>> >  Cyrille
>> >
>> > --
>> > Cyrille Le Clerc
>> > [email protected] [email protected]
>> > http://blog.xebia.fr
>> >
>> > On Thu, Oct 29, 2009 at 10:29 PM, Scott Battaglia
>> > <[email protected]> wrote:
>> > >
>> > > On Thu, Oct 29, 2009 at 5:11 PM, Dean Heisey <[email protected]> 
>> > > wrote:
>> > >>
>> > >> After reading through the old postings and the CASUM I have not found 
>> > >> any
>> > >> mention of an EHCache backed ticket registry.  I have two questions:
>> > >>
>> > >> 1) has anyone implemented one yet?
>> > >
>> > > When we first tried it, it didn't scale very well.  We haven't tried 
>> > > with newer versions.
>> > >
>> > >>
>> > >> 2) the Users Manual mentions terracotta and the default ticket registry.
>> > >> Does that actually work and has anyone implemented it?
>> > >
>> > > There have a been a few instances where its been deployed.  We include a 
>> > > sample config in SVN.
>> > >
>> > > Cheers,
>> > > Scott
>> > >
>> > >>
>> > >> Dean
>> > >> --
>> > >> View this message in context: 
>> > >> http://n4.nabble.com/CAS-EHCache-Ticket-Registry-tp278045p278045.html
>> > >> Sent from the CAS Users mailing list archive at Nabble.com.
>> > >>
>> > >> --
>> > >> You are currently subscribed to [email protected] as: 
>> > >> [email protected]
>> > >> To unsubscribe, change settings or access archives, see 
>> > >> http://www.ja-sig.org/wiki/display/JSG/cas-user
>> > >
>> > > --
>> > > You are currently subscribed to [email protected] as: 
>> > > [email protected]
>> > > To unsubscribe, change settings or access archives, see 
>> > > http://www.ja-sig.org/wiki/display/JSG/cas-user
>> >
>> > --
>> > You are currently subscribed to [email protected] as: 
>> > [email protected]
>> > To unsubscribe, change settings or access archives, see 
>> > http://www.ja-sig.org/wiki/display/JSG/cas-user
>> >
>> > --
>> > You are currently subscribed to [email protected] as: 
>> > [email protected]
>> > To unsubscribe, change settings or access archives, see 
>> > http://www.ja-sig.org/wiki/display/JSG/cas-user
>> >
>>
>> --
>> You are currently subscribed to [email protected] as: 
>> [email protected]
>> To unsubscribe, change settings or access archives, see 
>> http://www.ja-sig.org/wiki/display/JSG/cas-user
>
> --
> You are currently subscribed to [email protected] as: 
> [email protected]
> To unsubscribe, change settings or access archives, see 
> http://www.ja-sig.org/wiki/display/JSG/cas-user

-- 
You are currently subscribed to [email protected] as: 
[email protected]
To unsubscribe, change settings or access archives, see 
http://www.ja-sig.org/wiki/display/JSG/cas-user

Reply via email to