Example: Developing entity bean with bean managed persistence (container managed transaction)
//===================START_PROLOG====================================== // // 5630-A23, 5630-A22, // (C) COPYRIGHT International Business Machines Corp. 2002 // All Rights Reserved // Licensed Materials - Property of IBM // disclosure restricted by GSA ADP Schedule Contract with IBM Corp. // // IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING // ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR // PURPOSE. IN NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR // CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF // USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR // OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE // OR PERFORMANCE OF THIS SOFTWARE. // //===================END_PROLOG======================================== package WebSphereSamples.ConnPool; import java.rmi.RemoteException; import java.util.*; import javax.ejb.*; import java.sql.*; import javax.sql.*; import javax.ejb.*; import javax.naming.*; /** * This is an Entity Bean class with five BMP fields * String firstName, String lastName, String middleInit * String empNo, int edLevel */ public class EmployeeBMPBean implements EntityBean { private javax.ejb.EntityContext entityContext = null; final static long serialVersionUID = 3206093459760846163L; private java.lang.String firstName; private java.lang.String lastName; private String middleInit; private javax.sql.DataSource ds; private java.lang.String empNo; private int edLevel; /** * ejbActivate method * @exception java.rmi.RemoteException * ejbActivate calls getDS(), which perfoms the * JNDI lookup for the datasource. */ public void ejbActivate() throws java.rmi.RemoteException { getDS(); } /** * ejbCreate method for a BMP entity bean * @return WebSphereSamples.ConnPool.EmployeeBMPKey * @param key WebSphereSamples.ConnPool.EmployeeBMPKey * @exception javax.ejb.CreateException * @exception java.rmi.RemoteException */ public WebSphereSamples.ConnPool.EmployeeBMPKey ejbCreate(String empNo, String firstName, String lastName, String middleInit, int edLevel) throws javax.ejb.CreateException, java.rmi.RemoteException { Connection conn = null; PreparedStatement ps = null; if (ds == null) getDS(); this.empNo = empNo; this.firstName = firstName; this.lastName = lastName; this.middleInit = middleInit; this.edLevel = edLevel; String sql = "insert into Employee (empNo, firstnme, midinit, lastname, edlevel) values (?,?,?,?,?)"; try { conn = ds.getConnection(); ps = conn.prepareStatement(sql); ps.setString(1, empNo); ps.setString(2, firstName); ps.setString(3, middleInit); ps.setString(4, lastName); ps.setInt(5, edLevel); if (ps.executeUpdate() != 1){ System.out.println("ejbCreate Failed to add user."); throw new CreateException("Failed to add user."); } } catch (com.ibm.websphere.ce.cm.StaleConnectionException se) { // This exception indicates that the connection to the database is no longer valid. // Rollback the transaction, and throw an exception to the client indicating they // can retry the transaction if desired. System.out.println("Stale Connection Exception during get connection or process SQL: " + se.getMessage()); throw new CreateException(se.getMessage()); } catch (SQLException sq) { System.out.println("SQL Exception during get connection or process SQL: " + sq.getMessage()); throw new CreateException(sq.getMessage()); } finally { // Always close the connection in a finally statement to ensure proper // closure in all cases. Closing the connection does not close and // actual connection, but releases it back to the pool for reuse. if (ps != null) { try { ps.close(); } catch (Exception e) { System.out.println("Close Statement Exception: " + e.getMessage()); } } if (conn != null) { try { conn.close(); } catch (Exception e) { System.out.println("Close connection exception: " + e.getMessage()); } } } return new EmployeeBMPKey(this.empNo); } /** * ejbFindByPrimaryKey method * @return WebSphereSamples.ConnPool.EmployeeBMPKey * @param primaryKey WebSphereSamples.ConnPool.EmployeeBMPKey * @exception java.rmi.RemoteException * @exception javax.ejb.FinderException */ public WebSphereSamples.ConnPool.EmployeeBMPKey ejbFindByPrimaryKey(WebSphereSamples.ConnPool.EmployeeBMPKey primaryKey) throws java.rmi.RemoteException, javax.ejb.FinderException { loadByEmpNo(primaryKey.empNo); return primaryKey; } /** * ejbLoad method * @exception java.rmi.RemoteException */ public void ejbLoad() throws java.rmi.RemoteException { try { EmployeeBMPKey pk = (EmployeeBMPKey) entityContext.getPrimaryKey(); loadByEmpNo(pk.empNo); } catch (FinderException fe) { throw new RemoteException("Cannot load Employee state from database."); } } /** * ejbPassivate method * @exception java.rmi.RemoteException */ public void ejbPassivate() throws java.rmi.RemoteException {} /** * ejbPostCreate method for a BMP entity bean * @param key WebSphereSamples.ConnPool.EmployeeBMPKey * @exception java.rmi.RemoteException */ public void ejbPostCreate(String empNo, String firstName, String lastName, String middleInit, int edLevel) throws java.rmi.RemoteException {} /** * ejbRemove method * @exception java.rmi.RemoteException * @exception javax.ejb.RemoveException */ public void ejbRemove() throws java.rmi.RemoteException, javax.ejb.RemoveException { if (ds == null) GetDS(); String sql = "delete from Employee where empNo=?"; Connection con = null; PreparedStatement ps = null; try { con = ds.getConnection(); ps = con.prepareStatement(sql); ps.setString(1, empNo); if (ps.executeUpdate() != 1){ throw new RemoteException("Cannot remove employee: " + empNo); } } catch (com.ibm.websphere.ce.cm.StaleConnectionException se) { // This exception indicates that the connection to the database is no longer valid. // Rollback the transaction, and throw an exception to the client indicating they // can retry the transaction if desired. System.out.println("Stale Connection Exception during get connection or process SQL: " + se.getMessage()); throw new RemoteException(se.getMessage()); } catch (SQLException sq) { System.out.println("SQL Exception during get connection or process SQL: " + sq.getMessage()); throw new RemoteException(sq.getMessage()); } finally { // Always close the connection in a finally statement to ensure proper // closure in all cases. Closing the connection does not close and // actual connection, but releases it back to the pool for reuse. if (ps != null) { try { ps.close(); } catch (Exception e) { System.out.println("Close Statement Exception: " + e.getMessage()); } } if (con != null) { try { con.close(); } catch (Exception e) { System.out.println("Close connection exception: " + e.getMessage()); } } } } try { con = ds.getConnection(); ps = con.prepareStatement(sql); ps.setString(1, empNo); if (ps.executeUpdate() != 1){ throw new RemoteException("Cannot remove employee: " + empNo); } } catch (com.ibm.websphere.ce.cm.StaleConnectionException se) { // This exception indicates that the connection to the database is no longer valid. // Rollback the transaction, and throw an exception to the client indicating they // can retry the transaction if desired. System.out.println("Stale Connection Exception during get connection or process SQL: " + se.getMessage()); throw new RemoteException(se.getMessage()); } catch (SQLException sq) { System.out.println("SQL Exception during get connection or process SQL: " + sq.getMessage()); throw new RemoteException(sq.getMessage()); } finally { // Always close the connection in a finally statement to ensure proper // closure in all cases. Closing the connection does not close and // actual connection, but releases it back to the pool for reuse. if (ps != null) { try { ps.close(); } catch (Exception e) { System.out.println("Close Statement Exception: " + e.getMessage()); } } if (con != null) { try { con.close(); } catch (Exception e) { System.out.println("Close connection exception: " + e.getMessage()); } } } } } catch (com.ibm.websphere.ce.cm.StaleConnectionException se) { // This exception indicates that the connection to the database is no longer valid. // Rollback the transaction, and throw an exception to the client indicating they // can retry the transaction if desired. System.out.println("Stale Connection Exception during get connection or process SQL: " + se.getMessage()); throw new RemoteException(se.getMessage()); } catch (SQLException sq) { System.out.println("SQL Exception during get connection or process SQL: " + sq.getMessage()); throw new RemoteException(sq.getMessage()); } finally { // Always close the connection in a finally statement to ensure proper // closure in all cases. Closing the connection does not close and // actual connection, but releases it back to the pool for reuse. if (ps != null) { try { ps.close(); } catch (Exception e) { System.out.println("Close Statement Exception: " + e.getMessage()); } } if (con != null) { try { con.close(); } catch (Exception e) { System.out.println("Close connection exception: " + e.getMessage()); } } } } /** * Get the employee's edLevel * Creation date: (4/20/2001 3:46:22 PM) * @return int */ public int getEdLevel() { return edLevel; } /** * getEntityContext method * @return javax.ejb.EntityContext */ public javax.ejb.EntityContext getEntityContext() { return entityContext; } /** * Get the employee's first name * Creation date: (4/19/2001 1:34:47 PM) * @return java.lang.String */ public java.lang.String getFirstName() { return firstName; } /** * Get the employee's last name * Creation date: (4/19/2001 1:35:41 PM) * @return java.lang.String */ public java.lang.String getLastName() { return lastName; } /** * get the employee's middle initial * Creation date: (4/19/2001 1:36:15 PM) * @return char */ public String getMiddleInit() { return middleInit; } /** * Lookup the DataSource from JNDI * Creation date: (4/19/2001 3:28:15 PM) */ private void getDS() { try { Hashtable parms = new Hashtable(); parms.put(Context.INITIAL_CONTEXT_FACTORY, "com.ibm.websphere.naming.WsnInitialContextFactory"); InitialContext ctx = new InitialContext(parms); // Perform a naming service lookup to get the DataSource object. ds = (DataSource)ctx.lookup("java:comp/env/jdbc/SampleDB"); } catch (Exception e) { System.out.println("Naming service exception: " + e.getMessage()); e.printStackTrace(); } } /** * Load the employee from the database * Creation date: (4/19/2001 3:44:07 PM) * @param empNo java.lang.String */ private void loadByEmpNo(String empNoKey) throws javax.ejb.FinderException{ String sql = "select empno, firstnme, midinit, lastname, edLevel from employee where empno = ?"; Connection conn = null; PreparedStatement ps = null; ResultSet rs = null; if (ds == null) getDS(); try { // Get a Connection object conn using the DataSource factory. conn = ds.getConnection(); // Run DB query using standard JDBC coding. ps = conn.prepareStatement(sql); ps.setString(1, empNoKey); rs = ps.executeQuery(); if (rs.next()) { empNo= rs.getString(1); firstName=rs.getString(2); middleInit=rs.getString(3); lastName=rs.getString(4); edLevel=rs.getInt(5); } else { throw new ObjectNotFoundException("Cannot find employee number " + empNoKey); } } catch (com.ibm.websphere.ce.cm.StaleConnectionException se) { // This exception indicates that the connection to the database is no longer valid. // Rollback the transaction, and throw an exception to the client indicating they // can retry the transaction if desired. System.out.println("Stale Connection Exception during get connection or process SQL: " + se.getMessage()); throw new FinderException(se.getMessage()); } catch (SQLException sq) { System.out.println("SQL Exception during get connection or process SQL: " + sq.getMessage()); throw new FinderException(sq.getMessage()); } finally { // Always close the connection in a finally statement to ensure proper // closure in all cases. Closing the connection does not close and // actual connection, but releases it back to the pool for reuse. if (rs != null) { try { Rs.close(); } catch (Exception e) { System.out.println("Close Resultset Exception: " + e.getMessage()); } } if (ps != null) { try { ps.close(); } catch (Exception e) { System.out.println("Close Statement Exception: " + e.getMessage()); } } if (conn != null) { try { conn.close(); } catch (Exception e) { System.out.println("Close connection exception: " + e.getMessage()); } } } } /** * set the employee's education level * Creation date: (4/20/2001 3:46:22 PM) * @param newEdLevel int */ public void setEdLevel(int newEdLevel) { edLevel = newEdLevel; } /** * setEntityContext method * @param ctx javax.ejb.EntityContext * @exception java.rmi.RemoteException */ public void setEntityContext(javax.ejb.EntityContext ctx) throws java.rmi.RemoteException { entityContext = ctx; } /** * set the employee's first name * Creation date: (4/19/2001 1:34:47 PM) * @param newFirstName java.lang.String */ public void setFirstName(java.lang.String newFirstName) { firstName = newFirstName; } /** * set the employee's last name * Creation date: (4/19/2001 1:35:41 PM) * @param newLastName java.lang.String */ public void setLastName(java.lang.String newLastName) { lastName = newLastName; } /** * set the employee's middle initial * Creation date: (4/19/2001 1:36:15 PM) * @param newMiddleInit char */ public void setMiddleInit(String newMiddleInit) { middleInit = newMiddleInit; } /** * unsetEntityContext method * @exception java.rmi.RemoteException */ public void unsetEntityContext() throws java.rmi.RemoteException { entityContext = null; } }//===================START_PROLOG====================================== // // 5630-A23, 5630-A22, // (C) COPYRIGHT International Business Machines Corp. 2002 // All Rights Reserved // Licensed Materials - Property of IBM // disclosure restricted by GSA ADP Schedule Contract with IBM Corp. // // IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING // ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR // PURPOSE. IN NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR // CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF // USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR // OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE // OR PERFORMANCE OF THIS SOFTWARE. // //===================END_PROLOG======================================== package WebSphereSamples.ConnPool; /** * This is a Home interface for the Entity Bean */ public interface EmployeeBMPHome extends javax.ejb.EJBHome { /** * * @return WebSphereSamples.ConnPool.EmployeeBMP * @param empNo java.lang.String * @param firstName java.lang.String * @param lastName java.lang.String * @param middleInit java.lang.String * @param edLevel int */ WebSphereSamples.ConnPool.EmployeeBMP create(java.lang.String empNo, java.lang.String firstName, java.lang.String lastName, java.lang.String middleInit, int edLevel) throws javax.ejb.CreateException, java.rmi.RemoteException; /** * findByPrimaryKey method comment * @return WebSphereSamples.ConnPool.EmployeeBMP * @param key WebSphereSamples.ConnPool.EmployeeBMPKey * @exception java.rmi.RemoteException * @exception javax.ejb.FinderException */ WebSphereSamples.ConnPool.EmployeeBMP findByPrimaryKey(WebSphereSamples.ConnPool.EmployeeBMPKey key) throws java.rmi.RemoteException, javax.ejb.FinderException; }//===================START_PROLOG====================================== // // 5630-A23, 5630-A22, // (C) COPYRIGHT International Business Machines Corp. 2002 // All Rights Reserved // Licensed Materials - Property of IBM // disclosure restricted by GSA ADP Schedule Contract with IBM Corp. // // IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING // ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR // PURPOSE. IN NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR // CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF // USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR // OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE // OR PERFORMANCE OF THIS SOFTWARE. // //===================END_PROLOG======================================== package WebSphereSamples.ConnPool; /** * This is an Enterprise Java Bean Remote Interface */ public interface EmployeeBMP extends javax.ejb.EJBObject { /** * * @return int */ int getEdLevel() throws java.rmi.RemoteException; /** * * @return java.lang.String */ java.lang.String getFirstName() throws java.rmi.RemoteException; /** * * @return java.lang.String */ java.lang.String getLastName() throws java.rmi.RemoteException; /** * * @return java.lang.String */ java.lang.String getMiddleInit() throws java.rmi.RemoteException; /** * * @return void * @param newEdLevel int */ void setEdLevel(int newEdLevel) throws java.rmi.RemoteException; /** * * @return void * @param newFirstName java.lang.String */ void setFirstName(java.lang.String newFirstName) throws java.rmi.RemoteException; /** * * @return void * @param newLastName java.lang.String */ void setLastName(java.lang.String newLastName) throws java.rmi.RemoteException; /** * * @return void * @param newMiddleInit java.lang.String */ void setMiddleInit(java.lang.String newMiddleInit) throws java.rmi.RemoteException; }//===================START_PROLOG====================================== // // 5630-A23, 5630-A22, // (C) COPYRIGHT International Business Machines Corp. 2002 // All Rights Reserved // Licensed Materials - Property of IBM // disclosure restricted by GSA ADP Schedule Contract with IBM Corp. // // IBM DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE, INCLUDING // ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR // PURPOSE. IN NO EVENT SHALL IBM BE LIABLE FOR ANY SPECIAL, INDIRECT OR // CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF // USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR // OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE // OR PERFORMANCE OF THIS SOFTWARE. // //===================END_PROLOG======================================== package WebSphereSamples.ConnPool; /** * This is a Primary Key Class for the Entity Bean **/ public class EmployeeBMPKey implements java.io.Serializable { public String empNo; final static long serialVersionUID = 3206093459760846163L; /** * EmployeeBMPKey() constructor */ public EmployeeBMPKey() { } /** * EmployeeBMPKey(String key) constructor */ public EmployeeBMPKey(String key) { empNo = key; } /** * equals method * - user must provide a proper implementation for the equal method. The generated * method assumes the key is a String object. */ public boolean equals (Object o) { if (o instanceof EmployeeBMPKey) return empNo.equals(((EmployeeBMPKey)o).empNo); else return false; } /** * hashCode method * - user must provide a proper implementation for the hashCode method. The generated * method assumes the key is a String object. */ public int hashCode () { return empNo.hashCode();
Related reference
Administrative console buttons
Administrative console page features
IBM is a trademark of the IBM Corporation in the United States, other countries, or both.