Привет Всем!!! У меня есть EntityBean „PersonEJB“ в котором реализуется максимальный „Primary Key“ (определяется MAX и потом дабавляется 1) из таблицы PeronEJBTable. Т.к. эта функция для других EJBs необходима, нужно реализовать эту фукцию в ststeless SessionBean (HandlerEJB) и соответственно вызов в PersonEJB этой функции. Т.е. убрать функцию private Integer maxPrimaryKey(String idName, String tabellenName) из PersonEJB и реализовать в HandlerEJB(SessionBean) . Подскажите пожалуйста как это реализовать, желательно с примерами для наглядности.
cod EntityBean см. ниже
Заранее спасибо!!!!
PersonEJB
| Код | import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException;
import javax.ejb.EntityBean; import javax.ejb.EntityContext; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import javax.sql.DataSource;
public abstract class PersonEJB implements EntityBean {
Connection conn;
PreparedStatement prepStmt;
ResultSet result;
public PersonEJB() { }
// die abstakten Zugriffsmethoden public abstract Integer getPersonID();
public abstract String getName();
public abstract String getRufname();
// public abstract Date getGebDate(); public abstract String getGebDate();
public abstract String getMobilTel();
public abstract void setPersonID(Integer inValue);
public abstract void setName(String inValue);
public abstract void setRufname(String inValue);
// public abstract void setGebDate(Date inValue); public abstract void setGebDate(String inValue);
public abstract void setMobilTel(String inValue);
// die zwei create-Methoden:
// public Integer ejbCreatePerson(String name, String rufname, Date gebDate, // String mobilTel)throws public Integer ejbCreatePerson(String name, String rufname, String gebDate, String mobilTel) throws javax.ejb.CreateException {
Integer ps = maxPrimaryKey("personID", "PersonEJBTable"); if (ps == null) setPersonID(new Integer(0)); else { setPersonID(new Integer(ps.intValue() + 1)); } setName(name); setRufname(rufname); setGebDate(gebDate); setMobilTel(mobilTel); return null; }
// postCreate mit gleichen Parametern // public void ejbPostCreatePerson(String name, String rufname, Date // gebDate, String mobilTel)throws public void ejbPostCreatePerson(String name, String rufname, String gebDate, String mobilTel) throws javax.ejb.CreateException { }
// die sieben callback-Methoden des life-cycle // aus "javax.ejb.EntityBean" public void setEntityContext(EntityContext ctx) { }
public void unsetEntityContext() { }
public void ejbActivate() { }
public void ejbPassivate() { }
public void ejbLoad() { }
public void ejbStore() { }
public void ejbRemove() { }
// nur als Bsp. eine "buisness"-Methode
public String checkDoubleName() { // Doppelnamen enthalten Bindenstrich: if (getName().indexOf("-") > -1) return getName(); else return null; }
private Integer maxPrimaryKey(String idName, String tabellenName) { Integer ps; conn = getConn(); try { prepStmt = conn.prepareStatement("SELECT MAX(\"" + idName + "\") FROM \"" + tabellenName + "\""); result = prepStmt.executeQuery(); if (result.next()) { ps = new Integer(result.getInt(1)); closeResourses(conn, prepStmt); return ps; } } catch (SQLException sqle) { System.out.println("PersonEJB-SQLException: " + sqle.getMessage()); closeResourses(conn, prepStmt); }
return null; }
private void closeResourses(Connection conn, PreparedStatement prepStmt) { try { prepStmt.close(); conn.close(); } catch (SQLException sqle) { System.out.println("PersonEJB-SQLException: " + sqle.getMessage()); } }
private Connection getConn() { DataSource ds = null; try { Context jndiContext = new InitialContext(); ds = (DataSource) jndiContext.lookup("jdbc/Cloudscape"); return ds.getConnection(); } catch (NamingException ne) { System.out.println("PersonEJB-NamingException: " + ne.getMessage()); } catch (SQLException sqle) { System.out.println("PersonEJB-SQLException: " + sqle.getMessage()); } return null;
}
}
|
PersonHome
| Код | import javax.ejb.CreateException; import javax.ejb.FinderException; import java.rmi.RemoteException; import java.util.Date;
public interface PersonHome extends javax.ejb.EJBHome {
public PersonRemote createPerson(String name, String rufname, String gebDate, String mobilTel) throws CreateException, RemoteException;
public PersonRemote findByPrimaryKey(Integer id) throws FinderException, RemoteException;
public java.util.Collection findByFullName(String name, String rufname) throws FinderException, RemoteException;
public java.util.Collection findByName(String name) throws FinderException, RemoteException; public java.util.Collection findByCallName(String rufname) throws FinderException, RemoteException;
}
|
PersonRemote
| Код | import java.rmi.RemoteException; import java.util.Date; public interface PersonRemote extends javax.ejb.EJBObject { // die abstakten Zugriffsmethoden public abstract Integer getPersonID() throws RemoteException; public abstract String getName()throws RemoteException; public abstract String getRufname()throws RemoteException; public abstract String getGebDate()throws RemoteException; public abstract String getMobilTel()throws RemoteException; public abstract void setPersonID( Integer inValue)throws RemoteException; public abstract void setName(String inValue)throws RemoteException; public abstract void setRufname(String inValue)throws RemoteException; public abstract void setGebDate(String inValue)throws RemoteException; public abstract void setMobilTel(String inValue)throws RemoteException; public String checkDoubleName() throws RemoteException;
}
|
|