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