try {
// Must at least have the service address
if (args.length == 0 || args.length == 2) {
usage();
}
// Make sure that the arguments are legal
int command = -1;
String name = null;
if (args.length != 1) {
String request = args[1];
StringBuffer sb = new StringBuffer();
sb.append(args[2]);
for (int i = 3; i < args.length; i++) {
sb.append(' ");
sb.append(args[i]);
}
name = sb.toString();
System.out.println("NAME = [" + name + "]");
for (int i = 0; i < commands.length; i++) {
if (request.equals(commands[i])) {
command = i + 1;
break;
}
}
if (command == -1) {
// Not found
usage();
}
} else {
command = GET_BOOKS;
}
// Get a reference to the stub and set the service address
InitialContext ctx = new InitialContext();
BookService service = (BookService)PortableRemoteObject.narrow(
ctx.lookup("java:comp/env/service/BookService"),
BookService.class);
BookQuery bookQuery = (BookQuery)service.getBookQueryPort();
((Stub)bookQuery)._setProperty(Stub.ENDPOINT_ADDRESS_PROPERTY, args[0]);
// Perform the RPC and print the results
switch (command) {
case GET_BOOKS:
BookInfo[] books = bookQuery.getBookInfo();
for (int i = 0; i < books.length; i++) {
BookInfo info = books[i];
System.out.println(info.getTitle() + " by " +
info.getAuthor() + ", edited by " +
info.getEditor() + ", price USD " +
info.getPrice());
}
break;
case GET_AUTHOR:
String author = bookQuery.getAuthor(name);
System.out.println(author != null ? author :
"No matching book found");
break;
case GET_EDITOR:
String editor = bookQuery.getEditor(name);
System.out.println(editor != null ? editor :
"No matching book found");
break;
case GET_PRICE:
double price = bookQuery.getPrice(name);
System.out.println("Price = " + price + " USD.");
break;
}
System.exit(0);
} catch (Throwable t) {
System.out.println("CLASS: " + t.getClass().getName() + "\n\n");
System.out.println(t.getMessage());
t.printStackTrace(System.out);
}