从 JDK 11 客户端到 Weblogic 10.3.6 (JDK 7) 服务器的简单 JNDI 查找不工作

Simple JNDI lookup from JDK 11 client to Weblogic 10.3.6 (JDK 7) server not working

服务器环境:Weblogic 10.3.6,JDK1.7

我有一个简单的工作 Java SE 客户端应用程序运行 JDK 7。在客户端中,我对上面提到的资源托管服务器做了非常简单的 JNDI 外观。

ClassPath 中的 Jars:wlthint3client.jar

public static void main(String[] args) throws Exception {
    Hashtable t = new Hashtable();
    t.put(InitialContext.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
    t.put(InitialContext.PROVIDER_URL, "t3://localhost:7003/");
    InitialContext ic = new InitialContext(t);

    String jndiName = "weblogic.jdbc.DataSource.Workflow";

    Object obj = ic.lookup(jndiName);
    System.out.println("Found it");
}

我必须升级我的工作Java SE 客户端应用程序从JDK 7 到JDK 11。服务器环境保持不变。

当我将客户端升级到 JDK 11 时,我遇到了以下错误。这是意料之中的,因为 corba 罐子已从 JDK 11 移出。

Exception in thread "main" java.lang.NoClassDefFoundError: org/omg/CORBA/SystemException
    at weblogic.jndi.WLInitialContextFactoryDelegate.<clinit>(WLInitialContextFactoryDelegate.java:202)
    at weblogic.jndi.spi.EnvironmentManager$DefaultFactoryMaker.<clinit>(EnvironmentManager.java:27)
    at weblogic.jndi.spi.EnvironmentManager.getInstance(EnvironmentManager.java:49)
    at weblogic.jndi.Environment.getContext(Environment.java:315)
    at weblogic.jndi.Environment.getContext(Environment.java:285)
    at weblogic.jndi.WLInitialContextFactory.getInitialContext(WLInitialContextFactory.java:117)
    at java.naming/javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:730)
    at java.naming/javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:305)
    at java.naming/javax.naming.InitialContext.init(InitialContext.java:236)
    at java.naming/javax.naming.InitialContext.<init>(InitialContext.java:208)
    at com.test.JndiLookupTestJdk11.main(JndiLookupTestJdk11.java:16)

已将 jacorb-omgapi-3.8.jar 添加到客户端类路径以修复上述异常。

在此之后我遇到了以下超时异常并且没有提供任何线索。服务器已启动并且 运行 因为我的旧客户端正在运行。

错误在这一行

InitialContext ic = new InitialContext(t);

堆栈跟踪

WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by weblogic.rjvm.MsgAbbrevInputStream (file:/C:/Users/ke64/OneDrive%20-%20Sun%20Life%20Financial/work_eclipse-jee-2018-12-R/jndi-lookup-test-jdk11/lib/wlthint3client.jar) to method java.io.ObjectInputStream.clear()
WARNING: Please consider reporting this to the maintainers of weblogic.rjvm.MsgAbbrevInputStream
WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
WARNING: All illegal access operations will be denied in a future release
Exception in thread "main" javax.naming.CommunicationException [Root exception is java.net.ConnectException: t3://localhost:7003: Bootstrap to: localhost/0:0:0:0:0:0:0:1:7003' over: 't3' got an error or timed out]
    at weblogic.jndi.internal.ExceptionTranslator.toNamingException(ExceptionTranslator.java:40)
    at weblogic.jndi.WLInitialContextFactoryDelegate.toNamingException(WLInitialContextFactoryDelegate.java:792)
    at weblogic.jndi.WLInitialContextFactoryDelegate.getInitialContext(WLInitialContextFactoryDelegate.java:368)
    at weblogic.jndi.Environment.getContext(Environment.java:315)
    at weblogic.jndi.Environment.getContext(Environment.java:285)
    at weblogic.jndi.WLInitialContextFactory.getInitialContext(WLInitialContextFactory.java:117)
    at java.naming/javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:730)
    at java.naming/javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:305)
    at java.naming/javax.naming.InitialContext.init(InitialContext.java:236)
    at java.naming/javax.naming.InitialContext.<init>(InitialContext.java:208)
    at com.test.JndiLookupTestJdk11.main(JndiLookupTestJdk11.java:16)
Caused by: java.net.ConnectException: t3://localhost:7003: Bootstrap to: localhost/0:0:0:0:0:0:0:1:7003' over: 't3' got an error or timed out
    at weblogic.rjvm.RJVMFinder.findOrCreateInternal(RJVMFinder.java:216)
    at weblogic.rjvm.RJVMFinder.findOrCreate(RJVMFinder.java:170)
    at weblogic.rjvm.ServerURL.findOrCreateRJVM(ServerURL.java:165)
    at weblogic.jndi.WLInitialContextFactoryDelegate.getInitialContext(WLInitialContextFactoryDelegate.java:353)
    ... 8 more
Caused by: java.rmi.ConnectException: Bootstrap to: localhost/0:0:0:0:0:0:0:1:7003' over: 't3' got an error or timed out
    at weblogic.rjvm.ConnectionManager.bootstrap(ConnectionManager.java:365)
    at weblogic.rjvm.RJVMManager.findOrCreateRemoteInternal(RJVMManager.java:260)
    at weblogic.rjvm.RJVMManager.findOrCreate(RJVMManager.java:197)
    at weblogic.rjvm.RJVMFinder.findOrCreateRemoteServer(RJVMFinder.java:238)
    at weblogic.rjvm.RJVMFinder.findOrCreateRemoteCluster(RJVMFinder.java:316)
    at weblogic.rjvm.RJVMFinder.findOrCreateInternal(RJVMFinder.java:205)
    ... 11 more

问题

  1. 有没有人用过配置?任何的想法 如何解决这个问题?我需要添加任何特定版本的 corba 罐子吗?
  2. 我认为 JNDI 查找的标准 J2EE 功能应该可以工作。 Weblogic 10.3.6 与 JDK 11 客户端不兼容吗?

非常感谢任何帮助。

没有适用于 JDK 11 的 WebLogic Server 发布版本。 WLS 10.3.6 还差得远(它甚至不能在 JDK 8 上运行)。

最接近的发布版本是 WLS 12.2.1.3.0,它在 JDK9 上工作得很好,但随着 JDK10 和 JDK11 中的后续更改而被破坏.

计划在 2019 年下半年推出 JDK11 认证的 WebLogic Server 版本。

回答一个老问题..我最近不得不调查一个类似的情况。只是在这里添加我的发现。真正的功劳应该归功于 stephen-felts,因为他的回复给了我尝试这个的想法。

在 OpenJDK 11 上查看 Spring 启动客户端,试图与 Oracle JDK 上的 WebLogic 10.3.6.0 上的 JMS 队列对话 JDK 6.

尝试使用 10.3.6 中的 wlthint3client.jar 并没有太大帮助,因为存在 CORBA 依赖项。在 this SAS post 之后为 JDK 11 添加依赖项。可以通过添加依赖项来消除 ClassNotFound 错误 org.glassfish.corba:glassfish-corba-org:4.2.4 org.glassfish.pfl: pfl-tf:4.1.2 但仍然会看到 't3' got an error or timed out 异常消息作为OP.

看到 WLS 14.1.1 已通过 JDK 11 认证,安装并从 <WLS_SERVER>/lib 文件夹中复制捆绑的 wlthint3client.jar 并配置 Spring 启动客户端使用它。可以成功 post 消息到队列。

虽然我在 Oracle 网站上找不到任何官方确认,所以我不知道这种方法是否足以在生产环境中使用。