/* * JBoss, Home of Professional Open Source. * Copyright 2006, Red Hat Middleware LLC, and individual contributors * as indicated by the @author tags. See the copyright.txt file in the * distribution for a full listing of individual contributors. * * This is free software; you can redistribute it and/or modify it * under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation; either version 2.1 of * the License, or (at your option) any later version. * * This software is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU * Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with this software; if not, write to the Free * Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA * 02110-1301 USA, or see the FSF site: http://www.fsf.org. */ package org.jboss.test.bmp.beans; import java.rmi.RemoteException; import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.Statement; import java.util.Collection; import java.util.Vector; import javax.ejb.CreateException; import javax.ejb.DuplicateKeyException; import javax.ejb.EJBException; import javax.ejb.EntityBean; import javax.ejb.EntityContext; import javax.ejb.FinderException; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.sql.DataSource; import org.jboss.logging.Logger; import org.jboss.test.bmp.interfaces.SimpleBMPHome; public class SimpleBMPBean implements EntityBean { /** The serialVersionUID */ private static final long serialVersionUID = 1L; Logger log = Logger.getLogger(getClass()); EntityContext ctx = null; DataSource ds = null; // bmp fields Integer id; String name; boolean ejbStoreInvoked = false; boolean tempEjbStoreInvoked = false; public Integer ejbCreate (int _id, String _name) throws CreateException, RemoteException { log.debug ("ejbCreate (int, String) called"); id = new Integer (_id); boolean dublicate = false; Connection con = null; try { con = ds.getConnection (); Statement s = con.createStatement (); ResultSet rs = s.executeQuery ("SELECT id FROM simplebean WHERE id=" + id.toString ()); dublicate = rs.next (); rs.close (); s.close (); if (!dublicate) { PreparedStatement ps = con.prepareStatement ("INSERT INTO simplebean VALUES (?,?)"); ps.setInt (1, _id); ps.setString (2, _name); ps.execute (); ps.close (); name = _name; } } catch (Exception _e) { throw new EJBException ("couldnt create: "+_e.getMessage ()); } finally { try { if (con != null) con.close (); } catch (Exception _sqle) { } } if (dublicate) throw new DuplicateKeyException ("Bean with id="+_id+" already exists."); return id; } public Integer ejbCreateMETHOD (int _id, String _name) throws CreateException, RemoteException { log.debug ("ejbCreateMETHOD (int, String) called"); id = new Integer (_id); boolean dublicate = false; Connection con = null; try { con = ds.getConnection (); Statement s = con.createStatement (); ResultSet rs = s.executeQuery ("SELECT id FROM simplebean WHERE id=" + id.toString ()); dublicate = rs.next (); rs.close (); s.close (); if (!dublicate) { PreparedStatement ps = con.prepareStatement ("INSERT INTO simplebean VALUES (?,?)"); ps.setInt (1, _id); ps.setString (2, _name); ps.execute (); ps.close (); name = _name; } } catch (Exception _e) { throw new EJBException ("couldnt create: "+_e.getMessage ()); } finally { try { if (con != null) con.close (); } catch (Exception _sqle) { } } if (dublicate) throw new DuplicateKeyException ("Bean with id="+_id+" already exists."); return id; } public void ejbPostCreate (int _id, String _name) throws CreateException, RemoteException { log.debug ("ejbPostCreate (int, String) called"); tempEjbStoreInvoked = false; // Do a find all to see whether ejbStore gets invoked SimpleBMPHome home = (SimpleBMPHome) ctx.getEJBHome(); try { home.findAll(); } catch (FinderException e) { throw new RemoteException("Unexpected error invoking findAll", e); } ejbStoreInvoked = tempEjbStoreInvoked; } public void ejbPostCreateMETHOD (int _id, String _name) throws CreateException, RemoteException { log.debug ("ejbPostCreateMETHOD (int, String) called"); } public void ejbLoad () { log.debug ("ejbLoad () called " + this); Connection con = null; try { con = ds.getConnection (); PreparedStatement ps = con.prepareStatement ("SELECT id,name FROM simplebean WHERE id=?"); ps.setInt (1, ((Integer)ctx.getPrimaryKey ()).intValue ()); ResultSet rs = ps.executeQuery (); if (rs.next ()) { id = new Integer (rs.getInt ("id")); name = rs.getString ("name"); } rs.close (); ps.close (); } catch (Exception _e) { throw new EJBException ("couldnt load: "+_e.getMessage ()); } finally { try { if (con != null) con.close (); } catch (Exception _sqle) { } } } public void ejbStore () { log.debug ("ejbStore () called " + this); tempEjbStoreInvoked = true; Connection con = null; try { con = ds.getConnection (); PreparedStatement ps = con.prepareStatement ("UPDATE simplebean SET name=? WHERE id=?"); ps.setString (1, name); ps.setInt (2, id.intValue ()); ps.execute (); ps.close (); } catch (Exception _e) { throw new EJBException ("couldnt store: "+_e.getMessage ()); } finally { try { if (con != null) con.close (); } catch (Exception _sqle) { } } } public void ejbRemove () { log.debug ("ejbRemove () called " + this); Connection con = null; try { con = ds.getConnection (); PreparedStatement ps = con.prepareStatement ("DELETE FROM simplebean WHERE id=?"); ps.setInt (1, id.intValue ()); ps.execute (); ps.close (); } catch (Exception _e) { throw new EJBException ("couldnt remove: "+_e.getMessage ()); } finally { try { if (con != null) con.close (); } catch (Exception _sqle) { } } } public Integer ejbFindByPrimaryKey (Integer _key) throws FinderException { log.debug ("ejbFindByPrimaryKey (Integer) called " + this); Connection con = null; boolean found = false; try { con = ds.getConnection (); PreparedStatement ps = con.prepareStatement ("SELECT id FROM simplebean WHERE id=?"); ps.setInt (1, _key.intValue ()); ResultSet rs = ps.executeQuery (); found = rs.next (); rs.close (); ps.close (); } catch (Exception _e) { throw new EJBException ("couldnt seek: "+_e.getMessage ()); } finally { try { if (con != null) con.close (); } catch (Exception _sqle) { } } if (!found) throw new FinderException ("No bean with id="+_key+" found."); return _key; } public Collection ejbFindAll () throws FinderException { log.debug ("ejbFindAll () called"); Connection con = null; Vector result = new Vector (); try { con = ds.getConnection (); Statement s = con.createStatement (); ResultSet rs = s.executeQuery ("SELECT id FROM simplebean"); while (rs.next ()) { result.add (new Integer (rs.getInt ("id"))); } rs.close (); s.close (); } catch (Exception _e) { throw new EJBException ("couldnt seek: "+_e.getMessage ()); } finally { try { if (con != null) con.close (); } catch (Exception _sqle) { } } return result; } public void ejbActivate () { log.debug ("ejbActivate () called " + this); } public void ejbPassivate () { log.debug ("ejbPassivate () called " + this, new Exception("ST")); } public void setEntityContext (EntityContext _ctx) { log.debug ("setEntityContext() called " + this); ctx = _ctx; // lookup the datasource try { ds = (DataSource)new InitialContext ().lookup ("java:comp/env/datasource"); } catch (NamingException _ne) { throw new EJBException ("Datasource not found: "+_ne.getMessage ()); } } public void unsetEntityContext () { log.debug ("unsetEntityContext () called"); ctx = null; } // business methods --------------------------------------------------------------- public Integer getIdViaEJBObject() { try { Integer result = (Integer) ctx.getEJBObject().getPrimaryKey(); log.debug(result + " " + ctx.getPrimaryKey()); return result; } catch (RemoteException e) { throw new EJBException(e); } } public void setName (String _name) { name = _name; } public String getName () { return name; } public boolean isEjbStoreInvoked() { return ejbStoreInvoked; } }