当前位置: 首页 > 知识库问答 >
问题:

用websphere liberty应用程序从经典websphere应用程序访问远程ejb

丌官炎彬
2023-03-14

我需要一些使用远程ejb调用的帮助。有以下设置:

背景:

一个JavaEE web应用程序(命名为app1)托管在一个古老的WAS8应用程序服务器上。应用程序为应用程序之间的通信提供至少一个(已知)远程ejb。

try {

    // Holds the server address 
    String server = "server.address:port";

    // Building JNDI address:
    // E.g. corbaname:iiop:server:port/java:global/app1/ejb-module/BeanImpl!qualified.name.of.RemoteBean
    StringBuilder address = new StringBuilder("corbaname:iiop:") // Protocol
            .append(server) // Server address
            .append("/") // Separator
            .append("java:") // EJB context
            .append("global/") // Globales Repository
            .append("app1/") // Applikation
            .append("ejb-module/") // module
            .append("BeanImpl!") // Bean
            .append("qualified.name.of.RemoteBean"); // Remote Interface

    // Performing jndi lookup (shadowed remote ejb call by context (liberty server))
    Object o = InitialContext.doLookup(address.toString());

    // Casting requested object
    service = (qualified.name.of.RemoteBean) PortableRemoteObject.narrow(o,
            qualified.name.of.RemoteBean.class);
} catch (NamingException e) {

    // Catching naming errors
    log.warn("Cannot read app1 URL from JNDI: {}.", e.getMessage());
    log.error("Exeption: ", e);
} catch (SystemException e) {

    // Catching any other error
    log.warn("Cannot connect to app1: {}", e.getMessage());
    log.error("Exeption: ", e);
}
 Exeption:  org.omg.CORBA.OBJ_ADAPTER: 
    at org.apache.yoko.orb.OB.Util.unmarshalSystemException(Util.java:165)
    at org.apache.yoko.orb.OB.GIOPConnection.processReply(GIOPConnection.java:543)
    at org.apache.yoko.orb.OB.GIOPConnection.processMessage(GIOPConnection.java:365)
    at org.apache.yoko.orb.OB.GIOPConnectionThreaded.execReceive(GIOPConnectionThreaded.java:429)
    at org.apache.yoko.orb.OB.GIOPConnectionThreaded.access$200(GIOPConnectionThreaded.java:42)
    at org.apache.yoko.orb.OB.GIOPConnectionThreaded$Receiver.run(GIOPConnectionThreaded.java:68)
    at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)

基础设施信息:

WAS8使用IBM J9 VMjava Version1.6.0运行在我公司的Intranet上的linux服务器上。WAS8是8.0.0.15nd版本。

websphere liberty使用java HotSpot(TM)64位服务器VMjava Version1.8.0_172-B11运行在windows 10计算机上,通过VPN连接到与WAS8应用服务器相同的网络区域。Liberty是18.0.0.2版本

[1/11/19 13:26:21:230 CET] 00000008 EJBContainerI I   CNTR0167I: The server is binding the qualified.name.of.RemoteBeaninterface of the BeanImplenterprise bean in the ejb-module.jar module of the app1 application.  The binding location is: BeanImpl
[1/11/19 13:26:21:246 CET] 00000008 AbstractEJBRu I   CNTR0167I: The server is binding the qualified.name.of.RemoteBeaninterface of the BeanImplenterprise bean in the ejb-module.jar module of the app1 application.  The binding location is: java:global/app1/ejb-module/BeanImpl!qualified.name.of.RemoteBeaninterface 

是否有关于WAS8的命名文档?

共有1个答案

艾敏学
2023-03-14

DeveloperWorks中的一个类似的线程讨论了自由客户机调用TWAS中的EJB的问题。当时,自由是否有这种功能存在问题。RFE 32815已经实施。Liberty doc展示了EJB查找的示例(请参见下面给出的链接)

无论如何,根据您发布的stacktrace,似乎corba.obj_adapter正在tWAS服务器上抛出,客户机正在从服务器的应答消息中处理该exc。可能需要从服务器进行跟踪。我还会在tWAS服务器上运行dumpnamespace,以便查看您试图查找的基于拓扑的ejb对象,并尝试使用该对象而不是java:global名称。

关于你的具体问题:

  • A1。虽然“java:global”间接名称可能有效,但我看到的对tWAS命名空间的大多数查找都使用基于拓扑的限定名(例如cell//node/...)
  • A2。一般来说,是的,不同CORBA/命名版本和供应商之间应该存在互操作性。
  • A3。请参阅下面列出的链接。

如果以下文档都没有帮助,那么最好使用IBM support打开一个票证,这样我们就可以更容易地交换日志等,并点击各种Liberty、tWAS Naming/EJB Experts。

    null
 类似资料:
  • 我可以在AppEngine应用程序中使用GAE托管的MongoDB吗? 如果是,如何用appengine实例调试此连接问题? 提前谢了。

  • 你能告诉我Office365 REST API和EWS Java API之间的区别吗? 我为REST API搜索Java库,但没有可用的库。 两个月前,我在ews java api中提出了一个问题,但仍然没有得到他们的任何回应。 您能否建议任何可靠的解决方案来使用office365 API从Java应用程序。 使用我们需要注册我们的应用程序与Azure,我们可以重新Giter是免费的还是付费的。如

  • 问题内容: 我有一个在Linux机器上运行的Java应用程序。我使用以下命令运行Java应用程序: 我已经在此Linux机器上为TCP打开了端口4000。我使用Windows XP计算机上的eclipse,并尝试连接到此应用程序。我也在Windows中打开了端口。 这两台机器都在LAN上,但是我似乎无法将调试器连接到Java应用程序。我究竟做错了什么? 问题答案: 我注意到有些人在这里剪切和粘贴该

  • 从。NET应用程序连接到远程MongoDb实例有点困难。 我创建了一个非常简单的控制台应用程序,它基本上是一个冒烟测试,并带回一个项目。如果我在运行MongoDb服务的服务器上运行它,它将与MongoDb进行对话,不会有任何问题。ConnectionString就是。 我已经为服务器上的27017端口创建了一个inboudd规则,甚至完全关闭了防火墙。 Mongo服务器的cfg文件非常基本: 干杯

  • 当我们试图从远程主机进行访问时,会出现以下异常 连接到授权网关https://gde_poc_crdh.service.anz:443/ag-dev... 连接到授权网关时出错:javax.net.ssl.sslhandShakeException:sun.security.validator.validatoreXception:PKIX路径构建失败:sun.security.provider.

  • 问题内容: 我正在调试jnlp应用程序,过去可以通过Eclipse对其进行远程调试,但现在不再可用。 启动它的命令是: 问题是当我连接Eclipse调试器时,它会关闭并重新启动;因此,调试器将附加到第一个进程;当这种情况消失时,调试器也是如此。 调试器脚本实际上并不重要;因为如果suspend = n,则在调试器启动之前,jnlp进程会自行重新启动。 我尝试跟踪它,但是选项-XX:TraceSup