应用的是朋友的代码:
package com.cmsz.common.rmiServer;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.util.ArrayList;
/**
* *********************************************************
* Copyright cmsz
* 2007. All rights reserved.
*
* @file: RmiServerImpl
* @date: 2007-2-8
* @brief: 远程调用server端接口
* @author: tangqy
* @version: 0.0.1
* @since 1.0
* Change Log:
* <author> <time> <version> <description>
* tangqy 2007-2-8 0.0.1 create
* **********************************************************
*/
public interface RmiServerImpl extends Remote{
/**
* author tangqy
* 2007-2-8
* TODO 执行后台binary程序接口
* @param pm_sProcNm:程序名
* @param pm_sProcParams:程序参数
* @return 后台binary程序返回字符串
* @throws RemoteException
*/
public abstract String callStringProc(String pm_sProcNm, String pm_sProcParam) throws RemoteException;
/**
* author tangqy
* 2007-2-8
* TODO 执行后台binary程序接口
* @param pm_sProcNm 程序名
* @param pm_sProcParams 程序参数
* @return List 第一个值为console输出,第二个值为process返回值
* @throws RemoteException
*/
public abstract ArrayList callProc(String pm_sProcNm,String pm_sProcParam) throws RemoteException;
/**
* author tangqy
* 2007-2-8
* TODO 执行后台binary程序接口
* @param pm_sProcNm 程序名
* @param pm_sProcParams 程序参数数组
* @return 后台binary程序返回字符串
* @throws RemoteException
*/
public abstract String callStringProc(String pm_sProcNm, String[] pm_sProcParams) throws RemoteException;
/**
* author tangqy
* 2007-2-8
* TODO 执行后台binary程序接口
* @param pm_sProcNm 程序名
* @param pm_sProcParams 程序参数数组
* @return ArrayList 第一个值为console输出,第二个值为程序returnCode
* @throws RemoteException
*/
public abstract ArrayList callProc(String pm_sProcNm,String[] pm_sProcParams) throws RemoteException;
/**
* author tangqy
* 2007-2-8
* TODO 执行后台Deamon程序接口
* @param pm_sProcNm 程序名
* @param pm_sProcParam 程序参数
* @throws RemoteException
*/
public abstract void callProcDeamon(String pm_sProcNm,String pm_sProcParam) throws RemoteException;
}
package com.cmsz.common.rmiServer;
import java.io.BufferedInputStream;
import java.io.BufferedReader;
import java.io.DataInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;
import java.util.ArrayList;
/**
* *********************************************************
* Copyright cmsz
* 2007. All rights reserved.
*
* @file: RmiServerObject
* @date: 2007-2-8
* @brief: 远程服务端实现类
* @author: tangqy
* @version: 0.0.1
* @since 1.0
* Change Log:
* <author> <time> <version> <description>
* tangqy 2007-2-8 0.0.1 create
* **********************************************************
*/
public class RmiServerObject extends UnicastRemoteObject implements RmiServerImpl
{
public RmiServerObject() throws RemoteException
{
}
/* (non-Javadoc)
* @see com.cmsz.common.util.RmiServerImpl#callStringProc(java.lang.String, java.lang.String)
*/
public String callStringProc(String pm_sProcNm, String pm_sProcParams) throws RemoteException {
String returnValue = "";
try
{
Process process = Runtime.getRuntime().exec(pm_sProcNm + " " + pm_sProcParams);
InputStream ins = process.getInputStream();
StringBuffer strBuf = new StringBuffer("");
byte[] temp = new byte[1024];
while(ins.read(temp)!=-1)
{
strBuf.append(new String(temp));
}
return strBuf.toString().trim();
}
catch (IOException e)
{
returnValue = e.getMessage();
return returnValue;
}
}
/* (non-Javadoc)
* @see com.cmsz.common.util.RmiServerImpl#callBoolProc(java.lang.String, java.lang.String)
*/
public ArrayList callProc(String pm_sProcNm, String pm_sProcParams) throws RemoteException {
try
{
Process process = Runtime.getRuntime().exec(pm_sProcNm+" "+pm_sProcParams);
int returnVal = process.waitFor();
InputStream ins = process.getInputStream();
StringBuffer buf = new StringBuffer("");
ArrayList lsRet = new ArrayList();
byte[] temp = new byte[1024];
while(ins.read(temp)!=-1)
{
buf.append(new String(temp));
}
lsRet.add(buf.toString());
lsRet.add(new Integer(returnVal));
return lsRet;
}
catch(Exception es)
{
System.out.println("Runtime异常!"+es.getMessage());
return null;
}
}
/* (non-Javadoc)
* @see com.cmsz.common.util.RmiServerImpl#callStringProc(java.lang.String, java.lang.String[])
*/
public String callStringProc(String pm_sProcNm, String[] pm_sProcParams) throws RemoteException {
String returnValue = "";
try
{
Process process = Runtime.getRuntime().exec(pm_sProcNm,pm_sProcParams);
InputStream ins = process.getInputStream();
StringBuffer strBuf = new StringBuffer("");
byte[] temp = new byte[1024];
while(ins.read(temp)!=-1)
{
strBuf.append(temp);
}
return strBuf.toString().trim();
}
catch (IOException e)
{
returnValue = e.getMessage();
return returnValue;
}
}
/* (non-Javadoc)
* @see com.cmsz.common.util.RmiServerImpl#callBoolProc(java.lang.String, java.lang.String[])
*/
public ArrayList callProc(String pm_sProcNm, String[] pm_sProcParams) throws RemoteException {
try
{
Process process = Runtime.getRuntime().exec(pm_sProcNm,pm_sProcParams);
int returnVal = process.waitFor();
InputStream ins = process.getInputStream();
StringBuffer buf = new StringBuffer("");
ArrayList lsRet = new ArrayList();
byte[] temp = new byte[1024];
while(ins.read(temp)!=-1)
{
buf.append(new String(temp));
}
lsRet.add(buf.toString());
lsRet.add(new Integer(returnVal));
return lsRet;
}
catch(Exception es)
{
System.out.println("Runtime异常!"+es.getMessage());
return null;
}
}
/* (non-Javadoc)
* @see com.cmsz.common.rmiServer.RmiServerImpl#callProcDeamon(java.lang.String, java.lang.String)
*/
public void callProcDeamon(String pm_sProcNm, String pm_sProcParam) throws RemoteException
{
try
{
Process process = Runtime.getRuntime().exec(pm_sProcNm + " " + pm_sProcParam);
}
catch (IOException e)
{
System.out.println(e.getMessage());
}
}
}
package com.cmsz.common.rmiServer;
import java.net.MalformedURLException;
import java.rmi.Naming;
import java.rmi.NotBoundException;
import java.rmi.RMISecurityManager;
import java.rmi.RemoteException;
import java.util.ArrayList;
import com.cmsz.common.rmiServer.RmiServerImpl;
/**
* *********************************************************
* Copyright cmsz
* 2007. All rights reserved.
*
* @file: RmiClient
* @date: 2007-2-8
* @brief: 远程调用客户端
* @author: tangqy
* @version: 0.0.1
* @since 1.0
* Change Log:
* <author> <time> <version> <description>
* tangqy 2007-2-8 0.0.1 create
* **********************************************************
*/
public class RmiClient {
public RmiClient()
{
if(System.getSecurityManager() == null)
{
System.setSecurityManager(new RMISecurityManager());
}
}
/**
* author tangqy
* 2007-2-8
* TODO 远程调用
* @param pm_sRmiHost RMIserver端主机名
* @param pm_iRmiPort RMIserver端端口号
* @param pm_sProcNm 远程程序名
* @param pm_sParams 远程调用程序参数
* @return
*/
public String callRemoteProcStr(String pm_sRmiHost,int pm_iRmiPort,String pm_sProcNm,String pm_sParams)
{
try
{
RmiServerImpl rmiObject = (RmiServerImpl)Naming.lookup(pm_sRmiHost+":"+pm_iRmiPort+"/RemoteRMI");
return rmiObject.callStringProc(pm_sProcNm,pm_sParams);
}
catch (MalformedURLException e)
{
e.printStackTrace();
return e.getMessage();
}
catch (RemoteException e)
{
e.printStackTrace();
return e.getMessage();
}
catch (NotBoundException e)
{
e.printStackTrace();
return e.getMessage();
}
}
/**
* author tangqy
* 2007-2-8
* TODO 远程调用
* @param pm_sRmiHost RMIserver端主机名
* @param pm_iRmiPort RMIserver端端口号
* @param pm_sProcNm 远程程序名
* @param pm_sParams 远程调用程序参数
* @return
*/
public ArrayList callRemoteProcInt(String pm_sRmiHost,int pm_iRmiPort,String pm_sProcNm,String pm_sParams)
{
try
{
RmiServerImpl rmiObject = (RmiServerImpl)Naming.lookup(pm_sRmiHost+":"+pm_iRmiPort+"/"+"RemoteRMI");
return rmiObject.callProc(pm_sProcNm,pm_sParams);
}
catch (MalformedURLException e)
{
e.printStackTrace();
return null;
}
catch (RemoteException e)
{
e.printStackTrace();
return null;
}
catch (NotBoundException e)
{
e.printStackTrace();
return null;
}
}
/**
* author tangqy
* 2007-2-8
* TODO 远程调用
* @param pm_sRmiHost RMIserver端主机名
* @param pm_iRmiPort RMIserver端端口号
* @param pm_sProcNm 远程程序名
* @param pm_sParams 远程调用程序参数
* @return
*/
public ArrayList callRemoteProcInt(String pm_sRmiHost,int pm_iRmiPort,String pm_sProcNm,String[] pm_sParams,ArrayList pm_lsRet)
{
try
{
RmiServerImpl rmiObject = (RmiServerImpl)Naming.lookup(pm_sRmiHost+":"+pm_iRmiPort+"/RemoteRMI");
return rmiObject.callProc(pm_sProcNm,pm_sParams);
}
catch (MalformedURLException e)
{
e.printStackTrace();
return null;
}
catch (RemoteException e)
{
e.printStackTrace();
return null;
}
catch (NotBoundException e)
{
e.printStackTrace();
return null;
}
}
/**
* author tangqy
* 2007-2-8
* TODO 远程调用
* @param pm_sRmiHost RMIserver端主机名
* @param pm_iRmiPort RMIserver端端口号
* @param pm_sProcNm 远程程序名
* @param pm_sParams 远程调用程序参数
* @return
*/
public String callRemoteProcStr(String pm_sRmiHost,int pm_iRmiPort,String pm_sProcNm,String[] pm_sParams)
{
try
{
RmiServerImpl rmiObject = (RmiServerImpl)Naming.lookup(pm_sRmiHost+":"+pm_iRmiPort+"/RemoteRMI");
return rmiObject.callStringProc(pm_sProcNm,pm_sParams);
}
catch (MalformedURLException e)
{
e.printStackTrace();
return e.getMessage();
}
catch (RemoteException e)
{
e.printStackTrace();
return e.getMessage();
}
catch (NotBoundException e)
{
e.printStackTrace();
return e.getMessage();
}
}
public void callRemoteProcDeamon(String pm_sRmiHost,int pm_iRmiPort,String pm_sProcNm,String pm_sParams)
{
try
{
RmiServerImpl rmiObject = (RmiServerImpl)Naming.lookup(pm_sRmiHost+":"+pm_iRmiPort+"/RemoteRMI");
rmiObject.callProcDeamon(pm_sProcNm,pm_sParams);
}
catch (MalformedURLException e)
{
e.printStackTrace();
}
catch (RemoteException e)
{
e.printStackTrace();
}
catch (NotBoundException e)
{
e.printStackTrace();
}
}
public static void main(String[] args)
{
RmiClient client = new RmiClient();
client.callRemoteProcDeamon("//132.32.20.133",1099,"/opt/mcb/tts/bin/PreMainMon.sh -start"," ");
}
}
package com.cmsz.common.rmiServer;
import java.rmi.Naming;
import java.rmi.RMISecurityManager;
import java.rmi.registry.LocateRegistry;
/**
* *********************************************************
* Copyright cmsz
* 2007. All rights reserved.
*
* @file: RmiServerMain
* @date: 2007-2-8
* @brief: 启动远程调用服务端
* @author: tangqy
* @version: 0.0.1
* @since 1.0
* Change Log:
* <author> <time> <version> <description>
* tangqy 2007-2-8 0.0.1 create
* **********************************************************
*/
public class RmiServerMain {
public static void main(String[] args)
{
try
{
if(System.getSecurityManager() == null)
{
System.setSecurityManager(new RMISecurityManager());
}
int rmiPort = 1099;
if(args.length!=0)
{
rmiPort = Integer.parseInt(args[0]);
}
LocateRegistry.createRegistry(rmiPort);
RmiServerObject rmiObject = new RmiServerObject();
Naming.rebind("//localhost:"+rmiPort+"/RemoteRMI", rmiObject);
System.out.println("Remote Object is Ready");
}
catch(Exception exception)
{
exception.printStackTrace();
}
}
}
本文介绍了一个基于Java RMI实现远程过程调用的应用案例,包括服务端接口定义、实现类及客户端调用流程。通过该案例可以了解到如何使用RMI进行跨进程调用。
852

被折叠的 条评论
为什么被折叠?



