001    package railo.runtime.type.scope.storage;
002    
003    import railo.commons.io.cache.CacheEntry;
004    import railo.commons.io.cache.CacheEventListener;
005    import railo.runtime.CFMLFactoryImpl;
006    import railo.runtime.config.Config;
007    import railo.runtime.engine.ThreadLocalPageContext;
008    import railo.runtime.exp.ExceptionHandler;
009    import railo.runtime.listener.ApplicationListener;
010    import railo.runtime.op.Caster;
011    
012    public class SessionEndCacheEvent implements CacheEventListener {
013    
014            public void onExpires(CacheEntry entry) {
015                    //return new StringBuilder(cache instanceof CacheEvent?"":"railo-storage:").append(type).append(":").append(cfid).append(":").append(appName).toString();
016                    
017                    String key=entry.getKey();
018                    
019                    // type
020                    int index=key.indexOf(':'),last;
021                    String type=key.substring(0,index);
022                    
023                    // cfid
024                    last=index+1;
025                    index=key.indexOf(':',last);
026                    String cfid=key.substring(last,index);
027                    
028                    // appName
029                    last=index+1;
030                    index=key.indexOf(':',last);
031                    String appName=key.substring(last);
032                                    
033                    Config config = ThreadLocalPageContext.getConfig();
034                    
035                    _doEnd((CFMLFactoryImpl) config.getFactory(), appName, cfid);
036            }
037            
038            private void _doEnd(CFMLFactoryImpl factory,String appName, String cfid) {
039                    ApplicationListener listener = factory.getConfig().getApplicationListener();
040                    try {
041                            factory.getScopeContext().info("call onSessionEnd for "+appName+"/"+cfid);
042                            listener.onSessionEnd(factory, appName, cfid);
043                    } 
044                    catch (Throwable t) {
045                            ExceptionHandler.log(factory.getConfig(),Caster.toPageException(t));
046                    }
047            }
048            
049            @Override
050            public void onRemove(CacheEntry entry) {
051                    // TODO Auto-generated method stub
052    
053            }
054    
055            @Override
056            public void onPut(CacheEntry entry) {
057                    // TODO Auto-generated method stub
058    
059            }
060    
061    
062            @Override
063            public CacheEventListener duplicate() {
064                    // TODO Auto-generated method stub
065                    return null;
066            }
067    
068    }