Java JBoss7客户端多线程

Java JBoss7客户端多线程,java,multithreading,swing,jboss,jboss7.x,Java,Multithreading,Swing,Jboss,Jboss7.x,我有一个swing应用程序,它连接到JBoss7 AS。 调用一些后台线程会在客户端导致无此类ejb错误。 这里有一个例子 package com.asf.capone.client.util; import java.util.Hashtable; import javax.naming.Context; import javax.naming.InitialContext; import javax.naming.NamingException; import com.asf.capo

我有一个swing应用程序,它连接到JBoss7 AS。 调用一些后台线程会在客户端导致无此类ejb错误。 这里有一个例子

package com.asf.capone.client.util;

import java.util.Hashtable;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import com.asf.capone.common.exception.AppException;

import ro.asf.capone.ejb.beans.security.SecurityController;
import ro.asf.capone.ejb.beans.security.SecurityControllerRemote;

public class TestJndi {
public static void main(final String[] args) throws AppException {
    final Hashtable env = new Hashtable();
    env.put("java.naming.factory.initial", "org.jboss.naming.remote.client.InitialContextFactory");
    env.put("java.naming.provider.url", "remote://localhost:4447");
    env.put("java.naming.security.credentials", "c4ca4238a0b923820dcc509a6f75849b");
    env.put("java.naming.security.principal", "capone");
    env.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
    env.put("jboss.naming.client.ejb.context", "true");
    env.put("jboss.naming.client.connect.options.org.xnio.Options.SASL_POLICY_NOPLAINTEXT", "false");

    try {
        final InitialContext ctx = new InitialContext(env);
        System.out.println("ctx: " + ctx);
        final SecurityController o = (SecurityControllerRemote) ctx.lookup(
                "ejb:agency-ear/agency-ejb/SecurityControllerBean!ro.asf.capone.ejb.beans.security.SecurityControllerRemote");
        System.out.println("1outcome: " + o.getServerTimeMillis());

        new Thread(new Runnable() {

            @Override
            public void run() {
                System.out.println("2outcome: " + o.getServerTimeMillis());
            }
        }).start();

    } catch (final NamingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
}
}

其输出为:

ctx: javax.naming.InitialContext@307f6b8c
1outcome: 1443465336127
Exception in thread "Thread-4" java.lang.IllegalStateException: EJBCLIENT000025: No EJB receiver available for handling [appName:agency-ear, moduleName:agency-ejb, distinctName:] combination for invocation context org.jboss.ejb.client.EJBClientInvocationContext@381dfddb
at org.jboss.ejb.client.EJBClientContext.requireEJBReceiver(EJBClientContext.java:754)
at org.jboss.ejb.client.ReceiverInterceptor.handleInvocation(ReceiverInterceptor.java:116)
at org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:186)
at org.jboss.ejb.client.EJBInvocationHandler.sendRequestWithPossibleRetries(EJBInvocationHandler.java:253)
at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:198)
at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:181)
at org.jboss.ejb.client.EJBInvocationHandler.invoke(EJBInvocationHandler.java:144)
at com.sun.proxy.$Proxy2.getServerTimeMillis(Unknown Source)
at com.asf.capone.client.util.TestJndi$1.run(TestJndi.java:36)
at java.lang.Thread.run(Thread.java:745)

我缺少了一些东西,可以让我在两个调用中获得相同的输出,但我不知道问题出在哪里。谢谢

看起来这在那个版本的Jboss上不起作用(他们更改了遥控器),因为我的初始代码在Jboss 7.3.0中工作。我当前的Jboss版本是Jboss EAP 6.4.0.GA(AS 7.5.0.Final-redhat-21) 现在有效的代码是:

import java.util.Properties;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import org.jboss.ejb.client.ContextSelector;
import org.jboss.ejb.client.EJBClientConfiguration;
import org.jboss.ejb.client.EJBClientContext;
import org.jboss.ejb.client.PropertiesBasedEJBClientConfiguration;
import org.jboss.ejb.client.remoting.ConfigBasedEJBClientContextSelector;

import ro.asf.capone.ejb.beans.security.SecurityControllerRemote;


public class AppJboss {
    public static void main(String[] args) throws NamingException {
       System.out.println("Hello World!");
       final String lookup = "ejb:agency-ear/agency-ejb//SecurityControllerBean!ro.asf.capone.ejb.beans.security.SecurityControllerRemote";

       final Properties clientProperties = new Properties();
       clientProperties.put("remote.connection.default.connect.options.org.xnio.Options.SASL_DISALLOWED_MECHANISMS",
            "JBOSS-LOCAL-USER");
       clientProperties.put("remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOPLAINTEXT",
            "false");
       clientProperties.put("remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED", "false");
       clientProperties.put("remote.connections", "default");
       clientProperties.put("endpoint.name", "client-endpoint");
       clientProperties.put("remote.connection.default.port", "4447");
       clientProperties.put("remote.connection.default.host", "127.0.0.1");
       clientProperties.put("remote.connection.default.username", "capone");
       clientProperties.put("remote.connection.default.password", "c4ca4238a0b923820dcc509a6f75849b");
       clientProperties.put("remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS",
            "false");

       final EJBClientConfiguration ejbClientConfiguration = new PropertiesBasedEJBClientConfiguration(
            clientProperties);
       final ContextSelector<EJBClientContext> contextSelector = new ConfigBasedEJBClientContextSelector(
            ejbClientConfiguration);
       EJBClientContext.setSelector(contextSelector);

       final Properties properties = new Properties();
       properties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
       final Context context = new InitialContext(properties);
       final SecurityControllerRemote myBean = (SecurityControllerRemote) context.lookup(lookup);
       final long result = myBean.getServerTimeMillis();
       System.out.println("result " + result);

       new Thread(new Runnable() {

          public void run() {
              final long result = myBean.getServerTimeMillis();
              System.out.println(result);
          }
       }).start();
    }
}
import java.util.Properties;
导入javax.naming.Context;
导入javax.naming.InitialContext;
导入javax.naming.NamingException;
导入org.jboss.ejb.client.ContextSelector;
导入org.jboss.ejb.client.EJBClientConfiguration;
导入org.jboss.ejb.client.EJBClientContext;
导入org.jboss.ejb.client.PropertiesBasedEJBClientConfiguration;
导入org.jboss.ejb.client.remoting.ConfigBasedEJBClientContextSelector;
导入ro.asf.capone.ejb.beans.security.SecurityControllerRemote;
公共类AppJboss{
公共静态void main(字符串[]args)引发NamingException{
System.out.println(“你好,世界!”);
最终字符串查找=“ejb:agency ear/agency ejb//SecurityControllerBean!ro.asf.capone.ejb.beans.security.SecurityControllerRemote”;
最终属性clientProperties=新属性();
clientProperties.put(“remote.connection.default.connect.options.org.xnio.options.SASL_DISALLOWED_机制”,
“JBOSS-LOCAL-USER”);
clientProperties.put(“remote.connection.default.connect.options.org.xnio.options.SASL\u POLICY\u NOPLAINTEXT”,
“虚假”);
clientProperties.put(“remote.connectionprovider.create.options.org.xnio.options.SSL_ENABLED”,“false”);
clientProperties.put(“remote.connections”、“default”);
clientProperties.put(“endpoint.name”,“client endpoint”);
put(“remote.connection.default.port”,“4447”);
clientProperties.put(“remote.connection.default.host”,“127.0.0.1”);
clientProperties.put(“remote.connection.default.username”、“capone”);
clientProperties.put(“remote.connection.default.password”,“c4ca4238a0b923820dcc509a6f75849b”);
clientProperties.put(“remote.connection.default.connect.options.org.xnio.options.SASL\u POLICY\u NOANONYMOUS”,
“虚假”);
最终EJBClientConfiguration EJBClientConfiguration=新属性basedejbclientconfiguration(
客户财产);
final ContextSelector ContextSelector=新的ConfigBasedEJBClientContextSelector(
ejbClient配置);
EJBClientContext.setSelector(contextSelector);
最终属性=新属性();
properties.put(Context.URL_PKG_前缀,“org.jboss.ejb.client.naming”);
最终上下文=新的初始上下文(属性);
final SecurityControllerRemote myBean=(SecurityControllerRemote)context.lookup(lookup);
最终长结果=myBean.getServerTimeMillis();
系统输出打印项次(“结果”+结果);
新线程(newrunnable()){
公开募捐{
最终长结果=myBean.getServerTimeMillis();
系统输出打印项次(结果);
}
}).start();
}
}
客户端库取自jboss/bin/client/jboss-client.jar


同样的代码也适用于Wildfly,只需更改端口和客户端库即可。希望这对其他人有帮助。

看起来这在那个版本的Jboss上不起作用(他们更改了遥控器),因为我的初始代码在Jboss 7.3.0中工作。我当前的Jboss版本是Jboss EAP 6.4.0.GA(AS 7.5.0.Final-redhat-21) 现在有效的代码是:

import java.util.Properties;

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;

import org.jboss.ejb.client.ContextSelector;
import org.jboss.ejb.client.EJBClientConfiguration;
import org.jboss.ejb.client.EJBClientContext;
import org.jboss.ejb.client.PropertiesBasedEJBClientConfiguration;
import org.jboss.ejb.client.remoting.ConfigBasedEJBClientContextSelector;

import ro.asf.capone.ejb.beans.security.SecurityControllerRemote;


public class AppJboss {
    public static void main(String[] args) throws NamingException {
       System.out.println("Hello World!");
       final String lookup = "ejb:agency-ear/agency-ejb//SecurityControllerBean!ro.asf.capone.ejb.beans.security.SecurityControllerRemote";

       final Properties clientProperties = new Properties();
       clientProperties.put("remote.connection.default.connect.options.org.xnio.Options.SASL_DISALLOWED_MECHANISMS",
            "JBOSS-LOCAL-USER");
       clientProperties.put("remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOPLAINTEXT",
            "false");
       clientProperties.put("remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED", "false");
       clientProperties.put("remote.connections", "default");
       clientProperties.put("endpoint.name", "client-endpoint");
       clientProperties.put("remote.connection.default.port", "4447");
       clientProperties.put("remote.connection.default.host", "127.0.0.1");
       clientProperties.put("remote.connection.default.username", "capone");
       clientProperties.put("remote.connection.default.password", "c4ca4238a0b923820dcc509a6f75849b");
       clientProperties.put("remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS",
            "false");

       final EJBClientConfiguration ejbClientConfiguration = new PropertiesBasedEJBClientConfiguration(
            clientProperties);
       final ContextSelector<EJBClientContext> contextSelector = new ConfigBasedEJBClientContextSelector(
            ejbClientConfiguration);
       EJBClientContext.setSelector(contextSelector);

       final Properties properties = new Properties();
       properties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
       final Context context = new InitialContext(properties);
       final SecurityControllerRemote myBean = (SecurityControllerRemote) context.lookup(lookup);
       final long result = myBean.getServerTimeMillis();
       System.out.println("result " + result);

       new Thread(new Runnable() {

          public void run() {
              final long result = myBean.getServerTimeMillis();
              System.out.println(result);
          }
       }).start();
    }
}
import java.util.Properties;
导入javax.naming.Context;
导入javax.naming.InitialContext;
导入javax.naming.NamingException;
导入org.jboss.ejb.client.ContextSelector;
导入org.jboss.ejb.client.EJBClientConfiguration;
导入org.jboss.ejb.client.EJBClientContext;
导入org.jboss.ejb.client.PropertiesBasedEJBClientConfiguration;
导入org.jboss.ejb.client.remoting.ConfigBasedEJBClientContextSelector;
导入ro.asf.capone.ejb.beans.security.SecurityControllerRemote;
公共类AppJboss{
公共静态void main(字符串[]args)引发NamingException{
System.out.println(“你好,世界!”);
最终字符串查找=“ejb:agency ear/agency ejb//SecurityControllerBean!ro.asf.capone.ejb.beans.security.SecurityControllerRemote”;
最终属性clientProperties=新属性();
clientProperties.put(“remote.connection.default.connect.options.org.xnio.options.SASL_DISALLOWED_机制”,
“JBOSS-LOCAL-USER”);
clientProperties.put(“remote.connection.default.connect.options.org.xnio.options.SASL\u POLICY\u NOPLAINTEXT”,
“虚假”);
clientProperties.put(“remote.connectionprovider.create.options.org.xnio.options.SSL_ENABLED”,“false”);
clientProperties.put(“remote.connections”、“default”);
clientProperties.put(“endpoint.name”,“client endpoint”);
put(“remote.connection.default.port”,“4447”);
clientProperties.put(“remote.connection.default.host”,“127.0.0.1”);
clientProperties.put(“remote.connection.default.username”、“capone”);
clientProperties.put(“remote.connection.default.password”,“c4ca4238a0b923820dcc509a6f75849b”);
clientProperties.put(“remote.connection.default.connect.options.org.xnio.options.SASL\u POLICY\u NOANONYMOUS”,
“虚假”);
最终EJBClientConfiguration EJBClientConfiguration=新属性basedejbclientconfiguration(
客户财产);
final ContextSelector ContextSelector=新的ConfigBasedEJBClientContextSelector(
ejbClient配置);
EJBClientContext.setSelector(contextSelector);
最终属性=新属性();
置业(有限公司)