【问题标题】:How does a Standalone Java client obtain a Wildfly Initial Context?独立 Java 客户端如何获取 Wildfly 初始上下文?
【发布时间】:2015-11-04 01:25:35
【问题描述】:

我找不到 Java 独立客户端从 WildFly 获取有效 InitialContext 的简单代码示例。存在吗?

我放弃了 Glassfish 4,因为 Oracal 永远不会解决它的 JMS 问题(我需要 WildFly 的 Context 的真正原因。现在我在 WildFly 上失败了。

我相信一个简单的例子会帮助很多刚接触 WildFly 的人。 (注意:不是从企业容器中获取 WildFly 的上下文。从独立的 Java 客户端获取它——这样它就可以实现 JMS 消息传递。)

这是我所知道的最简单的代码。

次要相关问题:如何取消 Derby 不可用警告。每个人都说它需要 derbycleint.jar。 S0 我把它(和 derby-driver.jar)放在任何地方。仍然收到警告。

主要问题:我找不到 new IntialContext (env) 所需的一组属性。它似乎需要某种安全凭证。我只是找不到从哪里开始寻找和阅读以弄清楚我需要做什么。有什么帮助吗? (我想找到有效的简单代码,因为它肯定会帮助其他 WildFly 新手入门。甚至添加 JMS 部分,因为 Glassfish 不适合这样做。)

代码:

package org.america3.wildfly.jms;
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
import com.sun.messaging.ConnectionFactory;

public class JMSSendAndReceive {

  static Hashtable<String, String> jndiProperties = new Hashtable<String,String>() {
    private static final long serialVersionUID = 1L;
    {
      put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");

      /*after posting I added these properties*/
        put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");
        put(Context.PROVIDER_URL, "http-remoting://localhost:8080");
      /*That produced CONSOLE 2 below for new result -- DERBY is gone!
         I think all that's needed is to get
         org.jboss.naming.remote.client.InitialContextFactory 
         into the Eclipse build path.

         No luck.  That led to adding addtional classes 
         ... see commments below.
         They led to CONSOLE 3 output that offers no hope at all.
         I give up. Can anyone help?
       */
     }
  };

  static public void main (String[] args) {
    System.out.println("AS_DERBY_INSTALL: " + System.getenv("AS_DERBY_INSTALL"));
    System.out.println("JAVA_HOME: " + System.getenv("JAVA_HOME"));
    try {
      final Context context = new InitialContext(jndiProperties);
      ConnectionFactory factory = (ConnectionFactory) context.lookup("java:comp/DefaultJMSConnectionFactory");
      System.out.println(factory);
    } catch (Exception e) {
      System.out.println("Try Failed");
      System.out.println(e.getClass().getName());
      System.out.println(e.getMessage());
    }
  }

  /*
   * derbyclient.jar and derby-driver.jar are stored in these files:
   * <WILDFLY_HOME>\standalone\deployments
   * <WILDFLY_HOME>\standalone\deployments\lib
   * C:\Program Files\Java\jdk1.8.0_05\lib
   * C:\Program Files\Java\jdk1.8.0_05\jre\lib
   * 
   * The entire Derby API and derby-driver.jar are also added to the Eclipse 
   * build path for this class.
   * 
   * Adding these to Eclipse build produced CONSOLE 3
   * <WILDFLY_HOME>\modules\system\layers\base\org\jboss\remote-naming\main\jboss-remote-naming-2.0.4.Final.jar
   * <WILDFLY_HOME>\modules\system\layers\base\org\jboss\xnio\main\xnio-api-3.3.1.Final.jar
   * <WILDFLY_HOME>\modules\system\layers\base\org\jboss\remoting\main\jboss-remoting-4.0.9.Final.jar
   * <WILDFLY_HOME>\\modules\system\layers\base\org\jboss\ejb-client\main\jboss-ejb-client-2.1.1.Final.jar
   */

   /*
    *Tracked these down

   */

}

控制台:

AS_DERBY_INSTALL: D:\Bulletproof\bpDerby
JAVA_HOME: C:\Program Files\Java\jdk1.8.0_05
Nov 03, 2015 2:40:35 PM com.sun.enterprise.v3.server.CommonClassLoaderServiceImpl findDerbyClient
INFO: Cannot find javadb client jar file, derby jdbc driver will not be available by default.
org.omg.CORBA.COMM_FAILURE: FINE: 00410001: Connection failure: socketType: IIOP_CLEAR_TEXT; hostname: localhost; port: 3700  vmcid: OMG  minor code: 1  completed: No
    at com.sun.proxy.$Proxy20.connectFailure(Unknown Source)
    at com.sun.corba.ee.impl.transport.ConnectionImpl.<init>(ConnectionImpl.java:253)
    at com.sun.corba.ee.impl.transport.ConnectionImpl.<init>(ConnectionImpl.java:276)
    at com.sun.corba.ee.impl.transport.ContactInfoImpl.createConnection(ContactInfoImpl.java:129)
    at com.sun.corba.ee.impl.protocol.ClientRequestDispatcherImpl.beginRequest(ClientRequestDispatcherImpl.java:242)
    at com.sun.corba.ee.impl.protocol.ClientDelegateImpl.request(ClientDelegateImpl.java:220)
    at com.sun.corba.ee.impl.protocol.ClientDelegateImpl.is_a(ClientDelegateImpl.java:378)
    at org.omg.CORBA.portable.ObjectImpl._is_a(Unknown Source)
    at org.omg.CosNaming.NamingContextHelper.narrow(Unknown Source)
    at com.sun.enterprise.naming.impl.SerialContext$ProviderCacheKey.getNameService(SerialContext.java:1205)
    at com.sun.enterprise.naming.impl.SerialContext.getRemoteProvider(SerialContext.java:393)
    at com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:329)
    at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:477)
    at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:438)
    at javax.naming.InitialContext.lookup(Unknown Source)
    at com.sun.enterprise.connectors.jms.system.DefaultJMSConnectionFactory.handle(DefaultJMSConnectionFactory.java:83)
    at com.sun.enterprise.naming.impl.NamedNamingObjectManager.tryNamedProxies(NamedNamingObjectManager.java:134)
    at com.sun.enterprise.naming.impl.JavaURLContext.lookup(JavaURLContext.java:164)
    at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:471)
    at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:438)
    at javax.naming.InitialContext.lookup(Unknown Source)
    at org.america3.wildfly.jms.JMSSendAndReceive.main(JMSSendAndReceive.java:25)
Caused by: java.lang.RuntimeException: java.net.ConnectException: Connection refused: connect
    at org.glassfish.enterprise.iiop.impl.IIOPSSLSocketFactory.createSocket(IIOPSSLSocketFactory.java:344)
    at com.sun.corba.ee.impl.transport.ConnectionImpl.<init>(ConnectionImpl.java:250)
    ... 20 more
Caused by: java.net.ConnectException: Connection refused: connect
    at sun.nio.ch.Net.connect0(Native Method)
    at sun.nio.ch.Net.connect(Unknown Source)
    at sun.nio.ch.Net.connect(Unknown Source)
    at sun.nio.ch.SocketChannelImpl.connect(Unknown Source)
    at com.sun.corba.ee.impl.misc.ORBUtility.openSocketChannel(ORBUtility.java:110)
    at org.glassfish.enterprise.iiop.impl.IIOPSSLSocketFactory.createSocket(IIOPSSLSocketFactory.java:329)
    ... 21 more
Try Failed
javax.naming.NamingException
Lookup failed for 'java:comp/DefaultJMSConnectionFactory' in SerialContext[myEnv={java.naming.factory.initial=com.sun.enterprise.naming.impl.SerialInitContextFactory, java.naming.factory.state=com.sun.corba.ee.impl.presentation.rmi.JNDIStateFactoryImpl, java.naming.factory.url.pkgs=com.sun.enterprise.naming}

控制台 2:

AS_DERBY_INSTALL: D:\Bulletproof\bpDerby
JAVA_HOME: C:\Program Files\Java\jdk1.8.0_05
Try Failed
javax.naming.NoInitialContextException
Cannot instantiate class: org.jboss.naming.remote.client.InitialContextFactory

控制台 3:

AS_DERBY_INSTALL: D:\Bulletproof\bpDerby
JAVA_HOME: C:\Program Files\Java\jdk1.8.0_05
Nov 03, 2015 4:11:12 PM org.xnio.Xnio <clinit>
INFO: XNIO version 3.3.1.Final
Try Failed
javax.naming.NamingException
Failed to create remoting connection

【问题讨论】:

标签: java jakarta-ee wildfly wildfly-8


【解决方案1】:

【讨论】:

  • 我很欣赏这个建议,但它同样存在同样的问题:#1 在我的第一次尝试中使用了 env 属性;#2 用于在容器中运行的远程客户端; #3 同样的事情 - 客户端部署在 WildFly 内的容器中。我认为一个问题是“独立”Java 客户端。我需要在 Wildfly 中部署的应用程序和通过 WebStart 从浏览器启动的 java 程序之间的 JMS 消息传递。不在 EE 容器中运行。我开始怀疑它是否可能了。 4 年前用 GF 2 做到了。现在无法从 GF 或 Payara 或 WildFly 获得 JMS。再次感谢。
  • 在您的 StackTrace 中,您的原因是:java.net.ConnectException:连接被拒绝:连接。您是否尝试过远程登录到 EJB 服务器的 IP/端口?
  • 没有。我确信存在深奥的解决方法,但这一直是我对 JBoss 的问题。它是为高端服务器端的人设计的,所以它的文档编写者不再理解初学者需要从简单开始,因为在他们的世界里只有那些“进入”JBoss 的人永远存在。无论如何,WildFly 在本地主机上与 Java 客户端在同一台机器上运行,因此 telnet 作为 Java 客户端获取 WF 的上下文以获取 JMS 连接和交换消息的一种方式感觉不合适。老 GF 让它变得简单,直到 Oracal 搞砸了。我的直觉说 env 需要一个 ID 和 PW 或与安全相关的东西。但不知道是什么。
猜你喜欢
  • 2013-03-05
  • 1970-01-01
  • 2013-12-20
  • 2015-10-27
  • 2011-04-09
  • 2011-09-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多