| 1 | <HTML> | 
| 2 | <HEAD> | 
| 3 | <TITLE>Data::Storage</TITLE> | 
| 4 | <LINK REV="made" HREF="mailto:"> | 
| 5 | </HEAD> | 
| 6 |  | 
| 7 | <BODY> | 
| 8 |  | 
| 9 | <A NAME="__index__"></A> | 
| 10 | <!-- INDEX BEGIN --> | 
| 11 |  | 
| 12 | <UL> | 
| 13 |  | 
| 14 | <LI><A HREF="#name">NAME</A></LI> | 
| 15 | <LI><A HREF="#synopsis">SYNOPSIS</A></LI> | 
| 16 | <UL> | 
| 17 |  | 
| 18 | <LI><A HREF="#note">NOTE</A></LI> | 
| 19 | </UL> | 
| 20 |  | 
| 21 | <LI><A HREF="#description">DESCRIPTION</A></LI> | 
| 22 | <LI><A HREF="#authors / copyright">AUTHORS / COPYRIGHT</A></LI> | 
| 23 | <LI><A HREF="#acknowledgements">ACKNOWLEDGEMENTS</A></LI> | 
| 24 | <LI><A HREF="#support / warranty">SUPPORT / WARRANTY</A></LI> | 
| 25 | <LI><A HREF="#todo">TODO</A></LI> | 
| 26 | <UL> | 
| 27 |  | 
| 28 | <LI><A HREF="#handle the following errors/cases:">Handle the following errors/cases:</A></LI> | 
| 29 | <UL> | 
| 30 |  | 
| 31 | <LI><A HREF="#dbierror [tangram]: dbd::mysql::st execute failed: unknown column 't1.requestdump' in 'field list'">``DBI-Error [Tangram]: DBD::mysql::st execute failed: Unknown column 't1.requestdump' in 'field list'''</A></LI> | 
| 32 | <LI><A HREF="#compare schema (structure diff) with database ...">Compare schema (structure diff) with database ...</A></LI> | 
| 33 | </UL> | 
| 34 |  | 
| 35 | <LI><A HREF="#introduce some features:">Introduce some features:</A></LI> | 
| 36 | <UL> | 
| 37 |  | 
| 38 | <LI><A HREF="#links:">Links:</A></LI> | 
| 39 | </UL> | 
| 40 |  | 
| 41 | </UL> | 
| 42 |  | 
| 43 | </UL> | 
| 44 | <!-- INDEX END --> | 
| 45 |  | 
| 46 | <HR> | 
| 47 | <P> | 
| 48 | <H1><A NAME="name">NAME</A></H1> | 
| 49 | <P>Data::Storage - Interface for accessing various Storage implementations for Perl in an independent way</P> | 
| 50 | <P> | 
| 51 | <HR> | 
| 52 | <H1><A NAME="synopsis">SYNOPSIS</A></H1> | 
| 53 | <PRE> | 
| 54 | ... the basic way:</PRE> | 
| 55 | <PRE> | 
| 56 | ... via inheritance: | 
| 57 | </PRE> | 
| 58 | <PRE> | 
| 59 |  | 
| 60 | use Data::Storage; | 
| 61 | my $proxyObj = new HttpProxy; | 
| 62 | $proxyObj->{url} = $url; | 
| 63 | $proxyObj->{payload} = $content; | 
| 64 | $self->{storage}->insert($proxyObj);</PRE> | 
| 65 | <PRE> | 
| 66 |  | 
| 67 | use Data::Storage; | 
| 68 | my $proxyObj = HttpProxy->new( | 
| 69 | url => $url, | 
| 70 | payload => $content, | 
| 71 | ); | 
| 72 | $self->{storage}->insert($proxyObj);</PRE> | 
| 73 | <P> | 
| 74 | <H2><A NAME="note">NOTE</A></H2> | 
| 75 | <P>This module heavily relies on DBI and Tangram, but adds a lot of additional bugs and quirks. | 
| 76 | Please look at their documentation and this code for additional information.</P> | 
| 77 | <P> | 
| 78 | <HR> | 
| 79 | <H1><A NAME="description">DESCRIPTION</A></H1> | 
| 80 | <P>Data::Storage is module for a accessing various ``data structures'' stored inside | 
| 81 | various ``data containers''. It sits on top of DBI and/or Tangram.</P> | 
| 82 | <P> | 
| 83 | <HR> | 
| 84 | <H1><A NAME="authors / copyright">AUTHORS / COPYRIGHT</A></H1> | 
| 85 | <P>The Data::Storage module is Copyright (c) 2002 Andreas Motl. | 
| 86 | All rights reserved.</P> | 
| 87 | <P>You may distribute it under the terms of either the GNU General Public | 
| 88 | License or the Artistic License, as specified in the Perl README file.</P> | 
| 89 | <P> | 
| 90 | <HR> | 
| 91 | <H1><A NAME="acknowledgements">ACKNOWLEDGEMENTS</A></H1> | 
| 92 | <P>Larry Wall and the <CODE>perl5-porters</CODE> for Perl, | 
| 93 | Tim Bunce for DBI, Jean-Louis Leroy for Tangram and Set::Object, | 
| 94 | Sam Vilain for Class::Tangram.</P> | 
| 95 | <P> | 
| 96 | <HR> | 
| 97 | <H1><A NAME="support / warranty">SUPPORT / WARRANTY</A></H1> | 
| 98 | <P>Data::Storage is free software. IT COMES WITHOUT WARRANTY OF ANY KIND.</P> | 
| 99 | <P> | 
| 100 | <HR> | 
| 101 | <H1><A NAME="todo">TODO</A></H1> | 
| 102 | <P> | 
| 103 | <H2><A NAME="handle the following errors/cases:">Handle the following errors/cases:</A></H2> | 
| 104 | <P> | 
| 105 | <H3><A NAME="dbierror [tangram]: dbd::mysql::st execute failed: unknown column 't1.requestdump' in 'field list'">``DBI-Error [Tangram]: DBD::mysql::st execute failed: Unknown column 't1.requestdump' in 'field list'''</A></H3> | 
| 106 | <PRE> | 
| 107 | ... occours when operating on object-attributes not introduced yet: | 
| 108 | this should be detected and appended/replaced through: | 
| 109 | "Schema-Error detected, maybe (just) an inconsistency. | 
| 110 | Please check if your declaration in schema-module "a" matches structure in database "b" or try to run" | 
| 111 | db_setup.pl --dbkey=import --action=deploy</PRE> | 
| 112 | <P> | 
| 113 | <H3><A NAME="compare schema (structure diff) with database ...">Compare schema (structure diff) with database ...</A></H3> | 
| 114 | <PRE> | 
| 115 | ... when issuing "db_setup.pl --dbkey=import --action=deploy" | 
| 116 | on a database with an already deployed schema, use an additional "--update" then | 
| 117 | to lift the schema inside the database to the current declared schema. | 
| 118 | You will have to approve removals and changes on field-level while | 
| 119 | new objects and new fields are introduced silently without any interaction needed. | 
| 120 | In future versions there may be additional options to control silent processing of | 
| 121 | removals and changes. | 
| 122 | See this CRUD-table applying to the actions occouring on Classes and Class variables when deploying schemas, | 
| 123 | don't mix this up with CRUD-actions on Objects, these are already handled by (e.g.) Tangram itself. | 
| 124 | Classes: | 
| 125 | C create    ->  yes, handled automatically | 
| 126 | R retrieve  ->  no, not subject of this aspect since it is about deployment only | 
| 127 | U update    ->  yes, automatically for Class meta-attributes, yes/no for Class variables (look at the rules down here) | 
| 128 | D delete    ->  yes, just by user-interaction | 
| 129 | Class variables: | 
| 130 | C create    ->  yes, handled automatically | 
| 131 | R retrieve  ->  no, not subject of this aspect since it is about deployment only | 
| 132 | U update    ->  yes, just by user-interaction; maybe automatically if it can be determined that data wouldn't be lost | 
| 133 | D delete    ->  yes, just by user-interaction | 
| 134 | </PRE> | 
| 135 | <PRE> | 
| 136 |  | 
| 137 | It's all about not to be able to loose data simply while this is in pre-alpha stage. | 
| 138 | And loosing data by being able to modify and redeploy schemas easily is definitely quite easy.</PRE> | 
| 139 | <PRE> | 
| 140 |  | 
| 141 | As we can see, creations of Classes and new Class variables is handled | 
| 142 | automatically and this is believed to be the most common case under normal circumstances.</PRE> | 
| 143 | <P> | 
| 144 | <H2><A NAME="introduce some features:">Introduce some features:</A></H2> | 
| 145 | <PRE> | 
| 146 | - Get this stuff together with UML (Unified Modeling Language) and/or standards from ODMG. | 
| 147 | - Make it possible to load/save schemas in XMI (XML Metadata Interchange), | 
| 148 | which seems to be most commonly used today, perhaps handle objects with OIFML. | 
| 149 | Integrate/bundle this with a web-/html-based UML modeling tool or | 
| 150 | some other interesting stuff like the "Co-operative UML Editor" from Uni Darmstadt. (web-/java-based) | 
| 151 | - Enable Round Trip Engineering. Keep code and diagrams in sync. Don't annoy/bother the programmers. | 
| 152 | - Add some more handlers: | 
| 153 | - look at DBD::CSV, Text::CSV, XML::CSV, XML::Excel | 
| 154 | - Add some more locations/locators: | 
| 155 | - PerlDAV: <A HREF="http://www.webdav.org/perldav/">http://www.webdav.org/perldav/</A> | 
| 156 | - Move to t3, use InCASE</PRE> | 
| 157 | <P> | 
| 158 | <H3><A NAME="links:">Links:</A></H3> | 
| 159 | <PRE> | 
| 160 | Specs: | 
| 161 | UML 1.3 Spec: <A HREF="http://cgi.omg.org/cgi-bin/doc?ad/99-06-08.pdf">http://cgi.omg.org/cgi-bin/doc?ad/99-06-08.pdf</A> | 
| 162 | XMI 1.1 Spec: <A HREF="http://cgi.omg.org/cgi-bin/doc?ad/99-10-02.pdf">http://cgi.omg.org/cgi-bin/doc?ad/99-10-02.pdf</A> | 
| 163 | XMI 2.0 Spec: <A HREF="http://cgi.omg.org/docs/ad/01-06-12.pdf">http://cgi.omg.org/docs/ad/01-06-12.pdf</A> | 
| 164 | ODMG: <A HREF="http://odmg.org/">http://odmg.org/</A> | 
| 165 | OIFML: <A HREF="http://odmg.org/library/readingroom/oifml.pdf">http://odmg.org/library/readingroom/oifml.pdf</A></PRE> | 
| 166 | <PRE> | 
| 167 | CASE Tools: | 
| 168 | Rational Rose (commercial): <A HREF="http://www.rational.com/products/rose/">http://www.rational.com/products/rose/</A> | 
| 169 | Together (commercial): <A HREF="http://www.oi.com/products/controlcenter/index.jsp">http://www.oi.com/products/controlcenter/index.jsp</A> | 
| 170 | InCASE - Tangram-based Universal Object Editor | 
| 171 | Sybase PowerDesigner: <A HREF="http://www.sybase.com/powerdesigner">http://www.sybase.com/powerdesigner</A> | 
| 172 | </PRE> | 
| 173 | <PRE> | 
| 174 |  | 
| 175 | UML Editors: | 
| 176 | Fujaba (free, university): <A HREF="http://www.fujaba.de/">http://www.fujaba.de/</A> | 
| 177 | ArgoUML (free): <A HREF="http://argouml.tigris.org/">http://argouml.tigris.org/</A> | 
| 178 | Poseidon (commercial): <A HREF="http://www.gentleware.com/products/poseidonDE.php3">http://www.gentleware.com/products/poseidonDE.php3</A> | 
| 179 | Co-operative UML Editor (research): <A HREF="http://www.darmstadt.gmd.de/concert/activities/internal/umledit.html">http://www.darmstadt.gmd.de/concert/activities/internal/umledit.html</A> | 
| 180 | Metamill (commercial): <A HREF="http://www.metamill.com/">http://www.metamill.com/</A> | 
| 181 | Violet (university, research, education): <A HREF="http://www.horstmann.com/violet/">http://www.horstmann.com/violet/</A> | 
| 182 | PyUt (free): <A HREF="http://pyut.sourceforge.net/">http://pyut.sourceforge.net/</A> | 
| 183 | (Dia (free): <A HREF="http://www.lysator.liu.se/~alla/dia/">http://www.lysator.liu.se/~alla/dia/</A>) | 
| 184 | UMLet (free, university): <A HREF="http://www.swt.tuwien.ac.at/umlet/index.html">http://www.swt.tuwien.ac.at/umlet/index.html</A> | 
| 185 | Voodoo (free): <A HREF="http://voodoo.sourceforge.net/">http://voodoo.sourceforge.net/</A></PRE> | 
| 186 | <PRE> | 
| 187 | UML Tools: | 
| 188 | <A HREF="http://www.objectsbydesign.com/tools/umltools_byPrice.html">http://www.objectsbydesign.com/tools/umltools_byPrice.html</A></PRE> | 
| 189 | <PRE> | 
| 190 | Further readings: | 
| 191 | <A HREF="http://www.google.com/search?q=web+based+uml+editor&">http://www.google.com/search?q=web+based+uml+editor&</A>;hl=en&lr=&ie=UTF-8&oe=UTF-8&start=10&sa=N | 
| 192 | <A HREF="http://www.fernuni-hagen.de/DVT/Aktuelles/01FHHeidelberg.pdf">http://www.fernuni-hagen.de/DVT/Aktuelles/01FHHeidelberg.pdf</A> | 
| 193 | <A HREF="http://www.enhyper.com/src/documentation/">http://www.enhyper.com/src/documentation/</A> | 
| 194 | <A HREF="http://cis.cs.tu-berlin.de/Dokumente/Diplomarbeiten/2001/skinner.pdf">http://cis.cs.tu-berlin.de/Dokumente/Diplomarbeiten/2001/skinner.pdf</A> | 
| 195 | <A HREF="http://citeseer.nj.nec.com/vilain00diagrammatic.html">http://citeseer.nj.nec.com/vilain00diagrammatic.html</A> | 
| 196 | <A HREF="http://archive.devx.com/uml/articles/Smith01/Smith01-3.asp">http://archive.devx.com/uml/articles/Smith01/Smith01-3.asp</A></PRE> | 
| 197 |  | 
| 198 | </BODY> | 
| 199 |  | 
| 200 | </HTML> |