mirror of https://github.com/postgres/postgres
parent
1401f63dd1
commit
2ee522954d
@ -0,0 +1,288 @@ |
|||||||
|
package example.corba; |
||||||
|
|
||||||
|
import java.io.*; |
||||||
|
import java.sql.*; |
||||||
|
import org.omg.CosNaming.*; |
||||||
|
|
||||||
|
/** |
||||||
|
* This class is the frontend to our mini CORBA application. |
||||||
|
* |
||||||
|
* It has no GUI, just a text frontend to keep it simple. |
||||||
|
* |
||||||
|
* $Id: StockClient.java,v 1.1 1999/01/25 21:22:03 scrappy Exp $ |
||||||
|
*/ |
||||||
|
public class StockClient |
||||||
|
{ |
||||||
|
org.omg.CosNaming.NamingContext nameService; |
||||||
|
|
||||||
|
stock.StockDispenser dispenser; |
||||||
|
stock.StockItem item; |
||||||
|
|
||||||
|
BufferedReader in; |
||||||
|
|
||||||
|
public StockClient(String[] args) { |
||||||
|
try { |
||||||
|
// We need this for our IO
|
||||||
|
in = new BufferedReader(new InputStreamReader(System.in)); |
||||||
|
|
||||||
|
// Initialize the orb
|
||||||
|
org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args,null); |
||||||
|
|
||||||
|
// Get a reference to the Naming Service
|
||||||
|
org.omg.CORBA.Object nameServiceObj = orb.resolve_initial_references("NameService"); |
||||||
|
if(nameServiceObj==null) { |
||||||
|
System.err.println("nameServiceObj == null"); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
nameService = org.omg.CosNaming.NamingContextHelper.narrow(nameServiceObj); |
||||||
|
if(nameService==null) { |
||||||
|
System.err.println("nameService == null"); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
// Resolve the dispenser
|
||||||
|
NameComponent[] dispName = { |
||||||
|
new NameComponent("StockDispenser","Stock") |
||||||
|
}; |
||||||
|
dispenser = stock.StockDispenserHelper.narrow(nameService.resolve(dispName)); |
||||||
|
if(dispenser==null) { |
||||||
|
System.err.println("dispenser == null"); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
// Now run the front end.
|
||||||
|
run(); |
||||||
|
} catch(Exception e) { |
||||||
|
System.out.println(e.toString()); |
||||||
|
e.printStackTrace(); |
||||||
|
System.exit(1); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
public static void main(String[] args) { |
||||||
|
new StockClient(args); |
||||||
|
} |
||||||
|
|
||||||
|
public void run() { |
||||||
|
// First reserve a StockItem
|
||||||
|
try { |
||||||
|
item = dispenser.reserveItem(); |
||||||
|
} catch(Exception e) { |
||||||
|
System.out.println(e.toString()); |
||||||
|
e.printStackTrace(); |
||||||
|
System.exit(1); |
||||||
|
} |
||||||
|
|
||||||
|
mainMenu(); |
||||||
|
|
||||||
|
// finally free the StockItem
|
||||||
|
try { |
||||||
|
dispenser.releaseItem(item); |
||||||
|
} catch(Exception e) { |
||||||
|
System.out.println(e.toString()); |
||||||
|
e.printStackTrace(); |
||||||
|
System.exit(1); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private void mainMenu() { |
||||||
|
boolean run=true; |
||||||
|
while(run) { |
||||||
|
System.out.println("\nCORBA Stock System\n"); |
||||||
|
System.out.println(" 1 Display stock item"); |
||||||
|
System.out.println(" 2 Remove item from stock"); |
||||||
|
System.out.println(" 3 Put item into stock"); |
||||||
|
System.out.println(" 4 Order item"); |
||||||
|
System.out.println(" 5 Display all items"); |
||||||
|
System.out.println(" 0 Exit"); |
||||||
|
int i = getMenu("Main",5); |
||||||
|
switch(i) |
||||||
|
{ |
||||||
|
case 0: |
||||||
|
run=false; |
||||||
|
break; |
||||||
|
|
||||||
|
case 1: |
||||||
|
displayItem(); |
||||||
|
break; |
||||||
|
|
||||||
|
case 2: |
||||||
|
bookOut(); |
||||||
|
break; |
||||||
|
|
||||||
|
case 3: |
||||||
|
bookIn(); |
||||||
|
break; |
||||||
|
|
||||||
|
case 4: |
||||||
|
order(0); |
||||||
|
break; |
||||||
|
|
||||||
|
case 5: |
||||||
|
displayAll(); |
||||||
|
break; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private void displayItem() { |
||||||
|
try { |
||||||
|
int id = getMenu("\nStockID to display",item.getLastID()); |
||||||
|
if(id>0) { |
||||||
|
item.fetchItem(id); |
||||||
|
System.out.println("========================================"); |
||||||
|
|
||||||
|
String status = ""; |
||||||
|
if(!item.isItemValid()) |
||||||
|
status=" ** Superceded **"; |
||||||
|
|
||||||
|
int av = item.getAvailable(); |
||||||
|
|
||||||
|
System.out.println(" Stock ID: "+id+status+ |
||||||
|
"\nItems Available: "+av+ |
||||||
|
"\nItems on order: "+item.getOrdered()+ |
||||||
|
"\n Description: "+item.getDescription()); |
||||||
|
System.out.println("========================================"); |
||||||
|
|
||||||
|
if(av>0) |
||||||
|
if(yn("Take this item out of stock?")) { |
||||||
|
int rem=1; |
||||||
|
if(av>1) |
||||||
|
rem=getMenu("How many?",av); |
||||||
|
if(rem>0) |
||||||
|
item.removeStock(rem); |
||||||
|
} |
||||||
|
|
||||||
|
} |
||||||
|
} catch(Exception e) { |
||||||
|
System.out.println(e.toString()); |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private void bookOut() { |
||||||
|
try { |
||||||
|
int id = getMenu("\nStockID to take out",item.getLastID()); |
||||||
|
if(id>0) { |
||||||
|
item.fetchItem(id); |
||||||
|
int av = item.getAvailable(); |
||||||
|
if(av>0) |
||||||
|
if(yn("Take this item out of stock?")) { |
||||||
|
int rem=1; |
||||||
|
if(av>1) |
||||||
|
rem=getMenu("How many?",av); |
||||||
|
if(rem>0) |
||||||
|
item.removeStock(rem); |
||||||
|
} |
||||||
|
else { |
||||||
|
System.out.println("This item is not in stock."); |
||||||
|
int order = item.getOrdered(); |
||||||
|
if(order>0) |
||||||
|
System.out.println("There are "+item.getOrdered()+" items on order."); |
||||||
|
else { |
||||||
|
if(item.isItemValid()) { |
||||||
|
System.out.println("You will need to order some more "+item.getDescription()); |
||||||
|
order(id); |
||||||
|
} else |
||||||
|
System.out.println("This item is now obsolete"); |
||||||
|
} |
||||||
|
} |
||||||
|
} else |
||||||
|
System.out.println(item.getDescription()+"\nThis item is out of stock"); |
||||||
|
} catch(Exception e) { |
||||||
|
System.out.println(e.toString()); |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// book an item into stock
|
||||||
|
private void bookIn() { |
||||||
|
try { |
||||||
|
int id = getMenu("\nStockID to book in",item.getLastID()); |
||||||
|
item.fetchItem(id); |
||||||
|
System.out.println(item.getDescription()); |
||||||
|
|
||||||
|
if(item.getOrdered()>0) { |
||||||
|
int am = getMenu("How many do you want to book in",item.getOrdered()); |
||||||
|
if(am>0) |
||||||
|
item.addNewStock(am); |
||||||
|
} else |
||||||
|
System.out.println("You don't have any of this item on ordered"); |
||||||
|
|
||||||
|
} catch(Exception e) { |
||||||
|
System.out.println(e.toString()); |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
// Order an item
|
||||||
|
private void order(int id) { |
||||||
|
try { |
||||||
|
if(id==0) |
||||||
|
id = getMenu("\nStockID to order",item.getLastID()); |
||||||
|
item.fetchItem(id); |
||||||
|
System.out.println(item.getDescription()); |
||||||
|
int am = getMenu("How many do you want to order",999); |
||||||
|
if(am>0) |
||||||
|
item.orderStock(am); |
||||||
|
} catch(Exception e) { |
||||||
|
System.out.println(e.toString()); |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private void displayAll() { |
||||||
|
try { |
||||||
|
boolean cont=true; |
||||||
|
int nr=item.getLastID(); |
||||||
|
String header = "\nId\tAvail\tOrdered\tDescription"; |
||||||
|
System.out.println(header); |
||||||
|
for(int i=1;i<=nr && cont;i++) { |
||||||
|
item.fetchItem(i); |
||||||
|
System.out.println(""+i+"\t"+item.getAvailable()+"\t"+item.getOrdered()+"\t"+item.getDescription()); |
||||||
|
if((i%20)==0) { |
||||||
|
if((cont=yn("Continue?"))) |
||||||
|
System.out.println(header); |
||||||
|
} |
||||||
|
} |
||||||
|
} catch(Exception e) { |
||||||
|
System.out.println(e.toString()); |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
private int getMenu(String title,int max) { |
||||||
|
int v=-1; |
||||||
|
while(v<0 || v>max) { |
||||||
|
System.out.print(title); |
||||||
|
System.out.print(" [0-"+max+"]: "); |
||||||
|
System.out.flush(); |
||||||
|
try { |
||||||
|
v = Integer.parseInt(in.readLine()); |
||||||
|
} catch(Exception nfe) { |
||||||
|
v=-1; |
||||||
|
} |
||||||
|
} |
||||||
|
return v; |
||||||
|
} |
||||||
|
|
||||||
|
private boolean yn(String title) { |
||||||
|
try { |
||||||
|
while(true) { |
||||||
|
System.out.print(title); |
||||||
|
System.out.flush(); |
||||||
|
String s = in.readLine(); |
||||||
|
if(s.startsWith("y") || s.startsWith("Y")) |
||||||
|
return true; |
||||||
|
if(s.startsWith("n") || s.startsWith("N")) |
||||||
|
return false; |
||||||
|
} |
||||||
|
} catch(Exception nfe) { |
||||||
|
System.out.println(nfe.toString()); |
||||||
|
nfe.printStackTrace(); |
||||||
|
System.exit(1); |
||||||
|
} |
||||||
|
return false; |
||||||
|
} |
||||||
|
} |
@ -0,0 +1,117 @@ |
|||||||
|
package example.corba; |
||||||
|
|
||||||
|
import java.sql.*; |
||||||
|
|
||||||
|
/** |
||||||
|
* This class handles the JDBC side of things. It opens a connection to |
||||||
|
* the database, and performes queries on that database. |
||||||
|
* |
||||||
|
* In essence, you could use this class on it's own. The rest of the classes |
||||||
|
* in this example handle either the CORBA mechanism, or the frontend. |
||||||
|
* |
||||||
|
* Note: Before you ask, why perform a query on each call, you have to remember |
||||||
|
* that an object could be changed by another client, and we need to ensure that |
||||||
|
* the returned data is live and accurate. |
||||||
|
* |
||||||
|
* $Id: StockDB.java,v 1.1 1999/01/25 21:22:03 scrappy Exp $ |
||||||
|
*/ |
||||||
|
public class StockDB |
||||||
|
{ |
||||||
|
Connection con; |
||||||
|
Statement st; |
||||||
|
|
||||||
|
// the current stock number
|
||||||
|
int id = -1; |
||||||
|
|
||||||
|
public void connect(String url,String usr,String pwd) throws Exception { |
||||||
|
Class.forName("postgresql.Driver"); |
||||||
|
System.out.println("Connecting to "+url); |
||||||
|
con = DriverManager.getConnection(url,usr,pwd); |
||||||
|
st = con.createStatement(); |
||||||
|
} |
||||||
|
|
||||||
|
public void closeConnection() throws Exception { |
||||||
|
con.close(); |
||||||
|
} |
||||||
|
|
||||||
|
public void fetchItem(int id) throws Exception { |
||||||
|
this.id = id; |
||||||
|
} |
||||||
|
|
||||||
|
public int newItem() throws Exception { |
||||||
|
// tba
|
||||||
|
return -1; |
||||||
|
} |
||||||
|
|
||||||
|
public String getDescription() throws SQLException { |
||||||
|
ResultSet rs = st.executeQuery("select description from stock where id="+id); |
||||||
|
if(rs!=null) { |
||||||
|
rs.next(); |
||||||
|
String s = rs.getString(1); |
||||||
|
rs.close(); |
||||||
|
return s; |
||||||
|
} |
||||||
|
throw new SQLException("No ResultSet"); |
||||||
|
} |
||||||
|
|
||||||
|
public int getAvailable() throws SQLException { |
||||||
|
ResultSet rs = st.executeQuery("select avail from stock where id="+id); |
||||||
|
if(rs!=null) { |
||||||
|
rs.next(); |
||||||
|
int v = rs.getInt(1); |
||||||
|
rs.close(); |
||||||
|
return v; |
||||||
|
} |
||||||
|
throw new SQLException("No ResultSet"); |
||||||
|
} |
||||||
|
|
||||||
|
public int getOrdered() throws SQLException { |
||||||
|
ResultSet rs = st.executeQuery("select ordered from stock where id="+id); |
||||||
|
if(rs!=null) { |
||||||
|
rs.next(); |
||||||
|
int v = rs.getInt(1); |
||||||
|
rs.close(); |
||||||
|
return v; |
||||||
|
} |
||||||
|
throw new SQLException("No ResultSet"); |
||||||
|
} |
||||||
|
|
||||||
|
public boolean isItemValid() throws SQLException { |
||||||
|
ResultSet rs = st.executeQuery("select valid from stock where id="+id); |
||||||
|
if(rs!=null) { |
||||||
|
rs.next(); |
||||||
|
boolean b = rs.getBoolean(1); |
||||||
|
rs.close(); |
||||||
|
return b; |
||||||
|
} |
||||||
|
throw new SQLException("No ResultSet"); |
||||||
|
} |
||||||
|
|
||||||
|
public void addNewStock(int amount) throws SQLException { |
||||||
|
st.executeUpdate("update stock set avail=avail+"+amount+ |
||||||
|
", ordered=ordered-"+amount+ |
||||||
|
" where id="+id+" and ordered>="+amount); |
||||||
|
} |
||||||
|
|
||||||
|
public void removeStock(int amount) throws SQLException { |
||||||
|
st.executeUpdate("update stock set avail=avail-"+amount+ |
||||||
|
" where id="+id); |
||||||
|
} |
||||||
|
|
||||||
|
public void orderStock(int amount) throws SQLException { |
||||||
|
st.executeUpdate("update stock set ordered=ordered+"+amount+ |
||||||
|
" where id="+id); |
||||||
|
} |
||||||
|
|
||||||
|
public int getLastID() throws SQLException { |
||||||
|
ResultSet rs = st.executeQuery("select max(id) from stock"); |
||||||
|
if(rs!=null) { |
||||||
|
rs.next(); |
||||||
|
int v = rs.getInt(1); |
||||||
|
rs.close(); |
||||||
|
return v; |
||||||
|
} |
||||||
|
throw new SQLException("No ResultSet"); |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,83 @@ |
|||||||
|
package example.corba; |
||||||
|
|
||||||
|
import org.omg.CosNaming.*; |
||||||
|
|
||||||
|
/** |
||||||
|
* This class implements the server side of the example. |
||||||
|
* |
||||||
|
* $Id: StockDispenserImpl.java,v 1.1 1999/01/25 21:22:03 scrappy Exp $ |
||||||
|
*/ |
||||||
|
public class StockDispenserImpl extends stock._StockDispenserImplBase |
||||||
|
{ |
||||||
|
private int maxObjects = 10; |
||||||
|
private int numObjects = 0; |
||||||
|
private StockItemStatus[] stock = new StockItemStatus[maxObjects]; |
||||||
|
|
||||||
|
public StockDispenserImpl(String[] args,String name,int num) |
||||||
|
{ |
||||||
|
super(); |
||||||
|
|
||||||
|
try { |
||||||
|
// get reference to orb
|
||||||
|
org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args,null); |
||||||
|
|
||||||
|
// prestart num objects
|
||||||
|
if(num>=maxObjects) |
||||||
|
num=maxObjects; |
||||||
|
numObjects = num; |
||||||
|
for(int i=0;i<numObjects;i++) { |
||||||
|
stock[i] = new StockItemStatus(); |
||||||
|
stock[i].ref = new StockItemImpl(args,"StockItem"+(i+1)); |
||||||
|
orb.connect(stock[i].ref); |
||||||
|
} |
||||||
|
} catch(org.omg.CORBA.SystemException e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* This method, defined in stock.idl, reserves a slot in the dispenser |
||||||
|
*/ |
||||||
|
public stock.StockItem reserveItem() throws stock.StockException |
||||||
|
{ |
||||||
|
for(int i=0;i<numObjects;i++) { |
||||||
|
if(!stock[i].inUse) { |
||||||
|
stock[i].inUse = true; |
||||||
|
System.out.println("Reserving slot "+i); |
||||||
|
return stock[i].ref; |
||||||
|
} |
||||||
|
} |
||||||
|
return null; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* This releases a slot from the dispenser |
||||||
|
*/ |
||||||
|
public void releaseItem(stock.StockItem item) throws stock.StockException |
||||||
|
{ |
||||||
|
for(int i=0;i<numObjects;i++) { |
||||||
|
if(stock[i].ref.getInstanceName().equals(item.getInstanceName())) { |
||||||
|
stock[i].inUse = false; |
||||||
|
System.out.println("Releasing slot "+i); |
||||||
|
return; |
||||||
|
} |
||||||
|
} |
||||||
|
System.out.println("Reserved object not a member of this dispenser"); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* This class defines a slot in the dispenser |
||||||
|
*/ |
||||||
|
class StockItemStatus |
||||||
|
{ |
||||||
|
StockItemImpl ref; |
||||||
|
boolean inUse; |
||||||
|
|
||||||
|
StockItemStatus() { |
||||||
|
ref = null; |
||||||
|
inUse = false; |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
} |
@ -0,0 +1,163 @@ |
|||||||
|
package example.corba; |
||||||
|
|
||||||
|
import org.omg.CosNaming.*; |
||||||
|
|
||||||
|
/** |
||||||
|
* This class implements the server side of the example. |
||||||
|
* |
||||||
|
* $Id: StockItemImpl.java,v 1.1 1999/01/25 21:22:04 scrappy Exp $ |
||||||
|
*/ |
||||||
|
public class StockItemImpl extends stock._StockItemImplBase |
||||||
|
{ |
||||||
|
private StockDB db; |
||||||
|
private String instanceName; |
||||||
|
|
||||||
|
public StockItemImpl(String[] args,String iname) { |
||||||
|
super(); |
||||||
|
try { |
||||||
|
db =new StockDB(); |
||||||
|
db.connect(args[1],args[2],args[3]); |
||||||
|
System.out.println("StockDB object "+iname+" created"); |
||||||
|
instanceName = iname; |
||||||
|
} catch(Exception e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* This is defined in stock.idl |
||||||
|
* |
||||||
|
* It sets the item to view |
||||||
|
*/ |
||||||
|
public void fetchItem(int id) throws stock.StockException { |
||||||
|
try { |
||||||
|
db.fetchItem(id); |
||||||
|
} catch(Exception e) { |
||||||
|
throw new stock.StockException(e.toString()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
||||||
|
/** |
||||||
|
* This is defined in stock.idl |
||||||
|
* |
||||||
|
* It sets the item to view |
||||||
|
*/ |
||||||
|
public int newItem() throws stock.StockException { |
||||||
|
try { |
||||||
|
return db.newItem(); |
||||||
|
} catch(Exception e) { |
||||||
|
throw new stock.StockException(e.toString()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* This is defined in stock.idl |
||||||
|
* |
||||||
|
* It returns the description of a Stock item |
||||||
|
*/ |
||||||
|
public String getDescription() throws stock.StockException { |
||||||
|
try { |
||||||
|
return db.getDescription(); |
||||||
|
} catch(Exception e) { |
||||||
|
throw new stock.StockException(e.toString()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* This is defined in stock.idl |
||||||
|
* |
||||||
|
* It returns the description of a Stock item |
||||||
|
*/ |
||||||
|
public int getAvailable() throws stock.StockException { |
||||||
|
try { |
||||||
|
return db.getAvailable(); |
||||||
|
} catch(Exception e) { |
||||||
|
throw new stock.StockException(e.toString()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* This is defined in stock.idl |
||||||
|
* |
||||||
|
* It returns the description of a Stock item |
||||||
|
*/ |
||||||
|
public int getOrdered() throws stock.StockException { |
||||||
|
try { |
||||||
|
return db.getOrdered(); |
||||||
|
} catch(Exception e) { |
||||||
|
throw new stock.StockException(e.toString()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* This is defined in stock.idl |
||||||
|
* |
||||||
|
* It returns the description of a Stock item |
||||||
|
*/ |
||||||
|
public boolean isItemValid() throws stock.StockException { |
||||||
|
try { |
||||||
|
return db.isItemValid(); |
||||||
|
} catch(Exception e) { |
||||||
|
throw new stock.StockException(e.toString()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* This is defined in stock.idl |
||||||
|
* |
||||||
|
* It returns the description of a Stock item |
||||||
|
*/ |
||||||
|
public void addNewStock(int id) throws stock.StockException { |
||||||
|
try { |
||||||
|
db.addNewStock(id); |
||||||
|
} catch(Exception e) { |
||||||
|
throw new stock.StockException(e.toString()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* This is defined in stock.idl |
||||||
|
* |
||||||
|
* It returns the description of a Stock item |
||||||
|
*/ |
||||||
|
public void removeStock(int id) throws stock.StockException { |
||||||
|
try { |
||||||
|
db.removeStock(id); |
||||||
|
} catch(Exception e) { |
||||||
|
throw new stock.StockException(e.toString()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* This is defined in stock.idl |
||||||
|
* |
||||||
|
* It returns the description of a Stock item |
||||||
|
*/ |
||||||
|
public void orderStock(int id) throws stock.StockException { |
||||||
|
try { |
||||||
|
db.orderStock(id); |
||||||
|
} catch(Exception e) { |
||||||
|
throw new stock.StockException(e.toString()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* This returns the highest id used, hence the number of items available |
||||||
|
*/ |
||||||
|
public int getLastID() throws stock.StockException { |
||||||
|
try { |
||||||
|
return db.getLastID(); |
||||||
|
} catch(Exception e) { |
||||||
|
throw new stock.StockException(e.toString()); |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
/** |
||||||
|
* This is used by our Dispenser |
||||||
|
*/ |
||||||
|
public String getInstanceName() { |
||||||
|
return instanceName; |
||||||
|
} |
||||||
|
} |
||||||
|
|
@ -0,0 +1,53 @@ |
|||||||
|
package example.corba; |
||||||
|
|
||||||
|
import org.omg.CosNaming.*; |
||||||
|
|
||||||
|
/** |
||||||
|
* This class implements the server side of the example. |
||||||
|
* |
||||||
|
* $Id: StockServer.java,v 1.1 1999/01/25 21:22:04 scrappy Exp $ |
||||||
|
*/ |
||||||
|
public class StockServer |
||||||
|
{ |
||||||
|
public static void main(String[] args) |
||||||
|
{ |
||||||
|
int numInstances = 3; |
||||||
|
|
||||||
|
try { |
||||||
|
// Initialise the ORB
|
||||||
|
org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args,null); |
||||||
|
|
||||||
|
// Create the StockDispenser object
|
||||||
|
StockDispenserImpl dispenser = new StockDispenserImpl(args,"Stock Dispenser",numInstances); |
||||||
|
|
||||||
|
// Export the new object
|
||||||
|
orb.connect(dispenser); |
||||||
|
|
||||||
|
// Get the naming service
|
||||||
|
org.omg.CORBA.Object nameServiceObj = orb.resolve_initial_references("NameService"); |
||||||
|
if(nameServiceObj == null) { |
||||||
|
System.err.println("nameServiceObj = null"); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
org.omg.CosNaming.NamingContext nameService = org.omg.CosNaming.NamingContextHelper.narrow(nameServiceObj); |
||||||
|
if(nameService == null) { |
||||||
|
System.err.println("nameService = null"); |
||||||
|
return; |
||||||
|
} |
||||||
|
|
||||||
|
// bind the dispenser into the naming service
|
||||||
|
NameComponent[] dispenserName = { |
||||||
|
new NameComponent("StockDispenser","Stock") |
||||||
|
}; |
||||||
|
nameService.rebind(dispenserName,dispenser); |
||||||
|
|
||||||
|
// Now wait forever for the current thread to die
|
||||||
|
Thread.currentThread().join(); |
||||||
|
} catch(Exception e) { |
||||||
|
e.printStackTrace(); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
|
||||||
|
|
@ -0,0 +1,34 @@ |
|||||||
|
|
||||||
|
The CORBA example is the most complicated of the examples. It |
||||||
|
aims to show how to use JDBC & Java2's ORB to access PostgreSQL. |
||||||
|
|
||||||
|
To compile: |
||||||
|
|
||||||
|
Type "make corba" to build the example. This will create a new directory |
||||||
|
stock which contains the stubs needed by the orb, and all required classes |
||||||
|
under the example/corba directory. |
||||||
|
|
||||||
|
To run: |
||||||
|
|
||||||
|
NOTE: To run, you will need 3 shells on Win32 (under unix you can get away |
||||||
|
with two shells): |
||||||
|
|
||||||
|
1: Start the naming service |
||||||
|
|
||||||
|
Unix: tnameserv -ORBInitialPort 1050 & |
||||||
|
Win32: tnameserv -ORBInitialPort 1050 |
||||||
|
|
||||||
|
2: Start the StockServer |
||||||
|
|
||||||
|
java example.corba.StockServer 3 jdbc:postgresql:dbase user passwd -ORBInitialPort 1050 |
||||||
|
|
||||||
|
Where: |
||||||
|
3 Number of concurrent sessions to allow |
||||||
|
dbase The database (including a hostname if required) |
||||||
|
user The PostgreSQL user name |
||||||
|
passwd The password |
||||||
|
|
||||||
|
3: Using a fresh shell, run the client: |
||||||
|
|
||||||
|
java example.corba.StockClient -ORBInitialPort 1050 |
||||||
|
|
@ -0,0 +1,40 @@ |
|||||||
|
// $Id: stock.idl,v 1.1 1999/01/25 21:22:04 scrappy Exp $ |
||||||
|
// |
||||||
|
// This is our CORBA bindings for a very simple stock control |
||||||
|
// system. |
||||||
|
// |
||||||
|
// $Id: stock.idl,v 1.1 1999/01/25 21:22:04 scrappy Exp $ |
||||||
|
// |
||||||
|
|
||||||
|
// For some reason, idltojava on my setup doesn't like this to be |
||||||
|
// in caps. It could be a problem with Win95 & Samba, but for now, |
||||||
|
// this is in lowercase |
||||||
|
module stock |
||||||
|
{ |
||||||
|
exception StockException |
||||||
|
{ |
||||||
|
string reason; |
||||||
|
}; |
||||||
|
|
||||||
|
interface StockItem |
||||||
|
{ |
||||||
|
void fetchItem(in long id) raises (StockException); |
||||||
|
long newItem() raises (StockException); |
||||||
|
string getDescription() raises (StockException); |
||||||
|
long getAvailable() raises (StockException); |
||||||
|
long getOrdered() raises (StockException); |
||||||
|
boolean isItemValid() raises (StockException); |
||||||
|
void addNewStock(in long amount) raises (StockException); |
||||||
|
void removeStock(in long amount) raises (StockException); |
||||||
|
void orderStock(in long amount) raises (StockException); |
||||||
|
long getLastID() raises (StockException); |
||||||
|
string getInstanceName(); |
||||||
|
}; |
||||||
|
|
||||||
|
interface StockDispenser |
||||||
|
{ |
||||||
|
StockItem reserveItem() raises (StockException); |
||||||
|
void releaseItem(in StockItem item) raises (StockException); |
||||||
|
}; |
||||||
|
|
||||||
|
}; |
@ -0,0 +1,27 @@ |
|||||||
|
-- |
||||||
|
-- This creates the database for the stock example |
||||||
|
-- $Id: stock.sql,v 1.1 1999/01/25 21:22:04 scrappy Exp $ |
||||||
|
-- |
||||||
|
drop table stock; |
||||||
|
|
||||||
|
create table stock ( |
||||||
|
id int4, |
||||||
|
avail int4, |
||||||
|
ordered int4, |
||||||
|
valid bool, |
||||||
|
description text |
||||||
|
); |
||||||
|
|
||||||
|
create index stock_id on stock(id); |
||||||
|
|
||||||
|
copy stock from stdin; |
||||||
|
1 19 0 t Dell Latitude XPi P133 Laptop |
||||||
|
2 3 2 t Iomega Zip Plus drive |
||||||
|
3 2 0 f Iomega Ext/Par drive |
||||||
|
4 0 4 t Iomega Ext USB drive |
||||||
|
5 200 0 t Blank Unbranded CDR media |
||||||
|
6 20 30 t Iomega Zip media 100Mb |
||||||
|
\. |
||||||
|
|
||||||
|
grant all on stock to public; |
||||||
|
grant all on stock_id to public; |
Loading…
Reference in new issue