我找不到Java独立客户端从WildFly获取有效InitialContext的简单代码示例。它存在吗?
我放弃了Glassfish 4,因为Oracal永远不会修复它的JMS问题(我需要WildFly的背景的真正原因。现在我没有使用WildFly。
我确定一个简单的例子可以帮助很多新手使用WildFly。 (注意:没有从Enterprise容器获取WildFly的Context。从独立的Java客户端获取它 - 因此它可以实现JMS消息传递。)
这里的代码很简单,因为我知道如何制作它。
次要相关问题:如何杀死Derby不可用的警告。每个人都说它需要derbycleint.jar。 S0我把它(和derby-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 :(得分:2)
你可以尝试这些,它们主要是JBoss,但它和wildfly一样:
http://www.mastertheboss.com/jboss-server/jboss-as-7/jboss-as-7-remote-ejb-client-tutorial
或
https://docs.jboss.org/author/display/AS71/EJB+invocations+from+a+remote+client+using+JNDI
或
http://javahowto.blogspot.com/2012/05/standalone-java-client-for-jboss-as-711.html