]> source.dussan.org Git - jackcess.git/commitdiff
add site page for 1.x to 2.x upgrade
authorJames Ahlborn <jtahlborn@yahoo.com>
Tue, 30 Jul 2013 04:00:40 +0000 (04:00 +0000)
committerJames Ahlborn <jtahlborn@yahoo.com>
Tue, 30 Jul 2013 04:00:40 +0000 (04:00 +0000)
git-svn-id: https://svn.code.sf.net/p/jackcess/code/jackcess/trunk@761 f203690c-595d-4dc9-a70b-905162fa7fd2

TODO.txt
src/site/site.xml
src/site/xdoc/jackcess-2.xml [new file with mode: 0644]

index 04a0aea5772b17d2fdc12be8f713b3d08894f106..6095fe011d9bad39977517fda22293fb82f9ec4b 100644 (file)
--- a/TODO.txt
+++ b/TODO.txt
@@ -60,6 +60,7 @@ Refactor goals:
 * limit size of IndexPageCache?
 - make non-thread-safeness more explicit
 - refactor free-space handlers Table/Column?
+- update index/cookbook for new api
 
 * public api final cleanup:
   * Database
index 74db3d1e0dd95161bc5df49d762c955137f3c88c..e2167ba04c09115c7793a1bc6cd0b6a3d7d66fac 100644 (file)
@@ -7,6 +7,7 @@
       <item name="Downloads" href="http://sourceforge.net/project/showfiles.php?group_id=134943"/>
       <item name="SourceForge Project" href="http://sourceforge.net/projects/jackcess/"/>
       <item name="Cookbook" href="cookbook.html"/>
+      <item name="Upgrading to Jackcess 2.x" href="jackcess-2.html"/>
       <item name="FAQ" href="faq.html"/>
       <item name="Jackcess Encrypt" href="http://jackcessencrypt.sourceforge.net/"/>
     </menu>
diff --git a/src/site/xdoc/jackcess-2.xml b/src/site/xdoc/jackcess-2.xml
new file mode 100644 (file)
index 0000000..15b6df4
--- /dev/null
@@ -0,0 +1,145 @@
+<?xml version="1.0"?>
+
+<document>
+  <properties>
+    <author email="jahlborn@users.sf.net">James Ahlborn</author>
+    <title>Upgrading from Jackcess 1.x to 2.x</title>
+  </properties>
+  <body>
+
+    <section name="I'm Scared!">
+      Step back from the keyboard and take a moment to catch your breath.  I
+      know the idea of upgrading to a new major version of a software project
+      can be a bit daunting.  A completely re-written library means a whole
+      new set of bugs to work through!  Rest assured, however, <u>the changes
+      from Jackcess 1.x to 2.x are largely cosmetic!</u>  The core code is
+      functionally unchanged, just shuffled around and tweaked.  So, once an
+      existing project has been updated for the new API, things should work
+      pretty much the same as they did before (for better or worse!).  That
+      begs the question, of course, why mess everything up in the first place?
+    </section>
+
+    <section name="Why rock the boat?">
+      <p>
+        The Jackcess project is over 8 years old at this point, and as any
+        developer knows, projects tend to accumulate cruft over the years.
+        The available functionality has grown dramatically from the initial
+        release while still retaining binary compatibility across most
+        releases.  This has been quite an effort and, unfortunately, has
+        caused the API to become a bit unwieldy.  The 2.x release is an
+        attempt to rework the API to make it both more approachable for new
+        users as well as more convenient for power users.
+      </p>
+      <p>
+        While an initial compile of existing code against the new 2.x API may
+        generate a fair bit of compile warnings, many of the changes are
+        fairly superficial (e.g. classes moving to new packages).  All of the
+        changes that were made were made in an attempt to make the API more
+        useable and to follow API design best practices.  Change for the sake
+        of change was avoided (e.g. just "prettying" up existing method
+        names).
+      </p>
+    </section>
+
+    <section name="So what changed?">
+      <p>
+        Functionally speaking, Jackcess is largely unchanged.  The core
+        codebase is largely the same, just re-arranged.  The only major
+        changes regarding functionality are:
+        <ul>
+          <li><b>"Simple" index support has been removed.</b></li>
+          <ul>
+            <li>In older releases, Jackcess did not fully understand how
+            indexes worked.  When that functionality was fully grasped,
+            "big" index support was added, but the "simple" support was left
+            as the default for backwards compatibility.  In later releases,
+            after the "big" index support was stabilized, it became the
+            default.  Now, there really isn't any reason to keep the old,
+            broken support.</li>
+          </ul>
+          <li><b>Foreign Key constraints are now enforced by default.</b></li>
+          <ul>
+            <li>Similarly, foreign key constraints were only recently
+            understood by jackess.  For backwards compatibility, enforcement
+            was not made the default.  This tends to confuse new users, as the
+            general expectation of a database is that it will enforce
+            constraints (unless told otherwise).  Unlike "simple" index
+            support (which was removed completely), foreign key constraint
+            enforcement can still be disabled.</li>
+          </ul>
+        </ul>
+      </p>
+      <p>
+        The remaining changes are largely cosmetic or just slightly different
+        (hopefully better) ways to do the same things.  Among these changes,
+        the major ones are:
+        <ul>
+          <li><b>The public API classes are now primarily interfaces.</b></li>
+          <ul>
+            <li>Making the primary API classes interfaces allows more
+            flexibility in the implementation without affecting the API.  It
+            also makes a more clear distinction between methods that are
+            intended to be used externally and those that are intended for
+            internal use.  This makes the API much more approachable for new
+            users.</li>
+            <li>Note that there are some "advanced" methods which may be
+            useful to the occassional power user which are no longer available
+            from the public API.  These methods, however, <i>are still
+            available</i> on the implementation classes.</li>
+          </ul>
+          <li><b>Most instance construction is now handled via builder classes.</b></li>
+          <ul>
+            <li>Since the public API is now primarily interfaces, some sort of
+            factory type class is necessary to construct the relevant
+            implementations.  These new factory classes follow the builder
+            pattern which is a very convenient programming style which has the
+            secondary benefit of removing the need for complex constructors
+            with many parameters.</li>
+          </ul>
+          <li><b>The various (and confusing) methods for constructing Iterables
+          have been replaced by an Iterable builder.</b></li>
+          <ul>
+            <li>There were a variety of methods on the Cursors for
+            constructing different Iterable/Iterator instances with different
+            options.  These have all been combined into a single Iterable
+            builder class which is both easier and more convenient to work
+            with.</li>
+          </ul>
+          <li><b>Many secondary "utility" classes were moved to the "util"
+              package.</b></li>
+          <ul>
+            <li>As part of making the API more approachable to new users, many
+            of the secondary classes were moved to the "util" package.  This
+            makes the primary API more obvious.</li>
+          </ul>
+          <li><b>A row is now a Row.</b></li>
+          <ul>
+            <li>A row of data, previously typed as a
+            <code>Map&lt;String,Object&gt;</code>, is now explicitly typed as
+            a Row.  This makes code much more readable as well as allows for
+            additional functionality beyond the basic Map.  Since the Row
+            interface extends <code>Map&lt;String,Object&gt;</code>, old code
+            can remain largely untouched.</li>
+          </ul>
+        </ul>
+      </p>
+    </section>
+
+    <section name="What does this mean for 1.x?">
+      <p>
+        Moving forward, all new feature development will be in Jackcess 2.x.
+        The Jackcess 1.x code has been branched at version 1.2.14 and some
+        bugfixes may be backported to that branch on a case by case basis.
+        However, no new feature development will be done on the 1.x branch.
+      </p>
+    </section>
+
+    <section name="What did we miss?">
+      <p>
+        This upgrade guide attempts to hit all the high-points for upgrading
+        from Jackcess 1.x to 2.x.  If you feel that it is incorrect or missing
+        a key bit of information, please, <a href="https://sourceforge.net/p/jackcess/discussion/456474/">drop us a line</a>!
+      </p>
+    </section>
+  </body>
+</document>