1   /**
2    * Copyright (c) 2000-2009 Liferay, Inc. All rights reserved.
3    *
4    * The contents of this file are subject to the terms of the Liferay Enterprise
5    * Subscription License ("License"). You may not use this file except in
6    * compliance with the License. You can obtain a copy of the License by
7    * contacting Liferay, Inc. See the License for the specific language governing
8    * permissions and limitations under the License, including but not limited to
9    * distribution rights of the Software.
10   *
11   * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
12   * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
13   * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
14   * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
15   * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
16   * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
17   * SOFTWARE.
18   */
19  
20  package com.liferay.portal.dao.shard;
21  
22  import com.liferay.portal.util.PropsValues;
23  
24  import java.util.Map;
25  
26  import org.hibernate.SessionFactory;
27  
28  import org.springframework.aop.TargetSource;
29  
30  /**
31   * <a href="ShardSessionFactoryTargetSource.java.html"><b><i>View Source</i></b>
32   * </a>
33   *
34   * @author Michael Young
35   *
36   */
37  public class ShardSessionFactoryTargetSource implements TargetSource {
38  
39      public SessionFactory getSessionFactory() {
40          return _sessionFactoryThreadLocal.get();
41      }
42  
43      public Object getTarget() throws Exception {
44          return getSessionFactory();
45      }
46  
47      public Class<?> getTargetClass() {
48          return _sessionFactories.get(PropsValues.SHARD_DEFAULT_NAME).getClass();
49      }
50  
51      public boolean isStatic() {
52          return false;
53      }
54  
55      public void releaseTarget(Object target) throws Exception {
56      }
57  
58      public void setSessionFactory(String shardName) {
59          _sessionFactoryThreadLocal.set(_sessionFactories.get(shardName));
60      }
61  
62      public void setSessionFactories(
63          Map<String, SessionFactory> sessionFactories) {
64  
65          _sessionFactories = sessionFactories;
66      }
67  
68      private static Map<String, SessionFactory> _sessionFactories;
69  
70      private static ThreadLocal<SessionFactory> _sessionFactoryThreadLocal =
71          new ThreadLocal<SessionFactory>() {
72  
73          protected SessionFactory initialValue() {
74              return _sessionFactories.get(PropsValues.SHARD_DEFAULT_NAME);
75          }
76  
77      };
78  
79  }