package org.jacorb.demo.dii;
/**
* An example for using the Dynamic Invocation Interface
*/
import java.io.BufferedReader;
import java.io.FileReader;
import org.omg.CORBA.WrongTransaction;
public class Client
{
public static void main( String[] args ) throws Exception
{
final org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args,null);
BufferedReader br =
new BufferedReader( new FileReader( args[0] ));
org.omg.CORBA.Object server = orb.string_to_object(br.readLine());
simpleRequest(orb, server);
requestWithOutArgs(orb, server);
onewayRequest(server);
requestWithReturnValue(orb, server);
deferredRequest(orb, server);
exceptionRequest(orb, server);
defererredRequestWithPolling(orb, server);
shutdownRequest (server);
}
private static void shutdownRequest(org.omg.CORBA.Object server)
{
// another simple request with a string argumente, oneway
org.omg.CORBA.Request request = server._request("shutdown");
request.invoke();
}
private static void deferredRequest(org.omg.CORBA.ORB orb, org.omg.CORBA.Object server) throws WrongTransaction, Exception
{
// deferred asynchronous operation, synchronize with result
org.omg.CORBA.Request request = server._request("writeNumber");
request.add_in_arg().insert_long( 5 );
request.set_return_type( orb.get_primitive_tc(
org.omg.CORBA.TCKind.tk_string ));
request.send_deferred();
request.get_response();
if( request.env().exception() != null )
{
throw request.env().exception();
}
else
{
System.out.println("[Client] 3: " + request.return_value() );
}
}
private static void defererredRequestWithPolling(org.omg.CORBA.ORB orb, org.omg.CORBA.Object server) throws Exception
{
// polling until response is there
org.omg.CORBA.Request r4 = server._request("writeNumber");
r4.add_in_arg().insert_long( 5 );
r4.set_return_type( orb.get_primitive_tc(
org.omg.CORBA.TCKind.tk_string ));
r4.send_deferred();
while( ! r4.poll_response() )
{
/* we could be doing s.th. useful here instead of
sleeping...*/
try
{
Thread.sleep(10);
}
catch ( InterruptedException i){}
System.out.print(".");
}
if( r4.env().exception() != null )
{
throw r4.env().exception();
}
else
{
System.out.println("[Client] 4: " + r4.return_value() );
}
}
private static void exceptionRequest(org.omg.CORBA.ORB orb, org.omg.CORBA.Object server)
{
//send a request which throws an exception
org.omg.CORBA.Request request = server._request("writeNumberWithEx");
request.add_in_arg().insert_long( 5 );
org.omg.CORBA.ExceptionList exceptions = request.exceptions();
org.omg.CORBA.TypeCode tc =
orb.create_exception_tc(
"IDL:dii/server/e:1.0",
"e",
new org.omg.CORBA.StructMember[]{
new org.omg.CORBA.StructMember(
"why",
orb.create_string_tc(0),
null)
}
);
exceptions.add( tc );
request.invoke();
if( request.env().exception() != null )
{
System.out.println("[Client] 5: Got exception " +
request.env().exception());
//Hint: what you get here is a
//org.omg.CORBA.portable.ApplicationException
//which contains an any containing the real
//exception.
}
}
private static void requestWithReturnValue(org.omg.CORBA.ORB orb, org.omg.CORBA.Object server) throws Exception
{
// a request with a return value
org.omg.CORBA.Request request = server._request("writeNumber");
request.add_in_arg().insert_long( 5 );
request.set_return_type( orb.get_primitive_tc( org.omg.CORBA.TCKind.tk_string ));
request.invoke();
if( request.env().exception() != null )
{
throw request.env().exception();
}
else
{
System.out.println("[Client] 2: " + request.return_value() );
}
}
private static void onewayRequest(org.omg.CORBA.Object server)
{
// another simple request with a string argumente, oneway
org.omg.CORBA.Request request = server._request("notify");
request.add_in_arg().insert_string("hallo");
request.send_oneway();
}
private static void requestWithOutArgs(org.omg.CORBA.ORB orb, org.omg.CORBA.Object server) throws Exception
{
// a request with out args
org.omg.CORBA.Request request = server._request("add");
request.add_in_arg().insert_long( 3 );
request.add_in_arg().insert_long( 4 );
org.omg.CORBA.Any out_arg = request.add_out_arg();
out_arg.type( orb.get_primitive_tc(
org.omg.CORBA.TCKind.tk_long) );
request.set_return_type( orb.get_primitive_tc(
org.omg.CORBA.TCKind.tk_void));
request.invoke();
if( request.env().exception() != null )
{
throw request.env().exception();
}
else
{
System.out.println("[Client] 1: " + out_arg.extract_long() );
}
}
private static void simpleRequest(org.omg.CORBA.ORB orb, org.omg.CORBA.Object server) throws Exception
{
// a simple request
org.omg.CORBA.Request request = server._request("_get_long_number");
request.set_return_type(
orb.get_primitive_tc(org.omg.CORBA.TCKind.tk_long));
request.invoke();
if( request.env().exception() != null )
{
throw request.env().exception();
}
else
{
System.out.println("[Client] 0: " + request.return_value() );
}
}
}