package com.titan.ship;
import javax.ejb.EntityContext;
import javax.ejb.ObjectNotFoundException;
import java.rmi.RemoteException;
import java.sql.SQLException;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.DriverManager;
import java.sql.ResultSet;
import javax.ejb.CreateException;
import javax.ejb.FinderException;
import java.util.Enumeration;
import java.util.Vector;
import java.util.Properties;
public class ShipBean implements javax.ejb.EntityBean{
public int id;
public String name;
public int capacity;
public double tonnage;
public EntityContext context;
public ShipPK ejbCreate(int id, String name,
int capacity, double tonnage) throws CreateException{
this.id = id;
this.name = name;
this.capacity = capacity;
this.tonnage = tonnage;
Connection con = null;
PreparedStatement ps = null;
try {
con = getConnection();
ps = con.prepareStatement(
"insert into Ship (id, name, capacity, tonnage) " +
"values (?,?,?,?)");
ps.setInt(1, id);
ps.setString(2, name);
ps.setInt(3,capacity);
ps.setDouble(4,tonnage);
if (ps.executeUpdate() != 1) {
throw new CreateException ("Failed to add Ship to database");
}
ShipPK primaryKey = new ShipPK();
primaryKey.id = id;
return primaryKey;
}
catch (SQLException se) {
throw new CreateException (se.getMessage());
}
finally {
try {
if (ps != null) ps.close();
if (con!= null) con.close();
}catch(SQLException se){
se.printStackTrace();
}
}
}
public void ejbPostCreate(int id, String name,
int capacity, double tonnage){
// do something useful with the primary key
}
public ShipPK ejbCreate(int id, String name )
throws CreateException{
return ejbCreate(id,name,0,0);
}
public void ejbPostCreate(int id, String name ){
// do something useful with the EJBObject reference
}
public ShipPK ejbFindByPrimaryKey(ShipPK primaryKey)
throws FinderException, RemoteException{
loadUsingId(primaryKey.id);
return primaryKey;
}
public Enumeration ejbFindByCapacity(int capacity)
throws FinderException, RemoteException{
Connection con = null;
PreparedStatement ps = null;
ResultSet result = null;
try {
con = getConnection();
ps = con.prepareStatement(
"select id from Ship where capacity = ?");
ps.setInt(1,capacity);
result = ps.executeQuery();
Vector keys = new Vector();
while(result.next()){
ShipPK shipPk = new ShipPK();
shipPk.id = result.getInt("id");
keys.addElement(shipPk);
}
if(keys.size() > 0 )
return keys.elements();
else
return null;
}
catch (SQLException se) {
throw new FinderException (se.getMessage());
}
finally {
try {
if (result != null) result.close();
if (ps != null) ps.close();
if (con!= null) con.close();
}catch(SQLException se){
se.printStackTrace();
}
}
}
public void setEntityContext(EntityContext ctx){
context = ctx;
}
public void unsetEntityContext( ){
context = null;
}
public void ejbActivate(){ }
public void ejbPassivate(){ }
public void ejbLoad() throws RemoteException{
try{
ShipPK pk = (ShipPK) context.getPrimaryKey();
loadUsingId(pk.id);
}catch(FinderException fe)
{
throw new RemoteException("Cannot load Ship (id = "+
id+") state from database");
}
}
private void loadUsingId(int id)
throws RemoteException, FinderException{
Connection con = null;
PreparedStatement ps = null;
ResultSet result = null;
try {
con = getConnection();
ps = con.prepareStatement(
"select name, capacity, tonnage from Ship where id = ?");
ps.setInt(1,id);
result = ps.executeQuery();
if(result.next()){
this.id = id;
name = result.getString("name");
capacity = result.getInt("capacity");
tonnage = result.getDouble("tonnage");
}else{
throw new ObjectNotFoundException(
"Cannot find Ship with id = "+id);
}
}
catch (SQLException se) {
throw new FinderException (se.getMessage());
}
finally {
try {
if (result != null) result.close();
if (ps != null) ps.close();
if (con!= null) con.close();
}catch(SQLException se){
se.printStackTrace();
}
}
}
public void ejbStore()throws RemoteException{
Connection con = null;
PreparedStatement ps = null;
try {
con = getConnection();
ps = con.prepareStatement(
"update Ship set name = ?, capacity = ?, " +
"tonnage = ? where id = ?");
ps.setString(1,name);
ps.setInt(2,capacity);
ps.setDouble(3,tonnage);
ps.setInt(4,id);
if (ps.executeUpdate() != 1) {
throw new RemoteException ("Failure occurred saving the Ship");
}
}
catch (SQLException se) {
throw new RemoteException (se.getMessage());
}
finally {
try {
if (ps != null) ps.close();
if (con!= null) con.close();
}catch(SQLException se){
se.printStackTrace();
}
}
}
public void ejbRemove() throws RemoteException{
Connection con = null;
PreparedStatement ps = null;
try {
con = getConnection();
ps = con.prepareStatement("delete from Ship where id = ?");
ps.setInt(1, id);
if (ps.executeUpdate() != 1) {
throw new RemoteException (
"Failed to remove Ship from database");
}
}
catch (SQLException se) {
throw new RemoteException (se.getMessage());
}
finally {
try {
if (ps != null) ps.close();
if (con!= null) con.close();
}catch(SQLException se){
se.printStackTrace();
}
}
}
public String getName(){
return name;
}
public void setName(String n){
name = n;
}
public void setCapacity(int cap){
capacity = cap;
}
public int getCapacity(){
return capacity;
}
public double getTonnage(){
return tonnage;
}
public void setTonnage(double tons){
tonnage = tons;
}
private Connection getConnection() throws SQLException {
Properties environmentProps = context.getEnvironment();
String url = environmentProps.getProperty("jdbcURL");
return DriverManager.getConnection(url);
}
} |