2010-3-12

比较颓废的一天,惭愧!
晚上照样看书看到一点多了,看了一个关于方法参数设计的总结,一般般,就是说不要太多参数呀,参数是接口比类好呀什么的,比较普通!后一个是关于overload的,想到虫族的房子了,Hoho!overload是在编译期间决定的,所以注定它不能使用多态!如果像多态那样用它,将只会得到基础类的那个方法!因为这一切……在compile的时候就注定了!所以重载方法是static的,重写方法才是dynamic的!另外就是overload的时候,never将他们的参数个数设为同样,这样极容易confusing!
早上八点半才醒,momo!上QQ聊了会起床,上午就看了一下依照计划622 project的东西,感觉有点点忘了!中午炒了木耳,这次不错!辣椒烧久一点就是不一样!remember it!吃完饭打了盘sc,去学校!ebay上的第一个交易成功,直接从网上赚美元的感觉真不错,哈哈!去实验室拿东西让wuyi去寄,顺便呆那里了。。。下午玩了下侍魂,再对622重新设计了一下,六点多回来!感觉实在是时间利用不合理!从超市回来赶紧看书(买了两盒草莓和新鲜肉肠,赞!),下决心把codebase学了一下!let’s see it!!!

在执行服务端的时候,要加上自身的policy,即

java Djava.security.policy=policy的名字 FileServer
另外就是要加上codebase  java -Djava.rmi.server.codebase=file:/D:\server/ Server   其中D:\serverstub文件的路径,否则会出现classNotFoundException。当然最好是用http动态更新codebase,需要继续研究!还有就是一定要注意最后那个“/”(指定的是jar文件时就不要这个斜杠了。)。
总结一下codebase

 

一、为什么需要codebase

当我们用一个对象作为远程方法调用的参数时,对象是以序列化流来传输到远端,然后在远端重新生成对象。这样就可能在两个Java虚拟机中交换对象了。 但是序列化是这种传递对象的一部分。当序列化对象时,仅仅是把对象的成员数据转化成字节流,而实际实现 该对象的代码却没有。也就是说,传递的只是数据部分,而做为控制逻辑的程序代码部分却没有被传递。 这就是RMI初学者容易误解的地方,我已经序列化对象了,而且对象也传过去了,怎么还说找不到呢。其实,对象 数据的确过去了,不过找不到是类定义,这个并不是序列化传过去的,RMI协议是不传递代码的。但是,对于本地没有 的类文件的对象,RMI提供了一些机制允许接收对象的一方去取回该对象的类代码。而到什么地方去取,这就需要 发送方设置codebase了。

二、什么是codebase

可以把classpath看成是本地代码库,它是一系列调用本地代码类目录。而codebase就是远程代码库。简单说,codebase就是远程装载类的路径。当对象发送者序列化对象时,会在序列化流中附加上codebase的信息。 这个信息告诉接收方到什么地方寻找该对象的执行代码。
你要弄清楚哪个设置codebase,而哪个使用codebase。任何程序如果发送一个对方可能没有的新类对象时就要设置codebase(例如jdk的类对象,就不用设置codebase)。
codebase实际上是一个url表,在该url下有接受方需要下载的类文件。如果你不设置codebase,那么你就不能把 一个对象传递给本地没有该对象类文件的程序。

三、怎样设置codebase

在大多数情况下,可以在命令行上通过属性java.rmi.server.codebase来设置codebase。例如,如果在机 器url上运行web服务器,端口是8080,所提供下载的类文件在webserver的根目录下。那么运行应用程序的java 命令行:
-Djava.rmi.server.codebase=http://url:8080/
这就是告诉任何接受对象的程序,如果本地没有类文件,可以从这个url下载。

一晚上奋斗,排除这么多的Exception之后!RMI终于调成功了!虽然是本地,但是一大进步了!Hoho!看到自己上传的文件了,momo!欣慰!下一步就是实现下载以及分布式的service discovery,step by step!!!睡前想想算法!
OMG,又十一点多了!偷菜,洗洗,上床,看书,睡觉……endles
s~~

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s