001 package com.bea.medrec.entities;
002
003 import com.bea.medrec.utils.JNDINames;
004 import com.bea.medrec.utils.MedRecLog4jFactory;
005 import com.bea.medrec.utils.MedRecUtils;
006 import com.bea.medrec.utils.ServiceLocator;
007 import com.bea.medrec.value.Address;
008 import com.bea.medrec.value.Patient;
009 import java.sql.Date;
010 import java.util.Calendar;
011 import javax.ejb.CreateException;
012 import javax.ejb.EJBException;
013 import javax.ejb.EntityContext;
014 import javax.naming.NamingException;
015 import org.apache.log4j.Logger;
016 import weblogic.ejb.GenericEntityBean;
017 import weblogic.ejbgen.*;
018
019 /**
020 * <p>PatientEJB is an Container Managed EntityBean that
021 * manipulates patient persisted data.</p>
022 *
023 * @author Copyright (c) 2006 by BEA Systems. All Rights Reserved.
024 */
025 @AutomaticKeyGeneration(name = "PATIENT_SEQ",
026 type = AutomaticKeyGeneration.AutomaticKeyGenerationType.SEQUENCE_TABLE,
027 cacheSize = "10")
028 @CreateDefaultDbmsTables(value = "Disabled")
029 @EjbLocalRefs({
030 @EjbLocalRef(name = "ejb/local/address",
031 home = "com.bea.medrec.entities.AddressLocalHome",
032 local = "com.bea.medrec.entities.AddressLocal",
033 type = Constants.RefType.ENTITY,
034 link = "AddressEJB")
035 })
036 @Entity(maxBeansInCache = "1000",
037 dataSourceName = "jdbc/MedRecTxDataSource",
038 transTimeoutSeconds = "0",
039 ejbName = "PatientEJB",
040 reentrant = Constants.Bool.FALSE,
041 concurrencyStrategy = Constants.ConcurrencyStrategy.DATABASE,
042 delayDatabaseInsertUntil = Entity.DelayDatabaseInsertUntil.EJB_POST_CREATE,
043 tableName = "patient",
044 readTimeoutSeconds = "600",
045 primKeyClass = "java.lang.Integer",
046 defaultTransaction = Constants.TransactionAttribute.MANDATORY,
047 abstractSchemaName = "PatientEJB")
048 @FileGeneration(localClass = Constants.Bool.TRUE,
049 localHome = Constants.Bool.TRUE,
050 valueClass = Constants.Bool.FALSE)
051 @Finders({
052 @Finder(signature = "java.util.Collection findPatientByStatus(java.lang.String n0)",
053 ejbQl = "SELECT OBJECT(o) FROM PatientEJB AS o, UserEJB AS u WHERE u.status = ?1"),
054 @Finder(signature = "java.util.Collection findByLastNameFirstName(java.lang.String n0, java.lang.String n1)",
055 ejbQl = "SELECT OBJECT(o) FROM PatientEJB AS o WHERE UPPER(o.lastName) = UPPER(?1) and UPPER(o.firstName) = UPPER(?2)"),
056 @Finder(signature = "com.bea.medrec.entities.PatientLocal findBySsn(java.lang.String n0)",
057 ejbQl = "SELECT OBJECT(o) FROM PatientEJB AS o WHERE o.ssn = ?1",
058 groupName = "liteWeight"),
059 @Finder(signature = "com.bea.medrec.entities.PatientLocal findByEmail(java.lang.String n0)",
060 ejbQl = "not used in favor of weblogic-ejb-ql for relationship caching",
061 weblogicEjbQl = "SELECT OBJECT(o) FROM PatientEJB AS o WHERE UPPER(o.email) = UPPER(?1)",
062 cachingName = "addressCache"),
063 @Finder(signature = "com.bea.medrec.entities.PatientLocal findByPatientIdLite(java.lang.Integer n0)",
064 ejbQl = "SELECT OBJECT(o) FROM PatientEJB AS o WHERE o.id = ?1",
065 groupName = "liteWeight"),
066 @Finder(signature = "java.util.Collection findByLastNameFirstName(java.lang.String n0, java.lang.String n1)",
067 ejbQl = "SELECT OBJECT(o) FROM PatientEJB AS o WHERE UPPER(o.lastName) = UPPER(?1) and UPPER(o.firstName) = UPPER(?2)"),
068 @Finder(signature = "java.util.Collection findByLastNameDOB(java.lang.String n0, java.sql.Date n1)",
069 ejbQl = "SELECT OBJECT(o) FROM PatientEJB AS o WHERE UPPER(o.lastName) = UPPER(?1) and o.dateOfBirth = ?2"),
070 @Finder(signature = "java.util.Collection findByLastName(java.lang.String n0)",
071 ejbQl = "SELECT OBJECT(o) FROM PatientEJB AS o WHERE o.lastName = ?1"),
072 @Finder(signature = "java.util.Collection findByLastNameWild(java.lang.String n0)",
073 ejbQl = "not used in favor of weblogic-ejb-ql for relationship caching",
074 weblogicEjbQl = "SELECT OBJECT(o) FROM PatientEJB AS o WHERE UPPER(o.lastName) like UPPER(?1) ORDERBY o.lastName",
075 cachingName = "addressCache")
076 })
077 @Relations({
078 @Relation(cascadeDelete = Constants.Bool.FALSE,
079 cmrField = "address",
080 name = "Patient-Address",
081 roleName = "Patient-Has-Addresses",
082 multiplicity = Relation.Multiplicity.MANY,
083 targetEjb = "AddressEJB",
084 fkColumn = "address_id"),
085 @Relation(cascadeDelete = Constants.Bool.TRUE,
086 cmrField = "user",
087 name = "User-Patient",
088 roleName = "Patient-Has-User",
089 multiplicity = Relation.Multiplicity.ONE,
090 targetEjb = "UserEJB",
091 fkColumn = "email")
092 })
093 @RelationshipCachingElements({
094 @RelationshipCachingElement(cachingName = "addressCache",
095 cmrField = "address",
096 groupName = "address-group")
097 })
098 public abstract class PatientEJB extends GenericEntityBean {
099 // Logger
100 private static Logger logger =
101 MedRecLog4jFactory.getLogger(PatientEJB.class.getName());
102
103 // Attributes
104 private EntityContext ctx;
105 private AddressLocalHome addrHome;
106
107 // Local methods
108 // Container managed fields
109 @CmpField(column = "id",
110 orderingNumber = "1",
111 groupNames = "liteWeight")
112 @LocalMethod()
113 @PrimkeyField()
114 public abstract Integer getId();
115
116 @LocalMethod()
117 public abstract void setId(Integer id);
118
119 @CmpField(column = "first_name",
120 orderingNumber = "2",
121 groupNames = "liteWeight")
122 @LocalMethod()
123 public abstract String getFirstName();
124
125 @LocalMethod()
126 public abstract void setFirstName(String firstName);
127
128 @CmpField(column = "middle_name",
129 orderingNumber = "3",
130 groupNames = "liteWeight")
131 @LocalMethod()
132 public abstract String getMiddleName();
133
134 @LocalMethod()
135 public abstract void setMiddleName(String middleName);
136
137 @CmpField(column = "last_name",
138 orderingNumber = "4",
139 groupNames = "liteWeight")
140 @LocalMethod()
141 public abstract String getLastName();
142
143 @LocalMethod()
144 public abstract void setLastName(String lastName);
145
146 @CmpField(column = "dob",
147 orderingNumber = "5",
148 groupNames = "liteWeight")
149 @LocalMethod()
150 public abstract java.sql.Date getDateOfBirth();
151
152 @LocalMethod()
153 public abstract void setDateOfBirth(java.sql.Date dob);
154
155 @CmpField(column = "gender",
156 orderingNumber = "6")
157 @LocalMethod()
158 public abstract String getGender();
159
160 @LocalMethod()
161 public abstract void setGender(String gender);
162
163 @CmpField(column = "ssn",
164 orderingNumber = "7")
165 @LocalMethod()
166 public abstract String getSsn();
167
168 @LocalMethod()
169 public abstract void setSsn(String ssn);
170
171 @CmpField(column = "phone",
172 orderingNumber = "8")
173 @LocalMethod()
174 public abstract String getPhone();
175
176
177 @LocalMethod()
178 public abstract void setPhone(String phone);
179
180 @CmpField(column = "email",
181 orderingNumber = "9")
182 @LocalMethod()
183 public abstract String getEmail();
184
185 @LocalMethod()
186 public abstract void setEmail(String email);
187
188 @CmpField(column = "address_id",
189 orderingNumber = "10")
190 @LocalMethod()
191 public abstract Integer getAddressId();
192
193 @LocalMethod()
194 public abstract void setAddressId(Integer pAddressId);
195
196 // Container managed relation fields
197 @CmrField(orderingNumber = "11")
198 @LocalMethod()
199 public abstract AddressLocal getAddress();
200
201 @LocalMethod()
202 public abstract void setAddress(AddressLocal val);
203
204 @CmrField(orderingNumber = "12")
205 @LocalMethod()
206 public abstract UserLocal getUser();
207
208 @LocalMethod()
209 public abstract void setUser(UserLocal val);
210
211 /**
212 * <p>Returns a value object representation of the bean.</p>
213 *
214 * @return Patient
215 */
216 @LocalMethod()
217 public Patient getPatient() {
218 Patient patient = new Patient();
219 patient.setId(getId());
220 patient.setFirstName(getFirstName());
221 patient.setMiddleName(getMiddleName());
222 patient.setLastName(getLastName());
223 Calendar cal = MedRecUtils.convertSqlDate2Calendar(getDateOfBirth());
224 patient.setDateOfBirth(cal);
225 patient.setGender(getGender());
226 patient.setSsn(getSsn());
227 patient.setPhone(getPhone());
228 patient.setEmail(getEmail());
229 patient.setAddress(getAddress().getAddress());
230 return patient;
231 }
232
233 /**
234 * <p>Returns an abbreviated value object representation of the bean.
235 * Fields returned are:<br>
236 * id<br>
237 * first name<br>
238 * middle name<br>
239 * last name</p>
240 *
241 * @return Patient
242 */
243 @LocalMethod()
244 public Patient getPatientLite() {
245 Patient patient = new Patient();
246 patient.setId(getId());
247 patient.setFirstName(getFirstName());
248 patient.setMiddleName(getMiddleName());
249 patient.setLastName(getLastName());
250 Calendar cal = MedRecUtils.convertSqlDate2Calendar(getDateOfBirth());
251 patient.setDateOfBirth(cal);
252 patient.setGender(getGender());
253 return patient;
254 }
255
256 // Lifecycle methods
257 /**
258 * <p>Sets the entity context. Get handles for all
259 * required entity beans.</p>
260 *
261 * @param ctx EntityContext for entity
262 */
263 public void setEntityContext(EntityContext ctx) {
264 this.ctx = ctx;
265 try {
266 // Entity bean homes.
267 addrHome = getAddressLocalHome();
268 } catch (NamingException ne) {
269 throw new EJBException(ne);
270 }
271 }
272
273 // Home methods
274 /**
275 * <p>Patient create.</p>
276 */
277 public Object ejbCreate(Patient patient, UserLocal userLocal)
278 throws NamingException, CreateException {
279 logger.debug("Patient: "+patient);
280 setFirstName(patient.getFirstName());
281 setMiddleName(patient.getMiddleName());
282 setLastName(patient.getLastName());
283 Date dob = MedRecUtils.getDate(patient.getDateOfBirth());
284 setDateOfBirth(dob);
285 setGender(patient.getGender());
286 setSsn(patient.getSsn());
287 setPhone(patient.getPhone());
288 return null;
289 }
290
291 public void ejbPostCreate(Patient patient, UserLocal userLocal)
292 throws NamingException, CreateException {
293 logger.debug("patient: "+patient);
294 try {
295 setAddress(addrHome.create(patient.getAddress()));
296 setUser(userLocal);
297 } catch (CreateException e) {
298 logger.error(e.getMessage());
299 throw e;
300 }
301 }
302
303 /**
304 * <p>Patient create.</p>
305 */
306 public Object ejbCreate(String firstName,
307 String middleName,
308 String lastName,
309 Calendar dob,
310 String gender,
311 String ssn,
312 String phone,
313 String email,
314 Address address, UserLocal userLocal)
315 throws NamingException, CreateException {
316 setFirstName(firstName);
317 setMiddleName(middleName);
318 setLastName(lastName);
319 java.sql.Date date = new java.sql.Date(dob.getTime().getTime());
320 setDateOfBirth(date);
321 setGender(gender);
322 setSsn(ssn);
323 setPhone(phone);
324 return null;
325 }
326
327 public void ejbPostCreate(String firstName,
328 String middleName,
329 String lastName,
330 Calendar dob,
331 String gender,
332 String ssn,
333 String phone,
334 String email,
335 Address address,
336 UserLocal userLocal)
337 throws NamingException, CreateException {
338 try {
339 AddressLocal addressLocal = addrHome.create(address.getStreetName1(),
340 address.getStreetName2(), address.getCity(), address.getState(),
341 address.getZipCode(), address.getCountry());
342 setAddress(addressLocal);
343 setUser(userLocal);
344 } catch (CreateException e) {
345 logger.error(e.getMessage());
346 throw e;
347 }
348 }
349
350 // Utility methods
351 /**
352 * Get Address Entity EJB local home
353 */
354 public AddressLocalHome getAddressLocalHome() throws NamingException {
355 return (AddressLocalHome) lookUpLocalHome(JNDINames.ADDRESS_LOCAL_HOME,
356 AddressLocalHome.class);
357 }
358
359 /**
360 * Get local home
361 */
362 public Object lookUpLocalHome(String pHome, Class pClazz) throws NamingException {
363 ServiceLocator locator = ServiceLocator.getInstance();
364 Object obj = locator.lookupLocalHome(pHome, pClazz);
365 return obj;
366 }
367 }
|