[4584] in java-interest
Re: language level support for serialization
daemon@ATHENA.MIT.EDU (neudeck.arthur@ch.swissbank.com)
Mon Jan 8 05:00:04 1996
From: neudeck.arthur@ch.swissbank.com
Date: Mon, 8 Jan 1996 08:56:55 +0100
To: jonl@sealevelsoftware.com
Cc: java-interest@java.sun.com, neudeca@ch.swissbank.com
----------
X-Sun-Data-Type: text
X-Sun-Data-Description: text
X-Sun-Data-Name: text
X-Sun-Charset: us-ascii
X-Sun-Content-Lines: 179
Hoi ...
> one thing i was really hoping java might do is provide built-in support for
> serialization. C++ could never hope to do such a thing because of the whole
> pointers-are-out-of-control issue... but JAVA could conceivably do it! a
> native method written by Sun (not sure what class it belongs in) could
Why are you thinking of a native method to be the right solution ???
Actually I implemented the "Externalization Service" from the CORBA 2.0
Specification in a "light" version. I left out e.g. the Naming-Service-Details,
the key infos and the Graphs (that doesn't mean that you are not able to
store any graphs !).
As I see things everything is working fine :)
> take an Object, a generic Stream interface and a direction (stream in or out)
> and that method should be able to traverse the graph of objects that are
> sub-objects of the Object you want to serialize (taking care to avoid
> cycles) and it should be able to turn the pointers into a persistent
> representation (zero-based file offsets perhaps) and back into pointers
> again when streaming back in (the pointer *values* have to change,
> obviously, but the *meaning* of the pointers can be reconstructed from
You don't need to mess around with any pointers. You simply tell any
nested object to externalize itself to the stream - that's it :)
Here's an example of the "externalizeToStream()" method the object
which should be stored has to provide:
/*************************************************************************/
public void externalizeToStream(ServiceStreamIO inIOStream){
inIOStream.writeInteger(classVersion);
inIOStream.writeString(OID);
objectVersion.externalizeToStream(inIOStream);
neededRuntimeVersion.externalizeToStream(inIOStream);
inIOStream.writeString(objectName);
inIOStream.writeBoolean(fixed);
inIOStream.writeBoolean(master);
inIOStream.writeBoolean(returnToSender);
homeNode.externalizeToStream(inIOStream);
// create empty if there is no dest specified
if(destNode == null) destNode = new LogicalNode();
destNode.externalizeToStream(inIOStream);
destNode = null;
// create empty if there is no dest specified
if(returnNode == null) returnNode = new LogicalNode();
returnNode.externalizeToStream(inIOStream);
returnNode = null;
}
/*************************************************************************/
(In order to really understand this source completely it is adviced to
read the CORBA 2.0 Specs, esp. Externalization Service.)
> the information in the stream). one small issue: if someone messes with
> the pointers in the file, the serialize method should be able to catch
> on (or there might be some security issues) and say "File corrupted". i
> realize this is a non-trivial problem, but the benefits could be tremendous
> because all Java applications would be able to serialize *anything* by just
> stuffing things into classes and saying "serialize yourself" to the object
> of that class. imagine being able to take an arbitrarily complex object and
> push it through a socket connection to another application! what power and
> elegance! and it would only be possible in a safe language like Java. it
You got it absolutely right: It definitely is that easy. Of course you have to
provide three things within the class that is to be externalized:
1.) The Object has to implement the "ServiceStreamable" interface
2.) externalizeToStream()-method
3.) internalizeFromStream()-method
Both methods provide the knowledge of storing and retrieving the classes data
and are part of th shown interface :)
> would be yet another point on the scoreboard of C++ versus Java. oh... and
> let's not forget that Sun already has a good chunk of the code required to
> implement the feature (the garbage collector's mark phase has to do exactly
> the traversal mentioned above).
>
> J
As an attachment you can see the service I implemented. Hope you'll enjoy it.
If you have any questions simply ask :)
Have fun,
Arthy
BTW: Here is an example of the "internalizeFromStream()"-method:
/*************************************************************************/
public void internalizeFromStream(ServiceStreamIO inIOStream){
try{
classVersion = inIOStream.readInteger();
} catch (Exception anyException){
System.out.println(anyException);
}
// ------------------------------------------------------------ -
// OID because it is possible that there is a mistake in the -
// stream name or you don't even have a name at all -
// ------------------------------------------------------------ -
String tempOID = new String(OID);
try{
OID = inIOStream.readString();
} catch (Exception anyException){
System.out.println(anyException);
OID = new String(tempOID);
}
if(OID.length()<10) OID = new String(tempOID);
try{
objectVersion.internalizeFromStream(inIOStream);
} catch (Exception anyException){
System.out.println(anyException+
" while internalizing TO: objectVersion");
}
try{
neededRuntimeVersion.internalizeFromStream(inIOStream);
} catch (Exception anyException){
System.out.println(anyException+
" while internalizing TO: neededRuntimeVersion");
}
try{
objectName = inIOStream.readString();
} catch (Exception anyException){
System.out.println(anyException+
" while internalizing TO: objectName");
}
try{
fixed = inIOStream.readBoolean();
} catch (Exception anyException){
System.out.println(anyException+
" while internalizing TO: fixed");
}
try{
master = inIOStream.readBoolean();
} catch (Exception anyException){
System.out.println(anyException+
" while internalizing TO: master");
}
try{
returnToSender = inIOStream.readBoolean();
} catch (Exception anyException){
System.out.println(anyException+
" while internalizing TO: returnToSender");
}
try{
homeNode.internalizeFromStream(inIOStream);
} catch (Exception anyException){
System.out.println(anyException+
" while internalizing TO homeNode");
}
// --------- -
// dest node -
// --------- -
try{
if(destNode == null) destNode = new LogicalNode();
destNode.internalizeFromStream(inIOStream);
if(destNode.getNodeName().length() == 0) destNode=null;
} catch (Exception anyException){
System.out.println(anyException+
" while internalizing TO destNode");
}
// ----------- -
// return node -
// ----------- -
try{
if(returnNode == null) returnNode = new LogicalNode();
returnNode.internalizeFromStream(inIOStream);
if(returnNode.getNodeName().length() == 0) returnNode=null;
} catch (Exception anyException){
System.out.println(anyException+
" while internalizing TO destNode");
}
}
/*************************************************************************/
.---------------------------------------------------------------------.
| Arthur Neudeck Tel: +41-61-288 94 44 |
| SYSTOR AG Fax: +41-61-288 42 24 |
| Applications - ARS Email: neudeck.arthur@ch.swissbank.com |
| Hochstrasse 16 X.400: C=CH A=400NET P=SWISSBANK S=NEUDECK |
| CH-4002 Basel G=ARTHUR DDA=ID=T019535 |
| Switzerland WWW: http://www.systor.ch/systor/ |
|---------------------------------------------------------------------|
| Current Project: Thesis about Travelling Objects |
`---------------------------------------------------------------------'
----------
X-Sun-Data-Type: compress
X-Sun-Data-Description: compress
X-Sun-Data-Name: ExternalService.tar.Z
X-Sun-Encoding-Info: uuencode
X-Sun-Content-Lines: 235
begin 600 ExternalService.tar.Z
M'YV02=S0*2/'3)@Q9:80M),&X10Z<LJ$:1-&#)LR+M2$L1,&@,>/($.*'$FR
MI,F3'V'$@ '#ADL +&/$L'$C!DR5,V7(N,FRYPP8-6[ M 'C!@P9,634D"$T
MYHV@.V&@G$JUJM6K4^O,H1-&SDTW9>J0*3.F(U:19>:$*7.V9,^C,J2^94FC
MK=V[>//JW3L23AV+#4&D$4C0($(0 0<6/)AP8<.$$"52M%AFCP(%+U2 :,&Y
ML^?/H$.+'DVZ-&<0*EY@UMRD#!TT;\CH2% &CV(W8=BDT5.&RIN'$2>B2)&@
M>/'4JS>;7LZ\^7+4JC.K4( :Q!TY:0;. 9&;#8C794"0"</U.QKR(.; KL.&
M# @QX6O?SKV[C'LZ;[B#.)/&3ADWZ44VD0O4:48%&FELUX9KL+EWWG;X"=8&
M'!<M*)!YX05'!@]4Y %'&3X,U\*"K\4V!X&H%0@"$'!T-5$"@R7Q!'"2);!5
M<&U8AP9!X8U7GGIOL.<>?"!H"((9<KS11H'1:>;<DU ^"1UU?@$V1@)VO)$&
M&;391A!NNO'F&XW"*20'0PX)V(:,,+HA(YEMI+##99DI%^6=>((V99VME2A;
MF_.%68812;8!YW#&'=>DG7DV>N>>*DQ7G8;;=8<A"/)]21]O[OD8QI&%ZL>?
M?P#>*!F*!B*H((.Q@?#@=_FE,6&%_]%QJ88<>@BBB"0V>"(/0DCA@XH\).%#
M$7A,1&$9.O#P@K$JLO%&66P$00=$:8A1QT )]""8FS.JZ8*&0KSQQD5AN#'<
MG"E6QZ*+;;3YIIHVJJDCC^*1]RF00KZ7H43N(:DDD\DY:G"44X)0I6Y79KDE
MH)H*2JB2AYJ))F0XLAECN#C*2:>3!X?,'*0@]-G@;&>X-@0;8<PQAQ,3E8%H
MH@D@5Z?(.)<&J:2:141''7*X >&.(."V( AOF''I&"R[7*"*0/@,M!L)&!U>
MTDLW/71XIDY4T47B$=1?6J .3'+.:(>VYPL*_\4P", -=D8"*=.Q<LLOQ[RN
M GU\C%JD)!?A!!$D1ZH9<GPEKOCBC#?N^..01R[YY)1';O%C<&:TD5F55ZX2
M2R[9<)-,--D44TY1S044#3.(WE)1,-!@U PTU!53#3',, -,G?=^E59<><42
M6&*1Q?E=::V5^%LZR3577;Y'+SWDLL+QAARV:L21"VF\X4) ?M$!YYS57Y_]
MYMQ[_\2VX8]_V<*!,8TWW(ZEB:-E(+S -FF;4:<_=]?"CK:TT[_\[6\T!80#
M=CC"K<O93S(:<T/[U,0N!?:'/&5(@ ,Q!L$G)"!(=)@@CBJX0 PF 'S;@E.;
MPB<%B;#!?0HK(;?6%\(4T@N$+'2A^ZCDML!L\% GE* -<=0F** A#W-H2&[@
ME ++K'!;+5PBO;PU&",B48DOI* "GBB^*1:M#'>@WYDPIR89H:"*1TPBM9C(
MKK[QT$IBO!@0:2C"&J'QBFM44Q.WB$,HZM"+=U2C%$?(1_8-L4;> DL8?UC&
M)YS1#5849!8[UD:_I>V2G2&9R6(SFTP%;5,R(P[-; 8R3*9M9RKR))CJ4RDV
M> <L"'%95_*0K_)$Z%.*#!".4 6U%LGA1:H$)1F>( 8UD(4.'RSF,<V#'GZU
MQU^8\M(G!44&5-'L-0E"FC+'8*M714A"R[*0K<!3()H-1C&&"4]B"L,81N+H
M:V4@V,U,>4KDM V.#N-2, 6%@G4NQB'UXZ#7*!/-0-5GF-NDPQX3\+_K9(=L
MGUI#&6AIANN9)YMO2"BL+K7/(I5!@6FI%7FZYX8M_N\'*+T,0]E&+39L39>2
M@:=UL#.0+^#G"UUK@XC>\*%?TH&DZ<G/:] #'A"8E&T9-28W05 6 #ET($C;
MEHXPZ!\Y?"M0 <*@8&P%%OM *#]J\<\6]WE08BJ5#BX@JYA^HR84]+&+E*2.
M&^=)SYQIDE5_.F?$ZC.S1)&2474-&2JKH]=ILI([KOQB+-4B!UIZJFPY^M2H
M_@/3 3W-7;Y\46%7R2FS'C.99V6FK9PYI/!L5IC63!0VMY/497HS/^"DU87(
MB1IS$N:?ZKQM.MT94\K(LY2!%:P]X3<&$.038H;E33]UV\Z P@F>R.6L?3S+
MS84VE*80!8%$*6K1U6HSM!$J:D<C M(YB/2G;RCI2D& TA^H]'\M?6E.9?K4
M,MCT#3AM:PI:P%."C#2]017MI8[ZW64V=:8/C:JM[G">@53UJA'+*E2S\T6O
M;C2L\8RN,*F+UM-*K%"'&DP=)^(Q$,P5N,$UV%W]A#+7M(!MYK55KTPTRD6E
M6&2#U<P<E.0:69&-PMF$95H8FX?P1,B\;G#/CH\FGU]^JZ(;+6I.68 I%YP!
M53I* ]B03 :Y%72OG*KEI][P8%RZY@[76P-3TPM+]+K!!2 X4#9)JR(B460L
M"GN#R[(%-C'04FI!\[*4U72BWP+VQGE*&'$1(T2X2F8_KD&AHX6S4$ #2,1^
M'*1D*GG/M]'QD!.!-!T^/6F=5MHU4U-P#C4]D4J>^&^'6Y3@"/=7PTUI>KC.
MM:XMYUPUW<UE1$C+&+ #!_S(07,<V?55/M<2HHQN)C5YM@UTPA/F_20J1#&*
M4I(R@]3%)7=R4;:N@=>5KX1E+&712_+8PA?FQ:7:=!&WO.==$OFY+(YDQ-&O
MYQ#L.0P[#<6^'O[HJC9[UHD\V!H@V0R.XL\H6H89C)L;YF;OO"V(A!?DUCD3
M,(;8E($)_SG#:S#.P SZ>2!;Z$("3EZ&(7A\3F]\&V\GLN]^_SO@<A@._OK6
M:1_V6M]:LSFQC8T"#6)KXFW:-\P6Q((M)FKC@W'Y6$ ^\=<TG68L3WF;A)"'
M@4B]# N-L=+U%G6M+1WL<[*1RCQ.=9&CX9%?;_MK/*9V.G#=ZQY_Y-U;[O$2
MNS%_#<\DPYEJ]I@EC. .'VX/BROQ,XAZ[ O2^18M37B\G9W3B\YG>E16^,@;
M'3M(+[OE8[;0BI^]6U]<Y-'/ /?.HUVNEP'\H3US>,UT?.HA?TWM9R]XU?2\
MN.=\/-MS__93_RQH:\9]U=& ^<4;5TM*7KORW5YTJ+LA[L0O_?"7C_JH;]_M
ME?1?X%NP>Y9_??>B4;3SL]X%4>_]ZY)/ .7-_W+8__[Y6]J\W;O.][$4G?U;
MQW]?9UT'E'XM0& ()T#;0C8'N%[\TX#!EP:H!P-I1W]C@7JYE'6#\7X>YP(7
ML7Q= ',.""7]LUYFH&7>T16_1$M8PW+;T8#_@S -6%$YEP8]0(%IP ,;*( =
M^('@EP8KL (+M7(\.!9;D 8J1T5NP(%&B(1IQW-]\VJV]E>S5CB @SCTEH5:
MN(5<V#@SUP9&<!#&E@?(=CQ=>!+,%CK2%FVG,VVI,Q>S(Q?9%CLW, ,S40.C
M8P,T$!2\<X:30V[" P/$@VYFV!;KMCP]T3SP%CM^V(B^4S[8 P+:$P;IXP)$
MH"^DYCZ0>#[;TSTN8 1:5@:2IHD38CZ2B#Z>"(H7D8E:M(FGV(G>HXIEX 1O
M0 =&$"1)ABP(46PD13ZE&(F36(FCV(J_R(F4Z(FL2$BN&(RI&(J^:#W B(K>
M(R.Z^%%N]HRF&(Q@@593,"T210<PMV@5AV\/-!%AR$W7DP<#5X!J<X &!$ )
MMX OZ#_LJ"?NJ$"U>$SV\7ERDP G>!%34 =F<()X@'HBX +X(0(DE(_<M(^-
MEP"> @7DP7R6A&@J]E>;]"<;! 4$D41;\1\(T5>*4C 6Z2@Y%C8&P1ZVTG%"
M Q%U@(['=EF:\2Z_%"^#<8E<(9&OD0 MHGL,AB^MM52/=0<H"$U;<3WV86@E
M:9**!T=?>(YC6'0/>9/ZHI-HL$<@(&96V7UN@)-A8)4K( (OH)"P1Y)+B2<K
M=C(<%QP#(9(CB7AG*26DQ#,7M2I^PE1LF5VYM$%P8R]!.4X-YBIEP 9PL!VU
M07[I0@8JXF&[X66/A1]L(S"1=22A"&<RN2*999-N((NG9S5(HS1%]8_A\9,1
M45DY0I2)!1_E9!Q$@F3CE!^)&2!(Z1Y$B4TEA5GPTB4&Q1LV4IMC@ 8"AFY;
M0C9WP" $P1T \E:K61QP8AU%223#)A$#X1X6E2[?$CZF"3665C5@1(X"E2-_
MJ91Q^2A-*7,_]VC1B4%2N7IMPIDQ<W6L:2[H0C5J!79.]QI)<@?;P9FU>(MU
MD(MXL(MNYD0QV!PE^#_20BWPJ( $!(/UJ#,-*(N4>1$8V)VRB (1.9$K\"WN
MN2 ;*IH!.9!I@ <>0V"/XJ!?EEQ>EE,'^J C X%*@P+U"0(]X"TN"79.E 0
MH8Y.1WE[>9["X70)@ +)*!DID'H@((M%*ARBF0)TEP!]P%3D\9O]] 35R(L
MY@9O((M,E*,:A$0#T08N $(N8$$"P0;JHJ5<JD=I5QP^RAYLT*9]H#__<1^-
M]5XN^APHRIAZL*+V@J(GND51.ICF!0(YNJ,YZJ/=^84H(*3+-6)Q@J2R.(PX
M@@)-^J116A9T0*74&*#6"%1J&HI=*J13 *9E(*9D:J9T@*8H$*H R:9"^J:N
M)*=TFF3?<:<@ *6UZAYI8 :P!Y?C.3(8B5>SD9YM*4I^96/!2H)SJ2+>-6/N
M8:QZN:@!U9<X4F!+-53=-)B%&4V(F62+>5N<Y9CZ BN1&2IF1@=H)@=J!HUH
M953M,I.9V2:T.!:=:7A84U1:BF>DR37V@IK>H9JUQ9I<4RNPTDNY647F4QSN
MBC1.A2"_*6;.F9H%*Q (6Y.Z"689- >^"9S:&C9C,)S;49S@8576J9P#RYS_
M^ISA(:W4:;*7UFC9Z2[;^:-C5([@F5#BN:S.H7Y.":0Y(JU%MZ2:2;3P61QB
M()\209_2)%T$R'NFT:(I.JX39YI2&Z@P$J,S6J.W6@<XJE+K):W(Z1Z45U1O
M9;4-.(*75(+RAVK(9[-RU%:#0;0EJJLOT*MX"K402F!\ZJ?7"J@R.%8N%1Z6
MD1G%@:@]ZK8 K?Y)AF-:AR/"FJ1FDN3VFB'<JER*J6;^G:=*J"@NJ6BJD=>
M6JH?B:K;4J:@MZII"KJO&E?&(:MQZG1S^@)U>JMY@!QNJKA% Z?L8K>$&D\F
MQC?),86R-CA6&&L*X(C*N[S,V[S.^[QG\84R4H;0ZQ8KT6RN@Q.E(VW4ICHU
M, -&@8>OHVTV$!2U,SK?6X=]6+U[ 8CF5CSIEA>'V&Z)^&ZJ SWLF[]GL8S2
M:(GZ0JF;I@#\"XO^RQ5$BXW12, W&H"7(RO>(SJ8TBEAL#&*(Q6ZJE8Z@84
M_,"56 1/8 17>HU^8S@D7,(F?,(HG,(JO,(E3#+[9C6S(;T>5&/#R\(V?,,X
M;,,G*6?;,8[5(UMT(%_V4ECI="3=131#\ 12( 1! (RX (PD$I-NRG_52H!
MQ4ON4E5)E%ZS 0,N( -4)A-P%FQZ (QD ,Y4 -0H\4DU<4N$ -45A1C7 9E
M?,9I##5AL"VP(0>S$038@P9 P).<&YDL0:&EL.(G,B([,)Y^2=)\0)%\0)I
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
M1^] !Y4=%UI#(*=$LC?3B"4(GN=*](!B#]X$5[@EY)[U&\&4L(R8 -A(":4
M@<Z/!UH5'_CA@N F)(*O+O8@06XW^#A)K>N#2BM=0$&?U^1H7.-[*.\/\KV'
M6)B<M&#E>WGM#\AIIG)Q+I;6RN&%9K!?"$"1)MU$GN([?90INRW @4 ,YQ,*
M2%K%T#IM(%ZH!P6AF&)WV' ^!<+9]U!V7R&LADM+[W!#1CC\Q-XC3(&1,(/M
MPFSH!BPA\\N$SB\<+JU.> D_6_/3@:(PXI5"Q_,I]*%UZGY02!4&OB38"O\$
MT3.!L\T9&D!?U_ZJ(([3A?^I(7@<7>)EZ)]E 8:73S,]I!LA: #@&;1V.Z\9
MIK]G> "CH0*,@P^Q$3:>;]%XNB$YI(8OCB1.G''8 <OAO!MLJX?NZ ]O^/1\
M(N\+(]WMZ*T>*D 0VD "-#;!+^SQ.\NF @><+Y0;]A ''CR=> ;XX3T$A0 1
MXI'"O->G@B!71(5&$-8M1%:H[6A=?>$PLW 5AK\IJ!DL(H,IAM@J"YJFL08"
M@H! 6P]G #C-@0\1LDZ0??@6ER*)+;$F]L1@0'H@C+U*B9BVN@0"H)5@F /$
M34NYOEEQJFK%8:QS>:Q088T0EP>81OQ0$G @%,60C%(AX P/JXQXA;C%%_VP
M0?S);E$3,F6 ")CTTK*Z0Z4@;C)LN 7#F)?3$@IH62;4[B3J/#6G$J-@+?PK
MURT!@CN8B%W@(E);:;:QG>!&@C*W$LI"Z8YG):V0Q=ZPWQS7:O$[R,$YIC@E
MZ I?F]:(BVMQ+E)$*NCXBDK'.7!IP7HD&2\SCF+3DHE\4*8B@)"M$F6(QK$#
MB5VP37"8XYBM3*(R3(/,L.?)Q9,&#>%@_G&/>&.YH)/FLM*>"W<LCF?E:3T@
M!!1 7EF#,E$(I %Y)5D4!,; 8K$H%4=")9+NM")#48M\D3GG(+F %P"91, *
M(&<*,J%8&<Z3(25:W3@[P^%'THR#5'&*X!9I;-<EP>P(R0;>W "4 5P&J@$1
M1797<7AB[C.*CX3##$F[\1Z-I&M DNYP2ZX^@9#>M(8L&I-[9PX,!P^4?410
ME(0J]K&3B::K%;CVH'O#+FT2;[S)NA$G3R"!(0C7#T& C:?"'SL9EDPT#:BR
M;:ZJ* DKC\O(BI\P![*JBN,5M6+U$XN*,ON!F48Y/Q"B_C!^WT_]K;^V>-0T
M1%*,B"MQ(HJ?W$8I'I_*:UFQ#;+L10D9'RED2Q1Z(LY5QK;A<)_00'[:#O\N
M]FFY+4+-3!E7RASDXL71G5[U2*H9C?(6ZHWJ)2YV1A/%A88PAQ+MNUD+% #
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
MB*8$R=0D$'31[F'D6C?J2$E3USHN8"I1)9XO-N-6,SN)6'L6BC(24W(L5,D
M::O&T:.$E*-UIJ[.+DGU$I7BVC<5:I$ +:SK;W2N;%NNEU=KN "QXWIZ*FC]
MJ8D4]'9=T2MVOL]K,+TV]K$EAM@J=2OLA=6P6<?2[)LQB7V6SW (04Z'[VH(
M%%![/:RGXZ:[-\8P(9E1?*GNDZ(\NE=K7#P4&:RDUCCJ./WB7<:UO@D:[]QG
MJHP)(N5]!]5IY1[O62I!156Z]EBD^F/[YCABG]0W2Q*8E $6?HEW,!*(TJ*8
MWZ@5*>NI)N64.=038E7G!X!]J #>LD$TH'I/::OWY.8X$K/M5*PFU;+*5"]I
M H"H+/&6.D3L<@1^"1PH/OD5W"XKC$H?<:%^N+/AX0QX8."$-?X2:UF[NQ)!
MYMH@MVLU2J]%@[^65]+7$6PSV :Q?8D7D@.OX*)3KS+(8"C">^1_S->9^\YH
MW6#(#C NQLG9^GHRG_!/H6+Z,DELB\$03*M38F%)!0TFQ=QB2D6-&32;<E8X
M_N R*_D&=EDOP\"R4O:X1>P2V13O6\W _+4BUD>B,=54DF"BDOA6H>E+<ZMG
MQAI(1;#/K.34W&E8!NKP9',B["Z;8;F=AEV6P$3)96\ J"UAN*J!9T-]L<1Y
M !/?X3C,^/2P";XE5DM?D84A,TNTRT1Y,F] !S/A1*Q5+.1V>RB@6!3;Q)XX
M$&;O&M9E=7*+H,#LJDE[:*73LOF4APH$\)J,LVJ7Q7M?5C]L%]9)?.CFFMW$
M>%@.MTJ X8AE6PB>PCS8E]9*L+8O[$7+8)V/\QP7E3Y<U1+O<=IF@IBD$+=I
M,6+EP'8@Q&/XP)9A6LPR9Z;FT1#=6',2UO6;P0[K*E.L)9*QPMW':LLDD+>@
M0"JEL[94X>MWZ0[VPZ8AP$:9,BR7 '(4$%H!;6KONH%#:D>M:7'H&_T0 9-2
MK^0O^(/0 " ZP$>F ;JC(7(Q&]X;\1?R8C/RN^/. QEP R? 5GA<(_:?W,/^
M[9-1%@406;.GI?P)9X$G7JG*_M,=V(T.7!X( :4VFSR6($-IQ=5N@"<;\TE!
MTC?@E*D898C*G8[PTE>I]5C<ZW@@*$<Y10[C&@I5 8PQ'GC(F*HZO[L\,%5R
M*"2O&L++N./%FQ\0(APNHT:-< (,FUQ11C%BCA2WD("@8A:EBA=+*Y[&A%@6
M<V(SK(AM\<5DS)E8#_[B-DQ\/FOL)0.S=RK29>2WC -P2F[&>[DU&^#7K)?#
MXC,6E454;DYC'Z1[#'/PDD)7J'C1&DL6G!7 UBNZ;90@#R@X*MA4;(U]K7Z7
ME)FR$S&)]%=*N%YJJ VQ(>W5O>X7#9 !NV-\'04:(!-J@/A2">;+=%CGO."^
MA@<ABU]X87[M!7?C/-X"_EK/^-DDU(E,QI_YLPO3&C#L.NXUR5#-Y@ -V\_]
M.4$GLAUF:J]O>N$*@Z&5=+ZQ(!!Z51X0--,9WXJ!EF%D=,5V &ME5S*$JPUY
M&+:9H?VWC%'1QF-C=\4N$Q!@8UPL 7@Q.&;&9L <JV-H3(VYBSQ6(OA8 O!C
MKR&0#3+X9<B.EX(^TBR,D4DG^S ;'EGND&0UX-L>#B1-I578E% G&Q^2.=3
MMHYV\"Q39<.I0I\@@BOI^,\\>D>!:C4.A(:$,9$;5V2*<L IPKGK\9#Q@.I@
M"=?,G!E(-*L8Y#1YL"B# 4BNET/;Q/HT9E33^FA(2#-)+,U0SS7D/RD !N !
M(T"!U@M%8%<O!3ZX9#?0$7T5)?L?]:E3Z MCQI"F$\U,;ET!:#IJEA.I)W4,
MR--L(TS_%,-XXXA<0Y(#@OI_R ":.0>H3(#U.*1Z39MJEO-!&I(&7-606E(;
M 1D JP4#A9[5:0"B)"=CS=!8=:YF&S& 9@;K1'VJ6^?<0-:,3EG7@&8MJP?M
MC>M_%NM3LPT<P*NW-9L^U7W467J+1QVN)[4-(-?/VER'M9IW3JZU$VO7B/I=
M$VMM*J^K=;*>U#< 7]<*??TIL*"_I@$ &Q\)Z\\HS39A2Z778$=9XP"%+::C
M]8W;A/Z:7;L@=SVLI9EI+=@8NU4;@1S L:%U=JFK_CI;BX'L0+(I-K=XTRB;
M52OK(-"R&?;N2BQ]^BDF)77-$2>.OU9!88 %*8WOMAW P;\>V>_H7=XYHZS*
MDF[ +MG<XC\ED3/0SL;=Q=;9DWH&]&Q:C9Q @-9. US[,#X[?RVUS8MBNMHV
M.X.<[;1-!K!H-9O78-L(T("Q[;'+]MQN9YL4>[!MBSFU:[:BYA;D94DCE+-R
MMU.VI(X=S1I(=,Z/-6AF4U[TU]DD-V@(6G*4(@*O A#DA&CG%,-]JCDU&U#5
M>/M@ X5FK:7RXF6439X;,89NFO$_1K<J>Y@ 0M]NL9?LCL+NB(3;A]L("P34
M;;#KM1$0 GQ;+VT^*=>OB3;$AMH2FUL3:\H[-U)WO2X"E;IVPX;)'9A"7">S
M<@+67\NH\4@&CE0Z,V*NY&'&GA\<L'9<W=@WU2S^4![J[6I&6'&N$U6HUA3G
9_,R_^[?__M\ /( +\ %.P NX 3_@"-P1 =@W
end
-
This message was sent to the java-interest mailing list
Info: send 'help' to java-interest-request@java.sun.com