当前位置: 首页 > 知识库问答 >
问题:

wildfly 8.2.0:将对象传递给服务器时,ejb远程客户端失败

公冶智刚
2023-03-14

远程客户端的奇怪行为。当我调用ejb facade方法count时,它是work并返回用户计数。但当我传递对象时,它失败了!有错误

EJBCLIENT000025:没有EJB接收器可用于处理调用上下文的[appName: Writer-eard, moduleName: Writer-ejb-1.0, tntName:]组合org.jboss.ejb.client.EJBClientInvocationContext@331e965f

我配置了所有可能的方式,但远程客户端仍然失败。

举个例子

/////////////////////////////
        // The "standard" JNDI lookup
        final Hashtable jndiProperties = new Hashtable();
        jndiProperties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");
        //jndiProperties.put("jboss.naming.client.connect.options.org.xnio.Options.SASL_POLICY_NOPLAINTEXT", "false"); // needed for a login module that requires the password in plaintext
        jndiProperties.put(Context.PROVIDER_URL, "http-remoting://127.0.0.1:8080");
        //  jndiProperties.put(Context.PROVIDER_URL, "remote://localhost:4447");
        jndiProperties.put(Context.SECURITY_PRINCIPAL, "user");
        jndiProperties.put(Context.SECURITY_CREDENTIALS, "pass");
        jndiProperties.put("jboss.naming.client.ejb.context", true);
        final Context context = new InitialContext(jndiProperties);

        traverseJndiNode("/", context);
        final UserFacadeRemote helloWorld = (UserFacadeRemote) context.lookup("writer-ear/writer-ejb-1.0/userFacade!" + UserFacadeRemote.class.getName());
        System.out.println("count " + helloWorld.count());
        UserDTO user = new UserDTO();
        user.setEmail("mail.google@gmail.com");
        user.setFirstname("Nina");
        user.setLastname("Ben");
        user.setPassword("Password");
        user.setRegisteredDate(new Date(System.currentTimeMillis()));
        helloWorld.save(user);
        context.close();

其实保存方法是假的方法

 @Override
    public void save(UserDTO user) {
        System.out.println("Received object " + user.getFirstname());
        try {

            System.out.println("Saving object ");

        } catch (Exception e) {
            e.printStackTrace();
        }    
    }

第二次查找时相同

// Using the proprietary JBoss EJB Client API
        final Properties ejbProperties = new Properties();
        ejbProperties.put("remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED", "false");
        ejbProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
        ejbProperties.put("remote.connections", "1");
        ejbProperties.put("remote.connection.1.host", "localhost");
        ejbProperties.put("remote.connection.1.port", 8080);
        //ejbProperties.put("remote.connection.1.connect.options.org.xnio.Options.SASL_DISALLOWED_MECHANISMS", "JBOSS-LOCAL-USER"); // needed for forcing authentication over remoting (i.e. if you have a custom login module)
        //ejbProperties.put("remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOPLAINTEXT", "false"); // needed for a login module that requires the password in plaintext
        ejbProperties.put("remote.connection.1.username", "user");
        ejbProperties.put("remote.connection.1.password", "pass");
        ejbProperties.put("org.jboss.ejb.client.scoped.context", "true"); // Not needed when EJBClientContext.setSelector is called programatically. ATTENTION: Client-Interceptor registration below does not work with this property! BUG?

        final EJBClientConfiguration ejbClientConfiguration = new PropertiesBasedEJBClientConfiguration(ejbProperties);
        final ConfigBasedEJBClientContextSelector selector = new ConfigBasedEJBClientContextSelector(ejbClientConfiguration);
        EJBClientContext.setSelector(selector);
        EJBClientContext.getCurrent().registerInterceptor(0, new ClientInterceptor());

        final Context ejbContext = new InitialContext(ejbProperties);
        final UserFacadeRemote ejbHelloWorld = (UserFacadeRemote) ejbContext.lookup("ejb:writer-ear/writer-ejb-1.0/userFacade!" + UserFacadeRemote.class.getName());
//        UserDTO user = new UserDTO();
//        user.setEmail("mail.google@gmail.com");
//        user.setFirstname("Nina");
//        user.setLastname("Ben");
//        user.setPassword("Password");
//        user.setRegisteredDate(new Date(System.currentTimeMillis()));
//        ejbHelloWorld.save(user);
        System.out.println("second count " + ejbHelloWorld.count());

我的客户端应用程序在tomcat下运行,那么有什么问题呢?为什么我甚至可以从数据库中获取计数,但是当通过DTO时,客户端失败了。我探索了很多,使用旧版本的JBoss我做了很多同样的事情。

共有1个答案

祝宏放
2023-03-14

哦,我忘了将我的DTO设置为实现可序列化接口:(

public class UserDTO implements Serializable{

    private static final long serialVersionUID = 1L;

    private Long id;
 类似资料:
  • 问题内容: 我有一个很大的对象,需要将其传递给客户端脚本中的函数。我尝试使用JSON.stringify,但是这种方法遇到了一些问题- 主要与性能有关。是否可以在ejs中执行类似的操作? 在我的客户端脚本中,我会将这个对象传递给类似这样的函数 当我尝试这个我得到 要么 问题答案: 那是预期的行为。您的模板引擎正在尝试从对象创建一个字符串,该字符串会导致[Object object]。如果您真的想要

  • 问题内容: 我在服务器上有一个非常重量级的查询,它会生成新的页面渲染,并且我想将查询的一些结果传递给客户端(作为对象的javascript数组)。基本上是这样,因此我不必稍后再进行单独的JSON查询即可获得相同的内容(通常是静态的)。数据最终将是有用的,但最初没有用,因此我没有将其直接放入文档中。 数据是一个对象数组,最初只使用一些对象。我想传递整个数据或传递一些子集(取决于情况)。我的玉看起来像

  • 问题内容: 我遇到了一些问题,无论何时渲染视图,我都试图发送一个对象供我的Javascript客户端使用。我以这种方式发送(我正在使用车把) //然后在我的视图中,在脚本标签内,我尝试获取该var并进行打印 结果是这样的: 而且我不能使用它的任何属性,因为它是未定义的 问题答案: 您可以将对象作为字符串发送。 喜欢 在客户端,您可以解析它以获取对象 喜欢 现在您可以使用loc作为对象。

  • 嘿,伙计们,我目前已经实现了一个路线,负责根据他的请求从我的服务器上检索信息,现在我有兴趣将我的对象转移到坐在我视图中的客户端脚本。我可以使用Res.Render传输对象吗?

  • 问题内容: 可能是一个非常基本的问题,但我似乎找不到简单的答案。 我有一个利用Angular的GET方法,该方法从特定的url()请求一个Promise 。 在此服务器上,我运行可以处理GET请求的快速脚本脚本。 server.js 我可以使用Angular GET方法与URL_OF_INTEREST通信,如下所示: 但是,字段数量,货币,来源和描述需要从Angular客户端应用程序理想地传递。

  • 尝试使用Express将参数从服务器端传递到Node.js中的客户端。 但到目前为止什么都没起作用。你们要怎么做?非常感谢你的帮助:)