私の質問は、通行料によく似たプロジェクトに取り組んでいるということです。クライアントは最初のサーバーに ID を送信します。このサーバーは、クライアントになってから 2 番目のサーバーに接続し、プロセスを介して車が通過するかどうかを返します。現在、CORBA で問題が発生しています (プロジェクトは最初に正常に動作する RMI で作成されました) が、1 番目のサーバーから 2 番目のサーバーへの接続に問題があります。XXXClient -ORBInitialPort 1999 となるクライアントを実行する場合とは異なり、ORB を別の方法で初期化する必要があると言われました。最初のサーバーには正常に接続できますが、2 番目のサーバーには何も到達しません。最終的にクライアントになるサーバーのコードは次のとおりです
import PROApp.*;
import org.omg.CosNaming.*;
import org.omg.CosNaming.NamingContextPackage.*;
import org.omg.CORBA.*;
import org.omg.PortableServer.*;
import org.omg.PortableServer.POA;
import java.util.Properties;
class PROImpl extends PROPOA {
private ORB orb;
public void setORB(ORB orb_val) {
orb = orb_val;
}
// implement sayHello() method
public String check1(int number)
{
try{
if(number > 0 && number <8000)
{
String serverReply2 = "parta";
serverReply2 = proCarImpl.check2(number);
System.out.println(serverReply2);
if(serverReply2.equals("ACK"))
{
return "You shall pass";
}
else if(serverReply2.equals("NACK"))
{
return "You shall not pass, not enought credits";
}
else
{
return "You're probably not on the list or something went wrong";
}
}
else
{
return "Wrong ID number";
}
}
catch (Exception e)
{
System.out.println("PROServer is not bound in rmiregistry... Exception:" + e);
}return "ooups";
}
// implement shutdown() method
public void shutdown() {
orb.shutdown(false);
}
}
public class PROServer {
public static void main(String args[]) {
try{
// create and initialize the ORB
ORB orb = ORB.init(args, null);
// get reference to rootpoa & activate the POAManager
POA rootpoa = POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
rootpoa.the_POAManager().activate();
// create servant and register it with the ORB
PROImpl proImpl = new PROImpl();
proImpl.setORB(orb);
// get object reference from the servant
org.omg.CORBA.Object ref = rootpoa.servant_to_reference(proImpl);
PRO href = PROHelper.narrow(ref);
// get the root naming context
// NameService invokes the name service
org.omg.CORBA.Object objRef =
orb.resolve_initial_references("NameService");
// Use NamingContextExt which is part of the Interoperable
// Naming Service (INS) specification.
NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
// bind the Object Reference in Naming
String name = "project corba";
NameComponent path[] = ncRef.to_name(name);
ncRef.rebind(path, href);
System.out.println("PROServer with name "+ name+ " is up and it's waiting ...");
// wait for invocations from clients
orb.run();
ORB orb = ORB.init(args, null);
org.omg.CORBA.Object objRef =
orb.resolve_initial_references("NameService");
NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
String name = "project corba car";
proCarImpl = PROCarHelper.narrow(ncRef.resolve_str(name));
System.out.println("Obtained a handle on server object: " + proCarImpl);
}
catch (Exception e) {
System.err.println("ERROR: " + e);
e.printStackTrace(System.out);
}
System.out.println("HelloServer Exiting ...");
}
}