「rmijava使用」javarmi包

博主:adminadmin 2023-01-25 23:03:14 504

今天给各位分享rmijava使用的知识,其中也会对javarmi包进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

java 用rmi 远程连接access 数据库,但总报错,请高人指点。

java.lang.NoClassDefFoundError

未找到类

估计是Class.forName("org.objectweb.rmijdbc.Driver").newInstance();

找不到org.objectweb.rmijdbc.Driver

Java的RMI在客户端需要放入实现类吗?

你应该去解决 不把 实现类,放进去报错的原因。 RMI 的话, 客户端 调用一个方法, 这个方法的执行过程是由服务器执行的。 客户端 需要知道的是 方法的名称,也就是对应的接口,以及调用这个方法需要的参数。

JAVA编写的webservice时。用到RMI。出现了以下问题,请高手赐教。谢谢。。

你写的 HelloInterface 是不是接口呢?如果是要按照下面的方式写:

将远程类的功能定义为接口,远程对象是实现接口的对象。接口中定义的方法为远程要调用的方法

远程接口具有以下特点:

1.远程接口必须为public(除非客户端与远程接口在同一包中)

2.远程接口要继承Remote接口、

3.每个方法必须抛出RemoteException异常

4.作为参数或返回值的对象必须为远程接口类型

public interface HelloInterface extends Remote

{

public String sayHello(String s) throws RemoteException;

}

实现类的写法:

1.远程对象实现远程接口

2.继承UnicastRemoteObject对象

3.远程对象必须实现无参数构造,并抛出RemoteException

还有你说的不是在一台服务器上运行。那就要做EJB集群了。需要把当地的项目导成一个jar的包。放到你远程机器上的jboss里面。具体的详细操作方式百度上有。

使用java的rmi进行通信,在客户端的Naming.lookup()方法抛出异常java.rmi.UnmarshalException!

着就是传说中的空指针异常 就是Naming.lookup() 找不到相应的类 就是你这个类是独立的没事作用 报的应该是 404把

JAVA RMI 求助

接口Vote

package vote.I;

import java.rmi.Remote;

import java.rmi.RemoteException;

public interface Vote extends Remote{

  public boolean vote(String s) throws RemoteException;

  public String getResult() throws RemoteException;

}

接口实现VoteImpl

package vote.I.impl;

import java.rmi.RemoteException;

import java.rmi.server.UnicastRemoteObject;

import vote.I.Vote;

public class VoteImpl extends UnicastRemoteObject implements Vote {

  public VoteImpl() throws RemoteException {

      super();

  }

  private static final long serialVersionUID = 1L;

  private int[] votes = {0, 0, 0};

  @Override

  public String getResult() throws RemoteException {

      StringBuffer result = new StringBuffer("");

      result.append("A : " + votes[0] + " ");

      result.append("B : " + votes[1] + " ");

      result.append("C : " + votes[2] + " ");

      return result.toString();

  }

  @Override

  public boolean vote(String s) throws RemoteException {

      boolean flag = true;

      if("A".equals(s) || "a".equals(s)){

          votes[0]++;

      }else if("B".equals(s) || "b".equals(s)){

          votes[1]++;

      }else if("C".equals(s) || "c".equals(s)){

          votes[2]++;

      }else{

          flag = false;

      }

      return flag;

  }

}

服务器端VoteServer

package vote;

import java.net.MalformedURLException;

import java.rmi.AlreadyBoundException;

import java.rmi.Naming;

import java.rmi.RemoteException;

import java.rmi.registry.LocateRegistry;

import vote.I.Vote;

import vote.I.impl.VoteImpl;

public class VoteServer {

  /**

   * @param args

   */

  public static void main(String[] args) {

      try {

          Vote vote = new VoteImpl();

         

          LocateRegistry.createRegistry(8888);

          Naming.bind("//localhost:8888/Vote", vote);

          System.out.println("服务器启动!");

      } catch (RemoteException e) {

          System.out.println("创建远程对象发生异常!");

          e.printStackTrace();

      } catch (AlreadyBoundException e) {

          System.out.println("发生重复绑定对象异常!");

          e.printStackTrace();

      } catch (MalformedURLException e) {

          System.out.println("发生URL畸形异常!");

          e.printStackTrace();

      }

  }

}

客户端VoteClient

package vote;

import java.net.MalformedURLException;

import java.rmi.Naming;

import java.rmi.NotBoundException;

import java.rmi.RemoteException;

import java.util.Scanner;

import vote.I.Vote;

public class VoteClient {

  private static Vote vote;

  public VoteClient(){

      try {

          vote = (Vote) Naming.lookup("//localhost:8888/Vote");       

      } catch (MalformedURLException e) {

          // TODO Auto-generated catch block

          e.printStackTrace();

      } catch (RemoteException e) {

          // TODO Auto-generated catch block

          e.printStackTrace();

      } catch (NotBoundException e) {

          // TODO Auto-generated catch block

          e.printStackTrace();

      }

      System.out.println("请输入选项(A, B, C), 单选");

      Scanner s = new Scanner(System.in);

      String temp = s.next();

      try {

          while(!vote.vote(temp)){

              System.out.println("选项输入错误, 请重新输入");

              temp = s.next();

          }

      } catch (RemoteException e) {

          e.printStackTrace();

      }

      System.out.println("是否要查看结果(Y/N)");

      temp = s.next();

      if("Y".equals(temp) || "y".equals(temp)){

          try {

              System.out.println(vote.getResult());

          } catch (RemoteException e) {

              // TODO Auto-generated catch block

              e.printStackTrace();

          }

      }

     

  }

  /**

   * @param args

   */

  public static void main(String[] args) {

      new VoteClient();

     

  }

}

先运行服务器端, 然后运行客户端, 可以运行多个客户端, 顺着提示走就行了

这是某个客户端投的, 一个客户端只能投一票, 此时已经有两个人投了A了

java jdk Rmi远程调用

加个端口试试!

然后启动服务,telnet 一下。看看端口开放没有

端口随便。你启动server后。telnet一下。看看你设置的那个端口响应不。

这是server

public class RMIServer {

public static void registRemoteObject() throws Exception {

IRemoteImp impl = new IRemoteImp();

Naming.rebind("rmi://127.0.0.1:1111/mytask", impl);

System.out.println("bound success!");

}

/**

* 创建一个Registry对象

*

* @return 返回一个Registry对象

*/

private static Registry createRegistry() {

Registry registry = null;

int port = 1111;

try {

registry = LocateRegistry.getRegistry(port);

registry.list();

System.out.println("Register the exist server!");

} catch (final Exception e) {

try {

registry = LocateRegistry.createRegistry(port);

System.out.println("Register the exist server!port=" + port);

} catch (final Exception ee) {

ee.printStackTrace();

}

}

return registry;

}

/**

* 将对象注册到rmi服务器上

*/

public static void bind() {

Registry registry = null;

registry = createRegistry();

try {

IRemoteImp impl = new IRemoteImp();

registry.rebind("mytask", impl);

System.out.println("mytask server start!");

} catch (Exception e) {

e.printStackTrace();

}

}

/**

* @param args

*/

public static void main(String[] args) {

try {

bind();

} catch (Exception e) {

e.printStackTrace();

}

}

}

这是客户端

public class RMIClient {

public static void getRemoteObject() throws Exception{

IRemote obj = (IRemote)Naming.lookup("rmi://127.0.0.1:1111/mytask"); //得到远程发布的服务

Task task = new Task();

task.doWork();

Object result = obj.invoke(task);

}

/**

* @param args

* @throws Exception

*/

public static void main(String[] args) throws Exception {

RMIClient.getRemoteObject();

}

}

rmijava使用的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于javarmi包、rmijava使用的信息别忘了在本站进行查找喔。