我有一个扩展 Swing JFrame 的类。为了让此类接收回调并调用此类中的方法,该类应扩展 POA 类。我不知道该怎么做。那么多重继承呢?我应该创建另一个类来扩展 POA 类吗?
代码
public final class JFSECorbaClient extends javax.swing.JFrame {
//
// init and other method
//
public static void main(final String args[]) throws ClassNotFoundException, IllegalAccessException, InstantiationException{
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
frame = new JFSECorbaClient().setVisible(true);
try {
//initialize orb
Properties props = System.getProperties();
props.put("org.omg.CORBA.ORBInitialPort", "1050");
props.put("org.omg.CORBA.ORBInitialHost", "localhost");
ORB orb = ORB.init(args, props);
System.out.println("Initialized ORB");
//Instantiate Servant and create reference
POA rootPOA = POAHelper.narrow(
orb.resolve_initial_references("RootPOA"));
rootPOA.activate_object(this.frame); //this.frame should extends jfseCallbackPOA
ref = jfseCallbackHelper.narrow(
rootPOA.servant_to_reference(callbackListener));
//Resolve MessageServer
jfseServer = jfseORBHelper.narrow(
orb.string_to_object("corbaname:iiop:1.2@localhost:1050#MessageServer"));
//Activate rootpoa
rootPOA.the_POAManager().activate();
//thread for receive callback in other class thread
JFSECorrbaListener th = new JFSECorrbaListener();
th.setOrb(orb);
th.start();
} catch (Exception e) {
System.out.println(e);
}
}
});
}
最佳答案
如果您控制 IDL,则不必扩展 POA 类:您可以通过 RMI/IIOP 定义回调,在生成 stub (rmic -iiop) 时从远程接口(interface)生成 IDL,并且使用 PortableRemoteObject.exportObject() 导出它。无需扩展任何特定类。
话虽如此,但这是错误的答案。您的 JFrame 扩展类不需要同时是 CORBA 回调。将 CORBA 回调定义为一个完全独立的类,并为其提供与 JFrame 扩展类的 Hook ,以便在回调发生时执行所需的操作。
关于Java 使用 Swing 接收 CORBA 回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10369152/