Java Q&A
by Cliff Berg
Example 1:
public Customer getCustomer(String firstname, String lastname);
public Customer[] getCustomers();
public void addCustomer(String firstname, String lastname);
public void remCustomer(String firstname, String lastname) ;
Example 2
Customer Status...
Listing One
/* CustomerManagerImpl.java
* Copyright 1997 by Digital Focus. May be used for non-commercial purposes.
* No warrantee or guaranteed is given or implied. */
package customer;
import java.io.*;
import javax.servlet.*;
/** Servlet which has dual-personalities: http and RMI.
* Allows you to write services that can be accessed from any browser, and
* across a firewall without tunneling. */
public class CustomerManagerImpl
extends java.rmi.server.UnicastRemoteObject
implements CustomerManager, Servlet
{
private ServletConfig servletConfig;
private java.util.Vector customers;
static
{
// Set security manager for RMI invocation, to protect
// against malicious stubs
if (System.getSecurityManager() == null)
{
System.setSecurityManager(new java.rmi.RMISecurityManager());
System.out.println("Servlet server has no security manager;
using RMI security manager");
}
}
public CustomerManagerImpl() throws java.rmi.RemoteException
{
super();
}
// CustomerStatus methods. The remote entry point implementations are
// synchronized, because they may be called my multiple server threads,
// either as an RMI service, or as a servlet service.
public synchronized Customer getCustomer(String firstname,
String lastname) throws java.rmi.RemoteException, Exception
{
return findCustomer(firstname, lastname);
}
public synchronized Customer[] getCustomers()
throws java.rmi.RemoteException, Exception
{
Customer[] ca = new Customer[customers.size()];
for (int i = 0; i < customers.size(); i++)
{
Customer c = (Customer)(customers.elementAt(i));
ca[i] = c;
}
return ca;
}
public synchronized void addCustomer(String firstname, String lastname,
int age) throws java.rmi.RemoteException, Exception
{
Customer c = new Customer(firstname, lastname, age);
customers.addElement(c);
save();
}
public synchronized void remCustomer(String firstname,
String lastname) throws java.rmi.RemoteException, Exception
{
Customer c = findCustomer(firstname, lastname);
if (c == null) throw new Exception("Not found");
customers.removeElement(c);
save();
}
protected Customer findCustomer(String firstname, String lastname)
{
for (int i = 0; i < customers.size(); i++)
{
Customer c = (Customer)(customers.elementAt(i));
if (c.getFirstname().equals(firstname) &&
c.getLastname().equals(lastname))
{
return c;
}
}
return null;
}
protected synchronized void load() throws Exception
{
// synchronized to protect access to customers object
System.out.println("Loading CustomerFile...");
File file = new File("CustomerFile");
FileInputStream fis = null;
try { fis = new FileInputStream(file); }
catch (FileNotFoundException ex) {}
if (fis == null)
{
customers = new java.util.Vector();
}
else
{
ObjectInputStream ois =
new ObjectInputStream(new FileInputStream(file));
customers = (java.util.Vector)(ois.readObject());
ois.close();
}
System.out.println("...done loading.");
}
protected synchronized void save()
{
// synchronized to protect access to customers object
System.out.println("Saving CustomerFile...");
File file = new File("CustomerFile");
try
{
ObjectOutputStream oos =
new ObjectOutputStream(new FileOutputStream(file));
oos.writeObject(customers);
oos.close();
}
catch (IOException ex)
{
System.out.println("Error writing customer file:");
ex.printStackTrace();
}
System.out.println("...done saving.");
}
// Servlet methods...
public void destroy()
{
// Save file
save();
}
public ServletConfig getServletConfig()
{
return servletConfig;
}
public String getServletInfo()
{
return "CustomerStatus Servlet";
}
public void init(ServletConfig c) throws ServletException
{
servletConfig = c;
init();
}
public void init() throws ServletException
{
try
{
java.rmi.registry.Registry registry =
java.rmi.registry.LocateRegistry.getRegistry();
registry.rebind("CustomerManager", this);
System.out.println("Server bound to CustomerManager");
}
catch (Exception ex)
{
System.out.println("Could not bind:");
ex.printStackTrace();
}
// Load file
try
{
load();
}
catch (Exception ex)
{
System.out.println("Error reading customer file:");
ex.printStackTrace();
throw new ServletException("Terminating due to prior error");
}
}
public static void main(String[] args)
{
try
{
CustomerManagerImpl m = new CustomerManagerImpl();
m.init();
}
catch (Exception ex)
{
ex.printStackTrace();
}
}
public void service(ServletRequest request, ServletResponse response)
throws ServletException, IOException
{
System.out.println("Service...");
// Identify customer
String firstname = request.getParameter("firstname");
String lastname = request.getParameter("lastname");
if ((lastname == null) || (firstname == null))
{
response.getOutputStream().println("Both last name and
first name must be specified");
return;
}
// Retrieve information on the customer
System.out.println("firstname=" + firstname);
System.out.println("lastname=" + lastname);
Customer customer = null;
try
{
customer = getCustomer(firstname, lastname);
}
catch (Exception ex)
{
throw new ServletException("Error looking up customer.");
}
// Return information on the customer
if (customer == null)
{
response.getOutputStream().println("Customer could not be found.");
return;
}
response.getOutputStream().println(customer.toString());
}
}