by agate - Published: 2008-10-08 [7:45 下午] - Category: 程序编码

今天帮朋友做课程设计, 要用 RMI 远端操控数据库. 于是乎便看了一下 RMI 应用的用法规则. 发现十分简单. 在这里写下一个 HelloWorld 例子, 以便未来参考.

引言: 白痴的我明明知道 RMI 底层是 Socket 实现的, 传递的对象固然要序列化. 但是今天我竟然傻逼地把 Connection 传导客户端操作... 小朋友不要学我变成白痴哦!

一. 结构(我叫他规则):
一个接口, 一个实现类. 一个服务器端, 一个客户端. 总共三类一接口.

二. 代码:

import java.rmi.Remote;
import java.rmi.RemoteException;

public interface Product extends Remote {
    public String getName() throws RemoteException;
}
import java.rmi.RemoteException;
import java.rmi.server.UnicastRemoteObject;

public class ProductImpl extends UnicastRemoteObject implements Product {

    private String name;

    public ProductImpl(String name) throws RemoteException {
        this.name = name;
    }

    public String getName() throws RemoteException {
        System.out.println("方法 getName 被调用!");
        return name;
    }

}
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

public class Server {

    public static void main(String[] args) {
        try {
            Registry r = LocateRegistry.createRegistry(1099);
            Product p = new ProductImpl("乐事薯片"); //我的最爱
            r.bind("p", p);
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}
import java.rmi.registry.LocateRegistry;
import java.rmi.registry.Registry;

public class Client {
public static void main(String[] args) {
        try {
            String host = ""; //这里替换成你的服务器地址, 空的就代表本机
            Registry r = LocateRegistry.getRegistry(host);
            Product p = (Product)r.lookup("p");
            System.out.println("此产品的名字为:" + p.getName());
        } catch (Exception e) {
            System.out.println(e.getMessage());
        }
    }
}

三. 执行:
1. 放置
将上述 4 个类放置在统一文件夹下.
2. 编译
javac -cp . *.java
3. 启动服务器端
启动一个终端, 进入该文件夹, 执行:
java -cp . Server
4. 启动客户端
启动一个终端, 进入该文件夹, 执行:
java -cp . Client

四. 注意
编码问题一直存在, java 编译也不例外! 在 Linux 这些 UTF-8 的世界里请大家把上面四个文件都保存成 UTF-8 格式. Windows 的世界里, 保存成 ANSI 即可!

Tags: [ , , ] - Comments: View Comments
by agate - Published: 2007-12-07 [9:41 下午] - Category: 程序编码

其实我的个人表达能力不是很好……估计小时候语文没学好~也可能是aop这个概念本身意会的程度很大吧!呵呵寒暄一下!

正式进入主题:AOP 即 Aspect Oriented Programming 的缩写,中文译为"面向切面编程"。本篇没那么学术化,只是为了快速入门了解真实的使用方式!我们不用那么早去想这个名词的意义,fellow me,用真实的代码透析AOP的含义。

不知各位有没有项目开发的经验,如果有的话你应该可以清楚地了解到我们的代码中常常充斥着大量的日志记录代码,我们用log4j等日志记录工具一段一段地记录程序运行的信息。也许有个别是十分特殊的,但是似乎大部分都是例行公事吧!或者在丢出exception的时候捕获其message然后记入日志对吗?这样的代码难道不觉得碍眼?修改起来是不是也很麻烦?要是我们换了一个日志记录工具怎么办?呵呵,别吓到了,没这么严重啦,这些都是极端情况,平时我们还是很开心地写着这些东西。但是今天要说到的这个aop可以将一些特别的操作提取出来,作为我们的"通知-advice",在运行时加载到对象中。就是说,我们可以在代码中不写日志记录段,但是在运行时加载一些"通知"到需要记录日志的"切入点-pointcut"动态地加入日志记录功能。
Read more...

Tags: [ , , , ] - Comments: View Comments