KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > com > nightlabs > ipanema > person > PersonManagerBean


1 /*
2  * Created on 02.03.2004
3  */

4 package com.nightlabs.ipanema.person;
5
6 import java.rmi.RemoteException JavaDoc;
7 import java.util.Collection JavaDoc;
8
9 import javax.ejb.CreateException JavaDoc;
10 import javax.ejb.EJBException JavaDoc;
11 import javax.ejb.SessionBean JavaDoc;
12 import javax.ejb.SessionContext JavaDoc;
13 import javax.jdo.FetchPlan;
14 import javax.jdo.JDOObjectNotFoundException;
15 import javax.jdo.PersistenceManager;
16 import javax.jdo.Query;
17
18 import org.apache.log4j.Logger;
19
20 import com.nightlabs.ModuleException;
21 import com.nightlabs.ipanema.base.BaseSessionBeanImpl;
22 import com.nightlabs.ipanema.person.id.PersonID;
23 import com.nightlabs.jdo.NLJDOHelper;
24 import com.nightlabs.jdo.search.SearchFilter;
25 import com.nightlabs.util.Utils;
26
27 /**
28  * @author alex
29  * @author nick
30  * @author marco
31  */

32
33 /**
34  * @ejb.bean
35  * name="ipanema/ejb/IpanemaBaseBean/PersonManager"
36  * jndi-name="ipanema/ejb/IpanemaBaseBean/PersonManager"
37  * type="Stateless"
38  *
39  * @ejb.util generate = "physical"
40  */

41 public abstract class PersonManagerBean extends BaseSessionBeanImpl implements
42         SessionBean JavaDoc {
43     private static final Logger LOGGER = Logger.getLogger(PersonManagerBean.class);
44
45     /**
46      * @see com.nightlabs.ipanema.base.BaseSessionBeanImpl#setSessionContext(javax.ejb.SessionContext)
47      */

48     public void setSessionContext(SessionContext JavaDoc sessionContext)
49             throws EJBException JavaDoc, RemoteException JavaDoc {
50         super.setSessionContext(sessionContext);
51     }
52
53     /**
54      * @ejb.create-method
55      * @ejb.permission role-name="PersonManager-read"
56      */

57     public void ejbCreate() throws CreateException JavaDoc {
58 // try {
59
// System.out.println("PersonManagerBean created by "
60
// + this.getPrincipalString());
61
// } catch (ModuleException e) {
62
// throw new CreateException(e.getMessage());
63
// }
64
}
65
66     /**
67      * @see javax.ejb.SessionBean#ejbRemove()
68      *
69      * @ejb.permission unchecked="true"
70      */

71     public void ejbRemove() throws EJBException JavaDoc, RemoteException JavaDoc {
72     }
73
74     /**
75      * Detaches and returns the complete PersonStruct.
76      *
77      * @ejb.interface-method
78      * @ejb.permission role-name="PersonManager-read"
79      * @ejb.transaction type = "Required"
80      */

81     public PersonStruct getFullPersonStructure() throws ModuleException {
82         PersistenceManager pm = getPersistenceManager();
83         try {
84             pm.getFetchPlan().addGroup(FetchPlan.ALL);
85             PersonStruct ps = PersonStruct.getPersonStruct(pm);
86             PersonStruct result = (PersonStruct) pm.detachCopy(ps);
87             return result;
88
89         } finally {
90             pm.close();
91         }
92     }
93     
94     /**
95      * @throws ModuleException
96      *
97      * @ejb.interface-method
98      * @ejb.permission role-name="PersonManager-write"
99      * @ejb.transaction type = "Required"
100      */

101     public long createPersonID() throws ModuleException {
102         PersistenceManager pm = this.getPersistenceManager();
103         try {
104             long nextPersonID = PersonRegistry.getRegistry(pm).createPersonID();
105             LOGGER.info("createPersonID() returning "+nextPersonID+" as next PersonID");
106             return nextPersonID;
107         }
108         finally {
109             pm.close();
110         }
111     }
112
113     /**
114      * Retrieve the person with the given ID
115      *
116      * @throws ModuleException
117      * @ejb.interface-method
118      * @ejb.permission role-name="PersonManager-read"
119      * @ejb.transaction type = "Required"
120      */

121     public Person getPerson(PersonID personID, String JavaDoc[] fetchGroups)
122             throws ModuleException, JDOObjectNotFoundException {
123         PersistenceManager pm = this.getPersistenceManager();
124         pm.getExtent(Person.class, true);
125         Person person = (Person) pm.getObjectById(personID, true);
126
127         if (fetchGroups != null) {
128             for (int i = 0; i < fetchGroups.length; i++) {
129                 pm.getFetchPlan().addGroup(fetchGroups[i]);
130             }
131         }
132
133         Person result = (Person) pm.detachCopy(person);
134         pm.close();
135
136         return result;
137     }
138
139     /**
140      * Retrieve the person with the given ID
141      *
142      * @throws ModuleException
143      * @ejb.interface-method
144      * @ejb.permission role-name="PersonManager-read"
145      * @ejb.transaction type = "Required"
146      */

147     public Person getPerson(PersonID personID) throws ModuleException,
148             JDOObjectNotFoundException {
149         PersistenceManager pm = this.getPersistenceManager();
150         try {
151             Object JavaDoc o = pm.getObjectById(personID, true);
152             long startTime = System.currentTimeMillis();
153 // pm.getFetchPlan().resetGroups();
154
pm.getFetchPlan().addGroup(FetchPlan.ALL);
155             Person ret = (Person) pm.detachCopy(o);
156             return ret;
157         } finally {
158             pm.close();
159         }
160         
161     }
162
163     /**
164      *
165      * Retrieve a list of Persons.
166      *
167      * @throws ModuleException
168      * @ejb.interface-method
169      * @ejb.permission role-name="PersonManager-read"
170      * @ejb.transaction type = "Required"
171      */

172     public Collection JavaDoc searchPerson(SearchFilter personSearchFilter, String JavaDoc[] fetchGroups)
173             throws ModuleException, JDOObjectNotFoundException {
174         PersistenceManager pm = this.getPersistenceManager();
175
176         Collection JavaDoc persons = personSearchFilter.executeQuery(pm);
177
178         //pm.getFetchPlan().resetGroups();
179
pm.getFetchPlan().clearGroups();
180         if (fetchGroups != null)
181             pm.getFetchPlan().setGroups(Utils.array2ArrayList(fetchGroups));
182         
183         Collection JavaDoc result = pm.detachCopyAll(persons);
184         pm.close();
185
186         return result;
187     }
188     
189     /**
190      * Store a person either detached or not
191      * made persistent yet.
192      *
193      * @throws ModuleException
194      *
195      * @ejb.interface-method
196      * @ejb.permission role-name="_Guest_"
197      * @ejb.transaction type = "Required"
198      */

199     public Person storePerson(Person person, boolean get, String JavaDoc[] fetchGroups)
200     throws ModuleException
201     {
202         PersistenceManager pm = getPersistenceManager();
203         try {
204             return (Person) NLJDOHelper.storeJDO(pm, person, get, fetchGroups);
205         } finally {
206             pm.close();
207         }
208     }
209     
210     /**
211      * Get a Collection all Persons
212      *
213      * @throws ModuleException
214      *
215      * @ejb.interface-method
216      * @ejb.permission role-name="_Guest_"
217      * @ejb.transaction type = "Required"
218      */

219     public Collection JavaDoc getPersons(String JavaDoc[] fetchGroups) throws ModuleException {
220 // MultiPageSearchResult multiPageSearchResult = new MultiPageSearchResult();
221
PersistenceManager pm = getPersistenceManager();
222         try {
223             
224             Query query = pm.newQuery(Person.class);
225             
226             Collection JavaDoc elements = (Collection JavaDoc)query.execute();
227             for (int i=0; i<fetchGroups.length; i++)
228                 pm.getFetchPlan().addGroup(fetchGroups[i]);
229             
230             long time = System.currentTimeMillis();
231             Collection JavaDoc result = pm.detachCopyAll(elements);
232             time = System.currentTimeMillis() - time;
233             LOGGER.info("Detach of "+result.size()+" Persons took "+((double)time / (double)1000));
234             return result;
235         }
236         finally {
237             pm.close();
238         }
239     }
240 }
Popular Tags