java - Corba NamingContextExtStub.resolve
问题描述
第一次在这里问问题,如果它太愚蠢或太简单,请道歉。我正在学习 CORBA,并且正在使用对象和上下文绑定编写一个简单的客户端服务器应用程序,但是在尝试解决对象绑定时出现此错误,谁能告诉我我做错了什么?:
Bienvenu dans le systeme
Erreur : org.omg.CosNaming.NamingContextPackage.NotFound: IDL:omg.org/CosNaming/NamingContext/NotFound:1.0
org.omg.CosNaming.NamingContextPackage.NotFound: IDL:omg.org/CosNaming/NamingContext/NotFound:1.0
at org.omg.CosNaming.NamingContextPackage.NotFoundHelper.read(Unknown Source)
at org.omg.CosNaming._NamingContextExtStub.resolve_str(Unknown Source)
at CorbaClient.Main.main(Main.java:26)
客户代码
package CorbaClient;
import BoutiqueInformatique.*;
import org.omg.CosNaming.*; // inclure le service de nommage
import org.omg.CORBA.*; // manipuler des objets CORBA
public class Main {
public static void main(String args[]) {
try {
// creer et initialiser l'ORB
ORB orb = ORB.init(args, null);
// obtenir une reference au service de nommage
org.omg.CORBA.Object objRef = orb
.resolve_initial_references("NameService");
// Utiliser NamingContextExt au lieu de NamingContext.
// car interoperable
NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
System.out.println("Bienvenu dans le systeme");
// demander la reference de l'objet au service de noms
String nom = "Boutique";
Boutique maBoutique = BoutiqueHelper.narrow(ncRef.resolve_str(nom));
System.out.println(maBoutique.afficherListeEmploie());
Emploie monEmploie = maBoutique.creerEmploie("Technicien", 5);
maBoutique.creerEmploie("Caissier", 2);
System.out.println(maBoutique.afficherListeEmploie());
maBoutique.rechercherEmploie("Caissier");
maBoutique.supprimerEmploie("Caissier");
System.out.println("Suppression d'un emploie ...");
monEmploie.ajout(5);
monEmploie.suppresion(2);
//Affichage de la moyenne
monEmploie.moyenneAjout(2);
//Affichage de l'ecart type
monEmploie.moyenneSuppresion(2);
} catch (Exception e) {
System.out.println("Erreur : " + e);
e.printStackTrace(System.out);
}
} // fin du main
}
代码服务器
package CorbaServeur;
import org.omg.CORBA.ORB;
import org.omg.CosNaming.NameComponent;
import org.omg.CosNaming.NamingContextExt;
import org.omg.CosNaming.NamingContextExtHelper;
import org.omg.PortableServer.POA;
import org.omg.PortableServer.POAHelper;
import BoutiqueInformatique.Boutique;
import BoutiqueInformatique.BoutiqueHelper;
public class Main {
public static void main(String args[]) {
try {
// creer et initialiser l'ORB qui integre
// le service de noms
ORB orb = ORB.init(args, null);
// obtenir la reference de rootpoa &
POA rootpoa = POAHelper.narrow(orb.resolve_initial_references("RootPOA"));
// activer le POAManager
rootpoa.the_POAManager().activate();
// creer le servant
ServeurBoutique BoutiqueRef = new ServeurBoutique("LDLC");
// obtenir la reference CORBA du servant
org.omg.CORBA.Object ref = rootpoa.servant_to_reference(BoutiqueRef);
Boutique href = BoutiqueHelper.narrow(ref);
// obtenir la reference du contexte de nommage
org.omg.CORBA.Object objRef = orb
.resolve_initial_references("NameService");
// Utiliser NamingContextExt qui est Interoperable
NamingContextExt ncRef = NamingContextExtHelper.narrow(objRef);
// enregistrer le servant dans le service de nommage
String name = "Boutique";
NameComponent path[] = ncRef.to_name(name);
ncRef.rebind(path, href);
System.out.println("Boutique est prête et est en attente.");
// attendre les invocations des clients
} catch (Exception e) {
System.out.println("Erreur : " + e);
e.printStackTrace(System.out);
}
} // fin du main
}
解决方案
我看到的一个问题是您的服务器在客户端可以连接之前终止。在服务器上,必须调用 ORB.run() 方法才能监听传入的客户端调用。您可以尝试在您的评论正确指出您必须等待客户端调用时在您的 main 方法中调用 ORB.run()。稍后您可能希望将该调用移动到自己的线程中,特别是如果您的应用程序有一个 UI 要提供服务。
推荐阅读
- swift - 如何以编程方式将根视图控制器添加到 macOS?
- c - 代码块上的 GDB 调试器不起作用(C 语言)
- python - 使用 CPLEX 在 python 中使用 timelimit 是否存在错误?
- android - Azure Pipelines – Release Gradle Pipeline 找不到 gradlew
- binding - 无法转换“Int”类型的值?到预期的参数类型'绑定
' 斯威夫特 - c# - 在视图中填充下拉列表
- c - ['{'标记之前的错误预期表达式
- javascript - 需要 Promise.all 但没有并行运行
- azure-active-directory - 使用带有客户端凭据流的 Graph API .NET SDK 创建 hello-world 团队时出现“未经授权”错误
- javascript - 如何将 MutationObserver 插入 jQuery 代码