1 //----------------------------------------------------------------------
2 //
3 // PerfectJPattern: "Design patterns are good but components are better!"
4 // HibernateDaoFactory.java Copyright (c) 2009 Giovanni Azua Garcia
5 // bravegag@hotmail.com
6 //
7 // This program is free software; you can redistribute it and/or
8 // modify it under the terms of the GNU General Public License
9 // as published by the Free Software Foundation; either version 3
10 // of the License, or (at your option) any later version.
11 //
12 // This program is distributed in the hope that it will be useful,
13 // but WITHOUT ANY WARRANTY; without even the implied warranty of
14 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 // GNU General Public License for more details.
16 //
17 // You should have received a copy of the GNU General Public License
18 // along with this program; if not, see <http://www.gnu.org/licenses/>.
19 //
20 //----------------------------------------------------------------------
21 package org.perfectjpattern.jee.integration.dao;
22
23 import java.io.*;
24
25 import org.perfectjpattern.jee.api.integration.dao.*;
26
27 /**
28 * Concrete implementation for {@link IGenericDaoFactory}
29 *
30 * @author <a href="mailto:bravegag@hotmail.com">Giovanni Azua</a>
31 * @version $ $Date: Dec 5, 2008 5:11:45 PM $
32 */
33 public
34 class HibernateDaoFactory
35 extends AbstractDaoFactory
36 implements IGenericDaoFactory
37 {
38 //------------------------------------------------------------------------
39 // public
40 //------------------------------------------------------------------------
41 /**
42 * Returns Singleton instance of {@link HibernateDaoFactory}
43 *
44 * @return Singleton instance of {@link HibernateDaoFactory}
45 */
46 public static HibernateDaoFactory
47 getInstance()
48 {
49 return INSTANCE;
50 }
51
52 //------------------------------------------------------------------------
53 /**
54 * {@inheritDoc}
55 */
56 @Override
57 public <Id extends Serializable, Element> IGenericReadOnlyDao<Id, Element>
58 createReadOnlyDao(Class<Element> aPersistentClass)
59 throws IllegalArgumentException
60 {
61 IGenericReadOnlyDao<Id, Element> myGenericReadOnlyDao = createDao(
62 aPersistentClass);
63
64 assert myGenericReadOnlyDao != null :
65 "myGenericReadOnlyDao must not be null";
66
67 return myGenericReadOnlyDao;
68 }
69
70 //------------------------------------------------------------------------
71 /**
72 * {@inheritDoc}
73 */
74 @SuppressWarnings("unchecked")
75 @Override
76 public <Id extends Serializable, Element> IGenericDao<Id, Element>
77 createDao(Class<Element> aPersistentClass)
78 throws IllegalArgumentException
79 {
80 IGenericDao<Id, Element> myGenericDao = (IGenericDao<Id, Element>)
81 super.createDao(aPersistentClass);
82
83 assert myGenericDao != null : "myGenericDao must not be null";
84
85 return myGenericDao;
86 }
87
88 //------------------------------------------------------------------------
89 // protected
90 //------------------------------------------------------------------------
91 /**
92 * Constructs {@link HibernateDaoFactory} to consume Session instances
93 * from the given {@link ISessionStrategy} and Transaction instances from
94 * the {@link ITransactionStrategy}
95 *
96 * @param aSessionStrategy {@link ISessionStrategy} to consume
97 * Session instances from
98 * @param aTransactionStrategy {@link ITransactionStrategy} to
99 * consume Transaction instances from
100 * @throws IllegalArgumentException 'aDaoSessionStrategy' must not be null
101 * @throws IllegalArgumentException 'aDaoTransactionStrategy' must not
102 * be null
103 */
104 protected
105 HibernateDaoFactory(ISessionStrategy aSessionStrategy,
106 ITransactionStrategy aTransactionStrategy)
107 throws IllegalArgumentException
108 {
109 setDaoSessionStrategy(aSessionStrategy);
110 setDaoTransactionStrategy(aTransactionStrategy);
111 }
112
113 //------------------------------------------------------------------------
114 /**
115 * Defaults to JSE mode
116 */
117 protected
118 HibernateDaoFactory()
119 {
120 ISessionStrategy myDaoSessionStrategy =
121 new HibernateCurrentSessionStrategy();
122 ITransactionStrategy myDaoTransactionStrategy =
123 new HibernateConfiguredTransactionStrategy(myDaoSessionStrategy);
124
125 setDaoSessionStrategy(myDaoSessionStrategy);
126 setDaoTransactionStrategy(myDaoTransactionStrategy);
127 }
128
129 //------------------------------------------------------------------------
130 // protected
131 //------------------------------------------------------------------------
132 @Override
133 protected <Id extends Serializable, Element> IGenericDao<Id, Element>
134 createDao(Class<Element> aPersistentClass,
135 ISessionStrategy aSessionStrategy,
136 ITransactionStrategy aTransactionStrategy)
137 {
138 assert aPersistentClass != null : "'aPersistentClass' must not be null";
139 assert aSessionStrategy != null : "'aSessionStrategy' must not be null";
140 assert aTransactionStrategy != null :
141 "'aTransactionStrategy' must not be null";
142
143 return new HibernateGenericDao<Id, Element>(aPersistentClass,
144 aSessionStrategy, aTransactionStrategy);
145 }
146
147 //------------------------------------------------------------------------
148 // members
149 //------------------------------------------------------------------------
150 private static final HibernateDaoFactory INSTANCE =
151 new HibernateDaoFactory();
152 }