package registration;
import java.sql.*;
import java.rmi.*;
import java.rmi.server.*;
import java.util.Properties;
import java.util.*;
public class RegistrationServer extends UnicastRemoteObject
implements RegistrationHome {
RegistrationServer() throws RemoteException {
super();
}
public Connection getConnection() throws SQLException {
return DriverManager.getConnection("jdbc:jdc:jdcpool");
}
public registration.RegistrationPK create(String theuser,
String password, String emailaddress,
String creditcard)
throws registration.CreateException{
double balance=0;
Connection con = null;
PreparedStatement ps = null;
try {
con=getConnection();
ps=con.prepareStatement("insert into registration(
theuser, password, emailaddress,
creditcard, balance) values (?, ?, ?, ?, ?)");
ps.setString(1, theuser);
ps.setString(2, password);
ps.setString(3, emailaddress);
ps.setString(4, creditcard);
ps.setDouble(5, balance);
if (ps.executeUpdate() != 1) {
throw new CreateException ();
}
RegistrationPK primaryKey = new RegistrationPK();
primaryKey.setUser(theuser);
return primaryKey;
} catch (CreateException ce) {
throw ce;
} catch (SQLException sqe) {
throw new CreateException ();
} finally {
try {
ps.close();
con.close();
} catch (Exception ignore) {
}
}
}
public registration.Registration findByPrimaryKey(
registration.RegistrationPK pk)
throws registration.FinderException {
if ((pk == null) || (pk.getUser() == null)) {
throw new FinderException ();
}
return(refresh(pk));
}
private Registration refresh(RegistrationPK pk)
throws FinderException {
if (pk == null) {
throw new FinderException ();
}
Connection con = null;
PreparedStatement ps = null;
try {
con=getConnection();
ps=con.prepareStatement("select password,
emailaddress, creditcard,
balance from registration where theuser = ?");
ps.setString(1, pk.getUser());
ps.executeQuery();
ResultSet rs = ps.getResultSet();
if (rs.next()) {
RegistrationImpl reg=null;
try {
reg= new RegistrationImpl();
}catch (RemoteException e) {}
reg.theuser = pk.getUser();
reg.password = rs.getString(1);
reg.emailaddress = rs.getString(2);
reg.creditcard = rs.getString(3);
reg.balance = rs.getDouble(4);
return reg;
}
else {
throw new FinderException ();
}
}
catch (SQLException sqe) {
throw new FinderException();
}
finally {
try {
ps.close();
con.close();
}
catch (Exception ignore) {}
}
}
public void findLowCreditAccounts(final ReturnResults client)
throws FinderException {
Runnable bgthread = new Runnable() {
public void run() {
Connection con = null;
ResultSet rs = null;
PreparedStatement ps = null;
ArrayList ar = new ArrayList();
try {
con=getConnection();
ps=con.prepareStatement("select theuser,
balance from registration where balance < ?");
ps.setDouble(1, 3.00);
ps.executeQuery();
rs = ps.getResultSet();
RegistrationImpl reg=null;
while (rs.next()) {
try {
reg= new RegistrationImpl();
}catch (RemoteException e) {}
reg.theuser = rs.getString(1);
reg.balance = rs.getDouble(2);
ar.add(reg);
}
rs.close();
client.updateResults(ar);
}catch (Exception e) {
System.out.println("findLowCreditAccounts: "+e);
return;
}
finally {
try {
if(rs != null) {
rs.close();
}
if(ps != null) {
ps.close();
}
if(con != null) {
con.close();
}
} catch (Exception ignore) {}
}
} //run
};
Thread t = new Thread(bgthread);
t.start();
}
public static void main(String args[]) {
try {
new pool.JDCConnectionDriver("postgresql.Driver",
"jdbc:postgresql:ejbdemo","postgres", "pass");
}catch (Exception e){}
try {
Properties env=System.getProperties();
env.put("java.rmi.server.codebase", "file:/root/book/");
RegistrationServer rs= new RegistrationServer();
if (System.getSecurityManager() == null ) {
System.setSecurityManager(new RMISecurityManager());
}
Naming.rebind("//localhost/registration2",rs);
}catch (Exception e) {
System.out.println("Exception thrown "+e);
}
}
}
class RegistrationImpl extends UnicastRemoteObject
implements Registration {
public String theuser, password, creditcard, emailaddress;
public double balance;
RegistrationImpl() throws RemoteException {
super();
}
public boolean verifyPassword(String password) {
if (this.password.equals(password)) {
return true;
} else {
return false;
}
}
public String getEmailAddress() {
return emailaddress;
}
public String getUser() {
return theuser;
}
public int adjustAccount(double amount) {
balance=balance+amount;
return(0);
}
public double getBalance() {
return balance;
}
}
|