commit-gnue
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

gnue/docs GDAQuickHackersGuide.pdf GDAQuickHack...


From: Derek Neighbors
Subject: gnue/docs GDAQuickHackersGuide.pdf GDAQuickHack...
Date: Sun, 01 Oct 2000 00:43:04 -0700

CVSROOT:        /home/cvs
Module name:    gnue
Changes by:     Derek Neighbors <address@hidden>        00/10/01 00:43:03

Modified files:
        docs           : GDAQuickHackersGuide.pdf 
                         GDAQuickHackersGuide.ps 
                         GDAQuickHackersGuide.rtf GNUeObjectServer.pdf 
                         GNUeObjectServer.ps GNUeObjectServer.rtf 

Log message:
        Do we really need the hard copies in CVS or only the source???  I dont 
know but until we have a decision i will continue to put hard copies here.

CVSWeb URLs:
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/docs/GDAQuickHackersGuide.pdf.diff?r1=1.1&r2=1.2
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/docs/GDAQuickHackersGuide.ps.diff?r1=1.1&r2=1.2
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/docs/GDAQuickHackersGuide.rtf.diff?r1=1.1&r2=1.2
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/docs/GNUeObjectServer.pdf.diff?r1=1.1&r2=1.2
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/docs/GNUeObjectServer.ps.diff?r1=1.1&r2=1.2
http://subversions.gnu.org/cgi-bin/cvsweb/gnue/docs/GNUeObjectServer.rtf.diff?r1=1.1&r2=1.2

Patches:
Index: gnue/docs/GDAQuickHackersGuide.pdf
Index: gnue/docs/GDAQuickHackersGuide.ps
diff -u gnue/docs/GDAQuickHackersGuide.ps:1.1 
gnue/docs/GDAQuickHackersGuide.ps:1.2
--- gnue/docs/GDAQuickHackersGuide.ps:1.1       Sat Aug 19 15:49:37 2000
+++ gnue/docs/GDAQuickHackersGuide.ps   Sun Oct  1 00:43:03 2000
@@ -10,7 +10,7 @@
 %DVIPSWebPage: (www.radicaleye.com)
 %DVIPSCommandLine: dvips main.dvi -o main.ps
 %DVIPSParameters: dpi=600, compressed
-%DVIPSSource:  TeX output 2000.08.15:2236
+%DVIPSSource:  TeX output 2000.10.01:0034
 %%BeginProcSet: texc.pro
 %!
 /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
@@ -324,9 +324,9 @@
 42 2[37 42 37 42 42 11[60 1[42 2[51 1[55 1[46 4[60 51
 1[60 55 51 51 7[42 42 42 42 42 42 42 42 42 42 1[21 46[{
 TeXBase1Encoding ReEncodeFont}41 83.022 /Times-Italic
-rf /Fc 134[42 42 1[42 46 28 32 37 1[46 42 46 69 23 1[28
-23 2[28 37 46 37 46 42 13[46 3[65 2[55 2[32 1[65 2[60
-60 1[60 7[42 1[42 42 42 42 42 42 42 42 1[21 46[{
+rf /Fc 134[42 42 1[42 46 28 32 37 1[46 42 46 1[23 1[28
+23 2[28 37 46 37 46 42 13[46 2[51 65 2[55 2[32 1[65 2[60
+60 1[60 8[42 42 42 42 42 42 42 42 42 1[21 46[{
 TeXBase1Encoding ReEncodeFont}38 83.022 /Times-Bold rf
 /Fd 134[96 96 1[96 105 57 96 67 1[105 105 105 153 48
 1[48 48 105 1[57 96 105 96 105 96 11[124 105 115 2[115
@@ -337,22 +337,21 @@
 10[48 48 41 37 2[37 1[48 1[41 2[22 1[48 37 1[48 44 44
 48 5[18 8[33 33 33 18 17 22 17 2[22 22 5[27 34[{
 TeXBase1Encoding ReEncodeFont}48 66.4176 /Times-Roman
-rf /Ff 3[42 82[63 18[42 27[37 42 42 60 42 42 23 32 28
-42 42 42 42 65 23 42 23 23 42 42 28 37 42 37 42 37 1[42
-5[60 1[78 1[60 51 46 55 1[46 60 60 74 51 2[28 60 60 46
-51 60 55 55 60 76 37 2[47 1[23 42 42 42 42 42 42 1[42
-42 42 23 21 28 21 47 42 28 28 28 4[34 28 30[46 2[{
-TeXBase1Encoding ReEncodeFont}75 83.022 /Times-Roman
-rf /Fg 138[51 28 46 32 1[51 1[51 2[46 1[23 3[46 51 46
-1[46 11[60 3[65 2[60 5[60 65 1[55 60 2[60 6[28 58[{
-TeXBase1Encoding ReEncodeFont}21 83.022 /Helvetica-Bold
-rf /Fh 134[55 2[55 1[33 55 39 1[61 61 61 89 28 2[28 3[55
-61 1[61 55 11[72 61 5[72 6[78 1[66 72 72 8[33 58[{
-TeXBase1Encoding ReEncodeFont}23 99.6264 /Helvetica-Bold
-rf /Fi 3[88 130[80 2[80 88 48 80 56 1[88 88 88 128 40
-80 40 40 88 88 1[80 88 80 88 80 1[80 7[135 3[96 104 2[112
-104 120 3[40 104 112 2[104 104 1[104 22[56 42[{
-TeXBase1Encoding ReEncodeFont}36 143.462 /Helvetica-Bold
+rf /Ff 3[42 82[63 46[37 42 42 60 42 42 23 32 28 42 42
+42 42 65 23 42 23 23 42 42 28 37 42 37 42 37 1[42 5[60
+1[78 1[60 51 46 55 1[46 60 60 74 51 60 1[28 60 60 46
+51 60 55 55 60 76 37 3[23 23 42 42 42 2[42 42 42 42 42
+23 21 28 21 47 42 28 28 28 4[34 31[46 2[{TeXBase1Encoding ReEncodeFont}
+73 83.022 /Times-Roman rf /Fg 138[51 28 46 32 1[51 1[51
+2[46 1[23 3[46 51 46 1[46 11[60 3[65 2[60 5[60 65 1[55
+60 2[60 6[28 58[{TeXBase1Encoding ReEncodeFont}21 83.022
+/Helvetica-Bold rf /Fh 134[55 2[55 1[33 55 39 1[61 61
+61 89 28 2[28 3[55 61 1[61 55 11[72 61 5[72 6[78 1[66
+72 72 8[33 58[{TeXBase1Encoding ReEncodeFont}23 99.6264
+/Helvetica-Bold rf /Fi 3[88 130[80 2[80 88 48 80 56 1[88
+88 88 128 40 80 40 40 88 88 1[80 88 80 88 80 1[80 7[135
+3[96 104 2[112 104 120 3[40 104 112 2[104 104 1[104 22[56
+42[{TeXBase1Encoding ReEncodeFont}36 143.462 /Helvetica-Bold
 rf /Fj 138[126 69 115 80 1[126 1[126 2[115 1[57 3[115
 126 115 1[115 11[149 3[161 2[149 5[149 161 1[138 149
 2[149 6[69 58[{TeXBase1Encoding ReEncodeFont}21 206.584
@@ -375,7 +374,7 @@
 2 1 bop Black Black 197 380 a Fg(GNU)23 b(Enterprise)g(:)g(GD)m(A)f
 (Quic)n(k)h(Hac)n(ker)o(s)i(Guide)197 471 y Ff(by)20
 b(Reinhard)f(M\374ller)197 654 y(by)197 836 y(Edited)h(by)f(Derek)h
-(Neighbors)197 1110 y(Published)f(T)l(ue)h(Aug)g(15)g(21:14:40)e(MST)i
+(Neighbors)197 1110 y(Published)f(Sam)i(Sep)f(30)g(01:13:00)e(CEST)i
 (2000)197 1202 y(Cop)o(yright)f(\251)i(2000)d(by)i(Free)g(Softw)o(are)g
 (F)o(oundation)197 1376 y Fe(Cop)o(yright)f(\(c\))f(2000)f(Free)h
 (Softw)o(are)g(F)o(oundation)197 1467 y(Permission)g(is)f(granted)i(to)
@@ -607,17 +606,21 @@
 Black Black(.)p Black Black -1 w(.)p Black Black(.)p
 Black Black(.)p Black Black(.)p Black Black -1 w(.)p
 Black Black(.)p Black Black(.)p Black Black(.)p Black
--1 w(6)596 1227 y(4.)g(GD)m(A)g(Ser)o(v)o(er)g(Library)p
-Black 5 w(.)p Black Black -1 w(.)p Black Black(.)p Black
+-1 w(6)596 1227 y(4.)g(GD)m(A)g(Client)g(Library)p Black
+1 w(.)p Black Black(.)p Black Black -1 w(.)p Black Black(.)p
+Black Black(.)p Black Black(.)p Black Black -1 w(.)p
+Black Black(.)p Black Black(.)p Black Black(.)p Black
+Black -1 w(.)p Black Black(.)p Black Black(.)p Black
+Black(.)p Black Black -1 w(.)p Black Black(.)p Black
 Black(.)p Black Black(.)p Black Black -1 w(.)p Black
 Black(.)p Black Black(.)p Black Black(.)p Black Black
 -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
 Black Black -1 w(.)p Black Black(.)p Black Black(.)p
 Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
 Black Black(.)p Black Black(.)p Black Black(.)p Black
 Black -1 w(.)p Black Black(.)p Black Black(.)p Black
 Black(.)p Black Black -1 w(.)p Black Black(.)p Black
+Black(.)p Black Black(.)p Black Black -1 w(.)p Black
 Black(.)p Black Black(.)p Black Black(.)p Black Black
 -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
 Black Black -1 w(.)p Black Black(.)p Black Black(.)p
@@ -629,30 +632,28 @@
 Black(.)p Black Black(.)p Black Black -1 w(.)p Black
 Black(.)p Black Black(.)p Black Black(.)p Black Black
 -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
 Black Black(.)p Black Black -1 w(.)p Black Black(.)p
 Black Black(.)p Black Black(.)p Black Black -1 w(.)p
 Black Black(.)p Black Black(.)p Black Black(.)p Black
+Black -1 w(.)p Black Black(.)p Black Black(.)p Black
 Black(.)p Black Black -1 w(.)p Black Black(.)p Black
 Black(.)p Black Black(.)p Black Black -1 w(.)p Black
 Black(.)p Black Black(.)p Black Black(.)p Black Black
 -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
 Black Black -1 w(.)p Black Black(.)p Black Black(.)p
+Black Black(.)p Black -1 w(7)795 1339 y Ff(gda_*)e(Objects)p
+Black 4 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
+Black Black -1 w(.)p Black Black(.)p Black Black(.)p
 Black Black(.)p Black Black -1 w(.)p Black Black(.)p
 Black Black(.)p Black Black(.)p Black Black -1 w(.)p
 Black Black(.)p Black Black(.)p Black Black(.)p Black
 Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black -1 w(7)795 1339 y Ff(GD)m(A_Serv)o(er)e(Helper)i
-(Objects)p Black 4 w(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
 Black(.)p Black Black -1 w(.)p Black Black(.)p Black
+Black(.)p Black Black(.)p Black Black -1 w(.)p Black
 Black(.)p Black Black(.)p Black Black(.)p Black Black
 -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
 Black Black -1 w(.)p Black Black(.)p Black Black(.)p
 Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
 Black Black(.)p Black Black(.)p Black Black(.)p Black
 Black -1 w(.)p Black Black(.)p Black Black(.)p Black
 Black(.)p Black Black -1 w(.)p Black Black(.)p Black
@@ -663,25 +664,22 @@
 Black Black(.)p Black Black -1 w(.)p Black Black(.)p
 Black Black(.)p Black Black(.)p Black Black -1 w(.)p
 Black Black(.)p Black Black(.)p Black Black(.)p Black
+Black -1 w(.)p Black Black(.)p Black Black(.)p Black
 Black(.)p Black Black -1 w(.)p Black Black(.)p Black
 Black(.)p Black Black(.)p Black Black -1 w(.)p Black
 Black(.)p Black Black(.)p Black Black(.)p Black Black
 -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
 Black Black(.)p Black Black -1 w(.)p Black Black(.)p
 Black Black(.)p Black Black(.)p Black Black -1 w(.)p
 Black Black(.)p Black Black(.)p Black Black(.)p Black
 Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black -1 w(7)795 1430 y(GD)m(A_Serv)o(er)e(Objects)p
-Black 2 w(.)p Black Black -1 w(.)p Black Black(.)p Black
+Black(.)p Black Black -1 w(.)p Black Black(.)p Black
 Black(.)p Black Black(.)p Black Black -1 w(.)p Black
 Black(.)p Black Black(.)p Black Black(.)p Black Black
 -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
 Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
+Black Black(.)p Black -1 w(7)795 1430 y(GD)m(A)i(Stub)g(Objects)p
+Black 3 w(.)p Black Black -1 w(.)p Black Black(.)p Black
 Black(.)p Black Black(.)p Black Black -1 w(.)p Black
 Black(.)p Black Black(.)p Black Black(.)p Black Black
 -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
@@ -691,11 +689,11 @@
 Black Black(.)p Black Black(.)p Black Black(.)p Black
 Black -1 w(.)p Black Black(.)p Black Black(.)p Black
 Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
 Black(.)p Black Black(.)p Black Black(.)p Black Black
 -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
 Black Black -1 w(.)p Black Black(.)p Black Black(.)p
 Black Black(.)p Black Black -1 w(.)p Black Black(.)p
+Black Black(.)p Black Black(.)p Black Black -1 w(.)p
 Black Black(.)p Black Black(.)p Black Black(.)p Black
 Black -1 w(.)p Black Black(.)p Black Black(.)p Black
 Black(.)p Black Black -1 w(.)p Black Black(.)p Black
@@ -706,20 +704,26 @@
 Black Black(.)p Black Black -1 w(.)p Black Black(.)p
 Black Black(.)p Black Black(.)p Black Black -1 w(.)p
 Black Black(.)p Black Black(.)p Black Black(.)p Black
--1 w(7)795 1521 y(GD)m(A_Serv)o(er_Impl)e(Objects)p Black
-11 w(.)p Black Black(.)p Black Black(.)p Black Black
+Black(.)p Black Black -1 w(.)p Black Black(.)p Black
+Black(.)p Black Black(.)p Black Black -1 w(.)p Black
+Black(.)p Black Black(.)p Black Black(.)p Black Black
 -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
 Black Black -1 w(.)p Black Black(.)p Black Black(.)p
 Black Black(.)p Black Black -1 w(.)p Black Black(.)p
 Black Black(.)p Black Black(.)p Black Black -1 w(.)p
 Black Black(.)p Black Black(.)p Black Black(.)p Black
+Black -1 w(.)p Black Black(.)p Black Black(.)p Black
+Black(.)p Black -1 w(7)596 1541 y Fc(5.)g(GD)m(A)g(Ser)o(v)o(er)g
+(Library)p Black 5 w(.)p Black Black -1 w(.)p Black Black(.)p
+Black Black(.)p Black Black(.)p Black Black -1 w(.)p
+Black Black(.)p Black Black(.)p Black Black(.)p Black
+Black -1 w(.)p Black Black(.)p Black Black(.)p Black
 Black(.)p Black Black -1 w(.)p Black Black(.)p Black
 Black(.)p Black Black(.)p Black Black -1 w(.)p Black
 Black(.)p Black Black(.)p Black Black(.)p Black Black
 -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
 Black Black -1 w(.)p Black Black(.)p Black Black(.)p
 Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
 Black Black(.)p Black Black(.)p Black Black(.)p Black
 Black -1 w(.)p Black Black(.)p Black Black(.)p Black
 Black(.)p Black Black -1 w(.)p Black Black(.)p Black
@@ -727,6 +731,7 @@
 Black(.)p Black Black(.)p Black Black(.)p Black Black
 -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
 Black Black -1 w(.)p Black Black(.)p Black Black(.)p
+Black Black(.)p Black Black -1 w(.)p Black Black(.)p
 Black Black(.)p Black Black(.)p Black Black -1 w(.)p
 Black Black(.)p Black Black(.)p Black Black(.)p Black
 Black -1 w(.)p Black Black(.)p Black Black(.)p Black
@@ -734,10 +739,7 @@
 Black(.)p Black Black(.)p Black Black -1 w(.)p Black
 Black(.)p Black Black(.)p Black Black(.)p Black Black
 -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
 Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black -1 w(7)795 1612
-y(GD)m(A_Serv)o(er_Impl)p Black 11 w(.)p Black Black(.)p
 Black Black(.)p Black Black(.)p Black Black -1 w(.)p
 Black Black(.)p Black Black(.)p Black Black(.)p Black
 Black -1 w(.)p Black Black(.)p Black Black(.)p Black
@@ -746,9 +748,8 @@
 Black(.)p Black Black(.)p Black Black(.)p Black Black
 -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
 Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
+Black Black(.)p Black -1 w(8)795 1652 y Ff(impl_GD)m(A)f(Objects)p
+Black 3 w(.)p Black Black -1 w(.)p Black Black(.)p Black
 Black(.)p Black Black -1 w(.)p Black Black(.)p Black
 Black(.)p Black Black(.)p Black Black -1 w(.)p Black
 Black(.)p Black Black(.)p Black Black(.)p Black Black
@@ -758,10 +759,10 @@
 Black Black(.)p Black Black(.)p Black Black -1 w(.)p
 Black Black(.)p Black Black(.)p Black Black(.)p Black
 Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
 Black(.)p Black Black(.)p Black Black -1 w(.)p Black
 Black(.)p Black Black(.)p Black Black(.)p Black Black
 -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
+Black Black -1 w(.)p Black Black(.)p Black Black(.)p
 Black Black(.)p Black Black -1 w(.)p Black Black(.)p
 Black Black(.)p Black Black(.)p Black Black -1 w(.)p
 Black Black(.)p Black Black(.)p Black Black(.)p Black
@@ -771,27 +772,33 @@
 Black(.)p Black Black(.)p Black Black(.)p Black Black
 -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
 Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black -1 w(8)596 1724 y Fc(5.)k(GD)m(A)g(Ser)o(v)o(er)g
-(Implementations)p Black 19 w(.)p Black Black -1 w(.)p
+Black Black(.)p Black Black -1 w(.)p Black Black(.)p
 Black Black(.)p Black Black(.)p Black Black(.)p Black
 Black -1 w(.)p Black Black(.)p Black Black(.)p Black
 Black(.)p Black Black -1 w(.)p Black Black(.)p Black
 Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p
+Black(.)p Black Black(.)p Black Black(.)p Black Black
+-1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
 Black Black -1 w(.)p Black Black(.)p Black Black(.)p
 Black Black(.)p Black Black -1 w(.)p Black Black(.)p
 Black Black(.)p Black Black(.)p Black Black -1 w(.)p
 Black Black(.)p Black Black(.)p Black Black(.)p Black
+-1 w(8)795 1744 y(gda_serv)o(er)e(Objects)p Black 10
+w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
+Black Black -1 w(.)p Black Black(.)p Black Black(.)p
+Black Black(.)p Black Black -1 w(.)p Black Black(.)p
+Black Black(.)p Black Black(.)p Black Black -1 w(.)p
+Black Black(.)p Black Black(.)p Black Black(.)p Black
 Black -1 w(.)p Black Black(.)p Black Black(.)p Black
 Black(.)p Black Black -1 w(.)p Black Black(.)p Black
 Black(.)p Black Black(.)p Black Black -1 w(.)p Black
 Black(.)p Black Black(.)p Black Black(.)p Black Black
 -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black Black(.)p
 Black Black(.)p Black Black -1 w(.)p Black Black(.)p
 Black Black(.)p Black Black(.)p Black Black -1 w(.)p
 Black Black(.)p Black Black(.)p Black Black(.)p Black
 Black -1 w(.)p Black Black(.)p Black Black(.)p Black
+Black(.)p Black Black -1 w(.)p Black Black(.)p Black
 Black(.)p Black Black(.)p Black Black -1 w(.)p Black
 Black(.)p Black Black(.)p Black Black(.)p Black Black
 -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
@@ -801,8 +808,7 @@
 Black Black(.)p Black Black(.)p Black Black(.)p Black
 Black -1 w(.)p Black Black(.)p Black Black(.)p Black
 Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black -1 w(9)596 1835 y(6.)g(GD)m(A)g(Client)
-g(Library)p Black 1 w(.)p Black Black(.)p Black Black
+Black(.)p Black Black(.)p Black Black(.)p Black Black
 -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
 Black Black -1 w(.)p Black Black(.)p Black Black(.)p
 Black Black(.)p Black Black -1 w(.)p Black Black(.)p
@@ -811,13 +817,14 @@
 Black -1 w(.)p Black Black(.)p Black Black(.)p Black
 Black(.)p Black Black -1 w(.)p Black Black(.)p Black
 Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
+Black(.)p Black Black(.)p Black Black(.)p Black -1 w(8)795
+1835 y(gda_serv)o(er)g(Helper)j(Objects)p Black 13 w(.)p
+Black Black -1 w(.)p Black Black(.)p Black Black(.)p
+Black Black -1 w(.)p Black Black(.)p Black Black(.)p
 Black Black(.)p Black Black -1 w(.)p Black Black(.)p
 Black Black(.)p Black Black(.)p Black Black -1 w(.)p
 Black Black(.)p Black Black(.)p Black Black(.)p Black
 Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
 Black(.)p Black Black(.)p Black Black -1 w(.)p Black
 Black(.)p Black Black(.)p Black Black(.)p Black Black
 -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
@@ -827,28 +834,23 @@
 Black Black(.)p Black Black(.)p Black Black(.)p Black
 Black -1 w(.)p Black Black(.)p Black Black(.)p Black
 Black(.)p Black Black -1 w(.)p Black Black(.)p Black
+Black(.)p Black Black(.)p Black Black -1 w(.)p Black
 Black(.)p Black Black(.)p Black Black(.)p Black Black
 -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
 Black Black -1 w(.)p Black Black(.)p Black Black(.)p
 Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black Black(.)p Black Black(.)p Black Black -1 w(.)p
 Black Black(.)p Black Black(.)p Black Black(.)p Black
 Black -1 w(.)p Black Black(.)p Black Black(.)p Black
 Black(.)p Black Black -1 w(.)p Black Black(.)p Black
 Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black(10)795 1946 y Ff(GD)m(A_*)f(Objects)p
-Black 10 w(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
 Black(.)p Black Black(.)p Black Black(.)p Black Black
 -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
 Black Black -1 w(.)p Black Black(.)p Black Black(.)p
 Black Black(.)p Black Black -1 w(.)p Black Black(.)p
 Black Black(.)p Black Black(.)p Black Black -1 w(.)p
 Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p
+-1 w(8)795 1926 y(gda_serv)o(er_impl)p Black 8 w(.)p
+Black Black -5 w(.)p Black Black(.)p Black Black(.)p
 Black Black -1 w(.)p Black Black(.)p Black Black(.)p
 Black Black(.)p Black Black -1 w(.)p Black Black(.)p
 Black Black(.)p Black Black(.)p Black Black -1 w(.)p
@@ -859,10 +861,10 @@
 Black(.)p Black Black(.)p Black Black(.)p Black Black
 -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
 Black Black -1 w(.)p Black Black(.)p Black Black(.)p
-Black Black(.)p Black Black -1 w(.)p Black Black(.)p
 Black Black(.)p Black Black(.)p Black Black -1 w(.)p
 Black Black(.)p Black Black(.)p Black Black(.)p Black
 Black -1 w(.)p Black Black(.)p Black Black(.)p Black
+Black(.)p Black Black -1 w(.)p Black Black(.)p Black
 Black(.)p Black Black(.)p Black Black -1 w(.)p Black
 Black(.)p Black Black(.)p Black Black(.)p Black Black
 -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
@@ -871,8 +873,9 @@
 Black Black(.)p Black Black(.)p Black Black -1 w(.)p
 Black Black(.)p Black Black(.)p Black Black(.)p Black
 Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black(10)795
-2038 y(GD)m(A)h(Sub)g(Objects)p Black 5 w(.)p Black Black(.)p
+Black(.)p Black Black -1 w(.)p Black Black(.)p Black
+Black(.)p Black Black(.)p Black Black -1 w(.)p Black
+Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p
 Black Black -1 w(.)p Black Black(.)p Black Black(.)p
 Black Black(.)p Black Black -1 w(.)p Black Black(.)p
 Black Black(.)p Black Black(.)p Black Black -1 w(.)p
@@ -882,12 +885,20 @@
 Black(.)p Black Black(.)p Black Black -1 w(.)p Black
 Black(.)p Black Black(.)p Black Black(.)p Black Black
 -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
+Black -1 w(9)596 2038 y Fc(6.)g(GD)m(A)g(Pr)o(o)o(viders)p
+Black 10 w(.)p Black Black -1 w(.)p Black Black -1 w(.)p
+Black Black(.)p Black Black(.)p Black Black(.)p Black
+Black -1 w(.)p Black Black(.)p Black Black(.)p Black
+Black(.)p Black Black -1 w(.)p Black Black(.)p Black
+Black(.)p Black Black(.)p Black Black -1 w(.)p Black
+Black(.)p Black Black(.)p Black Black(.)p Black Black
+-1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
 Black Black -1 w(.)p Black Black(.)p Black Black(.)p
+Black Black(.)p Black Black -1 w(.)p Black Black(.)p
 Black Black(.)p Black Black(.)p Black Black -1 w(.)p
 Black Black(.)p Black Black(.)p Black Black(.)p Black
 Black -1 w(.)p Black Black(.)p Black Black(.)p Black
 Black(.)p Black Black -1 w(.)p Black Black(.)p Black
-Black(.)p Black Black(.)p Black Black -1 w(.)p Black
 Black(.)p Black Black(.)p Black Black(.)p Black Black
 -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
 Black Black -1 w(.)p Black Black(.)p Black Black(.)p
@@ -897,16 +908,21 @@
 Black -1 w(.)p Black Black(.)p Black Black(.)p Black
 Black(.)p Black Black -1 w(.)p Black Black(.)p Black
 Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black Black(.)p Black Black(.)p Black Black(.)p
+Black(.)p Black Black(.)p Black Black(.)p Black Black
+-1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
 Black Black -1 w(.)p Black Black(.)p Black Black(.)p
 Black Black(.)p Black Black -1 w(.)p Black Black(.)p
 Black Black(.)p Black Black(.)p Black Black -1 w(.)p
 Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black Black(.)p Black
 Black(.)p Black Black -1 w(.)p Black Black(.)p Black
 Black(.)p Black Black(.)p Black Black -1 w(.)p Black
 Black(.)p Black Black(.)p Black Black(.)p Black Black
--1 w(.)p Black Black(.)p Black(10)596 2149 y Fc(I.)g(A)n(ppendixes)p
+-1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
+Black Black -1 w(.)p Black Black(.)p Black Black(.)p
+Black Black(.)p Black Black -1 w(.)p Black Black(.)p
+Black Black(.)p Black Black(.)p Black Black -1 w(.)p
+Black Black(.)p Black Black(.)p Black Black(.)p Black
+Black -1 w(.)p Black Black(.)p Black(10)596 2149 y(I.)g(A)n(ppendixes)p
 Black 7 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
 Black Black(.)p Black Black -1 w(.)p Black Black(.)p
 Black Black(.)p Black Black(.)p Black Black -1 w(.)p
@@ -1001,67 +1017,75 @@
 3642 5876 a Fb(3)p Black eop
 %%Page: 4 4
 4 3 bop Black Black 197 422 a Fd(Chapter)48 b(1.)g(Intr)m(oduction)197
-828 y Fi(Wh)m(y)40 b(It)f(Came)g(About)596 991 y Ff(Some)23
-b(days)h(ago,)f(I)h(ha)n(v)o(e)g(spent)g(se)n(v)o(eral)f(hours)g
-(digging)g(through)e(the)j(code)g(of)g(GD)m(A)g(before)e(I)i(could)596
-1082 y(understand)18 b(the)j(structure)e(of)i(GD)m(A)g(deeper)e(than)h
-(that)h(it)g(consists)h(of)e(a)h(serv)o(er)f(part)g(and)g(a)h(client)g
-(part.)596 1173 y(W)m(ith)g(this)g(e)o(xperience)d(in)j(mind,)f(it)i(w)
-o(as)f(no)f(surprise)h(for)f(me)g(to)h(hear)f(from)g(others,)g(that)h
-(the)o(y)f(\002nd)g(the)596 1265 y(code)f(hard)g(to)i(understand.)596
-1397 y(In)h(my)h(personal)f(opinion,)g(the)h(code)f(is)j(v)o(ery)d
-(clear)m(,)g(when)h(you)f(only)h(ha)n(v)o(e)f(recognized)f(the)i
-(structure)596 1489 y(ho)n(w)c(the)h(dif)n(ferent)f(functions,)f
-(objects)i(and)g(libraries)g(w)o(ork)f(together)-5 b(.)596
-1622 y(As)25 b(I)g(think,)f(that)h(GD)m(A)g(is)h(a)f(good)e(set)j(of)e
-(libraries,)h(that)g(more)f(people)f(should)h(w)o(ork)g(on)h(it)g(and)f
-(that)596 1713 y(e)n(v)o(en)19 b(more)g(people)g(should)g(use)i(it,)f
-(I)h(decided)e(to)h(write)g(this)h("quick)e(hack)o(er')-5
+828 y Fi(Wh)m(y)40 b(It)f(Came)g(About)596 991 y Ff(When)30
+b(I)g(had)g(my)g(\002rst)h(look)e(at)i(gda,)e(I)i(spent)f(se)n(v)o
+(eral)g(hours)f(digging)f(through)h(the)h(code)f(of)h(GD)m(A)596
+1082 y(before)24 b(I)j(could)e(understand)f(the)i(structure)f(of)h(GD)m
+(A)g(deeper)f(than)h(that)g(it)h(consists)g(of)f(a)h(serv)o(er)e(part)
+596 1173 y(and)20 b(a)i(client)f(part.)f(W)m(ith)h(this)h(e)o
+(xperience)d(in)i(mind,)f(it)i(w)o(as)g(no)f(surprise)f(for)g(me)i(to)f
+(hear)f(from)g(others,)596 1265 y(that)g(the)o(y)f(\002nd)h(the)g(code)
+g(hard)f(to)i(understand.)596 1397 y(In)h(my)h(personal)f(opinion,)g
+(the)h(code)f(is)j(v)o(ery)d(clear)m(,)g(when)h(you)f(only)h(ha)n(v)o
+(e)f(recognized)f(the)i(structure)596 1489 y(ho)n(w)c(the)h(dif)n
+(ferent)f(functions,)f(objects)i(and)g(libraries)g(w)o(ork)f(together)
+-5 b(.)596 1622 y(As)25 b(I)g(think,)f(that)h(GD)m(A)g(is)h(a)f(good)e
+(set)j(of)e(libraries,)h(that)g(more)f(people)f(should)h(w)o(ork)g(on)h
+(it)g(and)f(that)596 1713 y(e)n(v)o(en)19 b(more)g(people)g(should)g
+(use)i(it,)f(I)h(decided)e(to)h(write)g(this)h("quick)e(hack)o(er')-5
 b(s)20 b(guide".)197 2103 y Fi(Intended)38 b(A)l(udience)596
-2266 y Ff(This)29 b(document)e(adresses)i(people)f(that)h(w)o(ant)h(to)
-f(understand)e(ho)n(w)h(the)h(code)g(of)g(gda)f(w)o(orks.)h(After)596
-2357 y(reading)23 b(this)j(document,)d(you)i(will)h(not)f(understand)e
+2266 y Ff(This)25 b(document)e(adresses)i(people)f(that)h(w)o(ant)g(to)
+h(understand)c(ho)n(w)j(the)g(code)f(of)h(GD)m(A)g(w)o(orks.)g(After)
+596 2357 y(reading)e(this)j(document,)d(you)i(will)h(not)f(understand)e
 (it,)j(b)n(ut)g(there)f(will)h(be)f(chances)g(that)g(you)g(\002nd)g(it)
 596 2448 y(much)19 b(easier)h(to)g(hack)g(through)e(the)i(code)g(than)f
-(before.)596 2581 y(Y)-9 b(ou)18 b(should)g(read)h(this)g(document)f
-(after)g(ha)n(ving)g(understood)f(the)i(basic)g(concepts)g(and)f(goals)
-h(of)g(gda)g(\(I)596 2673 y(intend)14 b(you)g(just)i(read)f(the)h
+(before.)596 2581 y(Y)-9 b(ou)14 b(should)h(read)f(this)i(document)e
+(after)h(ha)n(ving)f(understood)f(the)i(basic)h(concepts)e(and)h(goals)
+g(of)g(GD)m(A)h(\(I)596 2673 y(intend)e(you)g(just)i(read)f(the)h
 (introduction)c(on)j(http://www)-5 b(.gnome.or)o(g/gno)o(me-d)o(b\))9
-b(and)15 b(ha)n(ving)f(realized)596 2764 y(that)20 b(gda)f(is)j(the)e
-(non-visual)e(part)i(of)g(gnome-db)d(which)j(can)g(be)g(used)g(by)g(an)
-o(y)f(application.)596 2897 y(A)h(point)f(specially)g(re)o(garded)e(in)
-j(this)g(document)e(is)i(dependenc)o(y)d(on)i(gtk/gnome,)e(as)k(that)f
-(dependenc)o(y)596 2988 y(can)g(lead)g(to)g(problems)f(when)g(using)h
-(gda)g(with)g(non-gnome)d(applications.)596 3121 y(This)j(document)e
-(is)j(\(read:)f(should)f(be\))h(consistent)f(with)i(gnome-db)m(.0.0.96)
-o(.)197 3511 y Fi(Sug)o(g)q(estions)596 3674 y Ff(If)26
-b(you)g(think)g(this)h(document)e(is)i(good,)e(please)i(feel)f(free)h
-(to)f(read)h(it)g(as)g(often)f(as)i(you)d(lik)o(e)i(and)f(gi)n(v)o(e)
-596 3765 y(copies)19 b(of)h(it)h(to)g(as)f(man)o(y)f(people)h(you)f
-(lik)o(e.)596 3898 y(Editors)e(Note:)i(Y)-9 b(ou)18 b(ha)n(v)o(e)g(to)g
-(lo)o(v)o(e)g(Reinhards)g(attitude)g(to)n(w)o(ards)g(free)g(softw)o
-(are.)f(:\))i(It)g(e)n(v)o(en)e(carries)i(into)596 3989
-y(his)h(documentation!)596 4122 y(If)k(you)f(think)h(this)h(document)e
-(could)g(be)h(impro)o(v)o(ed,)e(please)i(feel)h(free)f(to)g(let)i(me)e
-(kno)n(w)f(what)i(I)f(could)596 4214 y(impro)o(v)o(e)18
+b(and)15 b(ha)n(ving)f(realized)596 2764 y(that)j(GD)m(A)h(is)h(the)f
+(non-visual)e(part)h(of)h(gnome-db)d(which)i(can)h(be)g(used)f(by)h(an)
+o(y)f(application.)f(\(Actually)-5 b(,)596 2855 y(GD)m(A)19
+b(has)h(been)f(seperated)g(from)g(the)g(rest)h(of)g(gnome-db)d(in)j
+(release)f(0.1.0,)f(b)n(ut)i(is)h(still)g(maintained)d(by)596
+2947 y(the)i(gnome-db)d(project)i(team\))596 3079 y(A)33
+b(point)f(specially)g(re)o(garded)e(in)j(this)g(document)e(is)j
+(dependenc)o(y)29 b(on)k(gtk/gnome,)d(as)j(that)g(depen-)596
+3171 y(denc)o(y)27 b(can)i(lead)g(to)g(problems)e(when)i(using)f(gda)h
+(with)g(non-gnome)d(applications.)h(Ho)n(we)n(v)o(er)m(,)g(there)596
+3262 y(are)22 b(chances)g(that)h(these)g(dependencies)e(will)j(be)e
+(remo)o(v)o(ed)f(before)g(the)i(release)g(of)g(0.1.1.)e(As)i(the)o(y)g
+(are)596 3353 y(a)d(v)o(ery)f(f)o(ast)i(mo)o(ving)e(tar)o(get)g
+(already)-5 b(,)19 b(the)h(information)e(here)i(is)h(maybe)e(not)h(up)g
+(to)h(date;)f(I)g(will)h(remo)o(v)o(e)596 3445 y(all)f(these)h
+(dependenc)o(y)c(discussions)j(in)g(one)g(of)g(the)g(ne)o(xt)f(v)o
+(ersions)g(of)h(the)h(document.)596 3578 y(Please)j(note)f(that)g(this)
+h(document)e(represents)g(my)h(personal)f(vie)n(w)i(of)f(things,)g(and)
+g(contains)f(f)o(acts)i(\(or)596 3669 y(what)d(I)h(think)f(is)i(a)f(f)o
+(act\))g(as)g(well)g(as)h(some)f(subjecti)n(v)o(e)e(opinions.)g(Of)i
+(course)f(I)h(will)h(change)d(the)i(docu-)596 3760 y(ment)g(if)h(a)g(f)
+o(act)f(ceases)h(to)g(be)g(correct)e(or)h(w)o(as)i(incorrect)d(from)h
+(the)g(be)o(ginning,)e(b)n(ut)i(I)h(also)g(will)g(gladly)596
+3852 y(change)18 b(the)j(subjecti)n(v)o(e)e(parts)h(of)g(the)g(te)o(xt)
+g(if)g(somebody)f(manages)g(to)h(change)f(my)h(opinion)e(;-\).)596
+3984 y(This)i(document)e(is)j(\(read:)f(should)f(be\))h(consistent)f
+(with)i(libgda-0.1.0.)197 4374 y Fi(Sug)o(g)q(estions)596
+4537 y Ff(If)26 b(you)g(think)g(this)h(document)e(is)i(good,)e(please)i
+(feel)f(free)h(to)f(read)h(it)g(as)g(often)f(as)i(you)d(lik)o(e)i(and)f
+(gi)n(v)o(e)596 4629 y(copies)19 b(of)h(it)h(to)g(as)f(man)o(y)f
+(people)h(you)f(lik)o(e.)596 4762 y(If)24 b(you)f(think)h(this)h
+(document)e(could)g(be)h(impro)o(v)o(ed,)e(please)i(feel)h(free)f(to)g
+(let)i(me)e(kno)n(w)f(what)i(I)f(could)596 4853 y(impro)o(v)o(e)18
 b(or)i(-)h(e)n(v)o(en)e(better)h(-)h(impro)o(v)o(e)d(it)k(yourself.)c
 (Please)k(let)f(me)f(kno)n(w)g(if)g(you)g(ha)n(v)o(e)g(made)g(changes,)
-596 4305 y(so)g(I)g(can)g(mer)o(ge)f(them.)596 4438 y(If)k(you)g(think)
+596 4944 y(so)g(I)g(can)g(mer)o(ge)f(them.)596 5077 y(If)k(you)g(think)
 g(my)g(english)g(is)i(bad,)e(please)h(feel)f(free)h(to)g(correct)e(my)i
-(mistak)o(es)g(and)f(send)g(me)h(the)g(cor)n(-)596 4529
-y(rections)19 b(for)h(mer)o(ging.)596 4662 y(If)d(you)g(think)f(this)j
-(document)c(should)i(be)g(con)m(v)o(erted)e(to)j(docbook,)d(please)i
-(feel)h(free)f(to)h(do)f(that.)g(I)h(w)o(ould)596 4753
-y(agree)h(with)h(you)f(v)o(ery)f(strongly)h(:\))h(<\226)g(This)g(has)g
-(been)f(done!)f(An)o(yone)g(doing)h(docs)g(please)h(feel)g(free)f(to)
-596 4845 y(write)j(docs)f(and)h(we)g(will)h(con)m(v)o(ert.)d(Of)i
-(course)f(we)h(prefer)f(docbook)e(nati)n(v)o(ely)-5 b(,)20
-b(b)n(ut)i(we)h(will)g(tak)o(e)f(what)596 4936 y(we)e(can)g(get.)596
-5069 y(If)g(you)f(think)g(this)i(document)d(is)j(not)f(useful)g(at)h
-(all,)f(please)g(feel)h(free)e(to)i(ignore)e(it)h(:\))596
-5202 y(Reinhard)f(M\374ller)g(address@hidden)c
-(address@hidden)o(g)p Black 3642 5876 a Fb(4)p Black
-eop
+(mistak)o(es)g(and)f(send)g(me)h(the)g(cor)n(-)596 5168
+y(rections)19 b(for)h(mer)o(ging.)596 5301 y(If)g(you)f(think)g(this)i
+(document)d(is)j(not)f(useful)g(at)h(all,)f(please)g(feel)h(free)e(to)i
+(ignore)e(it)h(:\))596 5434 y(Reinhard)f(M\374ller)g
+(\(address@hidden)o(g\))p Black 3642 5876 a Fb(4)p
+Black eop
 %%Page: 5 5
 5 4 bop Black Black 197 422 a Fd(Chapter)48 b(2.)g(About)h(Objects)596
 654 y Ff(In)20 b(the)h(follo)n(wing,)e(the)i(term)g("objects")f(means)h
@@ -1079,160 +1103,195 @@
 h(of)g(GD)-7 b(A)596 654 y Ff(GD)m(A)20 b(is)h(made)e(up)h(of)g(se)n(v)
 o(eral)g(pieces)g(as)h(laid)f(out)g(belo)n(w)-5 b(.)596
 819 y Fa(Application)596 901 y(|)596 984 y(|\(calls)43
-b(directly\))596 1066 y(|)596 1148 y(gda-*)h(objects)850
-b(\\)596 1230 y(|)89 b(\\)596 1312 y(|\(calls)43 b(directly\))761
-b(>)44 b(libgda-client)88 b(\(directory)43 b(gda-clnt\))596
-1395 y(|)89 b(/)596 1477 y(gda-stubs)43 b(objects)671
+b(directly\))596 1066 y(|)596 1148 y(gda-*)h(objects)626
+b(\\)596 1230 y(|)1210 b(\\)596 1312 y(|\(calls)43 b(directly\))537
+b(>)44 b(libgda-client)88 b(\(directory)43 b(lib/gda-clnt\))596
+1395 y(|)1210 b(/)596 1477 y(gda-stubs)43 b(objects)447
 b(/)596 1559 y(|)596 1641 y(|\(calls)43 b(via)h(ORBIT\))596
-1723 y(|)596 1806 y(gda-server-impl)e(objects)402 b(\\)596
-1888 y(|)89 b(\\)596 1970 y(|\(calls\))1164 b(>)44 b(libgda-server)88
-b(\(directory)43 b(gda-srv\))596 2052 y(|)89 b(/)596
-2134 y(gda-server)43 b(objects)626 b(/)596 2216 y(|)596
-2299 y(|\(calls)43 b(via)h(callback)g(functions\))596
-2381 y(|)596 2463 y(gda-???)f(implementations)580 b(libgda-???)88
-b(\(directories)43 b(gda-*-server\))596 2545 y(|)596
-2627 y(|\(calls)g(directly\))596 2710 y(|)596 2792 y(Database)g
-(Backend)p Black 3641 5876 a Fb(6)p Black eop
+1723 y(|)596 1806 y(gda-server-impl)e(objects)178 b(\\)596
+1888 y(|)224 b(\\)596 1970 y(|\(calls)43 b(directly\))537
+b(>)44 b(libgda-server)88 b(\(directory)43 b(lib/gda-srv\))596
+2052 y(|)224 b(/)596 2134 y(gda-server)43 b(objects)402
+b(/)596 2216 y(|)596 2299 y(|\(calls)43 b(via)h(callback)g(functions\))
+596 2381 y(|)596 2463 y(gda-???)f(implementations)356
+b(provider)89 b(\(directories)42 b(providers/gda-*-)596
+2545 y(server\))596 2627 y(|)596 2710 y(|\(calls)h(directly\))596
+2792 y(|)596 2874 y(Database)g(Backend)596 3048 y Ff(Between)26
+b(the)h(client)g(and)g(the)g(serv)o(er)m(,)e(there)h(is)i(the)f(GD)m(A)
+g(CORB)m(A)i(interf)o(ace,)c(de\002ned)h(by)h(the)g(IDL)596
+3140 y(\002les)h(in)f(the)g(idl)h(directory)-5 b(.)25
+b(Note)i(that)g(these)g(IDL)g(\002les)i(contain)d(a)h(lot)h(of)f
+(methods)f(that)h(are)g(neither)596 3231 y(used)20 b(nor)h
+(implemented,)d(and)j(some)g(of)g(them)f(probably)f(ne)n(v)o(er)h
+(will,)h(at)h(least)g(not)e(e)o(xactly)g(as)i(the)o(y)f(are)596
+3322 y(written)f(do)n(wn)g(no)n(w)-5 b(.)20 b(So)h(please)g(don')o(t)e
+(rely)h(on)h(all)g(the)g(methods)f(being)g(there)g(if)h(you)f(use)h
+(the)g(IDL)g(\002le)596 3414 y(directly;)g(use)h(only)f(the)h(methods)f
+(that)h(are)g(already)e(implemented)g(serv)o(er)n(-sided)h(and)g
+(wrapped)f(in)i(the)596 3505 y(client)e(library)-5 b(.)18
+b(Maybe)h(someday)g(the)i(IDL)f(\002les)h(will)g(be)f(cleaned)f(up.)p
+Black 3641 5876 a Fb(6)p Black eop
 %%Page: 7 7
 7 6 bop Black Black 197 422 a Fd(Chapter)48 b(4.)g(GD)-7
-b(A)48 b(Ser)r(ver)f(Librar)r(y)197 828 y Fi(GD)-6 b(A_Ser)q(ver)38
-b(Helper)g(Objects)596 991 y Ff(The)16 b(follo)n(wing)f(objects)i(are)f
-(absolute)g(lo)n(w-le)n(v)o(el)g(helper)g(objects)g(designed)g(to)h
-(ease)g(the)g(de)n(v)o(elopement)596 1082 y(of)i(gda)h(serv)o(er)f
-(implementations:)596 1247 y Fa(function)43 b(prefix)358
-b(data)44 b(structure)357 b(source)44 b(file)596 1329
-y(gda_server_error)311 b(Gda_ServerError)266 b(gda-server-error.c)596
-1411 y(gda_server_field)311 b(Gda_ServerField)266 b(gda-server-field.c)
-596 1668 y Ff(This)20 b(code)f(is)j(dependent)17 b(from)j(nothing)e(b)n
-(ut)i(glib)g(and)g(some)g(typedefs)f(from)g(gda.h)197
-2058 y Fi(GD)-6 b(A_Ser)q(ver)38 b(Objects)596 2221 y
-Ff(The)19 b(follo)n(wing)g(objects)h(b)n(uild)g(the)g(base)g(of)g(the)g
-(gda)g(pro)o(viders:)596 2386 y Fa(function)43 b(prefix)358
-b(data)44 b(structure)357 b(source)44 b(file)596 2468
-y(gda_server_command)221 b(Gda_ServerCommand)g(gda-server-command.c)596
-2551 y(gda_server_connection)86 b(Gda_ServerConnection)g
-(gda-server-connection.c)596 2633 y(gda_server_recordset)131
-b(Gda_ServerRecordset)g(gda-server-recordset.c)596 2889
+b(A)48 b(Client)g(Librar)r(y)197 828 y Fi(gda_*)39 b(Objects)596
+991 y Ff(The)24 b(follo)n(wing)f(objects)i(are)g(v)o(ery)e(much)h(real)
+h(objects)g(in)g(the)g(sense)g(that)g(the)o(y)f(are)h(currently)e
+(imple-)596 1082 y(mented)j(as)i(real)g(GtkObjects,)f(wich)g(will)i
+(soon)e(be)g(changed)f(into)h(GObject)g(to)h(mak)o(e)f(them)g(all)h
+(Gtk)596 1173 y(independent.)596 1338 y Fa(function)43
+b(prefix)268 b(data)44 b(structure)268 b(source)43 b(file)596
+1421 y(gda_batch)536 b(Gda_Batch)492 b(gda-batch.c)596
+1503 y(gda_command)267 b(Gda_Command)87 b(gda-command.c)596
+1585 y(gda_connection)266 b(Gda_Connection)87 b(gda-connection.c)596
+1667 y(gda_connection_pool)f(Gda_ConnectionPool)h
+(gda-connection-pool.c)596 1749 y(gda_error)267 b(Gda_Error)88
+b(gda-error.c)596 1832 y(gda_field)267 b(Gda_Field)88
+b(gda-field.c)596 1914 y(gda_recordset)266 b(Gda_Recordset)88
+b(gda-recordset.c)596 2170 y Ff(These)25 b(objects)g(are)h(the)f(ones)g
+(directly)g(used)h(by)f(GD)m(A)g(client)h(programs.)d(The)o(y)i(are)g
+(e)o(xtensi)n(v)o(ely)f(de-)596 2262 y(scribed)19 b(in)h(the)h(a)n(v)n
+(ailable)e(documentation.)596 2394 y(Although)c(these)i(objects)f(ha)n
+(v)o(e)h(v)o(ery)f(much)g(b)n(uilt-in)g(functionality)f(the)o(y)h(pro)o
+(vide)f(by)h(themselv)o(es,)g(the)o(y)596 2486 y(can)30
+b(simplistically)h(be)g(re)o(garded)d(as)k(wrappers)d(around)g(the)i
+(CORB)m(A)h(objects)f(de\002ned)f(in)h(gda.idl.)596 2577
+y(Therefore,)18 b(man)o(y)h(of)h(the)h(object)f(functions)f(simply)i
+(call)g(the)f(appropriate)e(underlying)g(CORB)m(A)23
+b(Stub)596 2668 y(function.)197 3058 y Fi(GD)-6 b(A)39
+b(Stub)g(Objects)596 3221 y Ff(The)17 b(code)h(for)f(the)h(stub)g
+(implementation)e(is)j(generated)d(by)i(orbit-idl)e(automagically)-5
+b(.)16 b(An)o(yw)o(ay)-5 b(,)16 b(as)j(it)g(is)596 3313
+y(its)i(o)n(wn)e(layer)m(,)h(and)f(the)h(functions)f(are)h(called)g(by)
+g(the)g(abo)o(v)o(e)f(gda_*)f(objects,)i(the)o(y)g(are)g(listed)g(belo)
+n(w:)596 3478 y Fa(function)43 b(prefix)313 b(data)44
+b(structure)357 b(source)44 b(file)596 3560 y(GDA_Fieldx)536
+b(GDA_Fieldx)g(gda-stubs.c)596 3642 y(GDA_Parameter)401
+b(GDA_Parameter)g(gda-stubs.c)596 3725 y(GDA_Command)491
+b(GDA_Command)g(gda-stubs.c)596 3807 y(GDA_Connection)356
+b(GDA_Connection)222 b(gda-stubs.c)596 3889 y(GDA_Recordset)401
+b(GDA_Recordset)222 b(gda-stubs.c)596 3971 y(GDA_ConnectionFactory)41
+b(GDA_ConnectionFactory)g(gda-stubs.c)596 4228 y Ff(The)22
+b(GD)m(A_Fieldx)f(stub)i(seems)g(to)g(be)f(neither)g(used)h(from)e(the)
+i(gda-client)e(library)h(nor)f(implemented)596 4319 y(by)j(the)i
+(gda-serv)o(er)d(library)-5 b(.)23 b(It')-5 b(s)26 b(either)f(a)h
+(remnant)e(of)h(the)h(past)f(or)g(a)h(start)g(of)f(a)h(feature)e(that)h
+(will)i(be)596 4410 y(created)19 b(in)h(the)h(future.)596
+4543 y(The)h(GD)m(A_P)o(arameter)e(stub)i(is)i(not)e(used)g(by)g(an)o
+(y)g(of)g(the)g(gda_*)f(objects.)h(This)h(is)g(probably)d(reserv)o(ed)
+596 4634 y(for)f(future)g(use.)596 4767 y(The)g(GD)m(A_ConnectionF)o
+(actory)d(is)21 b(used)f(by)g(gda_connection)d(to)j(create)g(a)h(ne)n
+(w)f(connection.)p Black 3639 5876 a Fb(7)p Black eop
+%%Page: 8 8
+8 7 bop Black Black 197 422 a Fd(Chapter)48 b(5.)g(GD)-7
+b(A)48 b(Ser)r(ver)f(Librar)r(y)197 828 y Fi(impl_GD)-6
+b(A)38 b(Objects)596 991 y Ff(No)n(w)19 b(we)g(mo)o(v)o(e)f(on)h(the)g
+(serv)o(er)f(side)h(of)g(the)g(CORB)m(A)i(connection.)c(These)i
+(objects)g(are)g(the)g(implemen-)596 1082 y(tation)g(of)h(the)h(GD)m(A)
+f(CORB)m(A)i(interf)o(ace.)596 1247 y Fa(function)43
+b(prefix)537 b(data)44 b(structure)88 b(source)44 b(file)596
+1329 y(impl_GDA_Parameter)400 b(impl_POA_GDA_*)87 b
+(gda-server-impl-command.c)596 1411 y(impl_GDA_Command)490
+b(impl_POA_GDA_*)87 b(gda-server-impl-command.c)596 1494
+y(impl_GDA_Connection)355 b(impl_POA_GDA_*)87 b
+(gda-server-impl-connection.c)596 1576 y(impl_GDA_Recordset)400
+b(impl_POA_GDA_*)87 b(gda-server-impl-recordset.c)596
+1658 y(impl_GDA_ConnectionFactory)40 b(impl_POA_GDA_*)87
+b(gda-server-impl-factory.c)596 1915 y Ff(These)28 b(objects)g(are)h
+(neither)f(gnome)f(nor)h(gtk)g(dependent.)e(But)j(the)o(y)f(mak)o(e)g
+(up)h(complete)e(CORB)m(A-)596 2006 y(enabled)18 b(objects)i(matching)f
+(gda.idl.)596 2139 y(One)28 b(could)g(re)o(gard)f(these)i(objects)g(as)
+g("wrappers")f(around)f(the)h(gda-serv)o(er)f(objects)h(to)h(mak)o(e)g
+(them)596 2230 y(match)14 b(CORB)m(A)j(speci\002cations;)e(only)f(the)i
+(ConnectionF)o(actory)11 b(object)k(has)h(no)e(underlying)f(gda_serv)o
+(er)n(-)596 2321 y(object.)596 2454 y(There)26 b(is)h(no)g(gda_serv)o
+(er_parameter)22 b(yet)27 b(as)g(none)f(of)g(the)h(methods)f(of)h
+(gda_serv)o(er_parameter)22 b(are)596 2546 y(yet)e(implemented)e(:\))
+596 2678 y(Note)g(that)g(there)f(is)i(a)g(source)e(\002le)i(called)f
+(gda-serv)o(er)n(-impl.c)c(which)k(is,)h(unlik)o(e)e(the)h(abo)o(v)o(e)
+e(source)i(\002les,)596 2770 y(not)h(the)i(implementation)d(of)h(a)i
+(CORB)m(A)h(interf)o(ace.)197 3160 y Fi(gda_ser)q(ver)38
+b(Objects)596 3323 y Ff(The)19 b(follo)n(wing)g(objects)h(b)n(uild)g
+(the)g(base)g(of)g(the)g(gda)g(pro)o(viders:)596 3488
+y Fa(function)43 b(prefix)358 b(data)44 b(structure)357
+b(source)44 b(file)596 3570 y(gda_server_command)221
+b(Gda_ServerCommand)g(gda-server-command.c)596 3652 y
+(gda_server_connection)86 b(Gda_ServerConnection)g
+(gda-server-connection.c)596 3735 y(gda_server_recordset)131
+b(Gda_ServerRecordset)g(gda-server-recordset.c)596 3991
 y Ff(The)21 b(code)g(of)h(these)g(objects)g(is)g(really)g(neither)f
 (gnome)f(nor)h(gtk)h(dependent.)d(CORB)m(A)24 b(dependenc)o(y)19
-b(is)596 2981 y(only)g(because)g(the)o(y)h(use)g(some)g(types)g
-(de\002ned)f(in)i(the)f(idl.)596 3113 y(Unfortunately)-5
+b(is)596 4082 y(only)g(because)g(the)o(y)h(use)g(some)g(types)g
+(de\002ned)f(in)i(the)f(idl.)596 4215 y(Unfortunately)-5
 b(,)16 b(the)j(header)f(\002le)j(gda-serv)o(er)n(-impl.h)15
 b(is)21 b(v)o(ery)d(general)g(\(it')-5 b(s)21 b(used)e(by)g(all)h
-(sources)f(in)g(the)596 3205 y(gda-srv)d(directory\))g(and)i(thus)g
+(sources)f(in)g(the)596 4307 y(gda-srv)d(directory\))g(and)i(thus)g
 (contains)g(much)f(stuf)n(f)h(that)g(w)o(ouldn')o(t)f(be)h(needed)f(by)
-h(these)g(\002les.)h(So)f(you)596 3296 y(can')o(t)h(e)n(v)o(en)g
+h(these)g(\002les.)h(So)f(you)596 4398 y(can')o(t)h(e)n(v)o(en)g
 (compile)g(the)h(abo)o(v)o(e)f(sources)g(without)h(gnome)e(or)i(gtk)g
 (although)e(the)i(code)g(itself)g(w)o(ouldn')o(t)596
-3387 y(need)f(it.)596 3520 y(These)d(objects)h(can)g(v)o(ery)f(much)f
+4489 y(need)f(it.)596 4622 y(These)d(objects)h(can)g(v)o(ery)f(much)f
 (be)i(re)o(garded)e(as)i("abstract")g(objects.)f(Each)h(pro)o(vider)d
-(must)j("o)o(v)o(erload")596 3612 y(certain)i(functions.)f(This)h
+(must)j("o)o(v)o(erload")596 4713 y(certain)i(functions.)f(This)h
 (happens)g(by)g(pro)o(viding)e(a)j(list)g(of)g(functions)e(when)h
-(starting)g(the)h(serv)o(er)e(code,)596 3703 y(from)h(where)g(the)h
+(starting)g(the)h(serv)o(er)e(code,)596 4805 y(from)h(where)g(the)h
 (gda_serv)o(er_*)d(objects)j(tak)o(e)g(the)h(functions)d(to)j(really)e
-(call.)596 3836 y(Each)g(of)h(these)h(objects)f(pro)o(vide)e(a)i
+(call.)596 4937 y(Each)g(of)h(these)h(objects)f(pro)o(vide)e(a)i
 (member)f("user_data")g(that)h(can)g(be)g(used)g(by)g(the)g(speci\002c)
-h(pro)o(vider)596 3927 y(code)e(to)h(store)h(back)o(end)d(speci\002c)i
-(data)h(structures.)197 4317 y Fi(GD)-6 b(A_Ser)q(ver_Impl)36
-b(Objects)596 4480 y Ff(Around)18 b(the)i(gda-serv)o(er)e(objects,)i
-(another)e(layer)i(is)h(b)n(uilt)g(to)f(match)g(the)g(complete)f(idl)h
-(of)g(gda.)596 4645 y Fa(function)43 b(prefix)268 b(data)44
-b(structure)492 b(source)44 b(file)596 4728 y(impl_GDA_Parameter)131
-b(impl_POA_GDA_Parameter)g(gda-server-impl-command.c)596
-4810 y(impl_GDA_Command)221 b(impl_POA_GDA_Command)g
-(gda-server-impl-command.c)596 4892 y(impl_GDA_Connection)86
-b(impl_POA_GDA_Connection)g(gda-server-impl-connection.c)596
-4974 y(impl_GDA_Recordset)131 b(impl_POA_GDA_Recordset)g
-(gda-server-impl-recordset.c)596 5231 y Ff(These)28 b(objects)g(are)h
-(neither)f(gnome)f(nor)h(gtk)g(dependent.)e(But)j(the)o(y)f(mak)o(e)g
-(up)h(complete)e(CORB)m(A-)596 5322 y(enabled)18 b(objects)i(matching)f
-(gda.idl.)p Black 3639 5945 a Fb(7)p Black eop
-%%Page: 8 8
-8 7 bop Black 197 -132 a Fb(Chapter)20 b(4.)g(GD)m(A)g(Server)h(Libr)o
-(ary)p Black 596 380 a Ff(One)28 b(could)g(re)o(gard)f(these)i(objects)
-g(as)g("wrappers")f(around)f(the)h(gda-serv)o(er)f(objects)h(to)h(mak)o
-(e)g(them)596 471 y(match)19 b(CORB)m(A)j(speci\002cations.)596
-604 y(There)k(is)h(no)g(gda_serv)o(er_parameter)22 b(yet)27
-b(as)g(none)f(of)g(the)h(methods)f(of)h(gda_serv)o(er_parameter)22
-b(are)596 695 y(yet)e(implemented)e(:\))197 1085 y Fi(GD)-6
-b(A_Ser)q(ver_Impl)596 1248 y Ff(Unfortunately)17 b(there)j(is)h(an)f
-(o)n(wn)f(object)h(called)g(gda-serv)o(er)n(-impl)d(which)i(has)i
-(nothing)d(to)i(do)g(with)g(the)596 1339 y(gda-serv)o(er)n(-impl-*)c
-(objects.)596 1505 y Fa(function)43 b(prefix)537 b(data)44
-b(structure)761 b(source)44 b(file)596 1587 y(gda_server_impl)176
-b(Gda_ServerImpl)760 b(gda-server-impl.c)596 1669 y
-(impl_GDA_ConnectionFactory)40 b(impl_POA_GDA_ConnectionFactory)596
-1751 y(gda-server-factory.c)596 2008 y Ff(gda_serv)o(er_impl)19
-b(is)24 b(a)g(gtk)f(object)g(that)g(represents)g(an)g(instance)g(of)g
-(a)g(running)f(serv)o(er)-5 b(.)22 b(It)i(is)g(used)f(for)596
-2099 y(tasks)d(lik)o(e)h(re)o(gistering)d(the)j(serv)o(er)e(into)h(the)
-g(system,)g(creating)f(the)i(f)o(actory)e(etc.)596 2232
-y(GD)m(A_ConnectionF)o(actory)26 b(is)31 b(a)f(CORB)m(A)i(object)e
-(that)g(is)i(able)e(to)g(create)g(ne)n(w)g(GD)m(A_Connection)596
-2323 y(CORB)m(A)21 b(objects.)f(It')-5 b(s)21 b(gnome)e(dependent.)596
-2456 y(These)g(tw)o(o)h(objects)g(are)g(really)f(gtk)h(and)f(gnome)f
-(dependent.)g(The)h(dependenc)o(y)e(results)j(from)f(the)g(w)o(ay)596
-2547 y(ho)n(w)k(CORB)m(A)j(serv)o(ers)e(are)h(re)o(gistered)e(into)h
-(the)g(system)h(so)f(that)h(clients)g(ha)n(v)o(e)e(a)i(con)m(v)o
-(enient)d(w)o(ay)i(to)596 2639 y(\002nd)19 b(the)i(serv)o(er)e(the)o(y)
-g(w)o(ant.)596 2772 y(Hopefully)f(these)i(dependencies)e(will)j(be)f
-(remo)o(v)o(ed)e(when)i(O)m(AF)h(is)g(used.)p Black 197
-5876 a Fb(8)p Black eop
+h(pro)o(vider)596 5029 y(code)e(to)h(store)h(back)o(end)d(speci\002c)i
+(data)h(structures.)p Black 3642 5876 a Fb(8)p Black
+eop
 %%Page: 9 9
-9 8 bop Black Black 197 422 a Fd(Chapter)48 b(5.)g(GD)-7
-b(A)48 b(Ser)r(ver)f(Implementations)596 654 y Ff(The)31
-b(actual)g(serv)o(er)g(implementation)f(just)i(implements)f(the)g
-(missing)h(functions)e(mentioned)g(under)596 745 y("gda_serv)o(er)17
-b(object".)596 878 y(These)k(functions)f(are)h(implemented)f(in)i
-(gda-???-command.c,)16 b(gda-???-connection.c)h(and)k(gda-???-)596
-970 y(recordset.c.)33 b(The)h(main-???.c)g(source)g(contains)g(the)h
-(main\(\))f(routine)f(for)i(the)g(serv)o(er)f(e)o(x)o(ecutable,)596
-1061 y(which)28 b(does)g(nothing)f(b)n(ut)i(initialize)g(corba,)e
-(create)i(a)g(gda_serv)o(er_impl)c(object)j(and)g(pass)h(to)g(it)g(the)
-596 1152 y(list)18 b(of)g(function)e(implementations.)g(The)h(main\(\))
-g(function)f(thus)h(is)i(gnome-dependent,)13 b(the)18
-b(rest)g(of)f(the)596 1243 y(code)i(isn')o(t.)596 1376
-y(All)k(of)g(these)g(functions)e(use)i(the)g(\002eld)g(user_data)f
-(from)f(the)i(corresponding)d(gda_serv)o(er_*)f(object)j(to)596
-1468 y(store)e(nati)n(v)o(e)f(data)h(structures)g(of)g(the)g(database.)
-596 1600 y(Some)i(GD)m(A)g(serv)o(ers)g(also)h(implement)f(a)h
-(con\002guration)c(tool,)k(which)f(is)h(named)f(gda-???-con\002g)d(and)
-596 1692 y(has)i(absolutely)e(nothing)h(to)h(do)f(with)h(the)g
-(implementation)e(of)i(the)f(serv)o(er)m(,)g(as)i(it')-5
-b(s)22 b(a)f(totally)g(high-le)n(v)o(el)596 1783 y(application.)p
-Black 3642 5876 a Fb(9)p Black eop
+9 8 bop Black 2630 -132 a Fb(Chapter)20 b(5.)g(GD)m(A)g(Server)g(Libr)o
+(ary)p Black 197 401 a Fi(gda_ser)q(ver)38 b(Helper)g(Objects)596
+564 y Ff(The)16 b(follo)n(wing)f(objects)i(are)f(absolute)g(lo)n(w-le)n
+(v)o(el)g(helper)g(objects)g(designed)g(to)h(ease)g(the)g(de)n(v)o
+(elopement)596 656 y(of)i(gda)h(serv)o(er)f(implementations:)596
+821 y Fa(function)43 b(prefix)358 b(data)44 b(structure)357
+b(source)44 b(file)596 903 y(gda_server_error)311 b(Gda_ServerError)266
+b(gda-server-error.c)596 985 y(gda_server_field)311 b(Gda_ServerField)
+266 b(gda-server-field.c)596 1242 y Ff(This)20 b(code)f(is)j(dependent)
+17 b(from)j(nothing)e(b)n(ut)i(glib)g(and)g(some)g(typedefs)f(from)g
+(gda.h)197 1632 y Fi(gda_ser)q(ver_impl)596 1795 y Ff(Unfortunately)e
+(there)j(is)h(an)f(o)n(wn)f(object)h(called)g(gda-serv)o(er)n(-impl)d
+(which)i(has)i(nothing)d(to)i(do)g(with)g(the)596 1886
+y(gda-serv)o(er)n(-impl-*)c(objects.)596 2051 y Fa(function)43
+b(prefix)537 b(data)44 b(structure)761 b(source)44 b(file)596
+2134 y(gda_server_impl)176 b(Gda_ServerImpl)760 b(gda-server-impl.c)596
+2390 y Ff(gda_serv)o(er_impl)16 b(is)k(a)h(gtk)e(object)g(\(the)h(only)
+f(one)g(in)h(the)g(serv)o(er)f(library\))f(that)i(represents)f(an)h
+(instance)596 2481 y(of)f(a)i(running)d(serv)o(er)-5
+b(.)20 b(It)g(is)i(used)e(for)f(tasks)i(lik)o(e)g(re)o(gistering)d(the)
+i(serv)o(er)g(into)g(the)g(system,)g(creating)f(the)596
+2573 y(f)o(actory)h(etc.)h(It)h(is)g(mainly)e(used)i(by)e(the)i(pro)o
+(viders.)d(Also,)i(the)g(list)i(of)e(callback)f(functions)g(is)j
+(stored)d(in)596 2664 y(the)g(data)g(structure)f(of)h(Gda_Serv)o
+(erImpl.)596 2797 y(Note)d(that)h(the)g(functions)f(gda_serv)o
+(er_impl_e)o(xcep)o(tion,)12 b(gda_serv)o(er_impl_mak)o(e_er)o(ro)o(r_)
+o(b)n(uf)m(fer)g(and)596 2888 y(gda_serv)o(er_impl_\002nd)j(can)20
+b(not)g(be)g(re)o(garded)d(as)k(methods)f(of)g(the)g(gda_serv)o
+(er_impl)c(pseudo-object,)596 2980 y(b)n(ut)24 b(are)h(rather)e
+(unrelated)h(helper)f(functions)g(that)i(are)g(used)f(by)g(the)h
+(gda-serv)o(er)d(library)i(itself)h(and/or)596 3071 y(by)19
+b(the)i(pro)o(viders.)p Black 3642 5876 a Fb(9)p Black
+eop
 %%Page: 10 10
 10 9 bop Black Black 197 422 a Fd(Chapter)48 b(6.)g(GD)-7
-b(A)48 b(Client)g(Librar)r(y)197 828 y Fi(GD)-6 b(A_*)38
-b(Objects)596 991 y Ff(The)24 b(follo)n(wing)f(objects)i(are)g(v)o(ery)
-e(much)h(real)h(objects)g(in)g(the)g(sense)g(that)g(the)o(y)f(are)h
-(currently)e(imple-)596 1082 y(mented)j(as)i(real)g(GtkObjects,)f(wich)
-g(will)i(soon)e(be)g(changed)f(into)h(GObject)g(to)h(mak)o(e)f(them)g
-(all)h(Gtk)596 1173 y(independent.)596 1338 y Fa(function)43
-b(prefix)268 b(data)44 b(structure)268 b(source)43 b(file)596
-1421 y(gda_batch)536 b(Gda_Batch)492 b(gda-batch.c)596
-1503 y(gda_command)267 b(Gda_Command)87 b(gda-command.c)596
-1585 y(gda_connection)266 b(Gda_Connection)87 b(gda-connection.c)596
-1667 y(gda_connection_pool)f(Gda_ConnectionPool)h
-(gda-connection-pool.c)596 1749 y(gda_error)267 b(Gda_Error)88
-b(gda-error.c)596 1832 y(gda_field)267 b(Gda_Field)88
-b(gda-field.c)596 1914 y(gda_recordset)266 b(Gda_Recordset)88
-b(gda-recordset.c)197 2427 y Fi(GD)-6 b(A)39 b(Sub)g(Objects)596
-2590 y Ff(The)17 b(code)h(for)f(the)h(stub)g(implementation)e(is)j
-(generated)d(by)i(orbit-idl)e(automagically)-5 b(.)16
-b(An)o(yw)o(ay)-5 b(,)16 b(as)j(it)g(is)596 2682 y(its)i(o)n(wn)e
-(layer)m(,)h(and)f(the)h(functions)f(are)h(called)g(by)g(the)g(abo)o(v)
-o(e)f(gda_*)f(objects,)i(the)o(y)g(are)g(listed)g(belo)n(w:)596
-2847 y Fa(function)43 b(prefix)89 b(data)44 b(structure)88
-b(source)44 b(file)596 2929 y(GDA_Fieldx)312 b(GDA_Fieldx)267
-b(gda-stubs.c)596 3011 y(GDA_Parameter)177 b(GDA_Parameter)132
-b(gda-stubs.c)596 3094 y(GDA_Command)267 b(GDA_Command)87
-b(gda-stubs.c)596 3176 y(GDA_Connection)132 b(GDA_Connection)87
-b(gda-stubs.c)596 3258 y(GDA_Recordset)177 b(GDA_Recordset)87
-b(gda-stubs.c)596 3514 y Ff(The)22 b(GD)m(A_Fieldx)f(stub)i(seems)g(to)
-g(be)f(neither)g(used)h(from)e(the)i(gda-client)e(library)h(nor)f
-(implemented)596 3606 y(by)e(the)i(gda-serv)o(er)c(library)-5
-b(.)p Black 3601 5876 a Fb(10)p Black eop
+b(A)48 b(Pr)m(o)m(vider)m(s)596 654 y Ff(The)23 b(actual)h(pro)o(vider)
+d(implementation)h(just)i(implements)f(the)h(missing)g(functions)e
+(mentioned)g(under)596 745 y("gda_serv)o(er)17 b(objects".)596
+878 y(These)k(functions)f(are)h(implemented)f(in)i(gda-???-command.c,)
+16 b(gda-???-connection.c)h(and)k(gda-???-)596 970 y(recordset.c.)33
+b(The)h(main-???.c)g(source)g(contains)g(the)h(main\(\))f(routine)f
+(for)i(the)g(serv)o(er)f(e)o(x)o(ecutable,)596 1061 y(which)28
+b(does)g(nothing)f(b)n(ut)i(initialize)g(corba,)e(create)i(a)g
+(gda_serv)o(er_impl)c(object)j(and)g(pass)h(to)g(it)g(the)596
+1152 y(list)23 b(of)e(function)g(implementations.)f(The)h(main\(\))g
+(function)f(thus)i(is)h(GTK-dependent,)c(the)j(rest)h(of)e(the)596
+1243 y(code)e(isn')o(t.)596 1376 y(All)k(of)g(these)g(functions)e(use)i
+(the)g(\002eld)g(user_data)f(from)f(the)i(corresponding)d(gda_serv)o
+(er_*)f(object)j(to)596 1468 y(store)e(nati)n(v)o(e)f(data)h
+(structures)g(of)g(the)g(database.)p Black 3601 5876
+a Fb(10)p Black eop
 %%Page: 11 11
 11 10 bop Black Black 197 422 a Fd(Appendix)48 b(A.)96
 b(GNU)48 b(General)f(Pub)n(lic)h(License)999 644 y Fa(GNU)c(GENERAL)g
Index: gnue/docs/GDAQuickHackersGuide.rtf
diff -u gnue/docs/GDAQuickHackersGuide.rtf:1.1 
gnue/docs/GDAQuickHackersGuide.rtf:1.2
--- gnue/docs/GDAQuickHackersGuide.rtf:1.1      Sat Aug 19 15:49:37 2000
+++ gnue/docs/GDAQuickHackersGuide.rtf  Sun Oct  1 00:43:03 2000
@@ -5,48 +5,31 @@
 }
 {\colortbl;}{\stylesheet{\s1 Heading 1;}{\s2 Heading 2;}{\s3 Heading 3;}{\s4 
Heading 4;}{\s5 Heading 5;}{\s6 Heading 6;}{\s7 Heading 7;}{\s8 Heading 8;}{\s9 
Heading 9;}}
 \deflang1024\notabind\facingp\hyphauto1\widowctrl
-\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab 
{}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {}\par}\pard\sl20 {\*\bkmkstart ID_GDAQUICKHACKERSGUIDE}{\*\bkmkend 
ID_GDAQUICKHACKERSGUIDE}\fs20 \hyphpar0\par\pard\sb373\sl547\qc \b\fs49\f1 GNU 
Enterprise : GDA Quick Hackers Guide\keepn\hyphpar0\par\pard\sl220 \b0\fs20\f0 
\~\hyphpar0\par\pard\sb1991\sl380\qc \b\fs34\f1 Reinhard 
M\'fcller\keepn\hyphpar0\par\pard\sl220\qc \fs24 GNU: Enterprise Core 
Development Team\hyphpar0\par\pard\sb1296\sl264\qc Edited 
by\keepn\hyphpar0\par\pard\sl380\qc \fs34 Derek 
Neighbors\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab 
{}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {}\par}\pard\sl20 \fs20 \keepn\hyphpar0\par\pard\sl-240 \b\f1 GNU 
Enterprise : GDA Quick Hackers Guide\hyphpar0\par\pard\sl220 \b0\f0 
by\~Reinhard M\'fcller\hyphpar0\par\pard\sb220\sl220 
by\~\hyphpar0\par\pard\sl220 Edited by\~Derek 
Neighbors\hyphpar0\par\pard\sb220\sl220 Published Tue Aug 15 21:14:40 MST 
2000\hyphpar0\par\pard\sl220 Copyright\~\'a9\~2000 by Free Software 
Foundation\hyphpar0\par\pard\sb200\sl220 \fs16 Copyright (c) 2000 Free Software 
Foundation\hyphpar0\par\pard\sl220 Permission is granted to copy, distribute 
and/or modify this document under the terms of the GNU Free Documentation 
License, Version 1.1 or any later version published by the Free Software 
Foundation; with no Invariant Sections, with no Front-Cover Texts and with no 
Back-Cover Texts. A copy of the license is included in the section entitled 
"GNU Free Documentation 
License".\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgnlcrm\pgnrestart\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{\i\fs20 \chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 \b\fs41\f1 Table of 
Contents\keepn\hyphpar0\par\pard\sb207\li1440\sl220\fi-480 {\field{\*\fldinst   
HYPERLINK  \\l ID_INTRODUCTION}{\fldrslt \fs20\f0 1. Introduction}}\fs20\f0 
\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l 
ID_INTRODUCTION}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF 
ID_INTRODUCTION}{\fldrslt 000}}}}\hyphpar0\par\pard\sb48\li1920\sl220\fi-480 
{\field{\*\fldinst   HYPERLINK  \\l ID_WHY}{\fldrslt \b0 Why It Came About}}\b0 
\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l ID_WHY}{\fldrslt 
{\field\flddirty{\*\fldinst PAGEREF ID_WHY}{\fldrslt 
000}}}}\hyphpar0\par\pard\li1920\sl220\fi-480 {\field{\*\fldinst   HYPERLINK  
\\l ID_INTENDED}{\fldrslt Intended Audience}}\tqr\tldot\tx8400\tab 
{\field{\*\fldinst   HYPERLINK  \\l ID_INTENDED}{\fldrslt 
{\field\flddirty{\*\fldinst PAGEREF ID_INTENDED}{\fldrslt 
000}}}}\hyphpar0\par\pard\li1920\sl220\fi-480 {\field{\*\fldinst   HYPERLINK  
\\l ID_SUGGESTIONS}{\fldrslt Suggestions}}\tqr\tldot\tx8400\tab 
{\field{\*\fldinst   HYPERLINK  \\l ID_SUGGESTIONS}{\fldrslt 
{\field\flddirty{\*\fldinst PAGEREF ID_SUGGESTIONS}{\fldrslt 
000}}}}\hyphpar0\par\pard\sb48\li1440\sl220\fi-480 {\field{\*\fldinst   
HYPERLINK  \\l ID_ABOUTOBJECTS}{\fldrslt \b 2. About Objects}}\b 
\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l 
ID_ABOUTOBJECTS}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF 
ID_ABOUTOBJECTS}{\fldrslt 000}}}}\hyphpar0\par\pard\sb48\li1440\sl220\fi-480 
{\field{\*\fldinst   HYPERLINK  \\l ID_GENERALSTRUCTURE}{\fldrslt 3. General 
Structure of GDA}}\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l 
ID_GENERALSTRUCTURE}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF 
ID_GENERALSTRUCTURE}{\fldrslt 
000}}}}\hyphpar0\par\pard\sb48\li1440\sl220\fi-480 {\field{\*\fldinst   
HYPERLINK  \\l ID_GDASERVERLIB}{\fldrslt 4. GDA Server 
Library}}\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l 
ID_GDASERVERLIB}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF 
ID_GDASERVERLIB}{\fldrslt 000}}}}\hyphpar0\par\pard\sb48\li1920\sl220\fi-480 
{\field{\*\fldinst   HYPERLINK  \\l ID_HELPEROBJECTS}{\fldrslt \b0 GDA_Server 
Helper Objects}}\b0 \tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l 
ID_HELPEROBJECTS}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF 
ID_HELPEROBJECTS}{\fldrslt 000}}}}\hyphpar0\par\pard\li1920\sl220\fi-480 
{\field{\*\fldinst   HYPERLINK  \\l ID_OBJECTS}{\fldrslt GDA_Server 
Objects}}\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l 
ID_OBJECTS}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF ID_OBJECTS}{\fldrslt 
000}}}}\hyphpar0\par\pard\li1920\sl220\fi-480 {\field{\*\fldinst   HYPERLINK  
\\l ID_IMPLOBJECTS}{\fldrslt GDA_Server_Impl Objects}}\tqr\tldot\tx8400\tab 
{\field{\*\fldinst   HYPERLINK  \\l ID_IMPLOBJECTS}{\fldrslt 
{\field\flddirty{\*\fldinst PAGEREF ID_IMPLOBJECTS}{\fldrslt 
000}}}}\hyphpar0\par\pard\li1920\sl220\fi-480 {\field{\*\fldinst   HYPERLINK  
\\l ID_IMPL}{\fldrslt GDA_Server_Impl}}\tqr\tldot\tx8400\tab {\field{\*\fldinst 
  HYPERLINK  \\l ID_IMPL}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF 
ID_IMPL}{\fldrslt 000}}}}\hyphpar0\par\pard\sb48\li1440\sl220\fi-480 
{\field{\*\fldinst   HYPERLINK  \\l ID_IMPLEMENTATIONS}{\fldrslt \b 5. GDA 
Server Implementations}}\b \tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK 
 \\l ID_IMPLEMENTATIONS}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF 
ID_IMPLEMENTATIONS}{\fldrslt 000}}}}\hyphpar0\par\pard\sb48\li1440\sl220\fi-480 
{\field{\*\fldinst   HYPERLINK  \\l ID_CLIENTLIBRARY}{\fldrslt 6. GDA Client 
Library}}\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l 
ID_CLIENTLIBRARY}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF 
ID_CLIENTLIBRARY}{\fldrslt 000}}}}\hyphpar0\par\pard\sb48\li1920\sl220\fi-480 
{\field{\*\fldinst   HYPERLINK  \\l ID_GDACLIENTOBJECTS}{\fldrslt \b0 GDA_* 
Objects}}\b0 \tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l 
ID_GDACLIENTOBJECTS}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF 
ID_GDACLIENTOBJECTS}{\fldrslt 000}}}}\hyphpar0\par\pard\li1920\sl220\fi-480 
{\field{\*\fldinst   HYPERLINK  \\l ID_GDASUBOBJECTS}{\fldrslt GDA Sub 
Objects}}\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l 
ID_GDASUBOBJECTS}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF 
ID_GDASUBOBJECTS}{\fldrslt 000}}}}\hyphpar0\par\pard\sb48\li1440\sl220\fi-480 
{\field{\*\fldinst   HYPERLINK  \\l ID_APPENDIXES}{\fldrslt \b I. 
Appendixes}}\b \tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l 
ID_APPENDIXES}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF 
ID_APPENDIXES}{\fldrslt 000}}}}\hyphpar0\par\pard\sb48\li1920\sl220\fi-480 
{\field{\*\fldinst   HYPERLINK  \\l _104 }{\fldrslt \b0 A. GNU General Public 
License}}\b0 \tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l _104 
}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF _104}{\fldrslt 
000}}}}\hyphpar0\par\pard\li1920\sl220\fi-480 {\field{\*\fldinst   HYPERLINK  
\\l _107 }{\fldrslt B. GNU Free Documentation License}}\tqr\tldot\tx8400\tab 
{\field{\*\fldinst   HYPERLINK  \\l _107 }{\fldrslt {\field\flddirty{\*\fldinst 
PAGEREF _107}{\fldrslt 
000}}}}\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\pgnrestart\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Chapter 1. Introduction}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Chapter 1. 
Introduction}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
ID_INTRODUCTION}{\*\bkmkend ID_INTRODUCTION}\b\fs41\f1 Chapter 1. 
Introduction\keepn\hyphpar0\par\pard\sb259\s2\sl380 {\*\bkmkstart 
ID_WHY}{\*\bkmkend ID_WHY}\fs34 Why It Came 
About\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj \b0\fs20\lang1033\f0 Some 
days ago, I have spent several hours digging through the code of GDA before I 
could understand the structure of GDA deeper than that it consists of a server 
part and a client part. With this experience in mind, it was no surprise for me 
to hear from others, that they find the code hard to understand. 
\hyphpar0\par\pard\sb100\li960\sl220\qj In my personal opinion, the code is 
very clear, when you only have recognized the structure how the different 
functions, objects and libraries work together. 
\hyphpar0\par\pard\sb100\li960\sl220\qj As I think, that GDA is a good set of 
libraries, that more people should work on it and that even more people should 
use it, I decided to write this "quick hacker's guide". 
\hyphpar0\par\pard\sb259\s2\sl380 {\*\bkmkstart ID_INTENDED}{\*\bkmkend 
ID_INTENDED}\b\fs34\lang1024\f1 Intended 
Audience\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj \b0\fs20\lang1033\f0 This 
document adresses people that want to understand how the code of gda works. 
After reading this document, you will not understand it, but there will be 
chances that you find it much easier to hack through the code than before. 
\hyphpar0\par\pard\sb100\li960\sl220\qj You should read this document after 
having understood the basic concepts and goals of gda (I intend you just read 
the introduction on http://www.gnome.org/gnome-db) and having realized that gda 
is the non-visual part of gnome-db which can be used by any application. 
\hyphpar0\par\pard\sb100\li960\sl220\qj A point specially regarded in this 
document is dependency on gtk/gnome, as that dependency can lead to problems 
when using gda with non-gnome applications. 
\hyphpar0\par\pard\sb100\li960\sl220\qj This document is (read: should be) 
consistent with gnome-db.0.0.96. \hyphpar0\par\pard\sb259\s2\sl380 
{\*\bkmkstart ID_SUGGESTIONS}{\*\bkmkend ID_SUGGESTIONS}\b\fs34\lang1024\f1 
Suggestions\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj \b0\fs20\lang1033\f0 
If you think this document is good, please feel free to read it as often as you 
like and give copies of it to as many people you like. 
\hyphpar0\par\pard\sb100\li960\sl220\qj Editors Note: You have to love 
Reinhards attitude towards free software. :) It even carries into his 
documentation! \hyphpar0\par\pard\sb100\li960\sl220\qj If you think this 
document could be improved, please feel free to let me know what I could 
improve or - even better - improve it yourself. Please let me know if you have 
made changes, so I can merge them. \hyphpar0\par\pard\sb100\li960\sl220\qj If 
you think my english is bad, please feel free to correct my mistakes and send 
me the corrections for merging. \hyphpar0\par\pard\sb100\li960\sl220\qj If you 
think this document should be converted to docbook, please feel free to do 
that. I would agree with you very strongly :) <-- This has been done! Anyone 
doing docs please feel free to write docs and we will convert. Of course we 
prefer docbook natively, but we will take what we can get. 
\hyphpar0\par\pard\sb100\li960\sl220\qj If you think this document is not 
useful at all, please feel free to ignore it :) 
\hyphpar0\par\pard\sb100\li960\sl220\qj Reinhard M\'fcller address@hidden 
address@hidden 
\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Chapter 2. About Objects}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Chapter 2. About 
Objects}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
ID_ABOUTOBJECTS}{\*\bkmkend ID_ABOUTOBJECTS}\b\fs41\f1 Chapter 2. About 
Objects\keepn\hyphpar0\par\pard\sb207\li960\sl220\qj \b0\fs20\lang1033\f0 In 
the following, the term "objects" means not objects like in C++, but rather a 
data structure plus a set of functions that deal with this structure. 
\hyphpar0\par\pard\sb100\li960\sl220\qj GDA has very much an object-oriented 
approach, in the sense that the internals of the data structure are virtually 
not known to the "user" of the structure, but he rather uses the functions to 
access them, in the sense of encapsulation. 
\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Chapter 3. General Structure of GDA}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Chapter 3. General Structure of 
GDA}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
ID_GENERALSTRUCTURE}{\*\bkmkend ID_GENERALSTRUCTURE}\b\fs41\f1 Chapter 3. 
General Structure of GDA\keepn\hyphpar0\par\pard\sb207\li960\sl220\qj 
\b0\fs20\lang1033\f0 GDA is made up of several pieces as laid out below. 
\hyphpar0\par\pard\sb200\li960\sl198\qj \fs18\lang1024\f2 
Application\sa0\par\fi0\sb0
+\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab 
{}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {}\par}\pard\sl20 {\*\bkmkstart ID_GDAQUICKHACKERSGUIDE}{\*\bkmkend 
ID_GDAQUICKHACKERSGUIDE}\fs20 \hyphpar0\par\pard\sb373\sl547\qc \b\fs49\f1 GNU 
Enterprise : GDA Quick Hackers Guide\keepn\hyphpar0\par\pard\sl220 \b0\fs20\f0 
\~\hyphpar0\par\pard\sb1991\sl380\qc \b\fs34\f1 Reinhard 
M\'fcller\keepn\hyphpar0\par\pard\sl220\qc \fs24 GNU: Enterprise Core 
Development Team\hyphpar0\par\pard\sb1296\sl264\qc Edited 
by\keepn\hyphpar0\par\pard\sl380\qc \fs34 Derek 
Neighbors\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab 
{}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {}\par}\pard\sl20 \fs20 \keepn\hyphpar0\par\pard\sl-240 \b\f1 GNU 
Enterprise : GDA Quick Hackers Guide\hyphpar0\par\pard\sl220 \b0\f0 
by\~Reinhard M\'fcller\hyphpar0\par\pard\sb220\sl220 
by\~\hyphpar0\par\pard\sl220 Edited by\~Derek 
Neighbors\hyphpar0\par\pard\sb220\sl220 Published Sam Sep 30 01:13:00 CEST 
2000\hyphpar0\par\pard\sl220 Copyright\~\'a9\~2000 by Free Software 
Foundation\hyphpar0\par\pard\sb200\sl220 \fs16 Copyright (c) 2000 Free Software 
Foundation\hyphpar0\par\pard\sl220 Permission is granted to copy, distribute 
and/or modify this document under the terms of the GNU Free Documentation 
License, Version 1.1 or any later version published by the Free Software 
Foundation; with no Invariant Sections, with no Front-Cover Texts and with no 
Back-Cover Texts. A copy of the license is included in the section entitled 
"GNU Free Documentation 
License".\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgnlcrm\pgnrestart\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{\i\fs20 \chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 \b\fs41\f1 Table of 
Contents\keepn\hyphpar0\par\pard\sb207\li1440\sl220\fi-480 {\field{\*\fldinst   
HYPERLINK  \\l ID_INTRODUCTION}{\fldrslt \fs20\f0 1. Introduction}}\fs20\f0 
\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l 
ID_INTRODUCTION}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF 
ID_INTRODUCTION}{\fldrslt 000}}}}\hyphpar0\par\pard\sb48\li1920\sl220\fi-480 
{\field{\*\fldinst   HYPERLINK  \\l ID_WHY}{\fldrslt \b0 Why It Came About}}\b0 
\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l ID_WHY}{\fldrslt 
{\field\flddirty{\*\fldinst PAGEREF ID_WHY}{\fldrslt 
000}}}}\hyphpar0\par\pard\li1920\sl220\fi-480 {\field{\*\fldinst   HYPERLINK  
\\l ID_INTENDED}{\fldrslt Intended Audience}}\tqr\tldot\tx8400\tab 
{\field{\*\fldinst   HYPERLINK  \\l ID_INTENDED}{\fldrslt 
{\field\flddirty{\*\fldinst PAGEREF ID_INTENDED}{\fldrslt 
000}}}}\hyphpar0\par\pard\li1920\sl220\fi-480 {\field{\*\fldinst   HYPERLINK  
\\l ID_SUGGESTIONS}{\fldrslt Suggestions}}\tqr\tldot\tx8400\tab 
{\field{\*\fldinst   HYPERLINK  \\l ID_SUGGESTIONS}{\fldrslt 
{\field\flddirty{\*\fldinst PAGEREF ID_SUGGESTIONS}{\fldrslt 
000}}}}\hyphpar0\par\pard\sb48\li1440\sl220\fi-480 {\field{\*\fldinst   
HYPERLINK  \\l ID_ABOUTOBJECTS}{\fldrslt \b 2. About Objects}}\b 
\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l 
ID_ABOUTOBJECTS}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF 
ID_ABOUTOBJECTS}{\fldrslt 000}}}}\hyphpar0\par\pard\sb48\li1440\sl220\fi-480 
{\field{\*\fldinst   HYPERLINK  \\l ID_GENERALSTRUCTURE}{\fldrslt 3. General 
Structure of GDA}}\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l 
ID_GENERALSTRUCTURE}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF 
ID_GENERALSTRUCTURE}{\fldrslt 
000}}}}\hyphpar0\par\pard\sb48\li1440\sl220\fi-480 {\field{\*\fldinst   
HYPERLINK  \\l ID_CLIENTLIBRARY}{\fldrslt 4. GDA Client 
Library}}\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l 
ID_CLIENTLIBRARY}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF 
ID_CLIENTLIBRARY}{\fldrslt 000}}}}\hyphpar0\par\pard\sb48\li1920\sl220\fi-480 
{\field{\*\fldinst   HYPERLINK  \\l ID_GDACLIENTOBJECTS}{\fldrslt \b0 gda_* 
Objects}}\b0 \tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l 
ID_GDACLIENTOBJECTS}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF 
ID_GDACLIENTOBJECTS}{\fldrslt 000}}}}\hyphpar0\par\pard\li1920\sl220\fi-480 
{\field{\*\fldinst   HYPERLINK  \\l ID_GDASTUBOBJECTS}{\fldrslt GDA Stub 
Objects}}\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l 
ID_GDASTUBOBJECTS}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF 
ID_GDASTUBOBJECTS}{\fldrslt 000}}}}\hyphpar0\par\pard\sb48\li1440\sl220\fi-480 
{\field{\*\fldinst   HYPERLINK  \\l ID_GDASERVERLIB}{\fldrslt \b 5. GDA Server 
Library}}\b \tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l 
ID_GDASERVERLIB}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF 
ID_GDASERVERLIB}{\fldrslt 000}}}}\hyphpar0\par\pard\sb48\li1920\sl220\fi-480 
{\field{\*\fldinst   HYPERLINK  \\l ID_IMPLOBJECTS}{\fldrslt \b0 impl_GDA 
Objects}}\b0 \tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l 
ID_IMPLOBJECTS}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF 
ID_IMPLOBJECTS}{\fldrslt 000}}}}\hyphpar0\par\pard\li1920\sl220\fi-480 
{\field{\*\fldinst   HYPERLINK  \\l ID_OBJECTS}{\fldrslt gda_server 
Objects}}\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l 
ID_OBJECTS}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF ID_OBJECTS}{\fldrslt 
000}}}}\hyphpar0\par\pard\li1920\sl220\fi-480 {\field{\*\fldinst   HYPERLINK  
\\l ID_HELPEROBJECTS}{\fldrslt gda_server Helper Objects}}\tqr\tldot\tx8400\tab 
{\field{\*\fldinst   HYPERLINK  \\l ID_HELPEROBJECTS}{\fldrslt 
{\field\flddirty{\*\fldinst PAGEREF ID_HELPEROBJECTS}{\fldrslt 
000}}}}\hyphpar0\par\pard\li1920\sl220\fi-480 {\field{\*\fldinst   HYPERLINK  
\\l ID_IMPL}{\fldrslt gda_server_impl}}\tqr\tldot\tx8400\tab {\field{\*\fldinst 
  HYPERLINK  \\l ID_IMPL}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF 
ID_IMPL}{\fldrslt 000}}}}\hyphpar0\par\pard\sb48\li1440\sl220\fi-480 
{\field{\*\fldinst   HYPERLINK  \\l ID_PROVIDERS}{\fldrslt \b 6. GDA 
Providers}}\b \tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l 
ID_PROVIDERS}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF 
ID_PROVIDERS}{\fldrslt 000}}}}\hyphpar0\par\pard\sb48\li1440\sl220\fi-480 
{\field{\*\fldinst   HYPERLINK  \\l ID_APPENDIXES}{\fldrslt I. 
Appendixes}}\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l 
ID_APPENDIXES}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF 
ID_APPENDIXES}{\fldrslt 000}}}}\hyphpar0\par\pard\sb48\li1920\sl220\fi-480 
{\field{\*\fldinst   HYPERLINK  \\l _106 }{\fldrslt \b0 A. GNU General Public 
License}}\b0 \tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l _106 
}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF _106}{\fldrslt 
000}}}}\hyphpar0\par\pard\li1920\sl220\fi-480 {\field{\*\fldinst   HYPERLINK  
\\l _109 }{\fldrslt B. GNU Free Documentation License}}\tqr\tldot\tx8400\tab 
{\field{\*\fldinst   HYPERLINK  \\l _109 }{\fldrslt {\field\flddirty{\*\fldinst 
PAGEREF _109}{\fldrslt 
000}}}}\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\pgnrestart\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Chapter 1. Introduction}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Chapter 1. 
Introduction}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
ID_INTRODUCTION}{\*\bkmkend ID_INTRODUCTION}\b\fs41\f1 Chapter 1. 
Introduction\keepn\hyphpar0\par\pard\sb259\s2\sl380 {\*\bkmkstart 
ID_WHY}{\*\bkmkend ID_WHY}\fs34 Why It Came 
About\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj \b0\fs20\lang1033\f0  When I 
had my first look at gda, I spent several hours digging through the code of GDA 
before I could understand the structure of GDA deeper than that it consists of 
a server part and a client part. With this experience in mind, it was no 
surprise for me to hear from others, that they find the code hard to 
understand. \hyphpar0\par\pard\sb100\li960\sl220\qj  In my personal opinion, 
the code is very clear, when you only have recognized the structure how the 
different functions, objects and libraries work together. 
\hyphpar0\par\pard\sb100\li960\sl220\qj  As I think, that GDA is a good set of 
libraries, that more people should work on it and that even more people should 
use it, I decided to write this "quick hacker's guide". 
\hyphpar0\par\pard\sb259\s2\sl380 {\*\bkmkstart ID_INTENDED}{\*\bkmkend 
ID_INTENDED}\b\fs34\lang1024\f1 Intended 
Audience\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj \b0\fs20\lang1033\f0  
This document adresses people that want to understand how the code of GDA 
works. After reading this document, you will not understand it, but there will 
be chances that you find it much easier to hack through the code than before. 
\hyphpar0\par\pard\sb100\li960\sl220\qj  You should read this document after 
having understood the basic concepts and goals of GDA (I intend you just read 
the introduction on http://www.gnome.org/gnome-db) and having realized that GDA 
is the non-visual part of gnome-db which can be used by any application. 
(Actually, GDA has been seperated from the rest of gnome-db in release 0.1.0, 
but is still maintained by the gnome-db project team) 
\hyphpar0\par\pard\sb100\li960\sl220\qj  A point specially regarded in this 
document is dependency on gtk/gnome, as that dependency can lead to problems 
when using gda with non-gnome applications. However, there are chances that 
these dependencies will be removed before the release of 0.1.1. As they are a 
very fast moving target already, the information here is maybe not up to date; 
I will remove all these dependency discussions in one of the next versions of 
the document. \hyphpar0\par\pard\sb100\li960\sl220\qj  Please note that this 
document represents my personal view of things, and contains facts (or what I 
think is a fact) as well as some subjective opinions. Of course I will change 
the document if a fact ceases to be correct or was incorrect from the 
beginning, but I also will gladly change the subjective parts of the text if 
somebody manages to change my opinion ;-). 
\hyphpar0\par\pard\sb100\li960\sl220\qj  This document is (read: should be) 
consistent with libgda-0.1.0. \hyphpar0\par\pard\sb259\s2\sl380 {\*\bkmkstart 
ID_SUGGESTIONS}{\*\bkmkend ID_SUGGESTIONS}\b\fs34\lang1024\f1 
Suggestions\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj \b0\fs20\lang1033\f0  
If you think this document is good, please feel free to read it as often as you 
like and give copies of it to as many people you like. 
\hyphpar0\par\pard\sb100\li960\sl220\qj  If you think this document could be 
improved, please feel free to let me know what I could improve or - even better 
- improve it yourself. Please let me know if you have made changes, so I can 
merge them. \hyphpar0\par\pard\sb100\li960\sl220\qj  If you think my english is 
bad, please feel free to correct my mistakes and send me the corrections for 
merging. \hyphpar0\par\pard\sb100\li960\sl220\qj  If you think this document is 
not useful at all, please feel free to ignore it :) 
\hyphpar0\par\pard\sb100\li960\sl220\qj  Reinhard M\'fcller (address@hidden) 
\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Chapter 2. About Objects}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Chapter 2. About 
Objects}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
ID_ABOUTOBJECTS}{\*\bkmkend ID_ABOUTOBJECTS}\b\fs41\f1 Chapter 2. About 
Objects\keepn\hyphpar0\par\pard\sb207\li960\sl220\qj \b0\fs20\lang1033\f0  In 
the following, the term "objects" means not objects like in C++, but rather a 
data structure plus a set of functions that deal with this 
structure.\hyphpar0\par\pard\sb100\li960\sl220\qj  GDA has very much an 
object-oriented approach, in the sense that the internals of the data structure 
are virtually not known to the "user" of the structure, but he rather uses the 
functions to access them, in the sense of 
encapsulation.\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Chapter 3. General Structure of GDA}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Chapter 3. General Structure of 
GDA}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
ID_GENERALSTRUCTURE}{\*\bkmkend ID_GENERALSTRUCTURE}\b\fs41\f1 Chapter 3. 
General Structure of GDA\keepn\hyphpar0\par\pard\sb207\li960\sl220\qj 
\b0\fs20\lang1033\f0  GDA is made up of several pieces as laid out 
below.\hyphpar0\par\pard\sb200\li960\sl198\qj \fs18\lang1024\f2 
Application\sa0\par\fi0\sb0
 |\sa0\par\fi0\sb0
 |(calls directly)\sa0\par\fi0\sb0
 |\sa0\par\fi0\sb0
-gda-* objects                   \\\sa0\par\fi0\sb0
-|                                \\\sa0\par\fi0\sb0
-|(calls directly)                 > libgda-client  (directory 
gda-clnt)\sa0\par\fi0\sb0
-|                                / \sa0\par\fi0\sb0
-gda-stubs objects               /\sa0\par\fi0\sb0
+gda-* objects              \\\sa0\par\fi0\sb0
+|                           \\\sa0\par\fi0\sb0
+|(calls directly)            > libgda-client  (directory 
lib/gda-clnt)\sa0\par\fi0\sb0
+|                           / \sa0\par\fi0\sb0
+gda-stubs objects          /\sa0\par\fi0\sb0
 |\sa0\par\fi0\sb0
 |(calls via ORBIT)\sa0\par\fi0\sb0
 |\sa0\par\fi0\sb0
-gda-server-impl objects         \\\sa0\par\fi0\sb0
-|                                \\\sa0\par\fi0\sb0
-|(calls)                          > libgda-server  (directory 
gda-srv)\sa0\par\fi0\sb0
-|                                /\sa0\par\fi0\sb0
-gda-server objects              /\sa0\par\fi0\sb0
+gda-server-impl objects    \\\sa0\par\fi0\sb0
+|                           \\\sa0\par\fi0\sb0
+|(calls directly)            > libgda-server  (directory 
lib/gda-srv)\sa0\par\fi0\sb0
+|                           /\sa0\par\fi0\sb0
+gda-server objects         /\sa0\par\fi0\sb0
 |\sa0\par\fi0\sb0
 |(calls via callback functions)\sa0\par\fi0\sb0
 |\sa0\par\fi0\sb0
-gda-??? implementations             libgda-???  (directories 
gda-*-server)\sa0\par\fi0\sb0
+gda-??? implementations        provider  (directories 
providers/gda-*-server)\sa0\par\fi0\sb0
 |\sa0\par\fi0\sb0
 |(calls directly)\sa0\par\fi0\sb0
 |\sa0\par\fi0\sb0
-Database Backend\sa0\par\fi0\sb0
-  
\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Chapter 4. GDA Server Library}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Chapter 4. GDA Server 
Library}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
ID_GDASERVERLIB}{\*\bkmkend ID_GDASERVERLIB}\b\fs41\f1 Chapter 4. GDA Server 
Library\keepn\hyphpar0\par\pard\sb259\s2\sl380 {\*\bkmkstart 
ID_HELPEROBJECTS}{\*\bkmkend ID_HELPEROBJECTS}\fs34 GDA_Server Helper 
Objects\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj \b0\fs20\lang1033\f0 The 
following objects are absolute low-level helper objects designed to ease the 
developement of gda server implementations: 
\hyphpar0\par\pard\sb200\li960\sl198\qj \fs18\lang1024\f2 function prefix       
  data structure        source file\sa0\par\fi0\sb0
-gda_server_error       Gda_ServerError       gda-server-error.c\sa0\par\fi0\sb0
-gda_server_field       Gda_ServerField       gda-server-field.c\sa0\par\fi0\sb0
-  \hyphpar0\par\pard\sb200\li960\sl220\qj \fs20\lang1033\f0 This code is 
dependent from nothing but glib and some typedefs from gda.h 
\hyphpar0\par\pard\sb259\s2\sl380 {\*\bkmkstart ID_OBJECTS}{\*\bkmkend 
ID_OBJECTS}\b\fs34\lang1024\f1 GDA_Server 
Objects\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj \b0\fs20\lang1033\f0 The 
following objects build the base of the gda providers: 
\hyphpar0\par\pard\sb200\li960\sl198\qj \fs18\lang1024\f2 function prefix       
        data structure        source file\sa0\par\fi0\sb0
-gda_server_command     Gda_ServerCommand     
gda-server-command.c\sa0\par\fi0\sb0
-gda_server_connection  Gda_ServerConnection  
gda-server-connection.c\sa0\par\fi0\sb0
-gda_server_recordset   Gda_ServerRecordset   
gda-server-recordset.c\sa0\par\fi0\sb0
-  \hyphpar0\par\pard\sb200\li960\sl220\qj \fs20\lang1033\f0 The code of these 
objects is really neither gnome nor gtk dependent. CORBA dependency is only 
because they use some types defined in the idl. 
\hyphpar0\par\pard\sb100\li960\sl220\qj Unfortunately, the header file 
gda-server-impl.h is very general (it's used by all sources in the gda-srv 
directory) and thus contains much stuff that wouldn't be needed by these files. 
So you can't even compile the above sources without gnome or gtk although the 
code itself wouldn't need it. \hyphpar0\par\pard\sb100\li960\sl220\qj These 
objects can very much be regarded as "abstract" objects. Each provider must 
"overload" certain functions. This happens by providing a list of functions 
when starting the server code, from where the gda_server_* objects take the 
functions to really call. \hyphpar0\par\pard\sb100\li960\sl220\qj Each of these 
objects provide a member "user_data" that can be used by the specific provider 
code to store backend specific data structures. 
\hyphpar0\par\pard\sb259\s2\sl380 {\*\bkmkstart ID_IMPLOBJECTS}{\*\bkmkend 
ID_IMPLOBJECTS}\b\fs34\lang1024\f1 GDA_Server_Impl 
Objects\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj \b0\fs20\lang1033\f0 
Around the gda-server objects, another layer is built to match the complete idl 
of gda. \hyphpar0\par\pard\sb200\li960\sl198\qj \fs18\lang1024\f2 function 
prefix      data structure           source file\sa0\par\fi0\sb0
-impl_GDA_Parameter   impl_POA_GDA_Parameter   
gda-server-impl-command.c\sa0\par\fi0\sb0
-impl_GDA_Command     impl_POA_GDA_Command     
gda-server-impl-command.c\sa0\par\fi0\sb0
-impl_GDA_Connection  impl_POA_GDA_Connection  
gda-server-impl-connection.c\sa0\par\fi0\sb0
-impl_GDA_Recordset   impl_POA_GDA_Recordset   
gda-server-impl-recordset.c\sa0\par\fi0\sb0
-  \hyphpar0\par\pard\sb200\li960\sl220\qj \fs20\lang1033\f0 These objects are 
neither gnome nor gtk dependent. But they make up complete CORBA-enabled 
objects matching gda.idl. \hyphpar0\par\pard\sb100\li960\sl220\qj One could 
regard these objects as "wrappers" around the gda-server objects to make them 
match CORBA specifications. \hyphpar0\par\pard\sb100\li960\sl220\qj There is no 
gda_server_parameter yet as none of the methods of gda_server_parameter are yet 
implemented :) \hyphpar0\par\pard\sb259\s2\sl380 {\*\bkmkstart 
ID_IMPL}{\*\bkmkend ID_IMPL}\b\fs34\lang1024\f1 
GDA_Server_Impl\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj 
\b0\fs20\lang1033\f0 Unfortunately there is an own object called 
gda-server-impl which has nothing to do with the gda-server-impl-* objects. 
\hyphpar0\par\pard\sb200\li960\sl198\qj \fs18\lang1024\f2 function prefix       
     data structure                 source file\sa0\par\fi0\sb0
-gda_server_impl            Gda_ServerImpl                 
gda-server-impl.c\sa0\par\fi0\sb0
-impl_GDA_ConnectionFactory impl_POA_GDA_ConnectionFactory\sa0\par\fi0\sb0
-gda-server-factory.c\sa0\par\fi0\sb0
-  \hyphpar0\par\pard\sb200\li960\sl220\qj \fs20\lang1033\f0 gda_server_impl is 
a gtk object that represents an instance of a running server. It is used for 
tasks like registering the server into the system, creating the factory etc. 
\hyphpar0\par\pard\sb100\li960\sl220\qj GDA_ConnectionFactory is a CORBA object 
that is able to create new GDA_Connection CORBA objects. It's gnome dependent. 
\hyphpar0\par\pard\sb100\li960\sl220\qj These two objects are really gtk and 
gnome dependent. The dependency results from the way how CORBA servers are 
registered into the system so that clients have a convenient way to find the 
server they want. \hyphpar0\par\pard\sb100\li960\sl220\qj Hopefully these 
dependencies will be removed when OAF is used. 
\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Chapter 5. GDA Server Implementations}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Chapter 5. GDA Server 
Implementations}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
ID_IMPLEMENTATIONS}{\*\bkmkend ID_IMPLEMENTATIONS}\b\fs41\f1 Chapter 5. GDA 
Server Implementations\keepn\hyphpar0\par\pard\sb207\li960\sl220\qj 
\b0\fs20\lang1033\f0 The actual server implementation just implements the 
missing functions mentioned under "gda_server object". 
\hyphpar0\par\pard\sb100\li960\sl220\qj These functions are implemented in 
gda-???-command.c, gda-???-connection.c and gda-???-recordset.c. The main-???.c 
source contains the main() routine for the server executable, which does 
nothing but initialize corba, create a gda_server_impl object and pass to it 
the list of function implementations. The main() function thus is 
gnome-dependent, the rest of the code isn't. 
\hyphpar0\par\pard\sb100\li960\sl220\qj All of these functions use the field 
user_data from the corresponding gda_server_* object to store native data 
structures of the database. \hyphpar0\par\pard\sb100\li960\sl220\qj Some GDA 
servers also implement a configuration tool, which is named gda-???-config and 
has absolutely nothing to do with the implementation of the server, as it's a 
totally high-level application. 
\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Chapter 6. GDA Client Library}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Chapter 6. GDA Client 
Library}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
ID_CLIENTLIBRARY}{\*\bkmkend ID_CLIENTLIBRARY}\b\fs41\f1 Chapter 6. GDA Client 
Library\keepn\hyphpar0\par\pard\sb259\s2\sl380 {\*\bkmkstart 
ID_GDACLIENTOBJECTS}{\*\bkmkend ID_GDACLIENTOBJECTS}\fs34 GDA_* 
Objects\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj \b0\fs20\lang1033\f0 The 
following objects are very much real objects in the sense that they are 
currently implemented as real GtkObjects, wich will soon be changed into 
GObject to make them all Gtk independent. 
\hyphpar0\par\pard\sb200\li960\sl198\qj \fs18\lang1024\f2 function prefix       
    data structure      source file\sa0\par\fi0\sb0
+Database Backend\hyphpar0\par\pard\sb200\li960\sl220\qj \fs20\lang1033\f0  
Between the client and the server, there is the GDA CORBA interface, defined by 
the IDL files in the idl directory. Note that these IDL files contain a lot of 
methods that are neither used nor implemented, and some of them probably never 
will, at least not exactly as they are written down now. So please don't rely 
on all the methods being there if you use the IDL file directly; use only the 
methods that are already implemented server-sided and wrapped in the client 
library. Maybe someday the IDL files will be cleaned 
up.\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Chapter 4. GDA Client Library}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Chapter 4. GDA Client 
Library}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
ID_CLIENTLIBRARY}{\*\bkmkend ID_CLIENTLIBRARY}\b\fs41\f1 Chapter 4. GDA Client 
Library\keepn\hyphpar0\par\pard\sb259\s2\sl380 {\*\bkmkstart 
ID_GDACLIENTOBJECTS}{\*\bkmkend ID_GDACLIENTOBJECTS}\fs34 gda_* 
Objects\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj \b0\fs20\lang1033\f0  The 
following objects are very much real objects in the sense that they are 
currently implemented as real GtkObjects, wich will soon be changed into 
GObject to make them all Gtk independent. 
\hyphpar0\par\pard\sb200\li960\sl198\qj \fs18\lang1024\f2 function prefix       
    data structure      source file\sa0\par\fi0\sb0
 gda_batch            Gda_Batch           gda-batch.c\sa0\par\fi0\sb0
 gda_command          Gda_Command         gda-command.c\sa0\par\fi0\sb0
 gda_connection       Gda_Connection      gda-connection.c\sa0\par\fi0\sb0
@@ -54,13 +37,29 @@
 gda_error            Gda_Error           gda-error.c\sa0\par\fi0\sb0
 gda_field            Gda_Field           gda-field.c\sa0\par\fi0\sb0
 gda_recordset        Gda_Recordset       gda-recordset.c\sa0\par\fi0\sb0
-  \hyphpar0\par\pard\sb259\s2\sl380 {\*\bkmkstart ID_GDASUBOBJECTS}{\*\bkmkend 
ID_GDASUBOBJECTS}\b\fs34\f1 GDA Sub 
Objects\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj \b0\fs20\lang1033\f0 The 
code for the stub implementation is generated by orbit-idl automagically. 
Anyway, as it is its own layer, and the functions are called by the above gda_* 
objects, they are listed below: \hyphpar0\par\pard\sb200\li960\sl198\qj 
\fs18\lang1024\f2 function prefix  data structure  source file\sa0\par\fi0\sb0
-GDA_Fieldx       GDA_Fieldx      gda-stubs.c\sa0\par\fi0\sb0
-GDA_Parameter    GDA_Parameter   gda-stubs.c\sa0\par\fi0\sb0
-GDA_Command      GDA_Command     gda-stubs.c\sa0\par\fi0\sb0
-GDA_Connection   GDA_Connection  gda-stubs.c\sa0\par\fi0\sb0
-GDA_Recordset    GDA_Recordset   gda-stubs.c\sa0\par\fi0\sb0
-  \hyphpar0\par\pard\sb200\li960\sl220\qj \fs20\lang1033\f0 The GDA_Fieldx 
stub seems to be neither used from the gda-client library nor implemented by 
the gda-server library. 
\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Appendix A. GNU General Public License}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Appendix A. GNU General Public 
License}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
ID_APPENDIXES}{\*\bkmkend ID_APPENDIXES}{\*\bkmkstart _104}{\*\bkmkend 
_104}\b\fs41\f1 Appendix A. GNU General Public License 
\keepn\hyphpar0\par\pard\sb207\li960\sl198\qj \b0\fs18\f2                    
GNU GENERAL PUBLIC LICENSE\sa0\par\fi0\sb0
+  \hyphpar0\par\pard\sb200\li960\sl220\qj \fs20\lang1033\f0  These objects are 
the ones directly used by GDA client programs. They are extensively described 
in the available documentation. \hyphpar0\par\pard\sb100\li960\sl220\qj  
Although these objects have very much built-in functionality they provide by 
themselves, they can simplistically be regarded as wrappers around the CORBA 
objects defined in gda.idl. Therefore, many of the object functions simply call 
the appropriate underlying CORBA Stub function. 
\hyphpar0\par\pard\sb259\s2\sl380 {\*\bkmkstart ID_GDASTUBOBJECTS}{\*\bkmkend 
ID_GDASTUBOBJECTS}\b\fs34\lang1024\f1 GDA Stub 
Objects\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj \b0\fs20\lang1033\f0  The 
code for the stub implementation is generated by orbit-idl automagically. 
Anyway, as it is its own layer, and the functions are called by the above gda_* 
objects, they are listed below: \hyphpar0\par\pard\sb200\li960\sl198\qj 
\fs18\lang1024\f2 function prefix       data structure        source 
file\sa0\par\fi0\sb0
+GDA_Fieldx            GDA_Fieldx            gda-stubs.c\sa0\par\fi0\sb0
+GDA_Parameter         GDA_Parameter         gda-stubs.c\sa0\par\fi0\sb0
+GDA_Command           GDA_Command           gda-stubs.c\sa0\par\fi0\sb0
+GDA_Connection        GDA_Connection        gda-stubs.c\sa0\par\fi0\sb0
+GDA_Recordset         GDA_Recordset         gda-stubs.c\sa0\par\fi0\sb0
+GDA_ConnectionFactory GDA_ConnectionFactory gda-stubs.c\sa0\par\fi0\sb0
+  \hyphpar0\par\pard\sb200\li960\sl220\qj \fs20\lang1033\f0  The GDA_Fieldx 
stub seems to be neither used from the gda-client library nor implemented by 
the gda-server library. It's either a remnant of the past or a start of a 
feature that will be created in the future. 
\hyphpar0\par\pard\sb100\li960\sl220\qj  The GDA_Parameter stub is not used by 
any of the gda_* objects. This is probably reserved for future use. 
\hyphpar0\par\pard\sb100\li960\sl220\qj  The GDA_ConnectionFactory is used by 
gda_connection to create a new connection. 
\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Chapter 5. GDA Server Library}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Chapter 5. GDA Server 
Library}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
ID_GDASERVERLIB}{\*\bkmkend ID_GDASERVERLIB}\b\fs41\f1 Chapter 5. GDA Server 
Library\keepn\hyphpar0\par\pard\sb259\s2\sl380 {\*\bkmkstart 
ID_IMPLOBJECTS}{\*\bkmkend ID_IMPLOBJECTS}\fs34 impl_GDA 
Objects\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj \b0\fs20\lang1033\f0  Now 
we move on the server side of the CORBA connection. These objects are the 
implementation of the GDA CORBA interface. 
\hyphpar0\par\pard\sb200\li960\sl198\qj \fs18\lang1024\f2 function prefix       
     data structure  source file\sa0\par\fi0\sb0
+impl_GDA_Parameter         impl_POA_GDA_*  
gda-server-impl-command.c\sa0\par\fi0\sb0
+impl_GDA_Command           impl_POA_GDA_*  
gda-server-impl-command.c\sa0\par\fi0\sb0
+impl_GDA_Connection        impl_POA_GDA_*  
gda-server-impl-connection.c\sa0\par\fi0\sb0
+impl_GDA_Recordset         impl_POA_GDA_*  
gda-server-impl-recordset.c\sa0\par\fi0\sb0
+impl_GDA_ConnectionFactory impl_POA_GDA_*  
gda-server-impl-factory.c\sa0\par\fi0\sb0
+  \hyphpar0\par\pard\sb200\li960\sl220\qj \fs20\lang1033\f0  These objects are 
neither gnome nor gtk dependent. But they make up complete CORBA-enabled 
objects matching gda.idl. \hyphpar0\par\pard\sb100\li960\sl220\qj  One could 
regard these objects as "wrappers" around the gda-server objects to make them 
match CORBA specifications; only the ConnectionFactory object has no underlying 
gda_server-object. \hyphpar0\par\pard\sb100\li960\sl220\qj  There is no 
gda_server_parameter yet as none of the methods of gda_server_parameter are yet 
implemented :) \hyphpar0\par\pard\sb100\li960\sl220\qj  Note that there is a 
source file called gda-server-impl.c which is, unlike the above source files, 
not the implementation of a CORBA interface. \hyphpar0\par\pard\sb259\s2\sl380 
{\*\bkmkstart ID_OBJECTS}{\*\bkmkend ID_OBJECTS}\b\fs34\lang1024\f1 gda_server 
Objects\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj \b0\fs20\lang1033\f0  The 
following objects build the base of the gda providers: 
\hyphpar0\par\pard\sb200\li960\sl198\qj \fs18\lang1024\f2 function prefix       
  data structure        source file\sa0\par\fi0\sb0
+gda_server_command     Gda_ServerCommand     
gda-server-command.c\sa0\par\fi0\sb0
+gda_server_connection  Gda_ServerConnection  
gda-server-connection.c\sa0\par\fi0\sb0
+gda_server_recordset   Gda_ServerRecordset   
gda-server-recordset.c\sa0\par\fi0\sb0
+  \hyphpar0\par\pard\sb200\li960\sl220\qj \fs20\lang1033\f0  The code of these 
objects is really neither gnome nor gtk dependent. CORBA dependency is only 
because they use some types defined in the idl. 
\hyphpar0\par\pard\sb100\li960\sl220\qj  Unfortunately, the header file 
gda-server-impl.h is very general (it's used by all sources in the gda-srv 
directory) and thus contains much stuff that wouldn't be needed by these files. 
So you can't even compile the above sources without gnome or gtk although the 
code itself wouldn't need it. \hyphpar0\par\pard\sb100\li960\sl220\qj  These 
objects can very much be regarded as "abstract" objects. Each provider must 
"overload" certain functions. This happens by providing a list of functions 
when starting the server code, from where the gda_server_* objects take the 
functions to really call. \hyphpar0\par\pard\sb100\li960\sl220\qj  Each of 
these objects provide a member "user_data" that can be used by the specific 
provider code to store backend specific data structures. 
\hyphpar0\par\pard\sb259\s2\sl380 {\*\bkmkstart ID_HELPEROBJECTS}{\*\bkmkend 
ID_HELPEROBJECTS}\b\fs34\lang1024\f1 gda_server Helper 
Objects\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj \b0\fs20\lang1033\f0  The 
following objects are absolute low-level helper objects designed to ease the 
developement of gda server implementations: 
\hyphpar0\par\pard\sb200\li960\sl198\qj \fs18\lang1024\f2 function prefix       
       data structure        source file\sa0\par\fi0\sb0
+gda_server_error       Gda_ServerError       gda-server-error.c\sa0\par\fi0\sb0
+gda_server_field       Gda_ServerField       gda-server-field.c\sa0\par\fi0\sb0
+  \hyphpar0\par\pard\sb200\li960\sl220\qj \fs20\lang1033\f0  This code is 
dependent from nothing but glib and some typedefs from gda.h 
\hyphpar0\par\pard\sb259\s2\sl380 {\*\bkmkstart ID_IMPL}{\*\bkmkend 
ID_IMPL}\b\fs34\lang1024\f1 
gda_server_impl\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj 
\b0\fs20\lang1033\f0  Unfortunately there is an own object called 
gda-server-impl which has nothing to do with the gda-server-impl-* objects. 
\hyphpar0\par\pard\sb200\li960\sl198\qj \fs18\lang1024\f2 function prefix       
     data structure                 source file\sa0\par\fi0\sb0
+gda_server_impl            Gda_ServerImpl                 
gda-server-impl.c\sa0\par\fi0\sb0
+  \hyphpar0\par\pard\sb200\li960\sl220\qj \fs20\lang1033\f0  gda_server_impl 
is a gtk object (the only one in the server library) that represents an 
instance of a running server. It is used for tasks like registering the server 
into the system, creating the factory etc. It is mainly used by the providers. 
Also, the list of callback functions is stored in the data structure of 
Gda_ServerImpl. \hyphpar0\par\pard\sb100\li960\sl220\qj  Note that the 
functions gda_server_impl_exception, gda_server_impl_make_error_buffer and 
gda_server_impl_find can not be regarded as methods of the gda_server_impl 
pseudo-object, but are rather unrelated helper functions that are used by the 
gda-server library itself and/or by the providers. 
\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Chapter 6. GDA Providers}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Chapter 6. GDA 
Providers}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
ID_PROVIDERS}{\*\bkmkend ID_PROVIDERS}\b\fs41\f1 Chapter 6. GDA 
Providers\keepn\hyphpar0\par\pard\sb207\li960\sl220\qj \b0\fs20\lang1033\f0  
The actual provider implementation just implements the missing functions 
mentioned under "gda_server objects".\hyphpar0\par\pard\sb100\li960\sl220\qj  
These functions are implemented in gda-???-command.c, gda-???-connection.c and 
gda-???-recordset.c. The main-???.c source contains the main() routine for the 
server executable, which does nothing but initialize corba, create a 
gda_server_impl object and pass to it the list of function implementations. The 
main() function thus is GTK-dependent, the rest of the code 
isn't.\hyphpar0\par\pard\sb100\li960\sl220\qj  All of these functions use the 
field user_data from the corresponding gda_server_* object to store native data 
structures of the 
database.\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Appendix A. GNU General Public License}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Appendix A. GNU General Public 
License}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
ID_APPENDIXES}{\*\bkmkend ID_APPENDIXES}{\*\bkmkstart _106}{\*\bkmkend 
_106}\b\fs41\f1 Appendix A. GNU General Public License 
\keepn\hyphpar0\par\pard\sb207\li960\sl198\qj \b0\fs18\f2                   GNU 
GENERAL PUBLIC LICENSE\sa0\par\fi0\sb0
                        Version 2, June 1991\sa0\par\fi0\sb0
 \sa0\par\fi0\sb0
  Copyright (C) 1989, 1991 Free Software Foundation, Inc.\sa0\par\fi0\sb0
@@ -401,7 +400,7 @@
 library.  If this is what you want to do, use the GNU Library 
General\sa0\par\fi0\sb0
 Public License instead of this License.\sa0\par\fi0\sb0
 \sa0\par\fi0\sb0
-  
\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Appendix B. GNU Free Documentation License}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Appendix B. GNU Free Documentation 
License}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
_107}{\*\bkmkend _107}\b\fs41\f1 Appendix B. GNU Free Documentation License 
\keepn\hyphpar0\par\pard\sb207\li960\sl198\qj \b0\fs18\f2                GNU 
Free Documentation License\sa0\par\fi0\sb0
+  
\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Appendix B. GNU Free Documentation License}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Appendix B. GNU Free Documentation 
License}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
_109}{\*\bkmkend _109}\b\fs41\f1 Appendix B. GNU Free Documentation License 
\keepn\hyphpar0\par\pard\sb207\li960\sl198\qj \b0\fs18\f2                GNU 
Free Documentation License\sa0\par\fi0\sb0
                    Version 1.1, March 2000\sa0\par\fi0\sb0
 \sa0\par\fi0\sb0
  Copyright (C) 2000  Free Software Foundation, Inc.\sa0\par\fi0\sb0
Index: gnue/docs/GNUeObjectServer.pdf
Index: gnue/docs/GNUeObjectServer.ps
diff -u gnue/docs/GNUeObjectServer.ps:1.1 gnue/docs/GNUeObjectServer.ps:1.2
--- gnue/docs/GNUeObjectServer.ps:1.1   Wed Sep 20 23:33:43 2000
+++ gnue/docs/GNUeObjectServer.ps       Sun Oct  1 00:43:03 2000
@@ -1,7 +1,7 @@
 %!PS-Adobe-2.0
 %%Creator: dvips(k) 5.86 Copyright 1999 Radical Eye Software
 %%Title: main.dvi
-%%Pages: 35
+%%Pages: 36
 %%PageOrder: Ascend
 %%BoundingBox: 0 0 596 842
 %%DocumentFonts: Helvetica-Bold Times-Roman Times-Bold Times-Italic
@@ -10,7 +10,7 @@
 %DVIPSWebPage: (www.radicaleye.com)
 %DVIPSCommandLine: dvips main.dvi -o main.ps
 %DVIPSParameters: dpi=600, compressed
-%DVIPSSource:  TeX output 2000.09.20:2323
+%DVIPSSource:  TeX output 2000.09.28:0752
 %%BeginProcSet: texc.pro
 %!
 /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S
@@ -320,28 +320,28 @@
 45 45 45 45 5[45 45 45 45 45 45 45 45 45 45 45 45 45
 45 45 45 2[45 45 45 4[45 34[{TeXBase1Encoding ReEncodeFont}72
 74.7198 /Courier rf /Fb 134[37 37 2[42 23 32 32 1[42
-42 42 60 23 2[23 42 42 1[37 42 37 42 42 11[60 46 3[51
-1[55 1[46 4[60 51 1[60 55 51 51 7[42 42 42 42 42 42 42
-42 42 42 1[21 46[{TeXBase1Encoding ReEncodeFont}41 83.022
-/Times-Italic rf /Fc 133[37 42 42 60 42 46 28 32 37 1[46
-42 46 69 23 1[28 23 46 42 28 37 46 37 46 42 11[60 55
-46 60 1[51 65 60 78 3[32 4[60 60 55 60 7[42 42 42 42
-42 42 42 42 42 42 1[21 46[{TeXBase1Encoding ReEncodeFont}48
+42 42 60 23 1[23 23 42 42 1[37 42 37 42 42 11[60 46 1[51
+1[51 60 55 1[46 4[60 51 1[60 55 51 51 7[42 42 42 42 42
+42 42 42 42 42 1[21 46[{TeXBase1Encoding ReEncodeFont}44
+83.022 /Times-Italic rf /Fc 133[37 42 42 60 42 46 28
+32 37 1[46 42 46 69 23 1[28 23 46 42 28 37 46 37 46 42
+11[60 55 46 60 1[51 65 60 78 3[32 4[60 60 55 60 7[42
+42 42 42 42 42 42 42 42 42 1[21 46[{TeXBase1Encoding ReEncodeFont}48
 83.022 /Times-Bold rf /Fd 133[86 96 96 134 96 105 57
 96 67 1[105 105 105 153 48 1[48 48 105 105 57 96 105
 96 105 96 11[124 105 115 124 1[115 134 124 143 105 2[48
 1[134 105 1[124 124 124 124 7[96 96 96 96 96 96 96 96
 96 96 1[48 46[{TeXBase1Encoding ReEncodeFont}51 172.154
-/Helvetica-Bold rf /Fe 134[33 33 48 33 33 18 26 22 1[33
-33 33 52 18 33 1[18 33 33 22 29 33 29 33 29 10[48 48
-41 37 2[37 1[48 1[41 2[22 1[48 37 1[48 44 44 48 5[18
+/Helvetica-Bold rf /Fe 106[23 27[33 33 48 33 33 18 26
+22 1[33 33 33 52 18 33 1[18 33 33 22 29 33 29 33 29 10[48
+48 41 37 2[37 1[48 1[41 2[22 1[48 37 1[48 44 44 48 5[18
 8[33 33 33 18 17 22 17 2[22 22 5[27 34[{TeXBase1Encoding ReEncodeFont}
-48 66.4176 /Times-Roman rf /Ff 86[63 46[37 42 42 60 42
+49 66.4176 /Times-Roman rf /Ff 86[63 46[37 42 42 60 42
 42 23 32 28 42 42 42 42 65 23 42 23 23 42 42 28 37 42
 37 42 37 1[42 1[28 1[28 1[60 60 78 1[60 51 46 55 60 46
 60 60 74 51 1[32 28 60 60 46 51 60 55 55 60 1[37 1[47
-1[23 23 42 2[42 42 42 42 42 42 42 23 21 28 21 47 1[28
-28 28 65 3[34 28 29[46 46 2[{TeXBase1Encoding ReEncodeFont}78
+1[23 23 3[42 42 42 42 42 42 42 23 21 28 21 47 1[28 28
+28 65 3[34 28 29[46 46 2[{TeXBase1Encoding ReEncodeFont}77
 83.022 /Times-Roman rf /Fg 137[46 51 28 46 32 1[51 51
 51 1[23 1[23 23 3[46 51 46 51 46 11[60 1[55 2[55 65 60
 6[65 1[55 23[28 45[{TeXBase1Encoding ReEncodeFont}24
@@ -1396,7 +1396,7 @@
 -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
 Black Black -1 w(.)p Black Black(.)p Black Black(.)p
 Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black(19)596 3476 y(15.)g(Data)g(T)-6 b(ypes)p Black
+Black(20)596 3476 y(15.)g(Data)g(T)-6 b(ypes)p Black
 14 w(.)p Black Black(.)p Black Black(.)p Black Black
 -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
 Black Black -1 w(.)p Black Black(.)p Black Black(.)p
@@ -1435,7 +1435,7 @@
 -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
 Black Black -1 w(.)p Black Black(.)p Black Black(.)p
 Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black(20)795 3587 y Ff(T)g(e)o(xt)p Black 4 w(.)p Black
+Black(21)795 3587 y Ff(T)g(e)o(xt)p Black 4 w(.)p Black
 Black -1 w(.)p Black Black(.)p Black Black -1 w(.)p Black
 Black(.)p Black Black(.)p Black Black(.)p Black Black
 -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
@@ -1476,7 +1476,7 @@
 Black Black(.)p Black Black -1 w(.)p Black Black(.)p
 Black Black(.)p Black Black(.)p Black Black -1 w(.)p
 Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black(20)795 3678 y(Numeric)p
+Black -1 w(.)p Black Black(.)p Black(21)795 3678 y(Numeric)p
 Black 4 w(.)p Black Black -2 w(.)p Black Black(.)p Black
 Black(.)p Black Black(.)p Black Black -1 w(.)p Black
 Black(.)p Black Black(.)p Black Black(.)p Black Black
@@ -1515,7 +1515,7 @@
 Black(.)p Black Black(.)p Black Black -1 w(.)p Black
 Black(.)p Black Black(.)p Black Black(.)p Black Black
 -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black(20)795 3769
+Black Black -1 w(.)p Black Black(.)p Black(21)795 3769
 y(Mone)o(y/Currenc)o(y)p Black 16 w(.)p Black Black(.)p
 Black Black(.)p Black Black -1 w(.)p Black Black(.)p
 Black Black(.)p Black Black(.)p Black Black -1 w(.)p
@@ -1550,7 +1550,7 @@
 Black(.)p Black Black(.)p Black Black -1 w(.)p Black
 Black(.)p Black Black(.)p Black Black(.)p Black Black
 -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black(20)795 3861
+Black Black -1 w(.)p Black Black(.)p Black(21)795 3861
 y(Date/T)m(ime)p Black 5 w(.)p Black Black -1 w(.)p Black
 Black -1 w(.)p Black Black(.)p Black Black(.)p Black
 Black(.)p Black Black -1 w(.)p Black Black(.)p Black
@@ -1589,7 +1589,7 @@
 Black -1 w(.)p Black Black(.)p Black Black(.)p Black
 Black(.)p Black Black -1 w(.)p Black Black(.)p Black
 Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black(20)795 3952 y(Summary)p Black 13 w(.)p
+Black(.)p Black(21)795 3952 y(Summary)p Black 13 w(.)p
 Black Black -2 w(.)p Black Black(.)p Black Black -1 w(.)p
 Black Black(.)p Black Black(.)p Black Black(.)p Black
 Black -1 w(.)p Black Black(.)p Black Black(.)p Black
@@ -1627,7 +1627,7 @@
 Black Black(.)p Black Black(.)p Black Black -1 w(.)p
 Black Black(.)p Black Black(.)p Black Black(.)p Black
 Black -1 w(.)p Black Black(.)p Black Black(.)p Black
-Black(.)p Black Black -1 w(.)p Black Black(.)p Black(20)596
+Black(.)p Black Black -1 w(.)p Black Black(.)p Black(21)596
 4063 y Fc(16.)19 b(Security)p Black 12 w(.)p Black Black
 -1 w(.)p Black Black(.)p Black Black -1 w(.)p Black Black(.)p
 Black Black(.)p Black Black(.)p Black Black(.)p Black
@@ -1668,7 +1668,7 @@
 Black -1 w(.)p Black Black(.)p Black Black(.)p Black
 Black(.)p Black Black -1 w(.)p Black Black(.)p Black
 Black(.)p Black Black(.)p Black Black -1 w(.)p Black
-Black(.)p Black(22)596 4175 y(I.)h(A)n(ppendixes)p Black
+Black(.)p Black(23)596 4175 y(I.)h(A)n(ppendixes)p Black
 7 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
 Black Black(.)p Black Black -1 w(.)p Black Black(.)p
 Black Black(.)p Black Black(.)p Black Black -1 w(.)p
@@ -1707,7 +1707,7 @@
 Black Black(.)p Black Black -1 w(.)p Black Black(.)p
 Black Black(.)p Black Black(.)p Black Black -1 w(.)p
 Black Black(.)p Black Black(.)p Black Black(.)p Black
-Black -1 w(.)p Black Black(.)p Black(23)795 4286 y Ff(A.)g(GNU)h
+Black -1 w(.)p Black Black(.)p Black(24)795 4286 y Ff(A.)g(GNU)h
 (General)e(Public)h(License)p Black 7 w(.)p Black Black
 -1 w(.)p Black Black(.)p Black Black -1 w(.)p Black Black(.)p
 Black Black(.)p Black Black(.)p Black Black -1 w(.)p
@@ -1735,7 +1735,7 @@
 -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
 Black Black -1 w(.)p Black Black(.)p Black Black(.)p
 Black Black(.)p Black Black -1 w(.)p Black Black(.)p
-Black(23)795 4377 y(B.)h(GNU)f(Free)h(Documentation)c(License)p
+Black(24)795 4377 y(B.)h(GNU)f(Free)h(Documentation)c(License)p
 Black 14 w(.)p Black Black -1 w(.)p Black Black(.)p Black
 Black -1 w(.)p Black Black(.)p Black Black(.)p Black
 Black(.)p Black Black -1 w(.)p Black Black(.)p Black
@@ -1759,7 +1759,7 @@
 Black(.)p Black Black(.)p Black Black -1 w(.)p Black
 Black(.)p Black Black(.)p Black Black(.)p Black Black
 -1 w(.)p Black Black(.)p Black Black(.)p Black Black(.)p
-Black Black -1 w(.)p Black Black(.)p Black(29)p Black
+Black Black -1 w(.)p Black Black(.)p Black(30)p Black
 3642 5876 a Fb(3)p Black eop
 %%Page: 4 4
 4 3 bop Black Black 197 422 a Fd(Chapter)48 b(1.)g(Over)r(vie)m(w)596
@@ -1862,40 +1862,52 @@
 2190 y(usage.)30 b(Installation)g(of)g(ne)n(w)h(modules)f(will)i
 (require)d(automated)g(tools)i(that)g(set)h(up)e(databases)h(and)596
 2281 y(object)19 b(serv)o(ers)h(correctly)-5 b(.)596
-2414 y(Example)18 b(of)i(a)h(\(relati)n(v)o(ely)e(simple\))g(multi)i
-(serv)o(er)e(system:)596 2547 y(A)g(chain)f(of)g(stores)h(runs)f(a)h
-(single)f(computer)f(in)i(each)f(store)g(to)h(manage)e(that)i(store')-5
-b(s)19 b(database.)f(Ev)o(en)f(if)596 2638 y(netw)o(ork)i(links)i(f)o
-(ail,)g(the)f(LAN)h(in)g(the)g(store)f(will)i(still)g(operate)d
-(correctly)-5 b(.)19 b(A)i(computer)e(at)i(head)f(of)n(\002ce)596
-2730 y(can)26 b(connect)g(to)g(the)h(store)g(systems)g(at)g
-(appropriate)e(times)i(to)g(retrie)n(v)o(e)e(accounting)g(information.)
-f(A)596 2821 y(store)29 b(manager)e(can)i(tak)o(e)g(a)g(laptop)g(with)g
-(another)e(object)i(serv)o(er)f(home,)g(and)g(use)i(this)f(to)g(access)
-h(a)596 2912 y(database)19 b(-)h(the)h(object)e(serv)o(er)g(on)h(the)g
-(laptop)g(will)g(manage)f(b)n(uf)n(fering)f(of)i(data)g(to)g(optimise)g
-(useage)g(of)596 3004 y(the)k(slo)n(w)h(netw)o(ork)f(link.)g(The)h
-(store)f(computers)f(can)i(access)g(the)g(compan)o(y')-5
-b(s)23 b(w)o(arehouse)g(to)i(request)596 3095 y(ne)n(w)g(stock)h
-(shipments,)f(and)g(the)h(w)o(arehouse)f(can,)g(in)h(turn,)f(arrange)g
-(purcahses)f(of)i(ne)n(w)g(stock)g(from)596 3186 y(suppliers,)19
-b(either)h(automatically)e(or)i(with)h(manual)e(appro)o(v)n(al.)596
-3319 y(In)31 b(this)h(system,)f(the)h(GNUe)g(object)f(serv)o(er)f(will)
-j(pro)o(vide)c(the)j(data)f(management)e(system,)j(F)o(orms)596
-3410 y(w)o(ould)19 b(run)h(the)h(user)f(interf)o(ace)g(for)g(v)n
-(arious)f(applications)g(such)i(as)g(point)f(of)g(sale)h(terminals,)f
-(manage-)596 3502 y(ment)j(reports,)g(and)h(so)g(on.)g(CORB)m(A)h(w)o
-(ould)f(be)g(the)g(communication)d(medium,)i(managing)f(netw)o(ork)596
-3593 y(traf)n(\002c)d(and)h(most)g(of)g(the)g(security)-5
-b(.)596 3726 y(\(Note:)18 b(Communication)e(between)h(object)h(serv)o
-(ers)g(has)h(not)f(yet)h(been)e(de\002ned,)h(b)n(ut)g(the)h(intention)e
-(is)i(to)596 3817 y(reuse)j(the)h('Database')f(interf)o(ace,)f(so)i
-(that)g(an)g(application)e(doesn')o(t)g(care)i(if)g(data)g(is)g(stored)
-f(directly)g(in)596 3908 y(a)g(GD)m(A)f(enabled)g(database,)g(or)g(on)g
-(another)g(object)g(serv)o(er)-5 b(.)21 b(Security)g(and)g(system)h
-(con\002guration)d(will)596 4000 y(also)h(be)g(issues)h(that)g(need)e
-(to)h(be)g(de)n(v)o(eloped,)e(as)j(well.\))p Black 3641
-5876 a Fb(6)p Black eop
+2414 y(Another)17 b(option)g(is)i(to)g(e)o(xport)e(data)h(from)f(the)i
+(one)f(database)f(and)h(import)g(it)h(to)f(the)h(other)e(database)h
+(\(see)596 2505 y(Batch)i(T)-7 b(ables)20 b(in)h(Module)e(Designers)h
+(Guide\).)596 2638 y(The)f(adv)n(antages)g(are:)p Black
+596 2854 a Fe(\225)p Black 80 w Ff(W)-7 b(e)22 b(can)e(use)g(that)g(e)n
+(v)o(en)g(if)g(not)g(both)f(communication)f(partners)h(use)h(GNUe)p
+Black 596 2987 a Fe(\225)p Black 80 w Ff(W)-7 b(e)22
+b(can)e(do)f(this)i(asynchronously;)c(e)n(v)o(en)i(via)h(streamer)g
+(tape.)p Black 596 3120 a Fe(\225)p Black 80 w Ff(IMO)g(we)h(will)g(ha)
+n(v)o(e)f(less)h(issues)g(with)f(security)-5 b(.)p Black
+596 3253 a Fe(\225)p Black 80 w Ff(Pre)n(v)o(ents)20
+b(customers)f(from)g(ha)n(ving)g(access)i(to)f(my)g(object)g(serv)o(er)
+-5 b(.)596 3385 y(Example)18 b(of)i(a)h(\(relati)n(v)o(ely)e(simple\))g
+(multi)i(serv)o(er)e(system:)596 3518 y(A)g(chain)f(of)g(stores)h(runs)
+f(a)h(single)f(computer)f(in)i(each)f(store)g(to)h(manage)e(that)i
+(store')-5 b(s)19 b(database.)f(Ev)o(en)f(if)596 3610
+y(netw)o(ork)i(links)i(f)o(ail,)g(the)f(LAN)h(in)g(the)g(store)f(will)i
+(still)g(operate)d(correctly)-5 b(.)19 b(A)i(computer)e(at)i(head)f(of)
+n(\002ce)596 3701 y(can)26 b(connect)g(to)g(the)h(store)g(systems)g(at)
+g(appropriate)e(times)i(to)g(retrie)n(v)o(e)e(accounting)g
+(information.)f(A)596 3792 y(store)29 b(manager)e(can)i(tak)o(e)g(a)g
+(laptop)g(with)g(another)e(object)i(serv)o(er)f(home,)g(and)g(use)i
+(this)f(to)g(access)h(a)596 3884 y(database)19 b(-)h(the)h(object)e
+(serv)o(er)g(on)h(the)g(laptop)g(will)g(manage)f(b)n(uf)n(fering)f(of)i
+(data)g(to)g(optimise)g(useage)g(of)596 3975 y(the)k(slo)n(w)h(netw)o
+(ork)f(link.)g(The)h(store)f(computers)f(can)i(access)g(the)g(compan)o
+(y')-5 b(s)23 b(w)o(arehouse)g(to)i(request)596 4066
+y(ne)n(w)g(stock)h(shipments,)f(and)g(the)h(w)o(arehouse)f(can,)g(in)h
+(turn,)f(arrange)g(purcahses)f(of)i(ne)n(w)g(stock)g(from)596
+4158 y(suppliers,)19 b(either)h(automatically)e(or)i(with)h(manual)e
+(appro)o(v)n(al.)596 4290 y(In)31 b(this)h(system,)f(the)h(GNUe)g
+(object)f(serv)o(er)f(will)j(pro)o(vide)c(the)j(data)f(management)e
+(system,)j(F)o(orms)596 4382 y(w)o(ould)19 b(run)h(the)h(user)f(interf)
+o(ace)g(for)g(v)n(arious)f(applications)g(such)i(as)g(point)f(of)g
+(sale)h(terminals,)f(manage-)596 4473 y(ment)j(reports,)g(and)h(so)g
+(on.)g(CORB)m(A)h(w)o(ould)f(be)g(the)g(communication)d(medium,)i
+(managing)f(netw)o(ork)596 4564 y(traf)n(\002c)d(and)h(most)g(of)g(the)
+g(security)-5 b(.)596 4697 y(\(Note:)18 b(Communication)e(between)h
+(object)h(serv)o(ers)g(has)h(not)f(yet)h(been)e(de\002ned,)h(b)n(ut)g
+(the)h(intention)e(is)i(to)596 4789 y(reuse)j(the)h('Database')f
+(interf)o(ace,)f(so)i(that)g(an)g(application)e(doesn')o(t)g(care)i(if)
+g(data)g(is)g(stored)f(directly)g(in)596 4880 y(a)g(GD)m(A)f(enabled)g
+(database,)g(or)g(on)g(another)g(object)g(serv)o(er)-5
+b(.)21 b(Security)g(and)g(system)h(con\002guration)d(will)596
+4971 y(also)h(be)g(issues)h(that)g(need)e(to)h(be)g(de)n(v)o(eloped,)e
+(as)j(well.\))p Black 3641 5876 a Fb(6)p Black eop
 %%Page: 7 7
 7 6 bop Black Black 197 422 a Fd(Chapter)48 b(4.)g(Business)f(T)-14
 b(o)48 b(Business)197 612 y(Operation)596 843 y Ff(Allo)n(wing)24
@@ -2347,10 +2359,21 @@
 b(tables)h(promise)f(\003e)o(xibility)h(to)g(translate)h(data)f
 (elements)g(between)f(dif)n(ferent)g(domains,)596 5146
 y(b)n(ut)20 b(add)f(an)h(additional)f(layer)h(of)g(comple)o(xity)e
-(into)i(situations)g(where)g(the)o(y)f(are)h(not)g(needed.)p
+(into)i(situations)g(where)g(the)o(y)f(are)h(not)g(needed.)596
+5278 y(Further)g(discussion)h(about)g(using)g(seeded)g(numbers)f(asa)j
+(primary)d(k)o(e)o(ys)h(in)h(all)g(tables)g(vs.)g(meaningful)596
+5370 y(data)27 b(primary)e(k)o(e)o(ys)j(needs)e(further)g(real)i(time)f
+(discussion.)g(There)f(are)i(adv)n(antages)d(/)j(disadv)n(antages)p
 Black 3601 5876 a Fb(18)p Black eop
 %%Page: 19 19
-19 18 bop Black Black 197 422 a Fd(Chapter)48 b(14.)f(Ref)n(erential)h
+19 18 bop Black 2572 -132 a Fb(Chapter)20 b(13.)g(Object)g
+(Relationships)p Black 596 380 a Ff(to)25 b(all)g(that)g(are)g(not)f
+(fully)g(encompassed)g(in)h(this)g(document)e(and)h(much)g(easier)h(to)
+g(relay)f(in)h(real)g(time)596 471 y(discussion.)19 b(From)h(which)f
+(this)i(document)d(can)i(be)g(modi\002ed)f(with)i(results)f(of)g(that)g
+(discussion.)p Black 3601 5876 a Fb(19)p Black eop
+%%Page: 20 20
+20 19 bop Black Black 197 422 a Fd(Chapter)48 b(14.)f(Ref)n(erential)h
 (Integrity)596 657 y Ff(This)24 b(is)i(an)e(important)f(aspect)i(of)f
 (an)o(y)g(comple)o(x)f(database)h(system.)g(A)h(corrupt)e(database,)h
 (caused)g(by)596 748 y(writing)i(erroneous)f(v)n(alues)i(to)g
@@ -2360,9 +2383,9 @@
 (requried)f(to)i(enforce)596 931 y(referential)18 b(inte)o(grity)h(at)i
 (all)g(times.)596 1063 y(Ho)n(we)n(v)o(er)m(,)d(no)h(decisions)h(ha)n
 (v)o(e)g(been)f(made)h(as)h(to)f(serv)o(er)f(code)h(to)g(support)f
-(this.)p Black 3601 5876 a Fb(19)p Black eop
-%%Page: 20 20
-20 19 bop Black Black 197 422 a Fd(Chapter)48 b(15.)f(Data)h(T)-10
+(this.)p Black 3601 5876 a Fb(20)p Black eop
+%%Page: 21 21
+21 20 bop Black Black 197 422 a Fd(Chapter)48 b(15.)f(Data)h(T)-10
 b(ypes)596 654 y Ff(A)26 b(range)e(of)i(data)g(types)f(for)g(\002elds)h
 (will)h(need)e(to)h(be)f(supported.)f(A)i(number)e(of)i(basic)f
 (requirements)596 745 y(e)o(xist,)20 b(b)n(ut)g(no)g(de\002nate)f
@@ -2415,9 +2438,9 @@
 (strings.)596 5174 y(option:)c(a)j(32)e(bit)h(v)n(alue)g(can)f(be)h
 (used,)g(as)g(in)h(UNIX,)e(and)h(the)g(application)e(has)i(to)g
 (translate)g(to)g(an)g(ASCII)596 5265 y(string.)p Black
-3601 5876 a Fb(20)p Black eop
-%%Page: 21 21
-21 20 bop Black 2892 -132 a Fb(Chapter)20 b(15.)g(Data)f(T)-6
+3601 5876 a Fb(21)p Black eop
+%%Page: 22 22
+22 21 bop Black 197 -132 a Fb(Chapter)20 b(15.)f(Data)h(T)-6
 b(ypes)p Black 197 401 a Fi(Summar)q(y)596 564 y Ff(string)17
 b(-)g(unbounded)d(te)o(xt)k(char\(N\))e(-)i(bounded)d(te)o(xt)i(int)h
 (-)f(32)g(bit)h(signed)f(inte)o(ger)f(uint)i(-)f(32)g(bit)h(unsigned)
@@ -2430,10 +2453,10 @@
 1104 y(option)e(2:)j(datetime)e(-)i(YYYY)-9 b(-MM-DD)19
 b(HH:MM:SS)i(GMT)596 1237 y(option)13 b(3:)j(date)f(-)g(YYYY)-9
 b(-MM-DD)14 b(time)i(-)f(HH:MM:SS)h(GMT)f(datetime)g(-)g(YYYY)-9
-b(-MM-DD)15 b(HH:MM:SS)596 1328 y(GMT)p Black 3601 5876
-a Fb(21)p Black eop
-%%Page: 22 22
-22 21 bop Black Black 197 422 a Fd(Chapter)48 b(16.)f(Security)596
+b(-MM-DD)15 b(HH:MM:SS)596 1328 y(GMT)p Black 197 5876
+a Fb(22)p Black eop
+%%Page: 23 23
+23 22 bop Black Black 197 422 a Fd(Chapter)48 b(16.)f(Security)596
 654 y Ff(Little)20 b(has)h(been)e(speci\002ed)h(in)g(the)h(w)o(ay)f(of)
 g(security)-5 b(,)19 b(b)n(ut)h(some)g(important)e(items)j(are)f
 (listed)h(here:)596 787 y(1\))k(Users)i(must)f(authenticate)f(themselv)
@@ -2465,10 +2488,20 @@
 (object)596 2099 y(serv)o(er)19 b(is)i(irrele)n(v)n(ant)e(if)h(the)g
 (actual)g(database)g(is)h(vulnerable.)596 2231 y(There)h(will)i(need)f
 (to)g(be)h(an)f(administration)f(application)g(created)g(to)i(manage)e
-(user)h(rights)g(within)g(the)596 2323 y(system.)p Black
-3601 5876 a Fb(22)p Black eop
-%%Page: 23 23
-23 22 bop Black Black 197 422 a Fd(Appendix)48 b(A.)96
+(user)h(rights)g(within)g(the)596 2323 y(system.)596
+2456 y(Object)i(le)n(v)o(el)g(security)g(needs)g(to)g(be)h(discussed)f
+(and)g(incorporated)d(into)k(this)g(document.)d(I)i(think)g(we)596
+2547 y(will)c(w)o(ant)h(to)f(mo)o(v)o(e)f(a)o(w)o(ay)g(from)g(db)h(le)n
+(v)o(el)g(security)f(only)-5 b(.)20 b(As)i(part)f(of)g(the)g(object)f
+(security)h(discussion)596 2638 y(we)f(may)h(need)e(to)i(touch)f(on)g
+(security)g(\002lter)h(for)f(data.)g(Database)g(security)g(alone)g
+(should)g(be)g(used)g(only)596 2730 y(for)25 b(po)n(wer)f(users)i(who)f
+(could)g(direct)h(access)g(the)g(database)f(without)g(using)g(the)h
+(object)f(serv)o(er)g(or)g(for)596 2821 y(client)20 b(serv)o(er)f
+(applications)g(that)h(dont)g(use)g(object)g(serv)o(er)-5
+b(.)p Black 3601 5876 a Fb(23)p Black eop
+%%Page: 24 24
+24 23 bop Black Black 197 422 a Fd(Appendix)48 b(A.)96
 b(GNU)48 b(General)f(Pub)n(lic)h(License)999 644 y Fa(GNU)c(GENERAL)g
 (PUBLIC)g(LICENSE)909 726 y(Version)g(2,)g(June)h(1991)640
 891 y(Copyright)f(\(C\))g(1989,)g(1991)g(Free)g(Software)g(Foundation,)
@@ -2534,11 +2567,11 @@
 596 5083 y(patent)f(must)h(be)h(licensed)e(for)i(everyone's)e(free)h
 (use)g(or)h(not)f(licensed)g(at)g(all.)685 5247 y(The)h(precise)e
 (terms)h(and)g(conditions)g(for)g(copying,)f(distribution)g(and)596
-5329 y(modification)f(follow.)p Black 3601 5876 a Fb(23)p
+5329 y(modification)f(follow.)p Black 3601 5876 a Fb(24)p
 Black eop
-%%Page: 24 24
-24 23 bop Black 197 -132 a Fb(Appendix)18 b(A.)j(GNU)g(Gener)o(al)e
-(Public)h(License)p Black 775 380 a Fa(GNU)44 b(GENERAL)g(PUBLIC)g
+%%Page: 25 25
+25 24 bop Black 2279 -132 a Fb(Appendix)18 b(A.)i(GNU)h(Gener)o(al)f
+(Public)f(License)p Black 775 380 a Fa(GNU)44 b(GENERAL)g(PUBLIC)g
 (LICENSE)730 462 y(TERMS)g(AND)g(CONDITIONS)f(FOR)i(COPYING,)e
 (DISTRIBUTION)g(AND)h(MODIFICATION)685 626 y(0.)h(This)f(License)f
 (applies)h(to)h(any)f(program)g(or)g(other)g(work)g(which)g(contains)
@@ -2617,10 +2650,10 @@
 596 5393 y(on)g(the)g(Program,)g(the)g(distribution)f(of)h(the)h(whole)
 f(must)g(be)g(on)h(the)f(terms)g(of)596 5476 y(this)g(License,)f(whose)
 h(permissions)f(for)h(other)g(licensees)g(extend)g(to)g(the)p
-Black 197 5876 a Fb(24)p Black eop
-%%Page: 25 25
-25 24 bop Black 2279 -132 a Fb(Appendix)18 b(A.)i(GNU)h(Gener)o(al)f
-(Public)f(License)p Black 596 380 a Fa(entire)43 b(whole,)h(and)g(thus)
+Black 3601 5876 a Fb(25)p Black eop
+%%Page: 26 26
+26 25 bop Black 197 -132 a Fb(Appendix)18 b(A.)j(GNU)g(Gener)o(al)e
+(Public)h(License)p Black 596 380 a Fa(entire)43 b(whole,)h(and)g(thus)
 h(to)f(each)g(and)h(every)f(part)g(regardless)f(of)h(who)h(wrote)f(it.)
 596 544 y(Thus,)g(it)g(is)g(not)h(the)f(intent)g(of)g(this)h(section)e
 (to)i(claim)f(rights)g(or)g(contest)596 626 y(your)g(rights)f(to)i
@@ -2696,10 +2729,10 @@
 5393 y(prohibited)f(by)h(law)g(if)h(you)f(do)h(not)f(accept)g(this)g
 (License.)88 b(Therefore,)44 b(by)596 5476 y(modifying)f(or)h
 (distributing)f(the)h(Program)g(\(or)g(any)h(work)f(based)g(on)g(the)p
-Black 3601 5876 a Fb(25)p Black eop
-%%Page: 26 26
-26 25 bop Black 197 -132 a Fb(Appendix)18 b(A.)j(GNU)g(Gener)o(al)e
-(Public)h(License)p Black 596 380 a Fa(Program\),)43
+Black 197 5876 a Fb(26)p Black eop
+%%Page: 27 27
+27 26 bop Black 2279 -132 a Fb(Appendix)18 b(A.)i(GNU)h(Gener)o(al)f
+(Public)f(License)p Black 596 380 a Fa(Program\),)43
 b(you)h(indicate)g(your)g(acceptance)f(of)h(this)h(License)e(to)i(do)f
 (so,)h(and)596 462 y(all)f(its)g(terms)g(and)g(conditions)g(for)g
 (copying,)f(distributing)g(or)i(modifying)596 544 y(the)f(Program)f(or)
@@ -2778,10 +2811,10 @@
 (Foundation.)88 b(If)44 b(the)h(Program)e(does)h(not)h(specify)e(a)i
 (version)f(number)g(of)596 5476 y(this)g(License,)f(you)h(may)h(choose)
 f(any)g(version)g(ever)g(published)f(by)i(the)f(Free)g(Software)p
-Black 197 5876 a Fb(26)p Black eop
-%%Page: 27 27
-27 26 bop Black 2279 -132 a Fb(Appendix)18 b(A.)i(GNU)h(Gener)o(al)f
-(Public)f(License)p Black 596 380 a Fa(Foundation.)685
+Black 3598 5876 a Fb(27)p Black eop
+%%Page: 28 28
+28 27 bop Black 197 -132 a Fb(Appendix)18 b(A.)j(GNU)g(Gener)o(al)e
+(Public)h(License)p Black 596 380 a Fa(Foundation.)685
 544 y(10.)45 b(If)f(you)g(wish)g(to)h(incorporate)e(parts)h(of)g(the)h
 (Program)e(into)i(other)f(free)596 626 y(programs)f(whose)h
 (distribution)f(conditions)g(are)h(different,)f(write)h(to)h(the)f
@@ -2852,10 +2885,10 @@
 y(along)g(with)g(this)g(program;)g(if)g(not,)g(write)g(to)h(the)f(Free)
 g(Software)775 5393 y(Foundation,)f(Inc.,)h(59)g(Temple)g(Place,)g
 (Suite)g(330,)g(Boston,)g(MA)89 b(02111-1307)f(USA)p
-Black 3598 5876 a Fb(27)p Black eop
-%%Page: 28 28
-28 27 bop Black 197 -132 a Fb(Appendix)18 b(A.)j(GNU)g(Gener)o(al)e
-(Public)h(License)p Black 596 462 a Fa(Also)44 b(add)g(information)f
+Black 197 5876 a Fb(28)p Black eop
+%%Page: 29 29
+29 28 bop Black 2279 -132 a Fb(Appendix)18 b(A.)i(GNU)h(Gener)o(al)f
+(Public)f(License)p Black 596 462 a Fa(Also)44 b(add)g(information)f
 (on)h(how)h(to)f(contact)g(you)g(by)h(electronic)e(and)h(paper)g(mail.)
 596 626 y(If)g(the)g(program)g(is)g(interactive,)f(make)h(it)h(output)f
 (a)g(short)g(notice)g(like)g(this)596 708 y(when)g(it)g(starts)g(in)g
@@ -2888,10 +2921,10 @@
 (permit)f(linking)f(proprietary)g(applications)g(with)h(the)596
 2763 y(library.)88 b(If)44 b(this)g(is)h(what)f(you)g(want)h(to)f(do,)g
 (use)h(the)f(GNU)g(Library)g(General)596 2845 y(Public)f(License)h
-(instead)g(of)g(this)g(License.)p Black 197 5876 a Fb(28)p
+(instead)g(of)g(this)g(License.)p Black 3601 5876 a Fb(29)p
 Black eop
-%%Page: 29 29
-29 28 bop Black Black 197 422 a Fd(Appendix)48 b(B.)96
+%%Page: 30 30
+30 29 bop Black Black 197 422 a Fd(Appendix)48 b(B.)96
 b(GNU)48 b(Free)g(Documentation)197 612 y(License)820
 834 y Fa(GNU)c(Free)g(Documentation)f(License)730 916
 y(Version)h(1.1,)g(March)g(2000)640 1080 y(Copyright)g(\(C\))g(2000)89
@@ -2954,10 +2987,10 @@
 (ethical)h(or)g(political)f(position)h(regarding)596
 5272 y(them.)596 5436 y(The)g("Invariant)f(Sections")g(are)i(certain)e
 (Secondary)h(Sections)f(whose)h(titles)p Black 3601 5876
-a Fb(29)p Black eop
-%%Page: 30 30
-30 29 bop Black 197 -132 a Fb(Appendix)18 b(B.)j(GNU)g(F)-5
-b(r)m(ee)20 b(Documentation)e(License)p Black 596 380
+a Fb(30)p Black eop
+%%Page: 31 31
+31 30 bop Black 2105 -132 a Fb(Appendix)19 b(B.)h(GNU)h(F)-5
+b(r)m(ee)21 b(Documentation)c(License)p Black 596 380
 a Fa(are)44 b(designated,)f(as)h(being)g(those)g(of)h(Invariant)e
 (Sections,)g(in)i(the)f(notice)596 462 y(that)g(says)g(that)g(the)g
 (Document)g(is)g(released)g(under)g(this)g(License.)596
@@ -3031,10 +3064,10 @@
 y(the)g(full)g(title)g(with)g(all)g(words)g(of)h(the)f(title)g(equally)
 g(prominent)f(and)596 5476 y(visible.)88 b(You)44 b(may)g(add)h(other)f
 (material)f(on)i(the)f(covers)g(in)g(addition.)p Black
-197 5876 a Fb(30)p Black eop
-%%Page: 31 31
-31 30 bop Black 2105 -132 a Fb(Appendix)19 b(B.)h(GNU)h(F)-5
-b(r)m(ee)21 b(Documentation)c(License)p Black 596 380
+3601 5876 a Fb(31)p Black eop
+%%Page: 32 32
+32 31 bop Black 197 -132 a Fb(Appendix)18 b(B.)j(GNU)g(F)-5
+b(r)m(ee)20 b(Documentation)e(License)p Black 596 380
 a Fa(Copying)43 b(with)h(changes)g(limited)g(to)g(the)g(covers,)g(as)h
 (long)f(as)g(they)g(preserve)596 462 y(the)g(title)g(of)g(the)h
 (Document)e(and)h(satisfy)g(these)g(conditions,)f(can)h(be)h(treated)
@@ -3113,11 +3146,11 @@
 (Document,)g(create)f(one)730 5393 y(stating)h(the)g(title,)g(year,)g
 (authors,)f(and)i(publisher)e(of)h(the)h(Document)e(as)730
 5476 y(given)h(on)g(its)h(Title)f(Page,)g(then)g(add)g(an)h(item)f
-(describing)f(the)h(Modified)p Black 3601 5876 a Fb(31)p
+(describing)f(the)h(Modified)p Black 197 5876 a Fb(32)p
 Black eop
-%%Page: 32 32
-32 31 bop Black 197 -132 a Fb(Appendix)18 b(B.)j(GNU)g(F)-5
-b(r)m(ee)20 b(Documentation)e(License)p Black 730 380
+%%Page: 33 33
+33 32 bop Black 2105 -132 a Fb(Appendix)19 b(B.)h(GNU)h(F)-5
+b(r)m(ee)21 b(Documentation)c(License)p Black 730 380
 a Fa(Version)44 b(as)g(stated)g(in)g(the)h(previous)e(sentence.)596
 462 y(J.)h(Preserve)f(the)i(network)e(location,)h(if)g(any,)g(given)g
 (in)h(the)f(Document)g(for)730 544 y(public)g(access)g(to)g(a)h
@@ -3194,11 +3227,11 @@
 g(each)g(such)g(section)g(unique)g(by)596 5393 y(adding)f(at)i(the)f
 (end)g(of)h(it,)f(in)h(parentheses,)e(the)h(name)g(of)h(the)f(original)
 596 5476 y(author)f(or)i(publisher)e(of)i(that)f(section)f(if)i(known,)
-f(or)g(else)g(a)h(unique)f(number.)p Black 197 5876 a
-Fb(32)p Black eop
-%%Page: 33 33
-33 32 bop Black 2105 -132 a Fb(Appendix)19 b(B.)h(GNU)h(F)-5
-b(r)m(ee)21 b(Documentation)c(License)p Black 596 380
+f(or)g(else)g(a)h(unique)f(number.)p Black 3601 5876
+a Fb(33)p Black eop
+%%Page: 34 34
+34 33 bop Black 197 -132 a Fb(Appendix)18 b(B.)j(GNU)g(F)-5
+b(r)m(ee)20 b(Documentation)e(License)p Black 596 380
 a Fa(Make)44 b(the)g(same)g(adjustment)f(to)i(the)f(section)g(titles)g
 (in)g(the)g(list)h(of)596 462 y(Invariant)e(Sections)g(in)i(the)f
 (license)g(notice)g(of)g(the)g(combined)g(work.)596 626
@@ -3264,11 +3297,11 @@
 b(other)g(attempt)g(to)596 5393 y(copy,)g(modify,)f(sublicense)g(or)i
 (distribute)e(the)h(Document)g(is)g(void,)g(and)h(will)596
 5476 y(automatically)d(terminate)h(your)i(rights)e(under)h(this)h
-(License.)88 b(However,)p Black 3601 5876 a Fb(33)p Black
+(License.)88 b(However,)p Black 197 5876 a Fb(34)p Black
 eop
-%%Page: 34 34
-34 33 bop Black 197 -132 a Fb(Appendix)18 b(B.)j(GNU)g(F)-5
-b(r)m(ee)20 b(Documentation)e(License)p Black 596 380
+%%Page: 35 35
+35 34 bop Black 2105 -132 a Fb(Appendix)19 b(B.)h(GNU)h(F)-5
+b(r)m(ee)21 b(Documentation)c(License)p Black 596 380
 a Fa(parties)43 b(who)h(have)h(received)e(copies,)h(or)g(rights,)g
 (from)g(you)g(under)g(this)596 462 y(License)f(will)h(not)h(have)f
 (their)g(licenses)f(terminated)g(so)i(long)f(as)h(such)596
@@ -3319,9 +3352,9 @@
 (examples)g(in)g(parallel)g(under)g(your)g(choice)g(of)596
 4160 y(free)g(software)f(license,)h(such)g(as)g(the)h(GNU)f(General)g
 (Public)f(License,)596 4243 y(to)h(permit)g(their)g(use)g(in)h(free)f
-(software.)p Black 197 5876 a Fb(34)p Black eop
-%%Page: 35 35
-35 34 bop Black Black Black Black eop
+(software.)p Black 3601 5876 a Fb(35)p Black eop
+%%Page: 36 36
+36 35 bop Black Black Black Black eop
 %%Trailer
 end
 userdict /end-hook known{end-hook}if
Index: gnue/docs/GNUeObjectServer.rtf
diff -u gnue/docs/GNUeObjectServer.rtf:1.1 gnue/docs/GNUeObjectServer.rtf:1.2
--- gnue/docs/GNUeObjectServer.rtf:1.1  Wed Sep 20 23:33:43 2000
+++ gnue/docs/GNUeObjectServer.rtf      Sun Oct  1 00:43:03 2000
@@ -5,7 +5,7 @@
 }
 {\colortbl;}{\stylesheet{\s1 Heading 1;}{\s2 Heading 2;}{\s3 Heading 3;}{\s4 
Heading 4;}{\s5 Heading 5;}{\s6 Heading 6;}{\s7 Heading 7;}{\s8 Heading 8;}{\s9 
Heading 9;}}
 \deflang1024\notabind\facingp\hyphauto1\widowctrl
-\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab 
{}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {}\par}\pard\sl20 {\*\bkmkstart ID_INDEX}{\*\bkmkend ID_INDEX}\fs20 
\hyphpar0\par\pard\sb373\sl547\qc \b\fs49\f1 GNU Enterprise - Object Server 
Guide Proposal\keepn\hyphpar0\par\pard\sl220 \b0\fs20\f0 
\~\hyphpar0\par\pard\sb1991\sl380\qc \b\fs34\f1 Andrew 
Murie\keepn\hyphpar0\par\pard\sl220\qc \fs24 GNU: Enterprise Core Development 
Team\hyphpar0\par\pard\sb1296\sl264\qc Edited 
by\keepn\hyphpar0\par\pard\sl380\qc \fs34 Derek 
Neighbors\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab 
{}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {}\par}\pard\sl20 \fs20 \keepn\hyphpar0\par\pard\sl-240 \b\f1 GNU 
Enterprise - Object Server Guide Proposal\hyphpar0\par\pard\sl220 \b0\f0 
by\~Andrew Murie\hyphpar0\par\pard\sb220\sl220 by\~\hyphpar0\par\pard\sl220 
Edited by\~Derek Neighbors\hyphpar0\par\pard\sb220\sl220 Published Thu Sep 20 
12:30:23 MST 2000\hyphpar0\par\pard\sl220 Copyright\~\'a9\~2000 by Free 
Software Foundation\hyphpar0\par\pard\sb200\sl220 \fs16 Copyright (c) 2000 Free 
Software Foundation\hyphpar0\par\pard\sl220 Permission is granted to copy, 
distribute and/or modify this document under the terms of the GNU Free 
Documentation License, Version 1.1 or any later version published by the Free 
Software Foundation; with no Invariant Sections, with no Front-Cover Texts and 
with no Back-Cover Texts. A copy of the license is included in the section 
entitled "GNU Free Documentation 
License".\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgnlcrm\pgnrestart\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{\i\fs20 \chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 \b\fs41\f1 Table of 
Contents\keepn\hyphpar0\par\pard\sb207\li1440\sl220\fi-480 {\field{\*\fldinst   
HYPERLINK  \\l ID_OVERVIEW}{\fldrslt \fs20\f0 1. Overview}}\fs20\f0 
\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l ID_OVERVIEW}{\fldrslt 
{\field\flddirty{\*\fldinst PAGEREF ID_OVERVIEW}{\fldrslt 
000}}}}\hyphpar0\par\pard\sb48\li1440\sl220\fi-480 {\field{\*\fldinst   
HYPERLINK  \\l ID_BIZOBJECTS}{\fldrslt 2. Business 
Objects}}\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l 
ID_BIZOBJECTS}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF 
ID_BIZOBJECTS}{\fldrslt 000}}}}\hyphpar0\par\pard\sb48\li1920\sl220\fi-480 
{\field{\*\fldinst   HYPERLINK  \\l _34 }{\fldrslt \b0 Objects}}\b0 
\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l _34 }{\fldrslt 
{\field\flddirty{\*\fldinst PAGEREF _34}{\fldrslt 
000}}}}\hyphpar0\par\pard\li1920\sl220\fi-480 {\field{\*\fldinst   HYPERLINK  
\\l _37 }{\fldrslt Fields}}\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK 
 \\l _37 }{\fldrslt {\field\flddirty{\*\fldinst PAGEREF _37}{\fldrslt 
000}}}}\hyphpar0\par\pard\li1920\sl220\fi-480 {\field{\*\fldinst   HYPERLINK  
\\l _40 }{\fldrslt Triggers}}\tqr\tldot\tx8400\tab {\field{\*\fldinst   
HYPERLINK  \\l _40 }{\fldrslt {\field\flddirty{\*\fldinst PAGEREF _40}{\fldrslt 
000}}}}\hyphpar0\par\pard\li1920\sl220\fi-480 {\field{\*\fldinst   HYPERLINK  
\\l _44 }{\fldrslt Methods}}\tqr\tldot\tx8400\tab {\field{\*\fldinst   
HYPERLINK  \\l _44 }{\fldrslt {\field\flddirty{\*\fldinst PAGEREF _44}{\fldrslt 
000}}}}\hyphpar0\par\pard\sb48\li1440\sl220\fi-480 {\field{\*\fldinst   
HYPERLINK  \\l ID_ARCHITECTURE}{\fldrslt \b 3. System Architecture}}\b 
\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l 
ID_ARCHITECTURE}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF 
ID_ARCHITECTURE}{\fldrslt 000}}}}\hyphpar0\par\pard\sb48\li1440\sl220\fi-480 
{\field{\*\fldinst   HYPERLINK  \\l ID_BIZOPERATION}{\fldrslt 4. Business To 
Business Operation}}\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l 
ID_BIZOPERATION}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF 
ID_BIZOPERATION}{\fldrslt 000}}}}\hyphpar0\par\pard\sb48\li1440\sl220\fi-480 
{\field{\*\fldinst   HYPERLINK  \\l ID_USAGE}{\fldrslt 5. Application 
Usage}}\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l 
ID_USAGE}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF ID_USAGE}{\fldrslt 
000}}}}\hyphpar0\par\pard\sb48\li1440\sl220\fi-480 {\field{\*\fldinst   
HYPERLINK  \\l ID_CORBA}{\fldrslt 6. CORBA Notes}}\tqr\tldot\tx8400\tab 
{\field{\*\fldinst   HYPERLINK  \\l ID_CORBA}{\fldrslt 
{\field\flddirty{\*\fldinst PAGEREF ID_CORBA}{\fldrslt 
000}}}}\hyphpar0\par\pard\sb48\li1440\sl220\fi-480 {\field{\*\fldinst   
HYPERLINK  \\l ID_CLASSES}{\fldrslt 7. Classes}}\tqr\tldot\tx8400\tab 
{\field{\*\fldinst   HYPERLINK  \\l ID_CLASSES}{\fldrslt 
{\field\flddirty{\*\fldinst PAGEREF ID_CLASSES}{\fldrslt 
000}}}}\hyphpar0\par\pard\sb48\li1440\sl220\fi-480 {\field{\*\fldinst   
HYPERLINK  \\l ID_CONNECTING}{\fldrslt 8. Connecting}}\tqr\tldot\tx8400\tab 
{\field{\*\fldinst   HYPERLINK  \\l ID_CONNECTING}{\fldrslt 
{\field\flddirty{\*\fldinst PAGEREF ID_CONNECTING}{\fldrslt 
000}}}}\hyphpar0\par\pard\sb48\li1440\sl220\fi-480 {\field{\*\fldinst   
HYPERLINK  \\l ID_PROCESSING}{\fldrslt 9. Processing}}\tqr\tldot\tx8400\tab 
{\field{\*\fldinst   HYPERLINK  \\l ID_PROCESSING}{\fldrslt 
{\field\flddirty{\*\fldinst PAGEREF ID_PROCESSING}{\fldrslt 
000}}}}\hyphpar0\par\pard\sb48\li1920\sl220\fi-480 {\field{\*\fldinst   
HYPERLINK  \\l _86 }{\fldrslt \b0 Creating New Objects}}\b0 
\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l _86 }{\fldrslt 
{\field\flddirty{\*\fldinst PAGEREF _86}{\fldrslt 
000}}}}\hyphpar0\par\pard\li1920\sl220\fi-480 {\field{\*\fldinst   HYPERLINK  
\\l _89 }{\fldrslt Locating Arbitrary Objects}}\tqr\tldot\tx8400\tab 
{\field{\*\fldinst   HYPERLINK  \\l _89 }{\fldrslt {\field\flddirty{\*\fldinst 
PAGEREF _89}{\fldrslt 000}}}}\hyphpar0\par\pard\li1920\sl220\fi-480 
{\field{\*\fldinst   HYPERLINK  \\l _94 }{\fldrslt Reading From An 
Object}}\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l _94 
}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF _94}{\fldrslt 
000}}}}\hyphpar0\par\pard\li1920\sl220\fi-480 {\field{\*\fldinst   HYPERLINK  
\\l _99 }{\fldrslt Writing To An Object}}\tqr\tldot\tx8400\tab 
{\field{\*\fldinst   HYPERLINK  \\l _99 }{\fldrslt {\field\flddirty{\*\fldinst 
PAGEREF _99}{\fldrslt 000}}}}\hyphpar0\par\pard\li1920\sl220\fi-480 
{\field{\*\fldinst   HYPERLINK  \\l _104 }{\fldrslt Reference 
Fields}}\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l _104 
}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF _104}{\fldrslt 
000}}}}\hyphpar0\par\pard\li1920\sl220\fi-480 {\field{\*\fldinst   HYPERLINK  
\\l _113 }{\fldrslt Sets of Objects}}\tqr\tldot\tx8400\tab {\field{\*\fldinst   
HYPERLINK  \\l _113 }{\fldrslt {\field\flddirty{\*\fldinst PAGEREF 
_113}{\fldrslt 000}}}}\hyphpar0\par\pard\li1920\sl220\fi-480 {\field{\*\fldinst 
  HYPERLINK  \\l _121 }{\fldrslt Calling Object Methods}}\tqr\tldot\tx8400\tab 
{\field{\*\fldinst   HYPERLINK  \\l _121 }{\fldrslt {\field\flddirty{\*\fldinst 
PAGEREF _121}{\fldrslt 000}}}}\hyphpar0\par\pard\li1920\sl220\fi-480 
{\field{\*\fldinst   HYPERLINK  \\l _125 }{\fldrslt 
Triggers}}\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l _125 
}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF _125}{\fldrslt 
000}}}}\hyphpar0\par\pard\li1920\sl220\fi-480 {\field{\*\fldinst   HYPERLINK  
\\l _130 }{\fldrslt Transactions}}\tqr\tldot\tx8400\tab {\field{\*\fldinst   
HYPERLINK  \\l _130 }{\fldrslt {\field\flddirty{\*\fldinst PAGEREF 
_130}{\fldrslt 000}}}}\hyphpar0\par\pard\li1920\sl220\fi-480 {\field{\*\fldinst 
  HYPERLINK  \\l _134 }{\fldrslt Memory Management}}\tqr\tldot\tx8400\tab 
{\field{\*\fldinst   HYPERLINK  \\l _134 }{\fldrslt {\field\flddirty{\*\fldinst 
PAGEREF _134}{\fldrslt 000}}}}\hyphpar0\par\pard\sb48\li1440\sl220\fi-480 
{\field{\*\fldinst   HYPERLINK  \\l ID_MODULECREATION}{\fldrslt \b 10. Module 
Creation}}\b \tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l 
ID_MODULECREATION}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF 
ID_MODULECREATION}{\fldrslt 000}}}}\hyphpar0\par\pard\sb48\li1440\sl220\fi-480 
{\field{\*\fldinst   HYPERLINK  \\l ID_INSTALLMODULES}{\fldrslt 11. Installing 
Modules}}\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l 
ID_INSTALLMODULES}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF 
ID_INSTALLMODULES}{\fldrslt 000}}}}\hyphpar0\par\pard\sb48\li1440\sl220\fi-480 
{\field{\*\fldinst   HYPERLINK  \\l ID_CUSTOMIZINGMODULES}{\fldrslt 12. 
Customizing Modules}}\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l 
ID_CUSTOMIZINGMODULES}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF 
ID_CUSTOMIZINGMODULES}{\fldrslt 
000}}}}\hyphpar0\par\pard\sb48\li1440\sl220\fi-480 {\field{\*\fldinst   
HYPERLINK  \\l ID_OBJRELATIONSHIPS}{\fldrslt 13. Object 
Relationships}}\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l 
ID_OBJRELATIONSHIPS}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF 
ID_OBJRELATIONSHIPS}{\fldrslt 
000}}}}\hyphpar0\par\pard\sb48\li1440\sl220\fi-480 {\field{\*\fldinst   
HYPERLINK  \\l ID_REFINTEGRITY}{\fldrslt 14. Referential 
Integrity}}\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l 
ID_REFINTEGRITY}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF 
ID_REFINTEGRITY}{\fldrslt 000}}}}\hyphpar0\par\pard\sb48\li1440\sl220\fi-480 
{\field{\*\fldinst   HYPERLINK  \\l ID_DATATYPES}{\fldrslt 15. Data 
Types}}\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l 
ID_DATATYPES}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF 
ID_DATATYPES}{\fldrslt 000}}}}\hyphpar0\par\pard\sb48\li1920\sl220\fi-480 
{\field{\*\fldinst   HYPERLINK  \\l _193 }{\fldrslt \b0 Text}}\b0 
\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l _193 }{\fldrslt 
{\field\flddirty{\*\fldinst PAGEREF _193}{\fldrslt 
000}}}}\hyphpar0\par\pard\li1920\sl220\fi-480 {\field{\*\fldinst   HYPERLINK  
\\l _196 }{\fldrslt Numeric}}\tqr\tldot\tx8400\tab {\field{\*\fldinst   
HYPERLINK  \\l _196 }{\fldrslt {\field\flddirty{\*\fldinst PAGEREF 
_196}{\fldrslt 000}}}}\hyphpar0\par\pard\li1920\sl220\fi-480 {\field{\*\fldinst 
  HYPERLINK  \\l _203 }{\fldrslt Money/Currency}}\tqr\tldot\tx8400\tab 
{\field{\*\fldinst   HYPERLINK  \\l _203 }{\fldrslt {\field\flddirty{\*\fldinst 
PAGEREF _203}{\fldrslt 000}}}}\hyphpar0\par\pard\li1920\sl220\fi-480 
{\field{\*\fldinst   HYPERLINK  \\l _206 }{\fldrslt 
Date/Time}}\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l _206 
}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF _206}{\fldrslt 
000}}}}\hyphpar0\par\pard\li1920\sl220\fi-480 {\field{\*\fldinst   HYPERLINK  
\\l _211 }{\fldrslt Summary}}\tqr\tldot\tx8400\tab {\field{\*\fldinst   
HYPERLINK  \\l _211 }{\fldrslt {\field\flddirty{\*\fldinst PAGEREF 
_211}{\fldrslt 000}}}}\hyphpar0\par\pard\sb48\li1440\sl220\fi-480 
{\field{\*\fldinst   HYPERLINK  \\l ID_SECURITY}{\fldrslt \b 16. Security}}\b 
\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l ID_SECURITY}{\fldrslt 
{\field\flddirty{\*\fldinst PAGEREF ID_SECURITY}{\fldrslt 
000}}}}\hyphpar0\par\pard\sb48\li1440\sl220\fi-480 {\field{\*\fldinst   
HYPERLINK  \\l ID_APPENDIXES}{\fldrslt I. Appendixes}}\tqr\tldot\tx8400\tab 
{\field{\*\fldinst   HYPERLINK  \\l ID_APPENDIXES}{\fldrslt 
{\field\flddirty{\*\fldinst PAGEREF ID_APPENDIXES}{\fldrslt 
000}}}}\hyphpar0\par\pard\sb48\li1920\sl220\fi-480 {\field{\*\fldinst   
HYPERLINK  \\l _227 }{\fldrslt \b0 A. GNU General Public License}}\b0 
\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l _227 }{\fldrslt 
{\field\flddirty{\*\fldinst PAGEREF _227}{\fldrslt 
000}}}}\hyphpar0\par\pard\li1920\sl220\fi-480 {\field{\*\fldinst   HYPERLINK  
\\l _230 }{\fldrslt B. GNU Free Documentation License}}\tqr\tldot\tx8400\tab 
{\field{\*\fldinst   HYPERLINK  \\l _230 }{\fldrslt {\field\flddirty{\*\fldinst 
PAGEREF _230}{\fldrslt 
000}}}}\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\pgnrestart\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Chapter 1. Overview}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Chapter 1. 
Overview}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
ID_OVERVIEW}{\*\bkmkend ID_OVERVIEW}\b\fs41\f1 Chapter 1. 
Overview\keepn\hyphpar0\par\pard\sb207\li960\sl220\qj \b0\fs20\lang1033\f0 The 
object server manages a collection of persistant business objects for an 
enterprise. A range of applications will use the object server for data access. 
It is being implemented in CORBA to make the objects available to a wide range 
of development languages (C, C++, Python, Java, COBOL, Tcl/Tk, and a whole 
range of other languages.) \hyphpar0\par\pard\sb100\li960\sl220\qj Note: some 
issues have not been decided on, and a number of options exist, trading 
simplicity of implementation & configuration against future extensibility. 
\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Chapter 2. Business Objects}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Chapter 2. Business 
Objects}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
ID_BIZOBJECTS}{\*\bkmkend ID_BIZOBJECTS}\b\fs41\f1 Chapter 2. Business 
Objects\keepn\hyphpar0\par\pard\sb207\li960\sl220\qj \b0\fs20\lang1033\f0 A 
business object is a set of data values (fields) together with a set of 
functions that are automatically called when a certain event occurs (triggers) 
and another set of functions that can be called from outside the object 
(methods). \hyphpar0\par\pard\sb100\li960\sl220\qj The triggers and functions 
are designed to enforce business rules that are applicable to an entire 
enterprise: all applications will share the same rules. 
\hyphpar0\par\pard\sb100\li960\sl220\qj (Implementation note: Names of all 
classes, fields, triggers, methods, etc will be case insensitive. On the server 
side, they may be stored in whatever case is considered appropriate. Currently, 
all tables and columns are using all lower case letters for simplicity, as the 
MySQL database is case sensitive. Allowing any of those items to be 
distinguished only by case would not be sufficiently useful to be worth the 
extra complexity.) \hyphpar0\par\pard\sb259\s2\sl380 {\*\bkmkstart 
_34}{\*\bkmkend _34}\b\fs34\lang1024\f1 
Objects\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj \b0\fs20\lang1033\f0  An 
object is a collection of data and code, with the data being stored in a 
database. \hyphpar0\par\pard\sb259\s2\sl380 {\*\bkmkstart _37}{\*\bkmkend 
_37}\b\fs34\lang1024\f1 Fields\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj 
\b0\fs20\lang1033\f0  An object has a number of field types: Basic fields - 
contain raw data Lookup fields - data looked up from another table References - 
entire sets of other objects Calculated - data calculated based on other data 
in the database \hyphpar0\par\pard\sb259\s2\sl380 {\*\bkmkstart _40}{\*\bkmkend 
_40}\b\fs34\lang1024\f1 Triggers\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj 
\b0\fs20\lang1033\f0  Code called before and/or after a specified event. 
Optionally prevents the event from occuring, according to business rules. 
\hyphpar0\par\pard\sb100\li960\sl220\qj  For example, a trigger may prevent an 
invalid ISBN being inserted into the database, but can not confirm that it is 
the correct ISBN for the associated book. \hyphpar0\par\pard\sb259\s2\sl380 
{\*\bkmkstart _44}{\*\bkmkend _44}\b\fs34\lang1024\f1 
Methods\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj \b0\fs20\lang1033\f0  Code 
designed to serve a range of purposes. This will be called by client 
applications and/or triggers to perform a range of operations. Operations 
specific to an application should be part of the application, and operations 
required by many parts of an enterprise belong on the object server, where they 
can be implemented once, and used in all appropriate applications. 
\hyphpar0\par\pard\sb100\li960\sl220\qj  An example is a complex tax 
calculation, which relies on a number of variables as well as data from the 
database. 
\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Chapter 3. System Architecture}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Chapter 3. System 
Architecture}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
ID_ARCHITECTURE}{\*\bkmkend ID_ARCHITECTURE}\b\fs41\f1 Chapter 3. System 
Architecture\keepn\hyphpar0\par\pard\sb207\li960\sl220\qj \b0\fs20\lang1033\f0 
There are two proposed options, both with advantages and disadvantages. 
\hyphpar0\par\pard\sb100\li960\sl220\qj A) Non scalable single server. 
\hyphpar0\par\pard\sb100\li960\sl220\qj  This arrangement would have a single 
SQL database and a single object server providing data to a number of 
application programs. The advantage to this is simplicity - it's easy to 
configure, and new modules can be installed by copying the files to a 
directory, and then just using them. However, this means the entire system is 
limited to the capabilites of a single machine. All applications will have to 
run on the same LAN, or accept a severe speed penalty. This will be a 
significant limit to future growth, and will harm business-to-business 
transaction use of GNUe, as that would require multiple servers communication 
over variable networks. \hyphpar0\par\pard\sb100\li960\sl220\qj B) Scalable 
system with multiple servers. \hyphpar0\par\pard\sb100\li960\sl220\qj  A 
scalable system will allow as many databases and object servers to be installed 
as are required. Each application will connect to the object servers that 
provide the required data and have appropriate network locations, and those 
servers will be internally configured to access the appropriate databases. The 
main disadvantage here is complexity for the server implementation - care is 
required to ensure the system remains efficient at high levels of distributed 
usage. Installation of new modules will require automated tools that set up 
databases and object servers correctly. \hyphpar0\par\pard\sb100\li960\sl220\qj 
 Example of a (relatively simple) multi server system: 
\hyphpar0\par\pard\sb100\li960\sl220\qj  A chain of stores runs a single 
computer in each store to manage that store's database. Even if network links 
fail, the LAN in the store will still operate correctly. A computer at head 
office can connect to the store systems at appropriate times to retrieve 
accounting information. A store manager can take a laptop with another object 
server home, and use this to access a database - the object server on the 
laptop will manage buffering of data to optimise useage of the slow network 
link. The store computers can access the company's warehouse to request new 
stock shipments, and the warehouse can, in turn, arrange purcahses of new stock 
from suppliers, either automatically or with manual approval. 
\hyphpar0\par\pard\sb100\li960\sl220\qj  In this system, the GNUe object server 
will provide the data management system, Forms would run the user interface for 
various applications such as point of sale terminals, management reports, and 
so on. CORBA would be the communication medium, managing network traffic and 
most of the security. \hyphpar0\par\pard\sb100\li960\sl220\qj (Note: 
Communication between object servers has not yet been defined, but the 
intention is to reuse the 'Database' interface, so that an application doesn't 
care if data is stored directly in a GDA enabled database, or on another object 
server. Security and system configuration will also be issues that need to be 
developed, as well.) 
\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Chapter 4. Business To Business Operation}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Chapter 4. Business To Business 
Operation}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
ID_BIZOPERATION}{\*\bkmkend ID_BIZOPERATION}\b\fs41\f1 Chapter 4. Business To 
Business Operation\keepn\hyphpar0\par\pard\sb207\li960\sl220\qj 
\b0\fs20\lang1033\f0 Allowing GNUe to serve as a central component in 
business-to-business operations will require that object servers can 
communicate with each other in a standard, secure, and traceable way. 
\hyphpar0\par\pard\sb100\li960\sl220\qj For example, a server may have a 
trigger that detects a drop in stock levels. This will create a new purchase 
object, and then select the appropriate supplier to transmit it to. 
Authentication will allow the transmission to be accepted, and non-repudiation 
will enable the supplier to treat the order as a legal contract - the server 
owner would not be able to refuse to pay by claiming to have never sent the 
order. All transactions would, of course, need to be logged for accounting 
purposes. \hyphpar0\par\pard\sb100\li960\sl220\qj (Note: We will need to 
investigate ORBit support of CORBAsecurity for some of these features.) 
\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Chapter 5. Application Usage}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Chapter 5. Application 
Usage}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
ID_USAGE}{\*\bkmkend ID_USAGE}\b\fs41\f1 Chapter 5. Application 
Usage\keepn\hyphpar0\par\pard\sb207\li960\sl220\qj \b0\fs20\lang1033\f0 Typical 
applications will establish a connection to the server, perform an amount of 
processing, and then disconnect again. Automated systems may maintain a 
permanent connection, regularly updating the database with status information 
that can then be used by other applications. A range of options will be 
available. 
\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Chapter 6. CORBA Notes}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Chapter 6. CORBA 
Notes}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
ID_CORBA}{\*\bkmkend ID_CORBA}\b\fs41\f1 Chapter 6. CORBA 
Notes\keepn\hyphpar0\par\pard\sb207\li960\sl220\qj \b0\fs20\lang1033\f0 Typical 
module developers will not need to know about CORBA. In GNUe Forms, the Forms 
code will provide data from 'somewhere' in a format decided by the author of 
Forms. (eg, the Python forms will use normal Python datatypes.) 
\hyphpar0\par\pard\sb100\li960\sl220\qj Developers of new classes will specify 
the GNUe defined data types for each field, and these will be managed behind 
the scenes in whatever way suits the object server and Forms code. 
\hyphpar0\par\pard\sb100\li960\sl220\qj GNUe specified data types will be 
mapped directly to a CORBA data type, and then to an application specific 
datatype. When writing a new module, you will only need a table describing the 
GNUE datatypes, and how to use them in your chosen language. 
\hyphpar0\par\pard\sb100\li960\sl220\qj Developers who write new triggers or 
methods will be give templates in all supported languages. A minimal degree of 
complexity is inevitable, but this will be kept as simple as possible, and the 
templates will cover handling arguments to functions, returning a result, 
reading from the database, writing to the database, and handling error 
conditions. (Much of this detail has yet to be decided on.) 
\hyphpar0\par\pard\sb100\li960\sl220\qj If a new application does not use 
Forms, it may need a minimal amount of CORBA code. This is not particularly 
complex in languages such as Python, which maps CORBA objects directly to 
Python objects. (See the example Python client code for useage of the server 
from Python.) \hyphpar0\par\pard\sb100\li960\sl220\qj Object server developers, 
however, will need to be able to understand some CORBA in order to understand 
how a client side function call is translated to the server side 
implementation. 
\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Chapter 7. Classes}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Chapter 7. 
Classes}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
ID_CLASSES}{\*\bkmkend ID_CLASSES}\b\fs41\f1 Chapter 7. 
Classes\keepn\hyphpar0\par\pard\sb207\li960\sl220\qj \b0\fs20\lang1033\f0 
DatabaseFactory - Manages connections to a database Database - Allow searching 
and creating of objects DataObject - Read and write data to/from a specific 
object instance 
\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Chapter 8. Connecting}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Chapter 8. 
Connecting}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
ID_CONNECTING}{\*\bkmkend ID_CONNECTING}\b\fs41\f1 Chapter 8. 
Connecting\keepn\hyphpar0\par\pard\sb207\li960\sl220\qj \b0\fs20\lang1033\f0 
Connecting \hyphpar0\par\pard\sb100\li960\sl220\qj The application will locate 
an instance of the DatabaseFactory class. This is a fixed access point for a 
running object server. It will then request a connection by name, and receive 
an appropriate Database object. Optionally, the application will be required to 
authenticate to the server, although precise details for this have not been 
decided. \hyphpar0\par\pard\sb100\li960\sl220\qj Disconnecting 
\hyphpar0\par\pard\sb100\li960\sl220\qj The 'disconnect' method of the Database 
object is called to disconnect. 
\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Chapter 9. Processing}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Chapter 9. 
Processing}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
ID_PROCESSING}{\*\bkmkend ID_PROCESSING}\b\fs41\f1 Chapter 9. 
Processing\keepn\hyphpar0\par\pard\sb259\s2\sl380 {\*\bkmkstart _86}{\*\bkmkend 
_86}\fs34 Creating New Objects\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj 
\b0\fs20\lang1033\f0  The Database object method 'newObject' takes the 
classname of the object to create, and returns an appropriate object reference. 
\hyphpar0\par\pard\sb259\s2\sl380 {\*\bkmkstart _89}{\*\bkmkend 
_89}\b\fs34\lang1024\f1 Locating Arbitrary 
Objects\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj \b0\fs20\lang1033\f0  
There are methods in the database object to search for data: loadObject, which 
requires the classname, a fieldname, and the value of that field. It returns a 
list of objects where the named field has the required value. the loadAll 
method loads all objects of the named class. (More complicated searches may be 
developed at a later stage.) \hyphpar0\par\pard\sb100\li960\sl220\qj  Some 
objects contain references to other objects. (eg a Customer object can find a 
list of associated Invoice objects.) The DataObject class includes a 
'getReference' method which takes the name of the reference, and returns the 
list of matching objects. \hyphpar0\par\pard\sb100\li960\sl220\qj  
Database.loadObject() : find a set of objects with a simple search 
Database.loadAll() : load all instances of a given class Database.newObject() : 
create a new business object instance DataObject.getReference() : get a list of 
objects related to a known object \hyphpar0\par\pard\sb259\s2\sl380 
{\*\bkmkstart _94}{\*\bkmkend _94}\b\fs34\lang1024\f1 Reading From An 
Object\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj \b0\fs20\lang1033\f0  The 
DataObject class method 'getField' retrieves the value of three types of 
fields: basic data fields, fields looked up from other tables, and fields 
calculated on the basis of basic data fields. 
\hyphpar0\par\pard\sb100\li960\sl220\qj  The getField method returns the data 
as an ASCII string. \hyphpar0\par\pard\sb100\li960\sl220\qj  Additionally, 
there will be type specific methods, that convert data to an application 
specific format. In particular, the datatypes specified for CORBA IDL will be 
used. \hyphpar0\par\pard\sb259\s2\sl380 {\*\bkmkstart _99}{\*\bkmkend 
_99}\b\fs34\lang1024\f1 Writing To An 
Object\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj \b0\fs20\lang1033\f0  The 
DataObject class method 'setField' sets a named basic field to a given value. A 
'flush' method can be called to indicate that the application is finished with 
an object. Even if that is not called, the server will still write the data to 
the database at what it considers to be an appropriate time - the flush method 
is a hint, rather than a command. \hyphpar0\par\pard\sb100\li960\sl220\qj  The 
setField method requires the field data to be submitted as an ASCII string. 
\hyphpar0\par\pard\sb100\li960\sl220\qj  Additionally, there will be type 
specific methods, that convert data from an application specific format. In 
particular, the datatypes specified for CORBA IDL will be used. 
\hyphpar0\par\pard\sb259\s2\sl380 {\*\bkmkstart _104}{\*\bkmkend 
_104}\b\fs34\lang1024\f1 Reference 
Fields\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj \b0\fs20\lang1033\f0  The 
'insert' method in the DataObject class is used to add a single object to a 
named field. \hyphpar0\par\pard\sb100\li960\sl220\qj  eg: customer_obj.insert( 
"invoices" , invoice_obj ); \hyphpar0\par\pard\sb100\li960\sl220\qj  The 
'setReference' field is used to make a single object reference field point to 
the given object. \hyphpar0\par\pard\sb100\li960\sl220\qj  eg: 
invoice_obj.setReference( "customer" , customer_obj ); 
\hyphpar0\par\pard\sb100\li960\sl220\qj  The nature of the reference determins 
if both must be called, or only a single call will cause both references to be 
made. (TODO: insert detailed examples of this.) 
\hyphpar0\par\pard\sb100\li960\sl220\qj  (Note: Referential integrity will 
require that relationships can be specified precisely, and that the effects of 
the 'insert' and 'setReference' methods are clear in all circumstances.) 
\hyphpar0\par\pard\sb100\li960\sl220\qj  The 'getReference' method will return 
either CORBA_OBJECT_NIL (mapped to None, in Python) or the reference to the 
first object in the field. If the field contains a list, then the 'next' and 
'previous' methods can be used to navigate through the list ob objects. 
\hyphpar0\par\pard\sb259\s2\sl380 {\*\bkmkstart _113}{\*\bkmkend 
_113}\b\fs34\lang1024\f1 Sets of 
Objects\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj \b0\fs20\lang1033\f0  
(Note: sometimes, these have been incorrectly referred to as lists.) 
\hyphpar0\par\pard\sb100\li960\sl220\qj  Each DataObject instance has a 'next' 
and a 'previous' method, which return a reference to the next or previous 
object in the list. Once the end has been reached, the methods will return the 
NIL object reference (CORBA_OBJECT_NIL, in C, or None in Python.) A list with 
only one element will always return NIL for both 'next' and 'previous'. 
\hyphpar0\par\pard\sb100\li960\sl220\qj  Currently, sets have no precisely 
defined order for the next and previous methods. However, using 'next' or 
'previous' to navigate from one end of the list to the other is guaranteed to 
process each object in the list exactly once. 
\hyphpar0\par\pard\sb100\li960\sl220\qj example: (Note: this is pseudo code, to 
examine every instance of a given class.) 
\hyphpar0\par\pard\sb100\li960\sl220\qj  obj = database.loadAll( "classname" ); 
while obj != None: obj.getField( ... ); obj = obj.next(); 
\hyphpar0\par\pard\sb100\li960\sl220\qj  In C, the programmer must take care of 
client side object references to prevent memory leaks. This is done 
automatically in Python. \hyphpar0\par\pard\sb259\s2\sl380 {\*\bkmkstart 
_121}{\*\bkmkend _121}\b\fs34\lang1024\f1 Calling Object 
Methods\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj \b0\fs20\lang1033\f0  
Details have yet to be decided. \hyphpar0\par\pard\sb100\li960\sl220\qj  
Methods will take at least one implicit argument - that being the object it is 
attached to. Additionally, they will be able to take a set of arguments to 
operate on. \hyphpar0\par\pard\sb259\s2\sl380 {\*\bkmkstart _125}{\*\bkmkend 
_125}\b\fs34\lang1024\f1 Triggers\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj 
\b0\fs20\lang1033\f0  Triggers are methods that are called by the object server 
in response to various events. Each type of trigger has a defined input 
arguments and returns a true/false (yes/no, poass/fail) result. For example, 
the "BeforeSet" trigger can return "false" if the data is invalid, and may not 
be placed in the database. This is used to enforce business rules. 
\hyphpar0\par\pard\sb100\li960\sl220\qj  Defined triggers: BeforeSet AfterSet 
BeforeGet AfterGet \hyphpar0\par\pard\sb100\li960\sl220\qj  It's has been 
suggested that triggers are needed for each stage of a transaction, but precise 
details are yet to be decided. For example, which object should be affected by 
a "BeforeCommit" trigger? \hyphpar0\par\pard\sb259\s2\sl380 {\*\bkmkstart 
_130}{\*\bkmkend _130}\b\fs34\lang1024\f1 
Transactions\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj \b0\fs20\lang1033\f0  
Currently, a transaction is begun by calling the 'beginTransaction' method in 
the Database objerct, followed by a series of write operations, and then either 
'commitTransaction' or 'rollbackTransaction'. This must be supported by the GDA 
provider in use - either directly by the database, or simulated in GDA. 
\hyphpar0\par\pard\sb100\li960\sl220\qj  An application may, of course, have 
multiple transaction open on several servers, and either commit or rollback all 
transactions. \hyphpar0\par\pard\sb259\s2\sl380 {\*\bkmkstart _134}{\*\bkmkend 
_134}\b\fs34\lang1024\f1 Memory 
Management\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj \b0\fs20\lang1033\f0  
Client side memory management requires language specific code to free object 
references. Fortunately, this is handled automatically by the Python CORBA 
bindings, and thus is particularly simple. Clients are obliged to call the 
appropriate 'release' method, once a given object is no longer required, in 
order to assist in server side memory management. Disconnecting from the 
database frees all server side memory automatically. (Note: changes to the 
server side code will be done at a later stage, for efficiency, but this will 
not impact client side code.) 
\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Chapter 10. Module Creation}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Chapter 10. Module 
Creation}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
ID_MODULECREATION}{\*\bkmkend ID_MODULECREATION}\b\fs41\f1 Chapter 10. Module 
Creation\keepn\hyphpar0\par\pard\sb207\li960\sl220\qj \b0\fs20\lang1033\f0 A 
full module consists of several parts, but the object server is primarily 
concerned with the definitions of business objects. 
\hyphpar0\par\pard\sb100\li960\sl220\qj A class is defined by writing a text 
file that describes the members of the class. Additional separate files can 
extend a class that was defined in another file. Once this is done, a set of 
files need to be created that implement methods and triggers for an object. 
These are not absolutely required - if no business rules are appropriate, then 
no methods will be needed. \hyphpar0\par\pard\sb100\li960\sl220\qj Initially 
such code will be written in Python, but there is no convincing reason why 
other languages should be forbidden. The 
\hyphpar0\par\pard\sb100\li960\sl220\qj A GUI based class editor will be an 
important feature at a later stage. This should include appropriate data 
modelling tools to automatically design classes to represent the desired data. 
\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Chapter 11. Installing Modules}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Chapter 11. Installing 
Modules}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
ID_INSTALLMODULES}{\*\bkmkend ID_INSTALLMODULES}\b\fs41\f1 Chapter 11. 
Installing Modules\keepn\hyphpar0\par\pard\sb207\li960\sl220\qj 
\b0\fs20\lang1033\f0  Single object server system: 
\hyphpar0\par\pard\sb100\li960\sl220\qj The user will need to locate the data 
directory, and copy files to it. Removing a module will require removing the 
files, being careful not to remove any files used by another module. (e.g. 
removing the 'birthday' module may damage any other modules that depend on that 
module being present.) \hyphpar0\par\pard\sb100\li960\sl220\qj (Note: the 
installer program based system described below would most likely be useful for 
a non-scalable system, as well, but several people have expressed a desire for 
a manual system.) \hyphpar0\par\pard\sb100\li960\sl220\qj  Multiple object 
server system: \hyphpar0\par\pard\sb100\li960\sl220\qj A module, consisting of 
a set of class definitions and method code will be spread over a number of 
files, and most likely stored in an archive file (eg .tar.gz) An automated 
installation manager will process these files to update the entire system. 
\hyphpar0\par\pard\sb100\li960\sl220\qj A manual system is theoretically 
possible, but would require an arbitrarily large number of systems to be 
updated and synchronised, and an installer seems like an obvious requirement. 
\hyphpar0\par\pard\sb100\li960\sl220\qj (Note: the 'gnue-get' automatic 
installer will also need to be able to determine which system to 
install/update/remove the module to, and will need to use password protection 
if administration is restricted to particular users.) 
\hyphpar0\par\pard\sb100\li960\sl220\qj eg: gnue-get install [options] 
module.name This single command will locate the module, download it, and 
install it to the system. \hyphpar0\par\pard\sb100\li960\sl220\qj  gnue-get 
update [options] module.name This will compare the current version of the 
module to the latest available, and install the latest version if appropriate. 
(Note: if the module is not already installed, it acts as an install.) 
\hyphpar0\par\pard\sb100\li960\sl220\qj  gnue-get remove [options] module.name 
This will determine the parts of a module not in use by other modules, and 
remove just those parts of the module. This ensures unneeded modules can be 
cleanly removed, without breaking any other modules. (Note: it has been 
suggested that data is not deleted when a module is removed. This will ensure 
it is still accessible if/when the module is reinstalled. Some database 
administration would be needed if such data is also to be removed - but safety 
suggests that it should not be too simple to remove data. 
\hyphpar0\par\pard\sb100\li960\sl220\qj  The options will allow the user to 
specify the system to update, and an administration password, in order to 
prevent unauthorised users from corrupting the database. 
\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Chapter 12. Customizing Modules}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Chapter 12. Customizing 
Modules}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
ID_CUSTOMIZINGMODULES}{\*\bkmkend ID_CUSTOMIZINGMODULES}\b\fs41\f1 Chapter 12. 
Customizing Modules\keepn\hyphpar0\par\pard\sb207\li960\sl220\qj 
\b0\fs20\lang1033\f0  Many businesses will want to customise modules - adding 
new data to an object, adding or changing triggers to an object, and so on. 
Even when the official module is updated, customisations must be maintained. 
\hyphpar0\par\pard\sb100\li960\sl220\qj Customisation allows the addition of 
fields to a class, creating new relationships, and adding or modifying triggers 
and methods to enforce new/different business rules. Fields may not be removed, 
because doing so could break other modules that depend on those fields being 
present. \hyphpar0\par\pard\sb100\li960\sl220\qj If a class requires 
significant changes (for example, a movie theatre and an airline have vastly 
different views of customers, in terms of data stored) then a given class may 
not be appropriate, and a new class should be written for that business type. 
\hyphpar0\par\pard\sb100\li960\sl220\qj Option 1: The module files are edited 
directly. When a module is updated, the server has to compare the original file 
to the business' customised version, figure out all the changes that were made, 
and then edit the incoming files to reflect the customisations. Allowing 
developers to choose the language they want to develop a method/trigger in will 
make it very difficult to reliably follow changes to code. 
\hyphpar0\par\pard\sb100\li960\sl220\qj  Option 2: The business creates a 
single text file describing the modifications made to all classes in downloaded 
modules. (Multiple files are allowed, if desired.) This becomes a new module, 
and gets installed to the system normally. Any time it's changed, the update 
program is run, as well. \hyphpar0\par\pard\sb100\li960\sl220\qj  For example, 
adding a new business specific field to a class requires a two line text file, 
and a single install command. (One line to select the class to extend, one line 
to extend the class, and a close curly brace to end the extension.) After this, 
the new field will always be a part of the given object, no matter how many 
times the original module is installed, removed, or updated. 
\hyphpar0\par\pard\sb100\li960\sl220\qj  (If a GUI module editor is designed, 
and for non-expert developers this will be very important, the editor will be 
able to automatically call the install/update code, as well.) 
\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Chapter 13. Object Relationships}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Chapter 13. Object 
Relationships}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
ID_OBJRELATIONSHIPS}{\*\bkmkend ID_OBJRELATIONSHIPS}\b\fs41\f1 Chapter 13. 
Object Relationships\keepn\hyphpar0\par\pard\sb207\li960\sl220\qj 
\b0\fs20\lang1033\f0  Each object can have 'relationship' fields defined. There 
are two significant types: \hyphpar0\par\pard\sb100\li960\sl220\qj Lookup 
fields: These contain data looked up from another field. 
\hyphpar0\par\pard\sb100\li960\sl220\qj  e.g.: An Address object contains a 
'countrycode' field. A 'country' field can contain the name of the country, 
based on a lookup table that converts country codes to country names. The 
'country' field would be a read only lookup field. 
\hyphpar0\par\pard\sb100\li960\sl220\qj  Object references: These contain 
either a single object, or a list of objects. 
\hyphpar0\par\pard\sb100\li960\sl220\qj  e.g.: A customer object contains a 
field 'invoices' which contains the list of all invoices relating to that 
customer - empty if no invoices exist for that customer object. 
\hyphpar0\par\pard\sb100\li960\sl220\qj  The Invoice object contains a field 
'customer' which is either empty, or contains a reference to the single 
customer object set to be the owner of that specific invoice. 
\hyphpar0\par\pard\sb100\li960\sl220\qj Both types of reference are created by 
specifying the class to search for, and how to find the appropriate object(s). 
This is done bny specifying a set of fields in the base object and a set of 
fields in the search object. \hyphpar0\par\pard\sb100\li960\sl220\qj E.g.: 
\hyphpar0\par\pard\sb100\li960\sl220\qj  In the Customer class, a list of 
invoices is specified as consisting of all invoices where the 'customerid' 
field matches the 'id' field in the customer object that yolu're interested in. 
\hyphpar0\par\pard\sb100\li960\sl220\qj  list invoices : Invoice( customerid ) 
= id; \hyphpar0\par\pard\sb100\li960\sl220\qj  The 'list' keyword tells the 
server to allow multiple objects. If the 'reference' keyword was used, it would 
be marked as an error because the search criteria could return multiple 
objects. (This distinction is not required, but helps clarify the purpose of 
the field, and enable automatic error detection.) 
\hyphpar0\par\pard\sb100\li960\sl220\qj  Option A: meaningless indexes only 
\hyphpar0\par\pard\sb100\li960\sl220\qj In order to, for example, locate the 
name of a country based on its two letter abbreviation, you would first look up 
the abbreviation in a translation table, and store the index into the class 
required. You would then be able to use a relationship to find the country name 
based on the index. This requires the translation table to be maintained, along 
with the actual useful data. The suggested benefit is that translation tables 
make it easier to adjust data in the database - although care will be needed in 
order to ensure a database is not corrupted by damaging translation tables. 
\hyphpar0\par\pard\sb100\li960\sl220\qj Option B: meaningful indexes only 
\hyphpar0\par\pard\sb100\li960\sl220\qj To locate the name of a country, the 
object's countrycode would be set to the two letter code, then the relationship 
would look up a table to find the name associated with that code. Objects 
without a meaningful ID field would require a new field to be managed by the 
module developer. \hyphpar0\par\pard\sb100\li960\sl220\qj Option C: mixed 
indexes \hyphpar0\par\pard\sb100\li960\sl220\qj The object server can manage a 
meaningless index for each object, using it internally for object management, 
as well as providing limited access in order for relationships to use this 
index. \hyphpar0\par\pard\sb100\li960\sl220\qj Additionally, objects can be 
related directly to each other without needing additional translation tables to 
be maintained by module developers. \hyphpar0\par\pard\sb100\li960\sl220\qj 
Translation tables promise flexibility to translate data elements between 
different domains, but add an additional layer of complexity into situations 
where they are not needed. 
\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Chapter 14. Referential Integrity}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Chapter 14. Referential 
Integrity}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
ID_REFINTEGRITY}{\*\bkmkend ID_REFINTEGRITY}\b\fs41\f1 Chapter 14. Referential 
Integrity\keepn\hyphpar0\par\pard\sb207\li960\sl220\qj \b0\fs20\lang1033\f0 
This is an important aspect of any complex database system. A corrupt database, 
caused by writing erroneous values to fields, will cause significant problems 
no matter how the fields are interpreted by the application. Code to write to 
the database will be requried to enforce referential integrity at all times. 
\hyphpar0\par\pard\sb100\li960\sl220\qj However, no decisions have been made as 
to server code to support this. 
\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Chapter 15. Data Types}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Chapter 15. Data 
Types}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
ID_DATATYPES}{\*\bkmkend ID_DATATYPES}\b\fs41\f1 Chapter 15. Data 
Types\keepn\hyphpar0\par\pard\sb207\li960\sl220\qj \b0\fs20\lang1033\f0 A range 
of data types for fields will need to be supported. A number of basic 
requirements exist, but no definate decisions have been made. 
\hyphpar0\par\pard\sb259\s2\sl380 {\*\bkmkstart _193}{\*\bkmkend 
_193}\b\fs34\lang1024\f1 Text\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj 
\b0\fs20\lang1033\f0 Arrays of characters are reasonably simple. However, 
support for internationalization will be important, and this includes character 
sets with more than 1 byte per character, such as unicode. 
\hyphpar0\par\pard\sb259\s2\sl380 {\*\bkmkstart _196}{\*\bkmkend 
_196}\b\fs34\lang1024\f1 Numeric\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj 
\b0\fs20\lang1033\f0  64 bit integers are problematic, as ORBIT currently only 
supports 32 bit integers (This may change, as the CORBA standard now supports 
64 bit integers, but for the time being is not guaranteed.) 
\hyphpar0\par\pard\sb100\li960\sl220\qj (The unique object id, suggested to be 
a 64 bit integer, will be an opaque type, and thus its internal structure and 
contents will not be used by any client, but it will be able to be used for 
relationships between objects.) \hyphpar0\par\pard\sb100\li960\sl220\qj 32 bit 
signed and unsigned integers are useable as is, without any difficulty. 
\hyphpar0\par\pard\sb100\li960\sl220\qj A 'bigint' type is another option, 
being implemented as an unbounded string of characters. (This will be less 
flexible than a regular fixed integer.) \hyphpar0\par\pard\sb100\li960\sl220\qj 
floating point values have another problem - not all systems support the same 
definition. CORBA specifies 32-bit and 64-bit IEEE floating point numbers, and 
provided all systems used respect this standard, there should be no problem. 
\hyphpar0\par\pard\sb259\s2\sl380 {\*\bkmkstart _203}{\*\bkmkend 
_203}\b\fs34\lang1024\f1 
Money/Currency\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj 
\b0\fs20\lang1033\f0 This is another difficult area. Using a 64 bit integer for 
money is precise, but requires applications to take care when performing any 
caclulations, and extra fields will be needed for fractions of cents (or other 
currency unit.) Using floating point values causes problems when transferring 
money around, particularly between systems with different architectures, and 
different floating point values. It also affects the precision and range of 
values that can be represented. \hyphpar0\par\pard\sb259\s2\sl380 {\*\bkmkstart 
_206}{\*\bkmkend _206}\b\fs34\lang1024\f1 
Date/Time\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj \b0\fs20\lang1033\f0  
date : YYYY-MM-DD time : HH:MM:SS GMT datetime: YYYY-MM-DD HH:MM:SS GMT 
\hyphpar0\par\pard\sb100\li960\sl220\qj  A conversion to/from a machine 
datatype (such as UNIX style seconds since/before the epoch) will be required 
for time caclulations. Times and dates stored in this format will be stored as 
fixed length strings. \hyphpar0\par\pard\sb100\li960\sl220\qj option: a 32 bit 
value can be used, as in UNIX, and the application has to translate to an ASCII 
string. \hyphpar0\par\pard\sb259\s2\sl380 {\*\bkmkstart _211}{\*\bkmkend 
_211}\b\fs34\lang1024\f1 Summary\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj 
\b0\fs20\lang1033\f0  string - unbounded text char(N) - bounded text int - 32 
bit signed integer uint - 32 bit unsigned integer long - 64 bit signed integer 
(not guaranteed) ulong - 64 bit unsigned integer (not guaranteed) bigint - 
indefinate sized signed integer float - 32 bit IEEE floating point double - 64 
bit IEEE floating point\hyphpar0\par\pard\sb100\li960\sl220\qj  option 1: date 
- 32 bit integer \hyphpar0\par\pard\sb100\li960\sl220\qj  option 2: datetime - 
YYYY-MM-DD HH:MM:SS GMT \hyphpar0\par\pard\sb100\li960\sl220\qj  option 3: date 
- YYYY-MM-DD time - HH:MM:SS GMT datetime - YYYY-MM-DD HH:MM:SS GMT 
\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Chapter 16. Security}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Chapter 16. 
Security}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
ID_SECURITY}{\*\bkmkend ID_SECURITY}\b\fs41\f1 Chapter 16. 
Security\keepn\hyphpar0\par\pard\sb207\li960\sl220\qj \b0\fs20\lang1033\f0  
Little has been specified in the way of security, but some important items are 
listed here: \hyphpar0\par\pard\sb100\li960\sl220\qj 1) Users must authenticate 
themselves to the object server. The server can then enforce access rights, 
only allowing permitted data to be read and/or written. Administration options 
will also be protected in this way. Access rights will include combinations of 
read and write access, both to entire tables, and to sets of records within 
tables. (For example, a customer may be given read only access to the customer 
and invoices tables, but only for items that are associated with that 
customer.) Optionally, even field specific access would be useful, allowing the 
customer to update personal information at any time, but not to affect the 
business' financial records relating to the customer. 
\hyphpar0\par\pard\sb100\li960\sl220\qj 2) Connections must be encrypted to 
prevent attackers from reading and/or modifying data on the network. (This will 
require work with the ORBit developers.) 
\hyphpar0\par\pard\sb100\li960\sl220\qj 3) Non repudiation will be required for 
business to business transactions, in order to allow a database generated 
purchase order to be accepted and acted on. 
\hyphpar0\par\pard\sb100\li960\sl220\qj 4) The actual database must be 
protected from unauthorised access - protecting the object server is irrelevant 
if the actual database is vulnerable. \hyphpar0\par\pard\sb100\li960\sl220\qj  
There will need to be an administration application created to manage user 
rights within the system. 
\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Appendix A. GNU General Public License}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Appendix A. GNU General Public 
License}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
ID_APPENDIXES}{\*\bkmkend ID_APPENDIXES}{\*\bkmkstart _227}{\*\bkmkend 
_227}\b\fs41\f1 Appendix A. GNU General Public License 
\keepn\hyphpar0\par\pard\sb207\li960\sl198\qj \b0\fs18\f2                   GNU 
GENERAL PUBLIC LICENSE\sa0\par\fi0\sb0
+\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab 
{}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {}\par}\pard\sl20 {\*\bkmkstart ID_INDEX}{\*\bkmkend ID_INDEX}\fs20 
\hyphpar0\par\pard\sb373\sl547\qc \b\fs49\f1 GNU Enterprise - Object Server 
Guide Proposal\keepn\hyphpar0\par\pard\sl220 \b0\fs20\f0 
\~\hyphpar0\par\pard\sb1991\sl380\qc \b\fs34\f1 Andrew 
Murie\keepn\hyphpar0\par\pard\sl220\qc \fs24 GNU: Enterprise Core Development 
Team\hyphpar0\par\pard\sb1296\sl264\qc Edited 
by\keepn\hyphpar0\par\pard\sl380\qc \fs34 Derek 
Neighbors\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab 
{}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {}\par}\pard\sl20 \fs20 \keepn\hyphpar0\par\pard\sl-240 \b\f1 GNU 
Enterprise - Object Server Guide Proposal\hyphpar0\par\pard\sl220 \b0\f0 
by\~Andrew Murie\hyphpar0\par\pard\sb220\sl220 by\~\hyphpar0\par\pard\sl220 
Edited by\~Derek Neighbors\hyphpar0\par\pard\sb220\sl220 Published Thu Sep 20 
12:30:23 MST 2000\hyphpar0\par\pard\sl220 Copyright\~\'a9\~2000 by Free 
Software Foundation\hyphpar0\par\pard\sb200\sl220 \fs16 Copyright (c) 2000 Free 
Software Foundation\hyphpar0\par\pard\sl220 Permission is granted to copy, 
distribute and/or modify this document under the terms of the GNU Free 
Documentation License, Version 1.1 or any later version published by the Free 
Software Foundation; with no Invariant Sections, with no Front-Cover Texts and 
with no Back-Cover Texts. A copy of the license is included in the section 
entitled "GNU Free Documentation 
License".\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgnlcrm\pgnrestart\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{\i\fs20 \chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 \b\fs41\f1 Table of 
Contents\keepn\hyphpar0\par\pard\sb207\li1440\sl220\fi-480 {\field{\*\fldinst   
HYPERLINK  \\l ID_OVERVIEW}{\fldrslt \fs20\f0 1. Overview}}\fs20\f0 
\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l ID_OVERVIEW}{\fldrslt 
{\field\flddirty{\*\fldinst PAGEREF ID_OVERVIEW}{\fldrslt 
000}}}}\hyphpar0\par\pard\sb48\li1440\sl220\fi-480 {\field{\*\fldinst   
HYPERLINK  \\l ID_BIZOBJECTS}{\fldrslt 2. Business 
Objects}}\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l 
ID_BIZOBJECTS}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF 
ID_BIZOBJECTS}{\fldrslt 000}}}}\hyphpar0\par\pard\sb48\li1920\sl220\fi-480 
{\field{\*\fldinst   HYPERLINK  \\l _34 }{\fldrslt \b0 Objects}}\b0 
\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l _34 }{\fldrslt 
{\field\flddirty{\*\fldinst PAGEREF _34}{\fldrslt 
000}}}}\hyphpar0\par\pard\li1920\sl220\fi-480 {\field{\*\fldinst   HYPERLINK  
\\l _37 }{\fldrslt Fields}}\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK 
 \\l _37 }{\fldrslt {\field\flddirty{\*\fldinst PAGEREF _37}{\fldrslt 
000}}}}\hyphpar0\par\pard\li1920\sl220\fi-480 {\field{\*\fldinst   HYPERLINK  
\\l _40 }{\fldrslt Triggers}}\tqr\tldot\tx8400\tab {\field{\*\fldinst   
HYPERLINK  \\l _40 }{\fldrslt {\field\flddirty{\*\fldinst PAGEREF _40}{\fldrslt 
000}}}}\hyphpar0\par\pard\li1920\sl220\fi-480 {\field{\*\fldinst   HYPERLINK  
\\l _44 }{\fldrslt Methods}}\tqr\tldot\tx8400\tab {\field{\*\fldinst   
HYPERLINK  \\l _44 }{\fldrslt {\field\flddirty{\*\fldinst PAGEREF _44}{\fldrslt 
000}}}}\hyphpar0\par\pard\sb48\li1440\sl220\fi-480 {\field{\*\fldinst   
HYPERLINK  \\l ID_ARCHITECTURE}{\fldrslt \b 3. System Architecture}}\b 
\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l 
ID_ARCHITECTURE}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF 
ID_ARCHITECTURE}{\fldrslt 000}}}}\hyphpar0\par\pard\sb48\li1440\sl220\fi-480 
{\field{\*\fldinst   HYPERLINK  \\l ID_BIZOPERATION}{\fldrslt 4. Business To 
Business Operation}}\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l 
ID_BIZOPERATION}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF 
ID_BIZOPERATION}{\fldrslt 000}}}}\hyphpar0\par\pard\sb48\li1440\sl220\fi-480 
{\field{\*\fldinst   HYPERLINK  \\l ID_USAGE}{\fldrslt 5. Application 
Usage}}\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l 
ID_USAGE}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF ID_USAGE}{\fldrslt 
000}}}}\hyphpar0\par\pard\sb48\li1440\sl220\fi-480 {\field{\*\fldinst   
HYPERLINK  \\l ID_CORBA}{\fldrslt 6. CORBA Notes}}\tqr\tldot\tx8400\tab 
{\field{\*\fldinst   HYPERLINK  \\l ID_CORBA}{\fldrslt 
{\field\flddirty{\*\fldinst PAGEREF ID_CORBA}{\fldrslt 
000}}}}\hyphpar0\par\pard\sb48\li1440\sl220\fi-480 {\field{\*\fldinst   
HYPERLINK  \\l ID_CLASSES}{\fldrslt 7. Classes}}\tqr\tldot\tx8400\tab 
{\field{\*\fldinst   HYPERLINK  \\l ID_CLASSES}{\fldrslt 
{\field\flddirty{\*\fldinst PAGEREF ID_CLASSES}{\fldrslt 
000}}}}\hyphpar0\par\pard\sb48\li1440\sl220\fi-480 {\field{\*\fldinst   
HYPERLINK  \\l ID_CONNECTING}{\fldrslt 8. Connecting}}\tqr\tldot\tx8400\tab 
{\field{\*\fldinst   HYPERLINK  \\l ID_CONNECTING}{\fldrslt 
{\field\flddirty{\*\fldinst PAGEREF ID_CONNECTING}{\fldrslt 
000}}}}\hyphpar0\par\pard\sb48\li1440\sl220\fi-480 {\field{\*\fldinst   
HYPERLINK  \\l ID_PROCESSING}{\fldrslt 9. Processing}}\tqr\tldot\tx8400\tab 
{\field{\*\fldinst   HYPERLINK  \\l ID_PROCESSING}{\fldrslt 
{\field\flddirty{\*\fldinst PAGEREF ID_PROCESSING}{\fldrslt 
000}}}}\hyphpar0\par\pard\sb48\li1920\sl220\fi-480 {\field{\*\fldinst   
HYPERLINK  \\l _97 }{\fldrslt \b0 Creating New Objects}}\b0 
\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l _97 }{\fldrslt 
{\field\flddirty{\*\fldinst PAGEREF _97}{\fldrslt 
000}}}}\hyphpar0\par\pard\li1920\sl220\fi-480 {\field{\*\fldinst   HYPERLINK  
\\l _100 }{\fldrslt Locating Arbitrary Objects}}\tqr\tldot\tx8400\tab 
{\field{\*\fldinst   HYPERLINK  \\l _100 }{\fldrslt {\field\flddirty{\*\fldinst 
PAGEREF _100}{\fldrslt 000}}}}\hyphpar0\par\pard\li1920\sl220\fi-480 
{\field{\*\fldinst   HYPERLINK  \\l _105 }{\fldrslt Reading From An 
Object}}\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l _105 
}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF _105}{\fldrslt 
000}}}}\hyphpar0\par\pard\li1920\sl220\fi-480 {\field{\*\fldinst   HYPERLINK  
\\l _110 }{\fldrslt Writing To An Object}}\tqr\tldot\tx8400\tab 
{\field{\*\fldinst   HYPERLINK  \\l _110 }{\fldrslt {\field\flddirty{\*\fldinst 
PAGEREF _110}{\fldrslt 000}}}}\hyphpar0\par\pard\li1920\sl220\fi-480 
{\field{\*\fldinst   HYPERLINK  \\l _115 }{\fldrslt Reference 
Fields}}\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l _115 
}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF _115}{\fldrslt 
000}}}}\hyphpar0\par\pard\li1920\sl220\fi-480 {\field{\*\fldinst   HYPERLINK  
\\l _124 }{\fldrslt Sets of Objects}}\tqr\tldot\tx8400\tab {\field{\*\fldinst   
HYPERLINK  \\l _124 }{\fldrslt {\field\flddirty{\*\fldinst PAGEREF 
_124}{\fldrslt 000}}}}\hyphpar0\par\pard\li1920\sl220\fi-480 {\field{\*\fldinst 
  HYPERLINK  \\l _132 }{\fldrslt Calling Object Methods}}\tqr\tldot\tx8400\tab 
{\field{\*\fldinst   HYPERLINK  \\l _132 }{\fldrslt {\field\flddirty{\*\fldinst 
PAGEREF _132}{\fldrslt 000}}}}\hyphpar0\par\pard\li1920\sl220\fi-480 
{\field{\*\fldinst   HYPERLINK  \\l _136 }{\fldrslt 
Triggers}}\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l _136 
}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF _136}{\fldrslt 
000}}}}\hyphpar0\par\pard\li1920\sl220\fi-480 {\field{\*\fldinst   HYPERLINK  
\\l _141 }{\fldrslt Transactions}}\tqr\tldot\tx8400\tab {\field{\*\fldinst   
HYPERLINK  \\l _141 }{\fldrslt {\field\flddirty{\*\fldinst PAGEREF 
_141}{\fldrslt 000}}}}\hyphpar0\par\pard\li1920\sl220\fi-480 {\field{\*\fldinst 
  HYPERLINK  \\l _145 }{\fldrslt Memory Management}}\tqr\tldot\tx8400\tab 
{\field{\*\fldinst   HYPERLINK  \\l _145 }{\fldrslt {\field\flddirty{\*\fldinst 
PAGEREF _145}{\fldrslt 000}}}}\hyphpar0\par\pard\sb48\li1440\sl220\fi-480 
{\field{\*\fldinst   HYPERLINK  \\l ID_MODULECREATION}{\fldrslt \b 10. Module 
Creation}}\b \tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l 
ID_MODULECREATION}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF 
ID_MODULECREATION}{\fldrslt 000}}}}\hyphpar0\par\pard\sb48\li1440\sl220\fi-480 
{\field{\*\fldinst   HYPERLINK  \\l ID_INSTALLMODULES}{\fldrslt 11. Installing 
Modules}}\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l 
ID_INSTALLMODULES}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF 
ID_INSTALLMODULES}{\fldrslt 000}}}}\hyphpar0\par\pard\sb48\li1440\sl220\fi-480 
{\field{\*\fldinst   HYPERLINK  \\l ID_CUSTOMIZINGMODULES}{\fldrslt 12. 
Customizing Modules}}\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l 
ID_CUSTOMIZINGMODULES}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF 
ID_CUSTOMIZINGMODULES}{\fldrslt 
000}}}}\hyphpar0\par\pard\sb48\li1440\sl220\fi-480 {\field{\*\fldinst   
HYPERLINK  \\l ID_OBJRELATIONSHIPS}{\fldrslt 13. Object 
Relationships}}\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l 
ID_OBJRELATIONSHIPS}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF 
ID_OBJRELATIONSHIPS}{\fldrslt 
000}}}}\hyphpar0\par\pard\sb48\li1440\sl220\fi-480 {\field{\*\fldinst   
HYPERLINK  \\l ID_REFINTEGRITY}{\fldrslt 14. Referential 
Integrity}}\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l 
ID_REFINTEGRITY}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF 
ID_REFINTEGRITY}{\fldrslt 000}}}}\hyphpar0\par\pard\sb48\li1440\sl220\fi-480 
{\field{\*\fldinst   HYPERLINK  \\l ID_DATATYPES}{\fldrslt 15. Data 
Types}}\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l 
ID_DATATYPES}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF 
ID_DATATYPES}{\fldrslt 000}}}}\hyphpar0\par\pard\sb48\li1920\sl220\fi-480 
{\field{\*\fldinst   HYPERLINK  \\l _205 }{\fldrslt \b0 Text}}\b0 
\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l _205 }{\fldrslt 
{\field\flddirty{\*\fldinst PAGEREF _205}{\fldrslt 
000}}}}\hyphpar0\par\pard\li1920\sl220\fi-480 {\field{\*\fldinst   HYPERLINK  
\\l _208 }{\fldrslt Numeric}}\tqr\tldot\tx8400\tab {\field{\*\fldinst   
HYPERLINK  \\l _208 }{\fldrslt {\field\flddirty{\*\fldinst PAGEREF 
_208}{\fldrslt 000}}}}\hyphpar0\par\pard\li1920\sl220\fi-480 {\field{\*\fldinst 
  HYPERLINK  \\l _215 }{\fldrslt Money/Currency}}\tqr\tldot\tx8400\tab 
{\field{\*\fldinst   HYPERLINK  \\l _215 }{\fldrslt {\field\flddirty{\*\fldinst 
PAGEREF _215}{\fldrslt 000}}}}\hyphpar0\par\pard\li1920\sl220\fi-480 
{\field{\*\fldinst   HYPERLINK  \\l _218 }{\fldrslt 
Date/Time}}\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l _218 
}{\fldrslt {\field\flddirty{\*\fldinst PAGEREF _218}{\fldrslt 
000}}}}\hyphpar0\par\pard\li1920\sl220\fi-480 {\field{\*\fldinst   HYPERLINK  
\\l _223 }{\fldrslt Summary}}\tqr\tldot\tx8400\tab {\field{\*\fldinst   
HYPERLINK  \\l _223 }{\fldrslt {\field\flddirty{\*\fldinst PAGEREF 
_223}{\fldrslt 000}}}}\hyphpar0\par\pard\sb48\li1440\sl220\fi-480 
{\field{\*\fldinst   HYPERLINK  \\l ID_SECURITY}{\fldrslt \b 16. Security}}\b 
\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l ID_SECURITY}{\fldrslt 
{\field\flddirty{\*\fldinst PAGEREF ID_SECURITY}{\fldrslt 
000}}}}\hyphpar0\par\pard\sb48\li1440\sl220\fi-480 {\field{\*\fldinst   
HYPERLINK  \\l ID_APPENDIXES}{\fldrslt I. Appendixes}}\tqr\tldot\tx8400\tab 
{\field{\*\fldinst   HYPERLINK  \\l ID_APPENDIXES}{\fldrslt 
{\field\flddirty{\*\fldinst PAGEREF ID_APPENDIXES}{\fldrslt 
000}}}}\hyphpar0\par\pard\sb48\li1920\sl220\fi-480 {\field{\*\fldinst   
HYPERLINK  \\l _240 }{\fldrslt \b0 A. GNU General Public License}}\b0 
\tqr\tldot\tx8400\tab {\field{\*\fldinst   HYPERLINK  \\l _240 }{\fldrslt 
{\field\flddirty{\*\fldinst PAGEREF _240}{\fldrslt 
000}}}}\hyphpar0\par\pard\li1920\sl220\fi-480 {\field{\*\fldinst   HYPERLINK  
\\l _243 }{\fldrslt B. GNU Free Documentation License}}\tqr\tldot\tx8400\tab 
{\field{\*\fldinst   HYPERLINK  \\l _243 }{\fldrslt {\field\flddirty{\*\fldinst 
PAGEREF _243}{\fldrslt 
000}}}}\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\pgnrestart\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Chapter 1. Overview}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Chapter 1. 
Overview}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
ID_OVERVIEW}{\*\bkmkend ID_OVERVIEW}\b\fs41\f1 Chapter 1. 
Overview\keepn\hyphpar0\par\pard\sb207\li960\sl220\qj \b0\fs20\lang1033\f0 The 
object server manages a collection of persistant business objects for an 
enterprise. A range of applications will use the object server for data access. 
It is being implemented in CORBA to make the objects available to a wide range 
of development languages (C, C++, Python, Java, COBOL, Tcl/Tk, and a whole 
range of other languages.) \hyphpar0\par\pard\sb100\li960\sl220\qj Note: some 
issues have not been decided on, and a number of options exist, trading 
simplicity of implementation & configuration against future extensibility. 
\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Chapter 2. Business Objects}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Chapter 2. Business 
Objects}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
ID_BIZOBJECTS}{\*\bkmkend ID_BIZOBJECTS}\b\fs41\f1 Chapter 2. Business 
Objects\keepn\hyphpar0\par\pard\sb207\li960\sl220\qj \b0\fs20\lang1033\f0 A 
business object is a set of data values (fields) together with a set of 
functions that are automatically called when a certain event occurs (triggers) 
and another set of functions that can be called from outside the object 
(methods). \hyphpar0\par\pard\sb100\li960\sl220\qj The triggers and functions 
are designed to enforce business rules that are applicable to an entire 
enterprise: all applications will share the same rules. 
\hyphpar0\par\pard\sb100\li960\sl220\qj (Implementation note: Names of all 
classes, fields, triggers, methods, etc will be case insensitive. On the server 
side, they may be stored in whatever case is considered appropriate. Currently, 
all tables and columns are using all lower case letters for simplicity, as the 
MySQL database is case sensitive. Allowing any of those items to be 
distinguished only by case would not be sufficiently useful to be worth the 
extra complexity.) \hyphpar0\par\pard\sb259\s2\sl380 {\*\bkmkstart 
_34}{\*\bkmkend _34}\b\fs34\lang1024\f1 
Objects\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj \b0\fs20\lang1033\f0  An 
object is a collection of data and code, with the data being stored in a 
database. \hyphpar0\par\pard\sb259\s2\sl380 {\*\bkmkstart _37}{\*\bkmkend 
_37}\b\fs34\lang1024\f1 Fields\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj 
\b0\fs20\lang1033\f0  An object has a number of field types: Basic fields - 
contain raw data Lookup fields - data looked up from another table References - 
entire sets of other objects Calculated - data calculated based on other data 
in the database \hyphpar0\par\pard\sb259\s2\sl380 {\*\bkmkstart _40}{\*\bkmkend 
_40}\b\fs34\lang1024\f1 Triggers\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj 
\b0\fs20\lang1033\f0  Code called before and/or after a specified event. 
Optionally prevents the event from occuring, according to business rules. 
\hyphpar0\par\pard\sb100\li960\sl220\qj  For example, a trigger may prevent an 
invalid ISBN being inserted into the database, but can not confirm that it is 
the correct ISBN for the associated book. \hyphpar0\par\pard\sb259\s2\sl380 
{\*\bkmkstart _44}{\*\bkmkend _44}\b\fs34\lang1024\f1 
Methods\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj \b0\fs20\lang1033\f0  Code 
designed to serve a range of purposes. This will be called by client 
applications and/or triggers to perform a range of operations. Operations 
specific to an application should be part of the application, and operations 
required by many parts of an enterprise belong on the object server, where they 
can be implemented once, and used in all appropriate applications. 
\hyphpar0\par\pard\sb100\li960\sl220\qj  An example is a complex tax 
calculation, which relies on a number of variables as well as data from the 
database. 
\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Chapter 3. System Architecture}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Chapter 3. System 
Architecture}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
ID_ARCHITECTURE}{\*\bkmkend ID_ARCHITECTURE}\b\fs41\f1 Chapter 3. System 
Architecture\keepn\hyphpar0\par\pard\sb207\li960\sl220\qj \b0\fs20\lang1033\f0 
There are two proposed options, both with advantages and disadvantages. 
\hyphpar0\par\pard\sb100\li960\sl220\qj A) Non scalable single server. 
\hyphpar0\par\pard\sb100\li960\sl220\qj  This arrangement would have a single 
SQL database and a single object server providing data to a number of 
application programs. The advantage to this is simplicity - it's easy to 
configure, and new modules can be installed by copying the files to a 
directory, and then just using them. However, this means the entire system is 
limited to the capabilites of a single machine. All applications will have to 
run on the same LAN, or accept a severe speed penalty. This will be a 
significant limit to future growth, and will harm business-to-business 
transaction use of GNUe, as that would require multiple servers communication 
over variable networks. \hyphpar0\par\pard\sb100\li960\sl220\qj B) Scalable 
system with multiple servers. \hyphpar0\par\pard\sb100\li960\sl220\qj  A 
scalable system will allow as many databases and object servers to be installed 
as are required. Each application will connect to the object servers that 
provide the required data and have appropriate network locations, and those 
servers will be internally configured to access the appropriate databases. The 
main disadvantage here is complexity for the server implementation - care is 
required to ensure the system remains efficient at high levels of distributed 
usage. Installation of new modules will require automated tools that set up 
databases and object servers correctly. \hyphpar0\par\pard\sb100\li960\sl220\qj 
 Another option is to export data from the one database and import it to the 
other database (see Batch Tables in Module Designers Guide). 
\hyphpar0\par\pard\sb100\li960\sl220\qj The advantages are: 
\hyphpar0\par\pard\sb100\li1160\sl220\fi-200\qj \tx1160 \fs16\lang1024 \'95\tab 
\fs20  We can use that even if not both communication partners use GNUe 
\hyphpar0\par\pard\sb100\li1160\sl220\fi-200\qj \tx1160 \fs16 \'95\tab \fs20  
We can do this asynchronously; even via streamer tape. 
\hyphpar0\par\pard\sb100\li1160\sl220\fi-200\qj \tx1160 \fs16 \'95\tab \fs20  
IMO we will have less issues with security. 
\hyphpar0\par\pard\sb100\li1160\sl220\fi-200\qj \tx1160 \fs16 \'95\tab \fs20  
Prevents customers from having access to my object server. 
\hyphpar0\par\pard\sb100\li960\sl220\qj \lang1033  Example of a (relatively 
simple) multi server system: \hyphpar0\par\pard\sb100\li960\sl220\qj  A chain 
of stores runs a single computer in each store to manage that store's database. 
Even if network links fail, the LAN in the store will still operate correctly. 
A computer at head office can connect to the store systems at appropriate times 
to retrieve accounting information. A store manager can take a laptop with 
another object server home, and use this to access a database - the object 
server on the laptop will manage buffering of data to optimise useage of the 
slow network link. The store computers can access the company's warehouse to 
request new stock shipments, and the warehouse can, in turn, arrange purcahses 
of new stock from suppliers, either automatically or with manual approval. 
\hyphpar0\par\pard\sb100\li960\sl220\qj  In this system, the GNUe object server 
will provide the data management system, Forms would run the user interface for 
various applications such as point of sale terminals, management reports, and 
so on. CORBA would be the communication medium, managing network traffic and 
most of the security. \hyphpar0\par\pard\sb100\li960\sl220\qj (Note: 
Communication between object servers has not yet been defined, but the 
intention is to reuse the 'Database' interface, so that an application doesn't 
care if data is stored directly in a GDA enabled database, or on another object 
server. Security and system configuration will also be issues that need to be 
developed, as well.) 
\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Chapter 4. Business To Business Operation}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Chapter 4. Business To Business 
Operation}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
ID_BIZOPERATION}{\*\bkmkend ID_BIZOPERATION}\b\fs41\f1 Chapter 4. Business To 
Business Operation\keepn\hyphpar0\par\pard\sb207\li960\sl220\qj 
\b0\fs20\lang1033\f0 Allowing GNUe to serve as a central component in 
business-to-business operations will require that object servers can 
communicate with each other in a standard, secure, and traceable way. 
\hyphpar0\par\pard\sb100\li960\sl220\qj For example, a server may have a 
trigger that detects a drop in stock levels. This will create a new purchase 
object, and then select the appropriate supplier to transmit it to. 
Authentication will allow the transmission to be accepted, and non-repudiation 
will enable the supplier to treat the order as a legal contract - the server 
owner would not be able to refuse to pay by claiming to have never sent the 
order. All transactions would, of course, need to be logged for accounting 
purposes. \hyphpar0\par\pard\sb100\li960\sl220\qj (Note: We will need to 
investigate ORBit support of CORBAsecurity for some of these features.) 
\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Chapter 5. Application Usage}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Chapter 5. Application 
Usage}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
ID_USAGE}{\*\bkmkend ID_USAGE}\b\fs41\f1 Chapter 5. Application 
Usage\keepn\hyphpar0\par\pard\sb207\li960\sl220\qj \b0\fs20\lang1033\f0 Typical 
applications will establish a connection to the server, perform an amount of 
processing, and then disconnect again. Automated systems may maintain a 
permanent connection, regularly updating the database with status information 
that can then be used by other applications. A range of options will be 
available. 
\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Chapter 6. CORBA Notes}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Chapter 6. CORBA 
Notes}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
ID_CORBA}{\*\bkmkend ID_CORBA}\b\fs41\f1 Chapter 6. CORBA 
Notes\keepn\hyphpar0\par\pard\sb207\li960\sl220\qj \b0\fs20\lang1033\f0 Typical 
module developers will not need to know about CORBA. In GNUe Forms, the Forms 
code will provide data from 'somewhere' in a format decided by the author of 
Forms. (eg, the Python forms will use normal Python datatypes.) 
\hyphpar0\par\pard\sb100\li960\sl220\qj Developers of new classes will specify 
the GNUe defined data types for each field, and these will be managed behind 
the scenes in whatever way suits the object server and Forms code. 
\hyphpar0\par\pard\sb100\li960\sl220\qj GNUe specified data types will be 
mapped directly to a CORBA data type, and then to an application specific 
datatype. When writing a new module, you will only need a table describing the 
GNUE datatypes, and how to use them in your chosen language. 
\hyphpar0\par\pard\sb100\li960\sl220\qj Developers who write new triggers or 
methods will be give templates in all supported languages. A minimal degree of 
complexity is inevitable, but this will be kept as simple as possible, and the 
templates will cover handling arguments to functions, returning a result, 
reading from the database, writing to the database, and handling error 
conditions. (Much of this detail has yet to be decided on.) 
\hyphpar0\par\pard\sb100\li960\sl220\qj If a new application does not use 
Forms, it may need a minimal amount of CORBA code. This is not particularly 
complex in languages such as Python, which maps CORBA objects directly to 
Python objects. (See the example Python client code for useage of the server 
from Python.) \hyphpar0\par\pard\sb100\li960\sl220\qj Object server developers, 
however, will need to be able to understand some CORBA in order to understand 
how a client side function call is translated to the server side 
implementation. 
\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Chapter 7. Classes}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Chapter 7. 
Classes}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
ID_CLASSES}{\*\bkmkend ID_CLASSES}\b\fs41\f1 Chapter 7. 
Classes\keepn\hyphpar0\par\pard\sb207\li960\sl220\qj \b0\fs20\lang1033\f0 
DatabaseFactory - Manages connections to a database Database - Allow searching 
and creating of objects DataObject - Read and write data to/from a specific 
object instance 
\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Chapter 8. Connecting}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Chapter 8. 
Connecting}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
ID_CONNECTING}{\*\bkmkend ID_CONNECTING}\b\fs41\f1 Chapter 8. 
Connecting\keepn\hyphpar0\par\pard\sb207\li960\sl220\qj \b0\fs20\lang1033\f0 
Connecting \hyphpar0\par\pard\sb100\li960\sl220\qj The application will locate 
an instance of the DatabaseFactory class. This is a fixed access point for a 
running object server. It will then request a connection by name, and receive 
an appropriate Database object. Optionally, the application will be required to 
authenticate to the server, although precise details for this have not been 
decided. \hyphpar0\par\pard\sb100\li960\sl220\qj Disconnecting 
\hyphpar0\par\pard\sb100\li960\sl220\qj The 'disconnect' method of the Database 
object is called to disconnect. 
\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Chapter 9. Processing}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Chapter 9. 
Processing}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
ID_PROCESSING}{\*\bkmkend ID_PROCESSING}\b\fs41\f1 Chapter 9. 
Processing\keepn\hyphpar0\par\pard\sb259\s2\sl380 {\*\bkmkstart _97}{\*\bkmkend 
_97}\fs34 Creating New Objects\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj 
\b0\fs20\lang1033\f0  The Database object method 'newObject' takes the 
classname of the object to create, and returns an appropriate object reference. 
\hyphpar0\par\pard\sb259\s2\sl380 {\*\bkmkstart _100}{\*\bkmkend 
_100}\b\fs34\lang1024\f1 Locating Arbitrary 
Objects\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj \b0\fs20\lang1033\f0  
There are methods in the database object to search for data: loadObject, which 
requires the classname, a fieldname, and the value of that field. It returns a 
list of objects where the named field has the required value. the loadAll 
method loads all objects of the named class. (More complicated searches may be 
developed at a later stage.) \hyphpar0\par\pard\sb100\li960\sl220\qj  Some 
objects contain references to other objects. (eg a Customer object can find a 
list of associated Invoice objects.) The DataObject class includes a 
'getReference' method which takes the name of the reference, and returns the 
list of matching objects. \hyphpar0\par\pard\sb100\li960\sl220\qj  
Database.loadObject() : find a set of objects with a simple search 
Database.loadAll() : load all instances of a given class Database.newObject() : 
create a new business object instance DataObject.getReference() : get a list of 
objects related to a known object \hyphpar0\par\pard\sb259\s2\sl380 
{\*\bkmkstart _105}{\*\bkmkend _105}\b\fs34\lang1024\f1 Reading From An 
Object\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj \b0\fs20\lang1033\f0  The 
DataObject class method 'getField' retrieves the value of three types of 
fields: basic data fields, fields looked up from other tables, and fields 
calculated on the basis of basic data fields. 
\hyphpar0\par\pard\sb100\li960\sl220\qj  The getField method returns the data 
as an ASCII string. \hyphpar0\par\pard\sb100\li960\sl220\qj  Additionally, 
there will be type specific methods, that convert data to an application 
specific format. In particular, the datatypes specified for CORBA IDL will be 
used. \hyphpar0\par\pard\sb259\s2\sl380 {\*\bkmkstart _110}{\*\bkmkend 
_110}\b\fs34\lang1024\f1 Writing To An 
Object\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj \b0\fs20\lang1033\f0  The 
DataObject class method 'setField' sets a named basic field to a given value. A 
'flush' method can be called to indicate that the application is finished with 
an object. Even if that is not called, the server will still write the data to 
the database at what it considers to be an appropriate time - the flush method 
is a hint, rather than a command. \hyphpar0\par\pard\sb100\li960\sl220\qj  The 
setField method requires the field data to be submitted as an ASCII string. 
\hyphpar0\par\pard\sb100\li960\sl220\qj  Additionally, there will be type 
specific methods, that convert data from an application specific format. In 
particular, the datatypes specified for CORBA IDL will be used. 
\hyphpar0\par\pard\sb259\s2\sl380 {\*\bkmkstart _115}{\*\bkmkend 
_115}\b\fs34\lang1024\f1 Reference 
Fields\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj \b0\fs20\lang1033\f0  The 
'insert' method in the DataObject class is used to add a single object to a 
named field. \hyphpar0\par\pard\sb100\li960\sl220\qj  eg: customer_obj.insert( 
"invoices" , invoice_obj ); \hyphpar0\par\pard\sb100\li960\sl220\qj  The 
'setReference' field is used to make a single object reference field point to 
the given object. \hyphpar0\par\pard\sb100\li960\sl220\qj  eg: 
invoice_obj.setReference( "customer" , customer_obj ); 
\hyphpar0\par\pard\sb100\li960\sl220\qj  The nature of the reference determins 
if both must be called, or only a single call will cause both references to be 
made. (TODO: insert detailed examples of this.) 
\hyphpar0\par\pard\sb100\li960\sl220\qj  (Note: Referential integrity will 
require that relationships can be specified precisely, and that the effects of 
the 'insert' and 'setReference' methods are clear in all circumstances.) 
\hyphpar0\par\pard\sb100\li960\sl220\qj  The 'getReference' method will return 
either CORBA_OBJECT_NIL (mapped to None, in Python) or the reference to the 
first object in the field. If the field contains a list, then the 'next' and 
'previous' methods can be used to navigate through the list ob objects. 
\hyphpar0\par\pard\sb259\s2\sl380 {\*\bkmkstart _124}{\*\bkmkend 
_124}\b\fs34\lang1024\f1 Sets of 
Objects\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj \b0\fs20\lang1033\f0  
(Note: sometimes, these have been incorrectly referred to as lists.) 
\hyphpar0\par\pard\sb100\li960\sl220\qj  Each DataObject instance has a 'next' 
and a 'previous' method, which return a reference to the next or previous 
object in the list. Once the end has been reached, the methods will return the 
NIL object reference (CORBA_OBJECT_NIL, in C, or None in Python.) A list with 
only one element will always return NIL for both 'next' and 'previous'. 
\hyphpar0\par\pard\sb100\li960\sl220\qj  Currently, sets have no precisely 
defined order for the next and previous methods. However, using 'next' or 
'previous' to navigate from one end of the list to the other is guaranteed to 
process each object in the list exactly once. 
\hyphpar0\par\pard\sb100\li960\sl220\qj example: (Note: this is pseudo code, to 
examine every instance of a given class.) 
\hyphpar0\par\pard\sb100\li960\sl220\qj  obj = database.loadAll( "classname" ); 
while obj != None: obj.getField( ... ); obj = obj.next(); 
\hyphpar0\par\pard\sb100\li960\sl220\qj  In C, the programmer must take care of 
client side object references to prevent memory leaks. This is done 
automatically in Python. \hyphpar0\par\pard\sb259\s2\sl380 {\*\bkmkstart 
_132}{\*\bkmkend _132}\b\fs34\lang1024\f1 Calling Object 
Methods\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj \b0\fs20\lang1033\f0  
Details have yet to be decided. \hyphpar0\par\pard\sb100\li960\sl220\qj  
Methods will take at least one implicit argument - that being the object it is 
attached to. Additionally, they will be able to take a set of arguments to 
operate on. \hyphpar0\par\pard\sb259\s2\sl380 {\*\bkmkstart _136}{\*\bkmkend 
_136}\b\fs34\lang1024\f1 Triggers\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj 
\b0\fs20\lang1033\f0  Triggers are methods that are called by the object server 
in response to various events. Each type of trigger has a defined input 
arguments and returns a true/false (yes/no, poass/fail) result. For example, 
the "BeforeSet" trigger can return "false" if the data is invalid, and may not 
be placed in the database. This is used to enforce business rules. 
\hyphpar0\par\pard\sb100\li960\sl220\qj  Defined triggers: BeforeSet AfterSet 
BeforeGet AfterGet \hyphpar0\par\pard\sb100\li960\sl220\qj  It's has been 
suggested that triggers are needed for each stage of a transaction, but precise 
details are yet to be decided. For example, which object should be affected by 
a "BeforeCommit" trigger? \hyphpar0\par\pard\sb259\s2\sl380 {\*\bkmkstart 
_141}{\*\bkmkend _141}\b\fs34\lang1024\f1 
Transactions\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj \b0\fs20\lang1033\f0  
Currently, a transaction is begun by calling the 'beginTransaction' method in 
the Database objerct, followed by a series of write operations, and then either 
'commitTransaction' or 'rollbackTransaction'. This must be supported by the GDA 
provider in use - either directly by the database, or simulated in GDA. 
\hyphpar0\par\pard\sb100\li960\sl220\qj  An application may, of course, have 
multiple transaction open on several servers, and either commit or rollback all 
transactions. \hyphpar0\par\pard\sb259\s2\sl380 {\*\bkmkstart _145}{\*\bkmkend 
_145}\b\fs34\lang1024\f1 Memory 
Management\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj \b0\fs20\lang1033\f0  
Client side memory management requires language specific code to free object 
references. Fortunately, this is handled automatically by the Python CORBA 
bindings, and thus is particularly simple. Clients are obliged to call the 
appropriate 'release' method, once a given object is no longer required, in 
order to assist in server side memory management. Disconnecting from the 
database frees all server side memory automatically. (Note: changes to the 
server side code will be done at a later stage, for efficiency, but this will 
not impact client side code.) 
\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Chapter 10. Module Creation}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Chapter 10. Module 
Creation}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
ID_MODULECREATION}{\*\bkmkend ID_MODULECREATION}\b\fs41\f1 Chapter 10. Module 
Creation\keepn\hyphpar0\par\pard\sb207\li960\sl220\qj \b0\fs20\lang1033\f0 A 
full module consists of several parts, but the object server is primarily 
concerned with the definitions of business objects. 
\hyphpar0\par\pard\sb100\li960\sl220\qj A class is defined by writing a text 
file that describes the members of the class. Additional separate files can 
extend a class that was defined in another file. Once this is done, a set of 
files need to be created that implement methods and triggers for an object. 
These are not absolutely required - if no business rules are appropriate, then 
no methods will be needed. \hyphpar0\par\pard\sb100\li960\sl220\qj Initially 
such code will be written in Python, but there is no convincing reason why 
other languages should be forbidden. The 
\hyphpar0\par\pard\sb100\li960\sl220\qj A GUI based class editor will be an 
important feature at a later stage. This should include appropriate data 
modelling tools to automatically design classes to represent the desired data. 
\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Chapter 11. Installing Modules}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Chapter 11. Installing 
Modules}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
ID_INSTALLMODULES}{\*\bkmkend ID_INSTALLMODULES}\b\fs41\f1 Chapter 11. 
Installing Modules\keepn\hyphpar0\par\pard\sb207\li960\sl220\qj 
\b0\fs20\lang1033\f0  Single object server system: 
\hyphpar0\par\pard\sb100\li960\sl220\qj The user will need to locate the data 
directory, and copy files to it. Removing a module will require removing the 
files, being careful not to remove any files used by another module. (e.g. 
removing the 'birthday' module may damage any other modules that depend on that 
module being present.) \hyphpar0\par\pard\sb100\li960\sl220\qj (Note: the 
installer program based system described below would most likely be useful for 
a non-scalable system, as well, but several people have expressed a desire for 
a manual system.) \hyphpar0\par\pard\sb100\li960\sl220\qj  Multiple object 
server system: \hyphpar0\par\pard\sb100\li960\sl220\qj A module, consisting of 
a set of class definitions and method code will be spread over a number of 
files, and most likely stored in an archive file (eg .tar.gz) An automated 
installation manager will process these files to update the entire system. 
\hyphpar0\par\pard\sb100\li960\sl220\qj A manual system is theoretically 
possible, but would require an arbitrarily large number of systems to be 
updated and synchronised, and an installer seems like an obvious requirement. 
\hyphpar0\par\pard\sb100\li960\sl220\qj (Note: the 'gnue-get' automatic 
installer will also need to be able to determine which system to 
install/update/remove the module to, and will need to use password protection 
if administration is restricted to particular users.) 
\hyphpar0\par\pard\sb100\li960\sl220\qj eg: gnue-get install [options] 
module.name This single command will locate the module, download it, and 
install it to the system. \hyphpar0\par\pard\sb100\li960\sl220\qj  gnue-get 
update [options] module.name This will compare the current version of the 
module to the latest available, and install the latest version if appropriate. 
(Note: if the module is not already installed, it acts as an install.) 
\hyphpar0\par\pard\sb100\li960\sl220\qj  gnue-get remove [options] module.name 
This will determine the parts of a module not in use by other modules, and 
remove just those parts of the module. This ensures unneeded modules can be 
cleanly removed, without breaking any other modules. (Note: it has been 
suggested that data is not deleted when a module is removed. This will ensure 
it is still accessible if/when the module is reinstalled. Some database 
administration would be needed if such data is also to be removed - but safety 
suggests that it should not be too simple to remove data. 
\hyphpar0\par\pard\sb100\li960\sl220\qj  The options will allow the user to 
specify the system to update, and an administration password, in order to 
prevent unauthorised users from corrupting the database. 
\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Chapter 12. Customizing Modules}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Chapter 12. Customizing 
Modules}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
ID_CUSTOMIZINGMODULES}{\*\bkmkend ID_CUSTOMIZINGMODULES}\b\fs41\f1 Chapter 12. 
Customizing Modules\keepn\hyphpar0\par\pard\sb207\li960\sl220\qj 
\b0\fs20\lang1033\f0  Many businesses will want to customise modules - adding 
new data to an object, adding or changing triggers to an object, and so on. 
Even when the official module is updated, customisations must be maintained. 
\hyphpar0\par\pard\sb100\li960\sl220\qj Customisation allows the addition of 
fields to a class, creating new relationships, and adding or modifying triggers 
and methods to enforce new/different business rules. Fields may not be removed, 
because doing so could break other modules that depend on those fields being 
present. \hyphpar0\par\pard\sb100\li960\sl220\qj If a class requires 
significant changes (for example, a movie theatre and an airline have vastly 
different views of customers, in terms of data stored) then a given class may 
not be appropriate, and a new class should be written for that business type. 
\hyphpar0\par\pard\sb100\li960\sl220\qj Option 1: The module files are edited 
directly. When a module is updated, the server has to compare the original file 
to the business' customised version, figure out all the changes that were made, 
and then edit the incoming files to reflect the customisations. Allowing 
developers to choose the language they want to develop a method/trigger in will 
make it very difficult to reliably follow changes to code. 
\hyphpar0\par\pard\sb100\li960\sl220\qj  Option 2: The business creates a 
single text file describing the modifications made to all classes in downloaded 
modules. (Multiple files are allowed, if desired.) This becomes a new module, 
and gets installed to the system normally. Any time it's changed, the update 
program is run, as well. \hyphpar0\par\pard\sb100\li960\sl220\qj  For example, 
adding a new business specific field to a class requires a two line text file, 
and a single install command. (One line to select the class to extend, one line 
to extend the class, and a close curly brace to end the extension.) After this, 
the new field will always be a part of the given object, no matter how many 
times the original module is installed, removed, or updated. 
\hyphpar0\par\pard\sb100\li960\sl220\qj  (If a GUI module editor is designed, 
and for non-expert developers this will be very important, the editor will be 
able to automatically call the install/update code, as well.) 
\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Chapter 13. Object Relationships}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Chapter 13. Object 
Relationships}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
ID_OBJRELATIONSHIPS}{\*\bkmkend ID_OBJRELATIONSHIPS}\b\fs41\f1 Chapter 13. 
Object Relationships\keepn\hyphpar0\par\pard\sb207\li960\sl220\qj 
\b0\fs20\lang1033\f0  Each object can have 'relationship' fields defined. There 
are two significant types: \hyphpar0\par\pard\sb100\li960\sl220\qj Lookup 
fields: These contain data looked up from another field. 
\hyphpar0\par\pard\sb100\li960\sl220\qj  e.g.: An Address object contains a 
'countrycode' field. A 'country' field can contain the name of the country, 
based on a lookup table that converts country codes to country names. The 
'country' field would be a read only lookup field. 
\hyphpar0\par\pard\sb100\li960\sl220\qj  Object references: These contain 
either a single object, or a list of objects. 
\hyphpar0\par\pard\sb100\li960\sl220\qj  e.g.: A customer object contains a 
field 'invoices' which contains the list of all invoices relating to that 
customer - empty if no invoices exist for that customer object. 
\hyphpar0\par\pard\sb100\li960\sl220\qj  The Invoice object contains a field 
'customer' which is either empty, or contains a reference to the single 
customer object set to be the owner of that specific invoice. 
\hyphpar0\par\pard\sb100\li960\sl220\qj Both types of reference are created by 
specifying the class to search for, and how to find the appropriate object(s). 
This is done bny specifying a set of fields in the base object and a set of 
fields in the search object. \hyphpar0\par\pard\sb100\li960\sl220\qj E.g.: 
\hyphpar0\par\pard\sb100\li960\sl220\qj  In the Customer class, a list of 
invoices is specified as consisting of all invoices where the 'customerid' 
field matches the 'id' field in the customer object that yolu're interested in. 
\hyphpar0\par\pard\sb100\li960\sl220\qj  list invoices : Invoice( customerid ) 
= id; \hyphpar0\par\pard\sb100\li960\sl220\qj  The 'list' keyword tells the 
server to allow multiple objects. If the 'reference' keyword was used, it would 
be marked as an error because the search criteria could return multiple 
objects. (This distinction is not required, but helps clarify the purpose of 
the field, and enable automatic error detection.) 
\hyphpar0\par\pard\sb100\li960\sl220\qj  Option A: meaningless indexes only 
\hyphpar0\par\pard\sb100\li960\sl220\qj In order to, for example, locate the 
name of a country based on its two letter abbreviation, you would first look up 
the abbreviation in a translation table, and store the index into the class 
required. You would then be able to use a relationship to find the country name 
based on the index. This requires the translation table to be maintained, along 
with the actual useful data. The suggested benefit is that translation tables 
make it easier to adjust data in the database - although care will be needed in 
order to ensure a database is not corrupted by damaging translation tables. 
\hyphpar0\par\pard\sb100\li960\sl220\qj Option B: meaningful indexes only 
\hyphpar0\par\pard\sb100\li960\sl220\qj To locate the name of a country, the 
object's countrycode would be set to the two letter code, then the relationship 
would look up a table to find the name associated with that code. Objects 
without a meaningful ID field would require a new field to be managed by the 
module developer. \hyphpar0\par\pard\sb100\li960\sl220\qj Option C: mixed 
indexes \hyphpar0\par\pard\sb100\li960\sl220\qj The object server can manage a 
meaningless index for each object, using it internally for object management, 
as well as providing limited access in order for relationships to use this 
index. \hyphpar0\par\pard\sb100\li960\sl220\qj Additionally, objects can be 
related directly to each other without needing additional translation tables to 
be maintained by module developers. \hyphpar0\par\pard\sb100\li960\sl220\qj 
Translation tables promise flexibility to translate data elements between 
different domains, but add an additional layer of complexity into situations 
where they are not needed. \hyphpar0\par\pard\sb100\li960\sl220\qj  Further 
discussion about using seeded numbers asa primary keys in all tables vs. 
meaningful data primary keys needs further real time discussion. There are 
advantages / disadvantages to all that are not fully encompassed in this 
document and much easier to relay in real time discussion. From which this 
document can be modified with results of that discussion. 
\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Chapter 14. Referential Integrity}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Chapter 14. Referential 
Integrity}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
ID_REFINTEGRITY}{\*\bkmkend ID_REFINTEGRITY}\b\fs41\f1 Chapter 14. Referential 
Integrity\keepn\hyphpar0\par\pard\sb207\li960\sl220\qj \b0\fs20\lang1033\f0 
This is an important aspect of any complex database system. A corrupt database, 
caused by writing erroneous values to fields, will cause significant problems 
no matter how the fields are interpreted by the application. Code to write to 
the database will be requried to enforce referential integrity at all times. 
\hyphpar0\par\pard\sb100\li960\sl220\qj However, no decisions have been made as 
to server code to support this. 
\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Chapter 15. Data Types}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Chapter 15. Data 
Types}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
ID_DATATYPES}{\*\bkmkend ID_DATATYPES}\b\fs41\f1 Chapter 15. Data 
Types\keepn\hyphpar0\par\pard\sb207\li960\sl220\qj \b0\fs20\lang1033\f0 A range 
of data types for fields will need to be supported. A number of basic 
requirements exist, but no definate decisions have been made. 
\hyphpar0\par\pard\sb259\s2\sl380 {\*\bkmkstart _205}{\*\bkmkend 
_205}\b\fs34\lang1024\f1 Text\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj 
\b0\fs20\lang1033\f0 Arrays of characters are reasonably simple. However, 
support for internationalization will be important, and this includes character 
sets with more than 1 byte per character, such as unicode. 
\hyphpar0\par\pard\sb259\s2\sl380 {\*\bkmkstart _208}{\*\bkmkend 
_208}\b\fs34\lang1024\f1 Numeric\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj 
\b0\fs20\lang1033\f0  64 bit integers are problematic, as ORBIT currently only 
supports 32 bit integers (This may change, as the CORBA standard now supports 
64 bit integers, but for the time being is not guaranteed.) 
\hyphpar0\par\pard\sb100\li960\sl220\qj (The unique object id, suggested to be 
a 64 bit integer, will be an opaque type, and thus its internal structure and 
contents will not be used by any client, but it will be able to be used for 
relationships between objects.) \hyphpar0\par\pard\sb100\li960\sl220\qj 32 bit 
signed and unsigned integers are useable as is, without any difficulty. 
\hyphpar0\par\pard\sb100\li960\sl220\qj A 'bigint' type is another option, 
being implemented as an unbounded string of characters. (This will be less 
flexible than a regular fixed integer.) \hyphpar0\par\pard\sb100\li960\sl220\qj 
floating point values have another problem - not all systems support the same 
definition. CORBA specifies 32-bit and 64-bit IEEE floating point numbers, and 
provided all systems used respect this standard, there should be no problem. 
\hyphpar0\par\pard\sb259\s2\sl380 {\*\bkmkstart _215}{\*\bkmkend 
_215}\b\fs34\lang1024\f1 
Money/Currency\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj 
\b0\fs20\lang1033\f0 This is another difficult area. Using a 64 bit integer for 
money is precise, but requires applications to take care when performing any 
caclulations, and extra fields will be needed for fractions of cents (or other 
currency unit.) Using floating point values causes problems when transferring 
money around, particularly between systems with different architectures, and 
different floating point values. It also affects the precision and range of 
values that can be represented. \hyphpar0\par\pard\sb259\s2\sl380 {\*\bkmkstart 
_218}{\*\bkmkend _218}\b\fs34\lang1024\f1 
Date/Time\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj \b0\fs20\lang1033\f0  
date : YYYY-MM-DD time : HH:MM:SS GMT datetime: YYYY-MM-DD HH:MM:SS GMT 
\hyphpar0\par\pard\sb100\li960\sl220\qj  A conversion to/from a machine 
datatype (such as UNIX style seconds since/before the epoch) will be required 
for time caclulations. Times and dates stored in this format will be stored as 
fixed length strings. \hyphpar0\par\pard\sb100\li960\sl220\qj option: a 32 bit 
value can be used, as in UNIX, and the application has to translate to an ASCII 
string. \hyphpar0\par\pard\sb259\s2\sl380 {\*\bkmkstart _223}{\*\bkmkend 
_223}\b\fs34\lang1024\f1 Summary\keepn\hyphpar0\par\pard\sb173\li960\sl220\qj 
\b0\fs20\lang1033\f0  string - unbounded text char(N) - bounded text int - 32 
bit signed integer uint - 32 bit unsigned integer long - 64 bit signed integer 
(not guaranteed) ulong - 64 bit unsigned integer (not guaranteed) bigint - 
indefinate sized signed integer float - 32 bit IEEE floating point double - 64 
bit IEEE floating point\hyphpar0\par\pard\sb100\li960\sl220\qj  option 1: date 
- 32 bit integer \hyphpar0\par\pard\sb100\li960\sl220\qj  option 2: datetime - 
YYYY-MM-DD HH:MM:SS GMT \hyphpar0\par\pard\sb100\li960\sl220\qj  option 3: date 
- YYYY-MM-DD time - HH:MM:SS GMT datetime - YYYY-MM-DD HH:MM:SS GMT 
\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Chapter 16. Security}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Chapter 16. 
Security}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
ID_SECURITY}{\*\bkmkend ID_SECURITY}\b\fs41\f1 Chapter 16. 
Security\keepn\hyphpar0\par\pard\sb207\li960\sl220\qj \b0\fs20\lang1033\f0  
Little has been specified in the way of security, but some important items are 
listed here: \hyphpar0\par\pard\sb100\li960\sl220\qj 1) Users must authenticate 
themselves to the object server. The server can then enforce access rights, 
only allowing permitted data to be read and/or written. Administration options 
will also be protected in this way. Access rights will include combinations of 
read and write access, both to entire tables, and to sets of records within 
tables. (For example, a customer may be given read only access to the customer 
and invoices tables, but only for items that are associated with that 
customer.) Optionally, even field specific access would be useful, allowing the 
customer to update personal information at any time, but not to affect the 
business' financial records relating to the customer. 
\hyphpar0\par\pard\sb100\li960\sl220\qj 2) Connections must be encrypted to 
prevent attackers from reading and/or modifying data on the network. (This will 
require work with the ORBit developers.) 
\hyphpar0\par\pard\sb100\li960\sl220\qj 3) Non repudiation will be required for 
business to business transactions, in order to allow a database generated 
purchase order to be accepted and acted on. 
\hyphpar0\par\pard\sb100\li960\sl220\qj 4) The actual database must be 
protected from unauthorised access - protecting the object server is irrelevant 
if the actual database is vulnerable. \hyphpar0\par\pard\sb100\li960\sl220\qj  
There will need to be an administration application created to manage user 
rights within the system. \hyphpar0\par\pard\sb100\li960\sl220\qj  Object level 
security needs to be discussed and incorporated into this document. I think we 
will want to move away from db level security only. As part of the object 
security discussion we may need to touch on security filter for data. Database 
security alone should be used only for power users who could direct access the 
database without using the object server or for client server applications that 
dont use object server. 
\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Appendix A. GNU General Public License}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Appendix A. GNU General Public 
License}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
ID_APPENDIXES}{\*\bkmkend ID_APPENDIXES}{\*\bkmkstart _240}{\*\bkmkend 
_240}\b\fs41\f1 Appendix A. GNU General Public License 
\keepn\hyphpar0\par\pard\sb207\li960\sl198\qj \b0\fs18\f2                      
GNU GENERAL PUBLIC LICENSE\sa0\par\fi0\sb0
                        Version 2, June 1991\sa0\par\fi0\sb0
 \sa0\par\fi0\sb0
  Copyright (C) 1989, 1991 Free Software Foundation, Inc.\sa0\par\fi0\sb0
@@ -346,7 +346,7 @@
 library.  If this is what you want to do, use the GNU Library 
General\sa0\par\fi0\sb0
 Public License instead of this License.\sa0\par\fi0\sb0
 \sa0\par\fi0\sb0
-  
\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Appendix B. GNU Free Documentation License}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Appendix B. GNU Free Documentation 
License}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
_230}{\*\bkmkend _230}\b\fs41\f1 Appendix B. GNU Free Documentation License 
\keepn\hyphpar0\par\pard\sb207\li960\sl198\qj \b0\fs18\f2                GNU 
Free Documentation License\sa0\par\fi0\sb0
+  
\hyphpar0\par\sect\sectd\plain\pgwsxn12240\pghsxn15840\marglsxn1920\margrsxn1920\margtsxn960\margbsxn480\headery0\footery0\pgndec\titlepg{\headerf\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400
 {}\tab {}\tab 
{}\par}{\footerf\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 \chpgn 
}\par}{\headerl\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
Appendix B. GNU Free Documentation License}\tab {}\tab 
{}\par}{\footerl\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 {\i\fs20 
\chpgn }\tab {}\tab 
{}\par}{\headerr\pard\sl-240\sb770\sa-50\plain\tqc\tx4200\tqr\tx8400 {}\tab 
{}\tab {\i\fs20 Appendix B. GNU Free Documentation 
License}\par}{\footerr\pard\sl-240\sb-670\sa910\plain\tqc\tx4200\tqr\tx8400 
{}\tab {}\tab {\i\fs20 \chpgn }\par}\pard\sb311\s1\sl456 {\*\bkmkstart 
_243}{\*\bkmkend _243}\b\fs41\f1 Appendix B. GNU Free Documentation License 
\keepn\hyphpar0\par\pard\sb207\li960\sl198\qj \b0\fs18\f2                GNU 
Free Documentation License\sa0\par\fi0\sb0
                    Version 1.1, March 2000\sa0\par\fi0\sb0
 \sa0\par\fi0\sb0
  Copyright (C) 2000  Free Software Foundation, Inc.\sa0\par\fi0\sb0



reply via email to

[Prev in Thread] Current Thread [Next in Thread]