2015-11-04 65 views
2

我无法找到Java独立客户端从WildFly获取有效InitialContext的代码的简单示例。它存在吗?独立Java客户端如何获取Wildfly初始上下文?

我放弃了在Glassfish 4,因为了Oracal永远不会修复它的JMS问题(真正的原因,我需要WildFly的语境。现在,我没有与WildFly。

我相信一个简单的例子就是有很大的帮助(注意:没有从Enterprise容器获取WildFly的上下文,从独立的Java客户端获取 - 因此它可以实现JMS消息传递。)

这里的代码很微不足道,因为我知道如何

次要相关问题:如何杀死Derby不可用的警告大家都说它需要derbycleint.jar。 S0我把这个(和德比driver.jar)字面上无处不在。仍然收到警告。

主要问题:我找不到新的IntialContext(env)所需的一组属性。它似乎需要某种安全证书。我只是无法找到从哪里开始寻找和阅读来弄清楚我需要做什么。任何帮助? (我想找到简单的代码这样的作品,因为它肯定会帮助其他新手WildFly上手,即使添加JMS部分,因为Glassfish的是出来的图片为的。)

CODE:

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 

    */ 

} 

CONSOLE:

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} 

CONSOLE 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 

CONSOLE 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 
+0

这个例子有帮助吗? https://github.com/wildfly/quickstart/blob/10.x/helloworld-jms/src/main/java/org/jboss/as/quickstarts/jms/HelloWorldJMSClient.java –

回答

2
+0

我欣赏这个建议,但它的相同问题:#1在我的第一次尝试中使用env属性;#2是在容器中运行的远程客户端; #3同样的事情 - 在WildFly内的容器中部署的客户端。我认为一个问题是“独立”的Java客户端。我需要在Wildfly中部署的应用程序与通过WebStart从浏览器启动的Java程序之间传递JMS消息。不在EE容器中运行。我开始怀疑它的可能性了。 4年前用GF 2做过。现在无法从GF或Payara或WildFly获得JMS。再次感谢。 – George

+0

在您的StackTrace中,您有:java.net.ConnectException:连接被拒绝:连接。您是否尝试使用Telnet到EJB服务器的IP /端口? – reos

+0

不,我确定存在深奥的解决方法,但这一直是我的问题与JBoss。它是为高端服务器端人士设计的,所以它的文档编写者不再理解初学者需要从简单开始,因为在他们的世界中,只有那些“进入”JBoss才会存在。无论如何,WildFly在同一台机器上运行Java客户端的本地主机上,因此telnet感觉不合适,这是Java客户端获取WF上下文以获取JMS连接和交换消息的一种方式。老GF很简单,直到Oracal搞砸了。我的直觉说env需要一个ID和PW或者与安全相关的东西。但不知道是什么。 – George