<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html lang="en">
<head>
<title>Source code</title>
<link rel="stylesheet" type="text/css" href="../../../../../../../stylesheet.css" title="Style">
</head>
<body>
<div class="sourceContainer">
<pre><span class="sourceLineNo">001</span>/*<a name="line.1"></a>
<span class="sourceLineNo">002</span> * Licensed to the Apache Software Foundation (ASF) under one<a name="line.2"></a>
<span class="sourceLineNo">003</span> * or more contributor license agreements.  See the NOTICE file<a name="line.3"></a>
<span class="sourceLineNo">004</span> * distributed with this work for additional information<a name="line.4"></a>
<span class="sourceLineNo">005</span> * regarding copyright ownership.  The ASF licenses this file<a name="line.5"></a>
<span class="sourceLineNo">006</span> * to you under the Apache License, Version 2.0 (the<a name="line.6"></a>
<span class="sourceLineNo">007</span> * "License"); you may not use this file except in compliance<a name="line.7"></a>
<span class="sourceLineNo">008</span> * with the License.  You may obtain a copy of the License at<a name="line.8"></a>
<span class="sourceLineNo">009</span> *<a name="line.9"></a>
<span class="sourceLineNo">010</span> *     http://www.apache.org/licenses/LICENSE-2.0<a name="line.10"></a>
<span class="sourceLineNo">011</span> *<a name="line.11"></a>
<span class="sourceLineNo">012</span> * Unless required by applicable law or agreed to in writing,<a name="line.12"></a>
<span class="sourceLineNo">013</span> * software distributed under the License is distributed on an<a name="line.13"></a>
<span class="sourceLineNo">014</span> * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY<a name="line.14"></a>
<span class="sourceLineNo">015</span> * KIND, either express or implied.  See the License for the<a name="line.15"></a>
<span class="sourceLineNo">016</span> * specific language governing permissions and limitations<a name="line.16"></a>
<span class="sourceLineNo">017</span> * under the License.<a name="line.17"></a>
<span class="sourceLineNo">018</span> */<a name="line.18"></a>
<span class="sourceLineNo">019</span>package org.apache.shiro.session.mgt.eis;<a name="line.19"></a>
<span class="sourceLineNo">020</span><a name="line.20"></a>
<span class="sourceLineNo">021</span>import org.apache.shiro.session.Session;<a name="line.21"></a>
<span class="sourceLineNo">022</span>import org.apache.shiro.session.UnknownSessionException;<a name="line.22"></a>
<span class="sourceLineNo">023</span><a name="line.23"></a>
<span class="sourceLineNo">024</span>import java.io.Serializable;<a name="line.24"></a>
<span class="sourceLineNo">025</span>import java.util.Collection;<a name="line.25"></a>
<span class="sourceLineNo">026</span><a name="line.26"></a>
<span class="sourceLineNo">027</span><a name="line.27"></a>
<span class="sourceLineNo">028</span>/**<a name="line.28"></a>
<span class="sourceLineNo">029</span> * Data Access Object design pattern specification to enable {@link Session} access to an<a name="line.29"></a>
<span class="sourceLineNo">030</span> * EIS (Enterprise Information System).  It provides your four typical CRUD methods:<a name="line.30"></a>
<span class="sourceLineNo">031</span> * {@link #create}, {@link #readSession(java.io.Serializable)}, {@link #update(org.apache.shiro.session.Session)},<a name="line.31"></a>
<span class="sourceLineNo">032</span> * and {@link #delete(org.apache.shiro.session.Session)}.<a name="line.32"></a>
<span class="sourceLineNo">033</span> * &lt;p/&gt;<a name="line.33"></a>
<span class="sourceLineNo">034</span> * The remaining {@link #getActiveSessions()} method exists as a support mechanism to pre-emptively orphaned sessions,<a name="line.34"></a>
<span class="sourceLineNo">035</span> * typically by {@link org.apache.shiro.session.mgt.ValidatingSessionManager ValidatingSessionManager}s), and should<a name="line.35"></a>
<span class="sourceLineNo">036</span> * be as efficient as possible, especially if there are thousands of active sessions.  Large scale/high performance<a name="line.36"></a>
<span class="sourceLineNo">037</span> * implementations will often return a subset of the total active sessions and perform validation a little more<a name="line.37"></a>
<span class="sourceLineNo">038</span> * frequently, rather than return a massive set and infrequently validate.<a name="line.38"></a>
<span class="sourceLineNo">039</span> *<a name="line.39"></a>
<span class="sourceLineNo">040</span> * @since 0.1<a name="line.40"></a>
<span class="sourceLineNo">041</span> */<a name="line.41"></a>
<span class="sourceLineNo">042</span>public interface SessionDAO {<a name="line.42"></a>
<span class="sourceLineNo">043</span><a name="line.43"></a>
<span class="sourceLineNo">044</span>    /**<a name="line.44"></a>
<span class="sourceLineNo">045</span>     * Inserts a new Session record into the underling EIS (e.g. Relational database, file system, persistent cache,<a name="line.45"></a>
<span class="sourceLineNo">046</span>     * etc, depending on the DAO implementation).<a name="line.46"></a>
<span class="sourceLineNo">047</span>     * &lt;p/&gt;<a name="line.47"></a>
<span class="sourceLineNo">048</span>     * After this method is invoked, the {@link org.apache.shiro.session.Session#getId()}<a name="line.48"></a>
<span class="sourceLineNo">049</span>     * method executed on the argument must return a valid session identifier.  That is, the following should<a name="line.49"></a>
<span class="sourceLineNo">050</span>     * always be true:<a name="line.50"></a>
<span class="sourceLineNo">051</span>     * &lt;pre&gt;<a name="line.51"></a>
<span class="sourceLineNo">052</span>     * Serializable id = create( session );<a name="line.52"></a>
<span class="sourceLineNo">053</span>     * id.equals( session.getId() ) == true&lt;/pre&gt;<a name="line.53"></a>
<span class="sourceLineNo">054</span>     * &lt;p/&gt;<a name="line.54"></a>
<span class="sourceLineNo">055</span>     * Implementations are free to throw any exceptions that might occur due to<a name="line.55"></a>
<span class="sourceLineNo">056</span>     * integrity violation constraints or other EIS related errors.<a name="line.56"></a>
<span class="sourceLineNo">057</span>     *<a name="line.57"></a>
<span class="sourceLineNo">058</span>     * @param session the {@link org.apache.shiro.session.Session} object to create in the EIS.<a name="line.58"></a>
<span class="sourceLineNo">059</span>     * @return the EIS id (e.g. primary key) of the created {@code Session} object.<a name="line.59"></a>
<span class="sourceLineNo">060</span>     */<a name="line.60"></a>
<span class="sourceLineNo">061</span>    Serializable create(Session session);<a name="line.61"></a>
<span class="sourceLineNo">062</span><a name="line.62"></a>
<span class="sourceLineNo">063</span>    /**<a name="line.63"></a>
<span class="sourceLineNo">064</span>     * Retrieves the session from the EIS uniquely identified by the specified<a name="line.64"></a>
<span class="sourceLineNo">065</span>     * {@code sessionId}.<a name="line.65"></a>
<span class="sourceLineNo">066</span>     *<a name="line.66"></a>
<span class="sourceLineNo">067</span>     * @param sessionId the system-wide unique identifier of the Session object to retrieve from<a name="line.67"></a>
<span class="sourceLineNo">068</span>     *                  the EIS.<a name="line.68"></a>
<span class="sourceLineNo">069</span>     * @return the persisted session in the EIS identified by {@code sessionId}.<a name="line.69"></a>
<span class="sourceLineNo">070</span>     * @throws UnknownSessionException if there is no EIS record for any session with the<a name="line.70"></a>
<span class="sourceLineNo">071</span>     *                                 specified {@code sessionId}<a name="line.71"></a>
<span class="sourceLineNo">072</span>     */<a name="line.72"></a>
<span class="sourceLineNo">073</span>    Session readSession(Serializable sessionId) throws UnknownSessionException;<a name="line.73"></a>
<span class="sourceLineNo">074</span><a name="line.74"></a>
<span class="sourceLineNo">075</span>    /**<a name="line.75"></a>
<span class="sourceLineNo">076</span>     * Updates (persists) data from a previously created Session instance in the EIS identified by<a name="line.76"></a>
<span class="sourceLineNo">077</span>     * {@code {@link Session#getId() session.getId()}}.  This effectively propagates<a name="line.77"></a>
<span class="sourceLineNo">078</span>     * the data in the argument to the EIS record previously saved.<a name="line.78"></a>
<span class="sourceLineNo">079</span>     * &lt;p/&gt;<a name="line.79"></a>
<span class="sourceLineNo">080</span>     * In addition to UnknownSessionException, implementations are free to throw any other<a name="line.80"></a>
<span class="sourceLineNo">081</span>     * exceptions that might occur due to integrity violation constraints or other EIS related<a name="line.81"></a>
<span class="sourceLineNo">082</span>     * errors.<a name="line.82"></a>
<span class="sourceLineNo">083</span>     *<a name="line.83"></a>
<span class="sourceLineNo">084</span>     * @param session the Session to update<a name="line.84"></a>
<span class="sourceLineNo">085</span>     * @throws org.apache.shiro.session.UnknownSessionException<a name="line.85"></a>
<span class="sourceLineNo">086</span>     *          if no existing EIS session record exists with the<a name="line.86"></a>
<span class="sourceLineNo">087</span>     *          identifier of {@link Session#getId() session.getSessionId()}<a name="line.87"></a>
<span class="sourceLineNo">088</span>     */<a name="line.88"></a>
<span class="sourceLineNo">089</span>    void update(Session session) throws UnknownSessionException;<a name="line.89"></a>
<span class="sourceLineNo">090</span><a name="line.90"></a>
<span class="sourceLineNo">091</span>    /**<a name="line.91"></a>
<span class="sourceLineNo">092</span>     * Deletes the associated EIS record of the specified {@code session}.  If there never<a name="line.92"></a>
<span class="sourceLineNo">093</span>     * existed a session EIS record with the identifier of<a name="line.93"></a>
<span class="sourceLineNo">094</span>     * {@link Session#getId() session.getId()}, then this method does nothing.<a name="line.94"></a>
<span class="sourceLineNo">095</span>     *<a name="line.95"></a>
<span class="sourceLineNo">096</span>     * @param session the session to delete.<a name="line.96"></a>
<span class="sourceLineNo">097</span>     */<a name="line.97"></a>
<span class="sourceLineNo">098</span>    void delete(Session session);<a name="line.98"></a>
<span class="sourceLineNo">099</span><a name="line.99"></a>
<span class="sourceLineNo">100</span>    /**<a name="line.100"></a>
<span class="sourceLineNo">101</span>     * Returns all sessions in the EIS that are considered active, meaning all sessions that<a name="line.101"></a>
<span class="sourceLineNo">102</span>     * haven't been stopped/expired.  This is primarily used to validate potential orphans.<a name="line.102"></a>
<span class="sourceLineNo">103</span>     * &lt;p/&gt;<a name="line.103"></a>
<span class="sourceLineNo">104</span>     * If there are no active sessions in the EIS, this method may return an empty collection or {@code null}.<a name="line.104"></a>
<span class="sourceLineNo">105</span>     * &lt;h4&gt;Performance&lt;/h4&gt;<a name="line.105"></a>
<span class="sourceLineNo">106</span>     * This method should be as efficient as possible, especially in larger systems where there might be<a name="line.106"></a>
<span class="sourceLineNo">107</span>     * thousands of active sessions.  Large scale/high performance<a name="line.107"></a>
<span class="sourceLineNo">108</span>     * implementations will often return a subset of the total active sessions and perform validation a little more<a name="line.108"></a>
<span class="sourceLineNo">109</span>     * frequently, rather than return a massive set and validate infrequently.  If efficient and possible, it would<a name="line.109"></a>
<span class="sourceLineNo">110</span>     * make sense to return the oldest unstopped sessions available, ordered by<a name="line.110"></a>
<span class="sourceLineNo">111</span>     * {@link org.apache.shiro.session.Session#getLastAccessTime() lastAccessTime}.<a name="line.111"></a>
<span class="sourceLineNo">112</span>     * &lt;h4&gt;Smart Results&lt;/h4&gt;<a name="line.112"></a>
<span class="sourceLineNo">113</span>     * &lt;em&gt;Ideally&lt;/em&gt; this method would only return active sessions that the EIS was certain should be invalided.<a name="line.113"></a>
<span class="sourceLineNo">114</span>     * Typically that is any session that is not stopped and where its lastAccessTimestamp is older than the session<a name="line.114"></a>
<span class="sourceLineNo">115</span>     * timeout.<a name="line.115"></a>
<span class="sourceLineNo">116</span>     * &lt;p/&gt;<a name="line.116"></a>
<span class="sourceLineNo">117</span>     * For example, if sessions were backed by a relational database or SQL-92 'query-able' enterprise cache, you might<a name="line.117"></a>
<span class="sourceLineNo">118</span>     * return something similar to the results returned by this query (assuming<a name="line.118"></a>
<span class="sourceLineNo">119</span>     * {@link org.apache.shiro.session.mgt.SimpleSession SimpleSession}s were being stored):<a name="line.119"></a>
<span class="sourceLineNo">120</span>     * &lt;pre&gt;<a name="line.120"></a>
<span class="sourceLineNo">121</span>     * select * from sessions s where s.lastAccessTimestamp &lt; ? and s.stopTimestamp is null<a name="line.121"></a>
<span class="sourceLineNo">122</span>     * &lt;/pre&gt;<a name="line.122"></a>
<span class="sourceLineNo">123</span>     * where the {@code ?} parameter is a date instance equal to 'now' minus the session timeout<a name="line.123"></a>
<span class="sourceLineNo">124</span>     * (e.g. now - 30 minutes).<a name="line.124"></a>
<span class="sourceLineNo">125</span>     *<a name="line.125"></a>
<span class="sourceLineNo">126</span>     * @return a Collection of {@code Session}s that are considered active, or an<a name="line.126"></a>
<span class="sourceLineNo">127</span>     *         empty collection or {@code null} if there are no active sessions.<a name="line.127"></a>
<span class="sourceLineNo">128</span>     */<a name="line.128"></a>
<span class="sourceLineNo">129</span>    Collection&lt;Session&gt; getActiveSessions();<a name="line.129"></a>
<span class="sourceLineNo">130</span>}<a name="line.130"></a>




























































</pre>
</div>
</body>
</html>