`
qq123zhz
  • 浏览: 537044 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

ice 远程调用,使用application类

    博客分类:
  • java
 
阅读更多
[["java:package:com.demo"]]
module zhz
{
    struct Person{
    	string name;
    	string password;
    };
    dictionary<long,Person>PersonList;
    interface PersonInter{
    	void sendUser(Person p);
    	Person returnPerson();
    };
};

  ice文件添加一个Person对象,一个字典表,表中为person对象,另外是一个方法调用。

client.java

package test;

import org.apache.log4j.Logger;

import com.demo.zhz.Person;
import com.demo.zhz.PersonInterPrx;
import com.demo.zhz.PersonInterPrxHelper;

public class Client extends Ice.Application {
	/**
	 * Logger for this class
	 */
	private static final Logger logger = Logger.getLogger(Client.class);

    class ShutdownHook extends Thread {
        public void run() {
			if (logger.isDebugEnabled()) {
				logger.debug("run() - start"); //$NON-NLS-1$
			}

            try {
                communicator().destroy();
            } catch (Ice.LocalException ex) {
				logger.error("run()", ex); //$NON-NLS-1$

                ex.printStackTrace();
            }

			if (logger.isDebugEnabled()) {
				logger.debug("run() - end"); //$NON-NLS-1$
			}
        }
    }
    private String str = "My name is alex J, monster fairy is my baidu ID, the ICE Demo is running now! 八月初十";
    
    public int run(String[] args) {
		if (logger.isDebugEnabled()) {
			logger.debug("run(String[]) - start"); //$NON-NLS-1$
		}

        if (args.length > 0) {
            System.err.println(appName() + ": too many arguments");

			if (logger.isDebugEnabled()) {
				logger.debug("run(String[]) - end"); //$NON-NLS-1$
			}
            return 1;
        }
//        setInterruptHook(new ShutdownHook());

        PersonInterPrx prx = PersonInterPrxHelper.checkedCast(communicator().propertyToProxy("Span.Proxy").ice_twoway().ice_timeout(-1).ice_secure(false));
// 这里会读取配置文件中的内容,找到对应的suibianjiao服务相关端口和协议,当然,配置文件中用span也可以,我们在服务端代码中写了对应代码。
        if (prx == null) {
            System.err.println("invalid proxy");

			if (logger.isDebugEnabled()) {
				logger.debug("run(String[]) - end"); //$NON-NLS-1$
			}
            return 1;
        }
        Person holder = new Person();
        holder.name = "zhz";
        holder.password = "zhenghuazhi";
        prx.sendUser(holder);
        

		if (logger.isDebugEnabled()) {
			logger.debug("run(String[]) - end"); //$NON-NLS-1$
		}
        return 0;
    }

    public static void main(String[] args) {
		if (logger.isDebugEnabled()) {
			logger.debug("main(String[]) - start"); 		}

        Client app = new Client();
        int status = app.main("Client", args, "client.properties");// 这里加载配置文件
        System.exit(status);

		if (logger.isDebugEnabled()) {
			logger.debug("main(String[]) - end"); 
		}
    }
}
server.java
package test;

import org.apache.log4j.Logger;

import Ice.Application;

public class Server extends Ice.Application {
	/**
	 * Logger for this class
	 */
	private static final Logger logger = Logger.getLogger(Server.class);

	// class ShutdownHook extends Thread {
	// public void run() {
	// try {
	// communicator().destroy();
	// } catch(Ice.LocalException ex) {
	// ex.printStackTrace();
	// }
	// }
	// }
	public int run(String[] args) {
		if (logger.isDebugEnabled()) {
			logger.debug("run(String[]) - start"); //$NON-NLS-1$
		}

		if (args.length > 0) {
			System.err.println(appName() + ": too many arguments");

			if (logger.isDebugEnabled()) {
				logger.debug("run(String[]) - end"); //$NON-NLS-1$
			}
			return 1;
		}

		if (interrupted()) {
			System.out.println(appName() + ": terminating");
		}

		Ice.ObjectAdapter adapter = Application.communicator()
				.createObjectAdapter("zhz"); // 这里的Span要和Server.config里的配置对应
		adapter.add(new PersonInterI(), Application.communicator()
				.stringToIdentity("test"));// 我们可以定义多个ID,这样也是没问题的,客户端找哪个Identity都可以。不过一般不这么用。
		adapter.activate(); // 激活Servant
		communicator().getLogger().print("Span Server is start ...");// 这里调用插件
		communicator().waitForShutdown();

		if (logger.isDebugEnabled()) {
			logger.debug("run(String[]) - end"); //$NON-NLS-1$
		}
		return 0;
	}

	public static void main(String[] args) {
		if (logger.isDebugEnabled()) {
			logger.debug("main(String[]) - start"); //$NON-NLS-1$
		}

		Server app = new Server();
		int status = app.main("Server", args, "server.properties"); // 这里的配置文件没有写对应路径,所以运行程序的时候,要将配置文件打到ClassPath中
		System.exit(status);

		if (logger.isDebugEnabled()) {
			logger.debug("main(String[]) - end"); //$NON-NLS-1$
		}
	}
}
 

 PersonInterI.java

package test;

import org.apache.log4j.Logger;

import Ice.Current;

import com.demo.zhz.Person;
import com.demo.zhz._PersonInterDisp;

public class PersonInterI extends _PersonInterDisp {
	/**
	 * Logger for this class
	 */
	private static final Logger logger = Logger.getLogger(PersonInterI.class);

	@Override
	public void sendUser(Person p, Current __current) {
		if (logger.isDebugEnabled()) {
			logger.debug("sendUser(Person, Current) - start"); //$NON-NLS-1$
		}
		 
		System.out.println("Person = "+p.name+":"+p.password);
		


		if (logger.isDebugEnabled()) {
			logger.debug("sendUser(Person, Current) - end"); //$NON-NLS-1$
		}
	}
	@Override
	public Person returnPerson(Current __current) {
		// TODO Auto-generated method stub
		return null;
	}

}

 个人认为跨语言有必要使用,如果都是java应用的话,不觉得没有必要,毕竟java的远程调用方式比较多。

以上例子需要安装slice2java的eclipse插件。。

0
2
分享到:
评论

相关推荐

    ICE框架 C++示例程序

    ICE(Internet Communication Engine)框架是一种跨平台的中间件,它提供了分布式系统开发所需的各种服务,如对象间通信、数据序列化、远程调用等。在C++编程环境中,ICE为开发者提供了一套强大的工具和库,使得构建...

    ICE使用,包含SERVER和CLIENT端

    它提供了一种面向对象的、类型安全的远程调用协议,同时支持TCP/IP、HTTP、SSL等多种网络协议,确保了数据传输的安全性和可靠性。 ### 安装与配置 首先,你需要下载并安装ICE 3.4.1。解压后,将ICE的库文件添加到你...

    IceApplication.rar

    `Ice` 使用接口代理(Interface Proxy)机制,允许客户端透明地调用远程对象的方法,仿佛这些方法是在本地执行。这种透明性使得分布式编程变得简单,同时也支持多线程和异步调用,提高了系统的响应速度和并发能力。 ...

    ICE中间件教程

    - **4.3.2 Ice::Application类**:服务器端程序的入口类。 - **4.3.3 Ice::Service类**:服务器端对象的基类。 - **4.3.4 接口映射**:服务器端接口的实现。 - **4.3.5 参数传递**:如何在服务器端处理参数传递。 - ...

    android经典书籍-Professional Android 4 Application Development【pdf+代码】

    8. **通知与推送**:讲解了如何使用Notification API向用户发送提醒,以及实现Google Cloud Messaging (GCM) 或 Firebase Cloud Messaging (FCM) 进行远程推送通知。 9. **多线程与异步操作**:介绍了Android中的...

    jQuery调用WebService的实现代码

    在这个例子中,我们创建了一个名为 `WebService` 的类,并通过 `[WebMethod]` 特性标记了可被远程调用的方法。 3. **[ScriptService]**:这个特性使得 WebService 可以被 ASP.NET AJAX 或者 jQuery 等客户端脚本...

    js调用webservice中的方法实现思路及代码

    在上述C#代码中,`PageService`类使用了`[ScriptService]`特性,表明这是一个可以被AJAX调用的服务,而`[WebMethod]`特性标记的方法可以被远程调用。`WebMethod`接收的数据可以通过HTTP POST请求传递,返回值通常是...

    例子Webrtc

    4. **WebRTC API的兼容性封装**:由于不同浏览器对WebRTC的支持程度和命名有所不同,代码中进行了兼容性封装,确保了`PeerConnection`、`URL`和`getUserMedia`等API的统一调用。 5. **PeerConnection的初始化和管理...

    java技术点

    20. **RPC组件**:远程过程调用,如RMI,gRPC。 21. **单点登录**:CAS,OAuth2等身份验证协议。 22. **NAT穿透**:STUN,TURN,ICE协议。 23. **邮件收发**:JavaMailSender,POP3,IMAP协议。 24. **应用服务器...

    Service Activity的三种交互方式(详解)

    如果需要Service与Activity之间进行通信,比如传递参数或调用服务的方法,就需要使用绑定(bind)和解绑(unbind)的方式。这涉及到`onBind()`方法,服务需要返回一个实现了`Binder`接口的对象,使得Activity可以通过这...

    四种php中webservice实现的简单架构方法及实例

    PHPRPC是一个轻量级的PHP远程过程调用框架。它提供了一种更简洁的方式来实现Web服务。 **服务端实现**: 包含`phprpc_server.php`等必要的文件,创建服务器实例,添加服务方法,然后启动: ```php include_...

Global site tag (gtag.js) - Google Analytics