|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
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[i]);}if(value==null)continue;elseif(valueinstanceofSerializable){saveNames.add(keys[i]);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的一个原因。 |
|