PatientEJB.ejb
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 (AddressLocalHomelookUpLocalHome(JNDINames.ADDRESS_LOCAL_HOME,
356         AddressLocalHome.class);
357   }
358 
359   /**
360    * Get local home
361    */
362   public Object lookUpLocalHome(String pHome, Class pClazzthrows NamingException {
363     ServiceLocator locator = ServiceLocator.getInstance();
364     Object obj = locator.lookupLocalHome(pHome, pClazz);
365     return obj;
366   }
367 }