JAVA网页设计Tomcat的Cluster功能复制session时会复...
Java的桌面程序开发在java程序员里通常叫swing开发,主要用的swing包里的类开发的,也就是通常说的c/s架构开发session|对象成绩:当营业利用了SSESSION保留某些对象,如何在集群时复制这些对象?
TOMCAT5已思索过这类集群所招致的成绩,实在也就是cluster的成绩。假如接纳了TOMCAT的cluster办理计划,我信任应当能够包管session等信息的同步可操纵。
别的,TOMCAT请求放到SESSION里的对象要必要完成Serializable,以确保各个对象能被一般复制。
有人提出疑问,SESSION利用的是MAP来保留数据,序列化时不会把实践的对象序列化。实在看看HashMap序列化的代码就能够晓得,在SESSION序列化时,是能够准确将Map中保留的数据对象序列化的。更次要的是,TOMCAT序列化SESSION时,并没有利用HashMap的序列化体例,而是将各个保留的对象读出来独自举行序列化。
因而保留到SESSION中的对象实例应当也会被复制。
如许就能够包管各个服务器上的内存数据一样了。
别的一个成绩是很多人忧虑TOMCAT的这个办理发计划的功能成绩,实在同步某某些内容信息如SESSION的价值并非很年夜的,出格在几台事情站属于统一个网内。想对其带来的横向扩大功能,能够疏忽,我想。
参考:
TOMCAT中SESSION序列化的代码:
protectedvoidwriteObject(ObjectOutputStreamstream)throwsIOException{
//Writethescalarinstancevariables(exceptManager)stream.writeObject(newLong(creationTime));stream.writeObject(newLong(lastAccessedTime));stream.writeObject(newInteger(maxInactiveInterval));stream.writeObject(newBoolean(isNew));stream.writeObject(newBoolean(isValid));stream.writeObject(newLong(thisAccessedTime));stream.writeObject(id);if(debug>=2)log("writeObject()storingsession"+id);
//Accumulatethenamesofserializableandnon-serializableattributesStringkeys[]=keys();ArrayListsaveNames=newArrayList();ArrayListsaveValues=newArrayList();for(inti=0;i<keys.length;i++){Objectvalue=null;synchronized(attributes){value=attributes.get(keys);}if(value==null)continue;elseif(valueinstanceofSerializable){saveNames.add(keys);saveValues.add(value);}}
//SerializetheattributecountandtheSerializableattributesintn=saveNames.size();stream.writeObject(newInteger(n));for(inti=0;i<n;i++){stream.writeObject((String)saveNames.get(i));try{stream.writeObject(saveValues.get(i));if(debug>=2)log("storingattribute"+saveNames.get(i)+"withvalue"+saveValues.get(i)+"");}catch(NotSerializableExceptione){log(sm.getString("standardSession.notSerializable",saveNames.get(i),id),e);stream.writeObject(NOT_SERIALIZED);if(debug>=2)log("storingattribute"+saveNames.get(i)+"withvalueNOT_SERIALIZED");}}
}
HashMap序列化的代码:
privatevoidwriteObject(java.io.ObjectOutputStreams)throwsIOException{//Writeoutthethreshold,loadfactor,andanyhiddenstuffs.defaultWriteObject();
//Writeoutnumberofbucketss.writeInt(table.length);
//Writeoutsize(numberofMappings)s.writeInt(size);
//Writeoutkeysandvalues(alternating)for(Iteratori=entrySet().iterator();i.hasNext();){Map.Entrye=(Map.Entry)i.next();s.writeObject(e.getKey());s.writeObject(e.getValue());}}
令人可喜的是java现在已经开源了,所以我想我上述的想法也许有一天会实现,因为java一直都是不断创新的语言,每次创新都会给我们惊喜,这也是我喜欢java的一个原因。 你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。 是一种突破用户端机器环境和CPU 所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。 http://www.jdon.com/去下载,或到同济技术论坛的服务器ftp://nro.shtdu.edu.cn去下,安装上有什么问题,可以到论坛上去提问。 关于设计模式的资料,还是向大家推荐banq的网站 http://www.jdon.com/,他把GOF的23种模式以通俗易懂的方式诠释出来,纯Java描述,真是经典中的经典。 当然你也可以参加一些开源项目,一方面可以提高自己,另一方面也是为中国软件事业做贡献嘛!开发者在互联网上用CVS合作开发,用QQ,MSN,E-mail讨论联系,天南海北的程序员分散在各地却同时开发同一个软件,是不是很有意思呢? 你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。 科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。 Java 编程语言的风格十分接近C、C++语言。 任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言 是一种使网页(Web Page)产生生动活泼画面的语言 我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。 我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。 Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站 另外编写和运行Java程序需要JDK(包括JRE),在sun的官方网站上有下载,thinking in java第三版用的JDK版本是1.4,现在流行的版本1.5(sun称作J2SE 5.0,汗),不过听说Bruce的TIJ第四版国外已经出来了,是专门为J2SE 5.0而写的。 多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。 你快去找一份Java的编程工作来做吧(如果是在校学生可以去做兼职啊),在实践中提高自己,那才是最快的。不过你得祈祷在公司里碰到一个高手,而且他 还愿意不厌其烦地教你,这样好象有点难哦!还有一个办法就是读开放源码的程序了。我们知道开放源码大都出自高手,他们设计合理,考虑周到,再加上有广大的程序员参与,代码的价值自然是字字珠叽,铿锵有力(对不起,偶最近《金装四大才子》看多了)。 吧,现在很流行的Structs就是它的一种实现方式,不过Structs用起来实在是很繁,我们只要学习其精髓即可,我们完全可以设计自己的MVC结构。然后你再研究一下软件Refactoring (重构)和极限XP编程,相信你又会上一个台阶。 做完这些,你不如整理一下你的Java代码,把那些经典的程序和常见的应用整理出来,再精心打造一番,提高其重用性和可扩展性。你再找几个志同道合的朋友成立一个工作室吧 Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。
页:
[1]
2