Thanks for the JIRA issue and the kind words about CAS ;-)

Cheers,
Scott


On Wed, Nov 25, 2009 at 7:25 PM, Cyrille Le Clerc <
[email protected]> wrote:

> 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
>
>

-- 
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