Java EJB远程方法访问

Java EJB远程方法访问,java,jboss,ejb-3.0,rmi,jboss-4.2.x,Java,Jboss,Ejb 3.0,Rmi,Jboss 4.2.x,我正在尝试EJB3远程方法访问示例。 一个简单的例子,我正在写代码并把它放在一个罐子里。 我已经在jboss服务器内的C:\jboss-4.2.3.GA\server\default\deploy中部署了jar jar名称是01addproject.jar(从eclipse导出为EJB jar文件) 我正在使用另一个项目来编写客户机代码, 查找服务并以简单的方式使用远程方法 我觉得该类没有在RMI注册表中注册,当我将客户机代码作为PSVM程序运行时,它会给出NameNotFoundExcepti

我正在尝试EJB3远程方法访问示例。 一个简单的例子,我正在写代码并把它放在一个罐子里。 我已经在jboss服务器内的C:\jboss-4.2.3.GA\server\default\deploy中部署了jar jar名称是01addproject.jar(从eclipse导出为EJB jar文件)

我正在使用另一个项目来编写客户机代码, 查找服务并以简单的方式使用远程方法

我觉得该类没有在RMI注册表中注册,当我将客户机代码作为PSVM程序运行时,它会给出NameNotFoundException

这是错误:

javax.naming.NameNotFoundException: AddRemoteImpl not bound
    at org.jnp.server.NamingServer.getBinding(NamingServer.java:529)
    at org.jnp.server.NamingServer.getBinding(NamingServer.java:537)
    at org.jnp.server.NamingServer.getObject(NamingServer.java:543)
    at org.jnp.server.NamingServer.lookup(NamingServer.java:267)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:305)
(因缺少空间而减少)

包结构:

AddRemote.java中的代码

package com.cluster.remote;

import javax.ejb.Remote;

@Remote
public interface AddRemote {

    void m1();
    int add(int x, int y);

}
AddRemoteImpl.java中的代码

package com.cluster.remote;

import javax.ejb.Stateless;

@Stateless
public class AdddRemoteImpl implements AddRemote {

    @Override
    public void m1() {
        System.out.println("inside m1");
    }

    @Override
    public int add(int x, int y) {

        return x + y;
    }

}
Client.java中的客户端代码(psvm程序)

package clientcode;

import java.util.Hashtable;

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

import com.cluster.remote.AddRemote;

public class Client {

    /**
     * @param args
     */
    public static void main(String[] args) {

         try {
            AddRemote remote =  (AddRemote) getInitialContext().lookup("AddRemoteImpl/remote");

            System.out.println("The alue form the session bean is " + remote.add(3, 5));
            System.out.println("Added Successfully");



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


    }

    @SuppressWarnings({ "rawtypes", "unchecked" })
    public static Context getInitialContext() throws NamingException{

        Hashtable hashtable = new Hashtable();
        hashtable.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
        hashtable.put(Context.PROVIDER_URL, "localhost:1099");
        Context context = new InitialContext(hashtable);


        return context;
    }

}

EJB在绑定时没有导出,因此它被序列化为自身,而不是存根,因此客户端查找无法加载AddRemoteImpl类,这是合理的,因为客户端不应该拥有它。构建/声明/部署EJB的方式出现了一些问题,无法进一步解决。

EJB在绑定时没有导出,因此它被序列化为自身,而不是存根,因此客户端查找无法加载AddRemoteImpl类,这是合理的,因为客户端不应该拥有它。它的构建/声明/部署方式有问题,无法进一步解决。

抱歉。。它成功了!一些愚蠢的错误。类名是“AdddRemoteImpl”(参考包结构),在客户机中我调用的是“AddRemoteImpl/remote”。。单个“d”差。。花了我一天的时间@EJP…感谢您在调试过程中的帮助。抱歉。。它成功了!一些愚蠢的错误。类名是“AdddRemoteImpl”(参考包结构),在客户机中我调用的是“AddRemoteImpl/remote”。。单个“d”差。。花了我一天的时间@EJP…感谢您在调试过程中的帮助。