From 1026da754b58dfd15c5a558d1364883191961d6a Mon Sep 17 00:00:00 2001 From: "Dr. Martin Goik" <goik@hdm-stuttgart.de> Date: Thu, 4 Oct 2018 09:28:52 +0200 Subject: [PATCH] Idea screenshots as slides --- Doc/Persist/topics.xml | 2 +- .../s200_selectMavenArchetype.png.marked.svg | 845 ++++++++++++++++++ .../s300_groupArtifactID.png.marked.svg | 274 ++++++ .../s400_projectRoot.png.marked.svg | 393 ++++++++ Doc/Sd1/arrays.xml | 552 ++++++++---- Doc/Sd1/gettingStarted.xml | 365 +++++--- Doc/Sda1/jpaintro.xml | 726 ++++++++++----- Doc/Sda1/sax.xml | 366 +++++--- Doc/Sda2/jpa.xml | 10 +- 9 files changed, 2848 insertions(+), 685 deletions(-) create mode 100644 Doc/Sd1/Ref/Fig/NewProjectMavenIntellij/s200_selectMavenArchetype.png.marked.svg create mode 100644 Doc/Sd1/Ref/Fig/NewProjectMavenIntellij/s300_groupArtifactID.png.marked.svg create mode 100644 Doc/Sd1/Ref/Fig/NewProjectMavenIntellij/s400_projectRoot.png.marked.svg diff --git a/Doc/Persist/topics.xml b/Doc/Persist/topics.xml index e78cfd0e4..1a3fb00ad 100644 --- a/Doc/Persist/topics.xml +++ b/Doc/Persist/topics.xml @@ -94,7 +94,7 @@ <orderedlist> <listitem> <para>Be sure to configure the <link - linkend="sd1SectUsingMavenEclipse">supplementary MI Maven + linkend="sd1FirstJavaProject">supplementary MI Maven archetypes</link> in your Eclipse IDE.</para> </listitem> diff --git a/Doc/Sd1/Ref/Fig/NewProjectMavenIntellij/s200_selectMavenArchetype.png.marked.svg b/Doc/Sd1/Ref/Fig/NewProjectMavenIntellij/s200_selectMavenArchetype.png.marked.svg new file mode 100644 index 000000000..df76fecce --- /dev/null +++ b/Doc/Sd1/Ref/Fig/NewProjectMavenIntellij/s200_selectMavenArchetype.png.marked.svg @@ -0,0 +1,845 @@ +<?xml version='1.0' encoding='UTF-8'?> +<!--CREATED BY XMLMIND IMAGE MAP EDITOR. PLEASE DO NOT EDIT BY HAND! numberPosition="NORTH_WEST" numberTextColor="#FFFFFF" numberBackgroundColor="#000000" numberFontSize="10" startNumber="1" shapeLineWidth="MEDIUM" shapeLineColor="#FF0000" shapeDashedLine="false" --> +<svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' version='1.1' width='827px' height='476px' viewBox='0 0 827 476'> +<image width='827' height='476' xlink:href='data:image/png;base64,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 +AAAAAElFTkSuQmCC +'/> +<g font-family='sans-serif' font-weight='bold' font-size='8pt' fill='none' stroke='#FF0000' stroke-width='2' stroke-dasharray='none'> +<rect x='251' y='303' width='271' height='24'/> +<g transform='translate(251,303)' stroke='none'> +<circle cx='0.6em' cy='0.6em' r='0.6em' fill='#000000'/> +<text x='0.6em' y='0.9em' fill='#FFFFFF' text-anchor='middle'>4</text> +</g> +<rect x='228' y='273' width='394' height='27'/> +<g transform='translate(228,273)' stroke='none'> +<circle cx='0.6em' cy='0.6em' r='0.6em' fill='#000000'/> +<text x='0.6em' y='0.9em' fill='#FFFFFF' text-anchor='middle'>3</text> +</g> +<rect x='202' y='84' width='209' height='40'/> +<g transform='translate(202,84)' stroke='none'> +<circle cx='0.6em' cy='0.6em' r='0.6em' fill='#000000'/> +<text x='0.6em' y='0.9em' fill='#FFFFFF' text-anchor='middle'>2</text> +</g> +<rect x='2' y='297' width='99' height='39'/> +<g transform='translate(2,297)' stroke='none'> +<circle cx='0.6em' cy='0.6em' r='0.6em' fill='#000000'/> +<text x='0.6em' y='0.9em' fill='#FFFFFF' text-anchor='middle'>1</text> +</g> +</g> +</svg> diff --git a/Doc/Sd1/Ref/Fig/NewProjectMavenIntellij/s300_groupArtifactID.png.marked.svg b/Doc/Sd1/Ref/Fig/NewProjectMavenIntellij/s300_groupArtifactID.png.marked.svg new file mode 100644 index 000000000..2919ef32e --- /dev/null +++ b/Doc/Sd1/Ref/Fig/NewProjectMavenIntellij/s300_groupArtifactID.png.marked.svg @@ -0,0 +1,274 @@ +<?xml version='1.0' encoding='UTF-8'?> +<!--CREATED BY XMLMIND IMAGE MAP EDITOR. PLEASE DO NOT EDIT BY HAND! numberPosition="NORTH_WEST" numberTextColor="#FFFFFF" numberBackgroundColor="#000000" numberFontSize="10" startNumber="1" shapeLineWidth="MEDIUM" shapeLineColor="#FF0000" shapeDashedLine="false" --> +<svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' version='1.1' width='809px' height='476px' viewBox='0 0 809 476'> +<image width='809' height='476' xlink:href='data:image/png;base64,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 +AAAAcC7+P6yJX5KVL1OfAAAAAElFTkSuQmCC +'/> +<g font-family='sans-serif' font-weight='bold' font-size='8pt' fill='none' stroke='#FF0000' stroke-width='2' stroke-dasharray='none'> +<rect x='78' y='97' width='123' height='34'/> +<g transform='translate(78,97)' stroke='none'> +<circle cx='0.6em' cy='0.6em' r='0.6em' fill='#000000'/> +<text x='0.6em' y='0.9em' fill='#FFFFFF' text-anchor='middle'>3</text> +</g> +<rect x='79' y='67' width='116' height='28'/> +<g transform='translate(79,67)' stroke='none'> +<circle cx='0.6em' cy='0.6em' r='0.6em' fill='#000000'/> +<text x='0.6em' y='0.9em' fill='#FFFFFF' text-anchor='middle'>2</text> +</g> +<rect x='80' y='34' width='251' height='30'/> +<g transform='translate(80,34)' stroke='none'> +<circle cx='0.6em' cy='0.6em' r='0.6em' fill='#000000'/> +<text x='0.6em' y='0.9em' fill='#FFFFFF' text-anchor='middle'>1</text> +</g> +</g> +</svg> diff --git a/Doc/Sd1/Ref/Fig/NewProjectMavenIntellij/s400_projectRoot.png.marked.svg b/Doc/Sd1/Ref/Fig/NewProjectMavenIntellij/s400_projectRoot.png.marked.svg new file mode 100644 index 000000000..0204d7099 --- /dev/null +++ b/Doc/Sd1/Ref/Fig/NewProjectMavenIntellij/s400_projectRoot.png.marked.svg @@ -0,0 +1,393 @@ +<?xml version='1.0' encoding='UTF-8'?> +<!--CREATED BY XMLMIND IMAGE MAP EDITOR. PLEASE DO NOT EDIT BY HAND! numberPosition="NORTH_WEST" numberTextColor="#FFFFFF" numberBackgroundColor="#000000" numberFontSize="10" startNumber="1" shapeLineWidth="MEDIUM" shapeLineColor="#FF0000" shapeDashedLine="false" --> +<svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink' version='1.1' width='809px' height='476px' viewBox='0 0 809 476'> +<image width='809' height='476' xlink:href='data:image/png;base64,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 +N8mlz7/f/ralE+mzM0IIIUmbu/oy35nMnNjf37e4WHhF/smTJ8sKTwkhJCk9MNCbP7EmM7NiYN0H +7/zDxGe/dEC3+bVpbbP3T5SbLxUiNX3qzMD6K9778c+8tecLf6oee+7gK+LqK/u2XH1R+vnJTddt +NgmxwXFV/8Sx9FvfvkEIceKnz54Y7LbMaZnoVcheQojBfsu8ee7H3z+6533Xmk3rNgxo86fWve+j +77J3CyHSS2lT96D25hnzZvlzX7j50kyUNQ1u+tWP3XHNZf/9T77+z5p0cb6o5Kxpi1ELv/C/Xzkj +1l/mufsvfiuTtBYXRf8lPdPTS2mRG+FKz5w+taClj59Om9L84gEAAFZ59Kq43ksMpObS82ezPy/M +2fsXdr1909d+/sruazc5z76amp0uZBTJlE5nC8l8D3JxcTG/N1W2XCy/paenO39itVbm/vBGJPhX +Q//xjz9g/8Tdt7z0SH5/emngHbtuulSIE+G9f/aX8fnB6z7xlc/92lt2fHTzxFj80E9/Ka68fINz +y+C3pHfYB4QQ4vJf3dz3o8VfeasQ4vQvfjop0uu6c43XN0U6Myd1bdx40y02sxBi6WTyTD6XLfz4 +3k+N/mLO1N3bs+59//mmS4VYjP3/yp9/Jznw7k/c/5lfW/eej9/w+D/vnyxcQWrgnYYt3Pj42FT/ +1b//m5uE0F6a+K/K/zo8o1nWD5m6122Ync+ce+o7X/zsN15Kmc2myy/qJ3sBAHAeZK/yKUchSdLU +wtIFWjq/7xevn3r02PQfXvfWb0Z/+dbLUtsGCoeeXlgymbIHSpI0OzsnSSKfEspf3Job95JmZuby +J9YkdfLHjzz4+OY/++3L3Xf/ztH8VKX5Lc4rJSHEJe59X3fnDx7YeGmv6YU3f/4PyY97rZveteWy +wesuEmJRiK6r3vHWzQtb+4SYfvYfXxepPmHKtEHfkAs+cs9ffaTw42tPhw6n9V81lDZf2PWGuHDp +smuvlIRIH37ih5NvueTiyUPf+8nUr31k3SVv3zIoCtlLslRqYZ84sulXtpiESMcff/Ko9eL+M1K3 +JKUWUmZdY0xvXS/NWwbmyF0AAKz67CWMx73MZtORM4vv6E4LLS2EeOGs9BevWj7/7isd0vTwr175 +xZ++9J8uW3pbXyZtmY7MLpnNXZlCzGbT1NTU4OBAvszybztmtkiSND19xmw2Lz/updvfnT72tw/8 +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 +'/> +<g font-family='sans-serif' font-weight='bold' font-size='8pt' fill='none' stroke='#FF0000' stroke-width='2' stroke-dasharray='none'> +<rect x='120' y='65' width='306' height='31'/> +<g transform='translate(120,65)' stroke='none'> +<circle cx='0.6em' cy='0.6em' r='0.6em' fill='#000000'/> +<text x='0.6em' y='0.9em' fill='#FFFFFF' text-anchor='middle'>2</text> +</g> +<rect x='113' y='30' width='126' height='37'/> +<g transform='translate(113,30)' stroke='none'> +<circle cx='0.6em' cy='0.6em' r='0.6em' fill='#000000'/> +<text x='0.6em' y='0.9em' fill='#FFFFFF' text-anchor='middle'>1</text> +</g> +</g> +</svg> diff --git a/Doc/Sd1/arrays.xml b/Doc/Sd1/arrays.xml index 7910c190e..9973f11cb 100644 --- a/Doc/Sd1/arrays.xml +++ b/Doc/Sd1/arrays.xml @@ -1,5 +1,14 @@ <?xml version="1.0" encoding="UTF-8"?> -<chapter xmlns="http://docbook.org/ns/docbook" xmlns:db="http://docbook.org/ns/docbook" xmlns:html="http://www.w3.org/1999/xhtml" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:ns="http://docbook.org/ns/transclusion" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xila="http://www.w3.org/2001/XInclude/local-attributes" xmlns:xlink="http://www.w3.org/1999/xlink" annotations="slide" version="5.1" xml:id="sw1ChapterArrays"> +<chapter annotations="slide" version="5.1" xml:id="sw1ChapterArrays" + xmlns="http://docbook.org/ns/docbook" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:xila="http://www.w3.org/2001/XInclude/local-attributes" + xmlns:xi="http://www.w3.org/2001/XInclude" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:ns="http://docbook.org/ns/transclusion" + xmlns:m="http://www.w3.org/1998/Math/MathML" + xmlns:html="http://www.w3.org/1999/xhtml" + xmlns:db="http://docbook.org/ns/docbook"> <title>Arrays</title> <figure xml:id="sd1_array_fig_arrayMotivate"> @@ -44,9 +53,14 @@ <figure xml:id="sd1_array_fig_arrayStringExample"> <title>Example: <code language="java">int</code> array of primes</title> - <programlisting language="java">final int[] primes <co linkends="sd1_array_fig_arrayStringExample-1.2" xml:id="sd1_array_fig_arrayStringExample-1.2-co" /> = new int[5]; <co linkends="sd1_array_fig_arrayStringExample-2.2" xml:id="sd1_array_fig_arrayStringExample-2.2-co" /> + <programlisting language="java">final int[] primes <co + linkends="sd1_array_fig_arrayStringExample-1.2" + xml:id="sd1_array_fig_arrayStringExample-1.2-co"/> = new int[5]; <co + linkends="sd1_array_fig_arrayStringExample-2.2" + xml:id="sd1_array_fig_arrayStringExample-2.2-co"/> -primes[0] = 2; <co linkends="sd1_array_fig_arrayStringExample-3" xml:id="sd1_array_fig_arrayStringExample-3-co" /> +primes[0] = 2; <co linkends="sd1_array_fig_arrayStringExample-3" + xml:id="sd1_array_fig_arrayStringExample-3-co"/> primes[1] = 3; primes[2] = 5; primes[3] = 7; @@ -54,16 +68,21 @@ primes[4] = 11;</programlisting> </figure> <calloutlist> - <callout arearefs="sd1_array_fig_arrayStringExample-1.2-co" xml:id="sd1_array_fig_arrayStringExample-1.2"> - <para><code language="java">int</code> array reference variable <code language="java">primes</code>.</para> + <callout arearefs="sd1_array_fig_arrayStringExample-1.2-co" + xml:id="sd1_array_fig_arrayStringExample-1.2"> + <para><code language="java">int</code> array reference variable <code + language="java">primes</code>.</para> </callout> - <callout arearefs="sd1_array_fig_arrayStringExample-2.2-co" xml:id="sd1_array_fig_arrayStringExample-2.2"> + <callout arearefs="sd1_array_fig_arrayStringExample-2.2-co" + xml:id="sd1_array_fig_arrayStringExample-2.2"> <para><code language="java">int</code> array allocation capable to store - five values and assigning its reference to variable <code language="java">primes</code>.</para> + five values and assigning its reference to variable <code + language="java">primes</code>.</para> </callout> - <callout arearefs="sd1_array_fig_arrayStringExample-3-co" xml:id="sd1_array_fig_arrayStringExample-3"> + <callout arearefs="sd1_array_fig_arrayStringExample-3-co" + xml:id="sd1_array_fig_arrayStringExample-3"> <para>Assigning values referencing array positions by index values from {0,1,2,3,4}.</para> </callout> @@ -106,7 +125,8 @@ Exception in thread "main" java.lang.<emphasis role="red">ArrayIndexOutOfBoundsE <figure xml:id="sd1_array_fig_arrayPrimeArrayLength"> <title>Safer: Using <parameter>length</parameter></title> - <programlisting language="none">System.out.println("primes.length == " + <emphasis role="red">primes.length</emphasis>); + <programlisting language="none">System.out.println("primes.length == " + <emphasis + role="red">primes.length</emphasis>); for (int i = 0; <emphasis role="red">i < primes.length</emphasis>; i++) { System.out.println("At index " + i + ": value == " + primes[i]); }</programlisting> @@ -164,7 +184,7 @@ primes[4] = 11; </figure> <qandaset defaultlabel="qanda" xml:id="sd1QandaArray2html"> - <title>Converting string arrays to <xref linkend="glo_HTML" />.</title> + <title>Converting string arrays to <xref linkend="glo_HTML"/>.</title> <qandadiv> <qandaentry> @@ -202,15 +222,16 @@ primes[4] = 11; } }</programlisting> - <para>Do not forget to provide appropriate <xref linkend="glo_Javadoc" /> method and class documentation. You may want - to reconsider <xref linkend="sd1GenerateJavadoc" />.</para> + <para>Do not forget to provide appropriate <xref + linkend="glo_Javadoc"/> method and class documentation. You may want + to reconsider <xref linkend="sd1_fig_mavenJavadoc"/>.</para> - <para>Generating <xref linkend="glo_Javadoc" /> HTML documentation + <para>Generating <xref linkend="glo_Javadoc"/> HTML documentation from your project should yield a result like:</para> <mediaobject> <imageobject> - <imagedata fileref="Ref/Fig/strings2html.png" /> + <imagedata fileref="Ref/Fig/strings2html.png"/> </imageobject> </mediaobject> @@ -248,7 +269,7 @@ primes[4] = 11; <informalfigure> <mediaobject> <imageobject> - <imagedata fileref="Ref/Fig/navigationSections.png" /> + <imagedata fileref="Ref/Fig/navigationSections.png"/> </imageobject> </mediaobject> </informalfigure> @@ -336,7 +357,7 @@ primes[4] = 11; } </programlisting> - <para>Write <xref linkend="glo_Junit" /> tests to cover different + <para>Write <xref linkend="glo_Junit"/> tests to cover different situations.</para> <tip> @@ -510,7 +531,7 @@ primes[4] = 11; </tr> </informaltable> - <para>Write a <xref linkend="glo_Java" /> application which turns an + <para>Write a <xref linkend="glo_Java"/> application which turns an array containing participants' marks as being shown above into a table of frequencies. Your application shall work for other marking systems (i.e. marks ranging from -2 to 10) as well.</para> @@ -550,8 +571,10 @@ primes[4] = 11; </orderedlist> </tip> - <para>Add a suitable <methodname>main(String[] <emphasis role="red">args</emphasis>)</methodname> method allowing for passing - the marks as command line parameters using the <emphasis role="red">args</emphasis> parameter:</para> + <para>Add a suitable <methodname>main(String[] <emphasis + role="red">args</emphasis>)</methodname> method allowing for passing + the marks as command line parameters using the <emphasis + role="red">args</emphasis> parameter:</para> <screen>marking> <emphasis role="bold">java -jar .../marking/target/marking-0.9.jar</emphasis> 2 1 3 3 5 4 1 2 2 4 3 2 3 3 1 5 3 4 @@ -570,7 +593,8 @@ Mark|frequency <package>de.hdm_stuttgart.mi.marking</package>.<classname>Marks</classname> you'll have to define this class to become archive executable in your project's <filename>pom.xml</filename> file. Executing the - <command>mvn</command> <option xlink:href="https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#A_Build_Lifecycle_is_Made_Up_of_Phases">install</option> + <command>mvn</command> <option + xlink:href="https://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#A_Build_Lifecycle_is_Made_Up_of_Phases">install</option> goal will then create an executable jar archive as outlined above.</para> @@ -701,7 +725,7 @@ StringBuffer[]: [Ljava.lang.StringBuffer;</screen> <mediaobject> <imageobject> - <imagedata fileref="Ref/Array/intArray.multi.svg" /> + <imagedata fileref="Ref/Array/intArray.multi.svg"/> </imageobject> </mediaobject> </figure> @@ -735,7 +759,7 @@ static void fill(final int[] values, final int common) { <mediaobject> <imageobject> - <imagedata fileref="Ref/Array/initArrayDefault.multi.svg" /> + <imagedata fileref="Ref/Array/initArrayDefault.multi.svg"/> </imageobject> </mediaobject> </figure> @@ -757,12 +781,17 @@ final String shapes[] = {"Triangle", "Circle"};</programlisting> </figure> <section xml:id="sd1_array_sect_classArraysHelper"> - <title><classname xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html">java.util.Arrays</classname> + <title><classname + xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html">java.util.Arrays</classname> helpers</title> <figure xml:id="sd1_array_fig_arraysToStringSort"> - <title><classname xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html">Arrays</classname>.<methodname xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html#toString(java.lang.Object%5B%5D)">toString(...)</methodname> - and <classname xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html">Arrays</classname>.<methodname xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html#sort(java.lang.Object%5B%5D)">sort(...)</methodname></title> + <title><classname + xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html">Arrays</classname>.<methodname + xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html#toString(java.lang.Object%5B%5D)">toString(...)</methodname> + and <classname + xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html">Arrays</classname>.<methodname + xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html#sort(java.lang.Object%5B%5D)">sort(...)</methodname></title> <programlisting language="java">final String[] names = {"Eve", "Aaron", "Paul", "Mandy"}; @@ -779,7 +808,9 @@ sort|toString: [Aaron, Eve, Mandy, Paul]</screen> </figure> <figure xml:id="sd1_array_fig_arraysBinarySearch"> - <title><classname xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html">Arrays</classname>.<methodname xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html#binarySearch(java.lang.Object%5B%5D,java.lang.Object)">binarySearch(...)</methodname></title> + <title><classname + xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html">Arrays</classname>.<methodname + xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html#binarySearch(java.lang.Object%5B%5D,java.lang.Object)">binarySearch(...)</methodname></title> <programlisting language="java">final String[] names = {"Aaron", "Eve", "Mandy", "Paul"}; @@ -795,14 +826,18 @@ sort|find(Mandy): 2 sort|find(Mandyer): -4</screen> </figure> - <qandaset defaultlabel="qanda" xml:id="sd1_coreClasses_array_qanda_searchNegResult"> + <qandaset defaultlabel="qanda" + xml:id="sd1_coreClasses_array_qanda_searchNegResult"> <title>Understanding search results</title> <qandadiv> <qandaentry> <question> - <para>Read the <xref linkend="glo_Javadoc" /> of <classname xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html">Arrays</classname>.<methodname xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html#binarySearch(java.lang.Object%5B%5D,java.lang.Object)">binarySearch(...)</methodname>and - explain the three integer search result values in <xref linkend="sd1_array_fig_arraysBinarySearch" />.</para> + <para>Read the <xref linkend="glo_Javadoc"/> of <classname + xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html">Arrays</classname>.<methodname + xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html#binarySearch(java.lang.Object%5B%5D,java.lang.Object)">binarySearch(...)</methodname>and + explain the three integer search result values in <xref + linkend="sd1_array_fig_arraysBinarySearch"/>.</para> <para>In particular give a detailed account explaining the two negative values -3 and -4.</para> @@ -876,33 +911,41 @@ sort|find(Mandyer): -4</screen> </orderedlist> <para>In the given example hypothetically inserting the string - <code language="java"><emphasis role="red">"Mand"</emphasis></code> retaining a sorted list + <code language="java"><emphasis + role="red">"Mand"</emphasis></code> retaining a sorted list results in:</para> - <programlisting language="none">{"Aaron", "Eva", <emphasis role="red">"Mand"</emphasis>, "Mandy", "Paul"}</programlisting> + <programlisting language="none">{"Aaron", "Eva", <emphasis + role="red">"Mand"</emphasis>, "Mandy", "Paul"}</programlisting> <para>This insertion point's index is 2 corresponding to the third - array element. According to the <methodname xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html#binarySearch(java.lang.Object%5B%5D,java.lang.Object)">binarySearch(...)</methodname> + array element. According to the <methodname + xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html#binarySearch(java.lang.Object%5B%5D,java.lang.Object)">binarySearch(...)</methodname> method's documentation this corresponds to a return value of -2 - 1 == -3.</para> - <para>The observed return value of -4 when searching for <emphasis role="red">"Mandyer"</emphasis> corresponds to insertion index + <para>The observed return value of -4 when searching for <emphasis + role="red">"Mandyer"</emphasis> corresponds to insertion index 3:</para> - <programlisting language="none">{"Aaron", "Eva", "Mandy", <emphasis role="red">"Mandyer"</emphasis>, "Paul"}</programlisting> + <programlisting language="none">{"Aaron", "Eva", "Mandy", <emphasis + role="red">"Mandyer"</emphasis>, "Paul"}</programlisting> <remark>Subtracting -1 is being required for conveying the »not in list« information under all circumstances. Otherwise not finding and hypothetically inserting e.g. <code language="java">"A"</code> at the list's beginning would result in 0. This could not be - disambiguated from an array featuring <code language="java">"A"</code> at its front position.</remark> + disambiguated from an array featuring <code + language="java">"A"</code> at its front position.</remark> </answer> </qandaentry> </qandadiv> </qandaset> <figure xml:id="sd1_array_fig_arraysFill"> - <title><classname xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html">Arrays</classname>.<methodname xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html#fill(java.lang.Object%5B%5D,int,int,java.lang.Object)">fill(...)</methodname></title> + <title><classname + xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html">Arrays</classname>.<methodname + xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html#fill(java.lang.Object%5B%5D,int,int,java.lang.Object)">fill(...)</methodname></title> <programlisting language="none">final String[] names = {"Eve", "Aaron", "Paul", "Mandy"}; @@ -919,7 +962,9 @@ toString: [N.N, N.N, N.N, N.N]</screen> </figure> <figure xml:id="sd1_array_fig_arraysCopyOf"> - <title><classname xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html">Arrays</classname>.<methodname xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html#copyOfRange(T%5B%5D,int,int)">copyOfRange(...)</methodname></title> + <title><classname + xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html">Arrays</classname>.<methodname + xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html#copyOfRange(T%5B%5D,int,int)">copyOfRange(...)</methodname></title> <programlisting language="none">final String[] names = {"Eve", "Aaron", "Paul", "Mandy"}; @@ -929,11 +974,14 @@ System.out.println("toString: " + Arrays.toString(lastTwoNames));</programlistin <para>Result:</para> - <screen>toString: [Paul, Mandy, <emphasis role="red">null</emphasis>, <emphasis role="red">null</emphasis>]</screen> + <screen>toString: [Paul, Mandy, <emphasis role="red">null</emphasis>, <emphasis + role="red">null</emphasis>]</screen> </figure> <figure xml:id="sd1_array_fig_arraysEquals"> - <title><classname xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html">Arrays</classname>.<methodname xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html#equals(java.lang.Object%5B%5D,java.lang.Object%5B%5D)">equals(...)</methodname></title> + <title><classname + xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html">Arrays</classname>.<methodname + xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html#equals(java.lang.Object%5B%5D,java.lang.Object%5B%5D)">equals(...)</methodname></title> <programlisting language="java">final String[] l1 = {"Eve", "Aaron", "Paul", "Mandy"}, @@ -969,47 +1017,61 @@ member[4] = newCourseMember;</programlisting> <title>Extending an array</title> <programlisting language="java">public static void main(String[] args) { - <co linkends="sd1_array_fig_manualExtendArray-1" xml:id="sd1_array_fig_manualExtendArray-1-co" /> String[] member = {"Eve", "John", "Peter", "Jill"}; + <co linkends="sd1_array_fig_manualExtendArray-1" + xml:id="sd1_array_fig_manualExtendArray-1-co"/> String[] member = {"Eve", "John", "Peter", "Jill"}; final String newMember = "Ernest"; - member <co linkends="sd1_array_fig_manualExtendArray-2" xml:id="sd1_array_fig_manualExtendArray-2-co" />= append(member, newMember); + member <co linkends="sd1_array_fig_manualExtendArray-2" + xml:id="sd1_array_fig_manualExtendArray-2-co"/>= append(member, newMember); } static String[] append (final String[] values, final String newValue) { - final String[] copy = <co linkends="sd1_array_fig_manualExtendArray-3" xml:id="sd1_array_fig_manualExtendArray-3-co" /> new String[values.length + 1]; - for (int i = 0; i < values.length; i++) { <co linkends="sd1_array_fig_manualExtendArray-4" xml:id="sd1_array_fig_manualExtendArray-4-co" /> - copy[i] = values[i]; <co linkends="sd1_array_fig_manualExtendArray-5" xml:id="sd1_array_fig_manualExtendArray-5-co" /> + final String[] copy = <co linkends="sd1_array_fig_manualExtendArray-3" + xml:id="sd1_array_fig_manualExtendArray-3-co"/> new String[values.length + 1]; + for (int i = 0; i < values.length; i++) { <co + linkends="sd1_array_fig_manualExtendArray-4" + xml:id="sd1_array_fig_manualExtendArray-4-co"/> + copy[i] = values[i]; <co linkends="sd1_array_fig_manualExtendArray-5" + xml:id="sd1_array_fig_manualExtendArray-5-co"/> } - copy[copy.length - 1] = newValue; <co linkends="sd1_array_fig_manualExtendArray-6" xml:id="sd1_array_fig_manualExtendArray-6-co" /> + copy[copy.length - 1] = newValue; <co + linkends="sd1_array_fig_manualExtendArray-6" + xml:id="sd1_array_fig_manualExtendArray-6-co"/> return copy; }</programlisting> - <calloutlist role="slideExclude"> - <callout arearefs="sd1_array_fig_manualExtendArray-1-co" xml:id="sd1_array_fig_manualExtendArray-1"> - <para>No final here: Reference will be re-assigned.</para> - </callout> - - <callout arearefs="sd1_array_fig_manualExtendArray-2-co" xml:id="sd1_array_fig_manualExtendArray-2"> - <para>Assigning reference to enlarged array.</para> - </callout> - - <callout arearefs="sd1_array_fig_manualExtendArray-3-co" xml:id="sd1_array_fig_manualExtendArray-3"> - <para>Creating an empty array capable of holding one more - value.</para> - </callout> - - <callout arearefs="sd1_array_fig_manualExtendArray-4-co" xml:id="sd1_array_fig_manualExtendArray-4"> - <para>Looping over existing values.</para> - </callout> - - <callout arearefs="sd1_array_fig_manualExtendArray-5-co" xml:id="sd1_array_fig_manualExtendArray-5"> - <para>Assigning old values one by one to corresponding index - positions.</para> - </callout> - - <callout arearefs="sd1_array_fig_manualExtendArray-6-co" xml:id="sd1_array_fig_manualExtendArray-6"> - <para>Assigning new value to last index position before returning - newly created array's reference.</para> - </callout> - </calloutlist> + <calloutlist role="slideExclude"> + <callout arearefs="sd1_array_fig_manualExtendArray-1-co" + xml:id="sd1_array_fig_manualExtendArray-1"> + <para>No final here: Reference will be re-assigned.</para> + </callout> + + <callout arearefs="sd1_array_fig_manualExtendArray-2-co" + xml:id="sd1_array_fig_manualExtendArray-2"> + <para>Assigning reference to enlarged array.</para> + </callout> + + <callout arearefs="sd1_array_fig_manualExtendArray-3-co" + xml:id="sd1_array_fig_manualExtendArray-3"> + <para>Creating an empty array capable of holding one more + value.</para> + </callout> + + <callout arearefs="sd1_array_fig_manualExtendArray-4-co" + xml:id="sd1_array_fig_manualExtendArray-4"> + <para>Looping over existing values.</para> + </callout> + + <callout arearefs="sd1_array_fig_manualExtendArray-5-co" + xml:id="sd1_array_fig_manualExtendArray-5"> + <para>Assigning old values one by one to corresponding index + positions.</para> + </callout> + + <callout arearefs="sd1_array_fig_manualExtendArray-6-co" + xml:id="sd1_array_fig_manualExtendArray-6"> + <para>Assigning new value to last index position before returning + newly created array's reference.</para> + </callout> + </calloutlist> </figure> <figure xml:id="sd1_array_fig_manualExtendArrayResult"> @@ -1026,7 +1088,8 @@ Extended array: [Eve, John, Peter, Jill, <emphasis role="red">Ernest</emphasis>] </figure> <figure xml:id="sd1_array_fig_arraysExtendArrayHelper"> - <title>Using <methodname xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html#copyOf(int%5B%5D,int)">Arrays.copyOf()</methodname></title> + <title>Using <methodname + xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html#copyOf(int%5B%5D,int)">Arrays.copyOf()</methodname></title> <programlisting language="none">public static void main(String[] args) { final int [] start = {1,7,-4}, @@ -1068,7 +1131,9 @@ static public int[] append(final int[] values, final int newValue) { }</programlisting> <para>Change the implementation. Do not use methods from - <classname>Arrays</classname> but just <code language="java">for</code> loops and other elementary <xref linkend="glo_Java" /> constructs. Employ the following (minimal) + <classname>Arrays</classname> but just <code + language="java">for</code> loops and other elementary <xref + linkend="glo_Java"/> constructs. Employ the following (minimal) unit test:</para> <programlisting language="java">public class AppendTest { @@ -1091,25 +1156,34 @@ static public int[] append(final int[] values, final int newValue) { * @return A new array prepending the input array values to the new value . */ static public int[] append(final int[] values, final int newValue) { - final int[] result = new int[values.length + <emphasis role="red">1</emphasis>]; <co linkends="sd1_core_array_qanda_extendArrayCalloutSolution-1" xml:id="sd1_core_array_qanda_extendArrayCalloutSolution-1-co" /> - for (int i = 0; i < values.length; i++) { <co linkends="sd1_core_array_qanda_extendArrayCalloutSolution-2" xml:id="sd1_core_array_qanda_extendArrayCalloutSolution-2-co" /> + final int[] result = new int[values.length + <emphasis role="red">1</emphasis>]; <co + linkends="sd1_core_array_qanda_extendArrayCalloutSolution-1" + xml:id="sd1_core_array_qanda_extendArrayCalloutSolution-1-co"/> + for (int i = 0; i < values.length; i++) { <co + linkends="sd1_core_array_qanda_extendArrayCalloutSolution-2" + xml:id="sd1_core_array_qanda_extendArrayCalloutSolution-2-co"/> result[i] = values[i]; } - result[values.length] = newValue; <co linkends="sd1_core_array_qanda_extendArrayCalloutSolution-3" xml:id="sd1_core_array_qanda_extendArrayCalloutSolution-3-co" /> + result[values.length] = newValue; <co + linkends="sd1_core_array_qanda_extendArrayCalloutSolution-3" + xml:id="sd1_core_array_qanda_extendArrayCalloutSolution-3-co"/> return result; }</programlisting> <calloutlist> - <callout arearefs="sd1_core_array_qanda_extendArrayCalloutSolution-1-co" xml:id="sd1_core_array_qanda_extendArrayCalloutSolution-1"> + <callout arearefs="sd1_core_array_qanda_extendArrayCalloutSolution-1-co" + xml:id="sd1_core_array_qanda_extendArrayCalloutSolution-1"> <para>Create a new array by extending the given array's size by 1.</para> </callout> - <callout arearefs="sd1_core_array_qanda_extendArrayCalloutSolution-2-co" xml:id="sd1_core_array_qanda_extendArrayCalloutSolution-2"> + <callout arearefs="sd1_core_array_qanda_extendArrayCalloutSolution-2-co" + xml:id="sd1_core_array_qanda_extendArrayCalloutSolution-2"> <para>Copy the given array's values into the new array.</para> </callout> - <callout arearefs="sd1_core_array_qanda_extendArrayCalloutSolution-3-co" xml:id="sd1_core_array_qanda_extendArrayCalloutSolution-3"> + <callout arearefs="sd1_core_array_qanda_extendArrayCalloutSolution-3-co" + xml:id="sd1_core_array_qanda_extendArrayCalloutSolution-3"> <para>Copy the new <code language="java">int</code> value to the last array element.</para> </callout> @@ -1304,7 +1378,8 @@ final int[] sortedValues = Arrays.copyOf(values, values.length); </annotation> <para>Like in the previous exercise Junit tests are being - prepared but masked by an <interfacename xlink:href="https://junit.org/junit5/docs/current/api/org/junit/jupiter/api/Disabled.html">@Disabled</interfacename> + prepared but masked by an <interfacename + xlink:href="https://junit.org/junit5/docs/current/api/org/junit/jupiter/api/Disabled.html">@Disabled</interfacename> annotation.</para> <para>This skeleton project contains:</para> @@ -1316,7 +1391,7 @@ final int[] sortedValues = Arrays.copyOf(values, values.length); </listitem> <listitem> - <para>A <xref linkend="glo_Junit" /> test + <para>A <xref linkend="glo_Junit"/> test <classname>IntStoreTest</classname> which allows you to test your ongoing implementation of <classname>BoundedIntegerStore</classname>. This class @@ -1326,7 +1401,8 @@ final int[] sortedValues = Arrays.copyOf(values, values.length); <listitem> <para>Like in the previous exercise the Junit tests are - being masked by an <interfacename xlink:href="https://junit.org/junit5/docs/current/api/org/junit/jupiter/api/Disabled.html">@Disabled</interfacename> + being masked by an <interfacename + xlink:href="https://junit.org/junit5/docs/current/api/org/junit/jupiter/api/Disabled.html">@Disabled</interfacename> annotation. After successful implementation they should be enabled for test activation.</para> </listitem> @@ -1348,7 +1424,7 @@ final int[] sortedValues = Arrays.copyOf(values, values.length); <qandadiv> <qandaentry> <question> - <para>In <xref linkend="sd1QandaIntStore" /> once a store has + <para>In <xref linkend="sd1QandaIntStore"/> once a store has been created its capacity is fixed. We'd like to extend our class to support dynamic growth while adding new values. To achieve this goal follow the following steps:</para> @@ -1394,7 +1470,8 @@ final int[] sortedValues = Arrays.copyOf(values, values.length); </listitem> <listitem> - <para>Assign the new array to your <code language="java">int[] values</code> variable. You + <para>Assign the new array to your <code + language="java">int[] values</code> variable. You thereby implicitly discard the old array which become subject to be garbage collected.</para> </listitem> @@ -1416,7 +1493,7 @@ final int[] sortedValues = Arrays.copyOf(values, values.length); </listitem> </orderedlist> - <para>Modify and add <xref linkend="glo_Junit" /> tests + <para>Modify and add <xref linkend="glo_Junit"/> tests accordingly to reflect the new behaviour. In particular you should test for correct capacity reallocation handling when adding larger numbers of values being added.</para> @@ -1457,29 +1534,35 @@ Parameter 3: -13</screen> </figure> <figure xml:id="sd1_array_fig_ideaRunConfig"> - <title><xref linkend="glo_Soft_IntellijIDEA" /> run configuration</title> + <title><xref linkend="glo_Soft_IntellijIDEA"/> run configuration</title> <mediaobject> <imageobjectco> <areaspec otherunits="imagemap" units="other"> - <area coords="407,98,521,139" linkends="sd1_array_fig_ideaRunConfig-1" xml:id="__area-ypcokm" /> + <area coords="407,98,521,139" + linkends="sd1_array_fig_ideaRunConfig-1" + xml:id="__area-ypcokm"/> - <area coords="410,161,526,202" linkends="sd1_array_fig_ideaRunConfig-2" xml:id="__area-qny3zv" /> + <area coords="410,161,526,202" + linkends="sd1_array_fig_ideaRunConfig-2" + xml:id="__area-qny3zv"/> </areaspec> <imageobject> - <imagedata fileref="Ref/Array/ideaRunConfig.png.marked.svg" /> + <imagedata fileref="Ref/Array/ideaRunConfig.png.marked.svg"/> </imageobject> </imageobjectco> </mediaobject> <calloutlist> - <callout arearefs="__area-ypcokm" xml:id="sd1_array_fig_ideaRunConfig-1"> + <callout arearefs="__area-ypcokm" + xml:id="sd1_array_fig_ideaRunConfig-1"> <para>Entry class <classname>myapp.Cmd</classname> containing <methodname>... main(String[] args)</methodname>.</para> </callout> - <callout arearefs="__area-qny3zv" xml:id="sd1_array_fig_ideaRunConfig-2"> + <callout arearefs="__area-qny3zv" + xml:id="sd1_array_fig_ideaRunConfig-2"> <para>Parameters <option>21</option>, <option>334</option> and <option>-13</option> being passed to <code language="java">String[] args</code>.</para> @@ -1488,11 +1571,11 @@ Parameter 3: -13</screen> </figure> <figure xml:id="sd1_array_fig_ideaRunConfigResult"> - <title><xref linkend="glo_Soft_IntellijIDEA" /> run configuration</title> + <title><xref linkend="glo_Soft_IntellijIDEA"/> run configuration</title> <mediaobject> <imageobject> - <imagedata fileref="Ref/Array/ideaRunResult.png" /> + <imagedata fileref="Ref/Array/ideaRunResult.png"/> </imageobject> </mediaobject> </figure> @@ -1620,7 +1703,8 @@ Enter value #1 of 4: 1 <qandadiv> <qandaentry> <question> - <para>The output representation of <xref linkend="sd1QandaConsoleInput" /> shall be altered by the following + <para>The output representation of <xref + linkend="sd1QandaConsoleInput"/> shall be altered by the following rules:</para> <orderedlist> @@ -1644,7 +1728,8 @@ Enter value #1 of 4: 1 <itemizedlist> <listitem> - <para>{0,1,0,4} → <code language="java">1+4=5</code>.</para> + <para>{0,1,0,4} → <code + language="java">1+4=5</code>.</para> </listitem> <listitem> @@ -1661,9 +1746,11 @@ Enter value #1 of 4: 1 <listitem> <para>If possible a sum shall not start with a negative value. - The list {-1, -2, 5} for example will generate <code language="java">-1-2+5=2</code>. Instead the first negative + The list {-1, -2, 5} for example will generate <code + language="java">-1-2+5=2</code>. Instead the first negative value shall be swapped with the first positive value (if - existent). The current example will thus result in <code language="java">5-2-1=2</code>.</para> + existent). The current example will thus result in <code + language="java">5-2-1=2</code>.</para> </listitem> </orderedlist> @@ -1679,7 +1766,8 @@ Enter value #1 of 4: 1 <para>The following Maven project skeleton contains both a yet not implemented class method <methodname>de.hdm_stuttgart.mi.sda1.console_sum.App.prettifyOutput(int[] - values)</methodname> and a corresponding <xref linkend="glo_Junit" /> test suite being defined in + values)</methodname> and a corresponding <xref + linkend="glo_Junit"/> test suite being defined in <package>de.hdm_stuttgart.mi.sda1.console_sum</package>.<classname>AppTest</classname>:</para> <annotation role="make"> @@ -1689,7 +1777,8 @@ Enter value #1 of 4: 1 <para>All tests would currently fail. Therefore the test class <classname>de.hdm_stuttgart.mi.sda1.console_sum.AppTest</classname> - is being masked by an <interfacename xlink:href="https://junit.org/junit5/docs/current/api/org/junit/jupiter/api/Disabled.html">@Disabled</interfacename> + is being masked by an <interfacename + xlink:href="https://junit.org/junit5/docs/current/api/org/junit/jupiter/api/Disabled.html">@Disabled</interfacename> annotation:</para> <programlisting language="java">... @@ -1703,10 +1792,12 @@ public class AppTest { Assert.assertEquals("0", App.prettifyOutput(new int[0])); } ...</programlisting> - <para>Import this project into your <xref linkend="glo_IDE" /> and complete its implementation of + <para>Import this project into your <xref + linkend="glo_IDE"/> and complete its implementation of <methodname>de.hdm_stuttgart.mi.sda1.console_sum.App.prettifyOutput(int[] - values)</methodname> until all <xref linkend="glo_Junit" /> - tests do succeed. Removing the <interfacename xlink:href="https://junit.org/junit5/docs/current/api/org/junit/jupiter/api/Disabled.html">@Disabled</interfacename> + values)</methodname> until all <xref linkend="glo_Junit"/> + tests do succeed. Removing the <interfacename + xlink:href="https://junit.org/junit5/docs/current/api/org/junit/jupiter/api/Disabled.html">@Disabled</interfacename> line will allow for testing your implementation.</para> </listitem> </itemizedlist> @@ -1754,76 +1845,97 @@ matrix[1] = new int[3]; // second int array</programlisting> <mediaobject> <imageobject> - <imagedata fileref="Ref/Array/array2dim.multi.svg" /> + <imagedata fileref="Ref/Array/array2dim.multi.svg"/> </imageobject> </mediaobject> </figure> - <qandaset defaultlabel="qanda" xml:id="sd1_array_qanda_array2dimConstLength"> - <title>2-dimensional arrays and <code language="java">.length</code></title> + <qandaset defaultlabel="qanda" + xml:id="sd1_array_qanda_array2dimConstLength"> + <title>2-dimensional arrays and <code + language="java">.length</code></title> <qandadiv> <qandaentry> <question> <orderedlist> <listitem> - <para>In <xref linkend="sd1_array_fig_arrayPrimeArrayLength" /> - you were advised to prefer <code language="java">.length</code> rather than using hard coded + <para>In <xref linkend="sd1_array_fig_arrayPrimeArrayLength"/> + you were advised to prefer <code + language="java">.length</code> rather than using hard coded int literals like e.g. <quote>5</quote>. Replace the first loop's respective limits 2 and 3 accordingly.</para> <tip> <para>The array has got constant dimension with respect to - each row of values. You may thus choose either <code language="java">matrix[0]</code> of <code language="java">matrix[1]</code> as a representative.</para> + each row of values. You may thus choose either <code + language="java">matrix[0]</code> of <code + language="java">matrix[1]</code> as a representative.</para> </tip> </listitem> <listitem> - <para>Replace the second loop by a <link linkend="sd1_array_fig_arrayForEachLoop">for-each style</link> + <para>Replace the second loop by a <link + linkend="sd1_array_fig_arrayForEachLoop">for-each style</link> loop.</para> <tip> - <para><code language="java">matrix[0]</code> and <code language="java">matrix[1]</code> are of type <code language="java">int[]</code>.</para> + <para><code language="java">matrix[0]</code> and <code + language="java">matrix[1]</code> are of type <code + language="java">int[]</code>.</para> </tip> </listitem> </orderedlist> </question> <answer> - <para>Two-dimensional arrays in <xref linkend="glo_Java" /> are + <para>Two-dimensional arrays in <xref linkend="glo_Java"/> are nested arrays of arrays. We thus choose appropriate data types:</para> <programlisting language="java">final int[][] matrix = new int[2][3]; -for (int row = 0; row < matrix.length <co linkends="sd1_array_qanda_array2dimConstLength-1" xml:id="sd1_array_qanda_array2dimConstLength-1-co" />; row++) { - for (int col = 0; col < matrix[row].length <co linkends="sd1_array_qanda_array2dimConstLength-2" xml:id="sd1_array_qanda_array2dimConstLength-2-co" />; col++) { +for (int row = 0; row < matrix.length <co + linkends="sd1_array_qanda_array2dimConstLength-1" + xml:id="sd1_array_qanda_array2dimConstLength-1-co"/>; row++) { + for (int col = 0; col < matrix[row].length <co + linkends="sd1_array_qanda_array2dimConstLength-2" + xml:id="sd1_array_qanda_array2dimConstLength-2-co"/>; col++) { matrix[row][col] = col + row; } } -for (final int[] <co linkends="sd1_array_qanda_array2dimConstLength-3" xml:id="sd1_array_qanda_array2dimConstLength-3-co" /> row : matrix) { +for (final int[] <co linkends="sd1_array_qanda_array2dimConstLength-3" + xml:id="sd1_array_qanda_array2dimConstLength-3-co"/> row : matrix) { System.out.println(Arrays.toString(row)); }</programlisting> <calloutlist> - <callout arearefs="sd1_array_qanda_array2dimConstLength-1-co" xml:id="sd1_array_qanda_array2dimConstLength-1"> - <para>The »outer« array's dimension: This <code language="java">int[][]</code> array is the visible entry + <callout arearefs="sd1_array_qanda_array2dimConstLength-1-co" + xml:id="sd1_array_qanda_array2dimConstLength-1"> + <para>The »outer« array's dimension: This <code + language="java">int[][]</code> array is the visible entry point containing references to rows each being implemented as a »simple« <code language="java">int[]</code> array.</para> </callout> - <callout arearefs="sd1_array_qanda_array2dimConstLength-2-co" xml:id="sd1_array_qanda_array2dimConstLength-2"> + <callout arearefs="sd1_array_qanda_array2dimConstLength-2-co" + xml:id="sd1_array_qanda_array2dimConstLength-2"> <para>All rows are having identical length. We could thus use - either representative <code language="java">matrix[0].length</code> or <code language="java">matrix[1].length</code> as well. However + either representative <code + language="java">matrix[0].length</code> or <code + language="java">matrix[1].length</code> as well. However choosing <code language="java">matrix[row].length</code> also works in case of different row lengths.</para> </callout> - <callout arearefs="sd1_array_qanda_array2dimConstLength-3-co" xml:id="sd1_array_qanda_array2dimConstLength-3"> + <callout arearefs="sd1_array_qanda_array2dimConstLength-3-co" + xml:id="sd1_array_qanda_array2dimConstLength-3"> <para>The variable <code language="java">matrix</code> is of - type <code language="java">int[][]</code>. Each <code language="java">matrix[row]</code> entry thus represents a + type <code language="java">int[][]</code>. Each <code + language="java">matrix[row]</code> entry thus represents a reference to an »ordinary« <code language="java">int[]</code> - array. So row iteration requires a loop variable of type <code language="java">int[]</code>.</para> + array. So row iteration requires a loop variable of type <code + language="java">int[]</code>.</para> </callout> </calloutlist> </answer> @@ -1841,19 +1953,23 @@ for (final int[] <co linkends="sd1_array_qanda_array2dimConstLength-3" xml:id="s <itemizedlist> <listitem> - <para><link xlink:href="http://codingbat.com/java/String-3">String-3</link></para> + <para><link + xlink:href="http://codingbat.com/java/String-3">String-3</link></para> </listitem> <listitem> - <para><link xlink:href="http://codingbat.com/java/Array-1">Array-1</link></para> + <para><link + xlink:href="http://codingbat.com/java/Array-1">Array-1</link></para> </listitem> <listitem> - <para><link xlink:href="http://codingbat.com/java/Array-1">Array-2</link></para> + <para><link + xlink:href="http://codingbat.com/java/Array-1">Array-2</link></para> </listitem> <listitem> - <para><link xlink:href="http://codingbat.com/java/Array-3">Array-3</link></para> + <para><link + xlink:href="http://codingbat.com/java/Array-3">Array-3</link></para> </listitem> </itemizedlist> </question> @@ -1873,7 +1989,8 @@ for (final int[] <co linkends="sd1_array_qanda_array2dimConstLength-3" xml:id="s <qandaentry> <question> <para>This exercise exclusively deals with the visualization and - bookkeeping of two humans playing <link xlink:href="https://en.wikipedia.org/wiki/Tic-tac-toe">Tic-tac-toe</link> + bookkeeping of two humans playing <link + xlink:href="https://en.wikipedia.org/wiki/Tic-tac-toe">Tic-tac-toe</link> against each other. For the sake of clarification: It is not about humans playing a computer. So you do not (yet) have to implement an algorithm finding a player's best possible moves. @@ -1884,7 +2001,7 @@ for (final int[] <co linkends="sd1_array_qanda_array2dimConstLength-3" xml:id="s <mediaobject> <videoobject> - <videodata fileref="Ref/Video/tttEclipse.webm" /> + <videodata fileref="Ref/Video/tttEclipse.webm"/> </videoobject> </mediaobject> </figure> @@ -1907,78 +2024,78 @@ for (final int[] <co linkends="sd1_array_qanda_array2dimConstLength-3" xml:id="s a <quote>win</quote> state:</para> <informaltable border="1"> - <col width="7%" /> + <col width="7%"/> - <col width="2%" /> + <col width="2%"/> - <col width="7%" /> + <col width="7%"/> - <col width="2%" /> + <col width="2%"/> - <col width="7%" /> + <col width="7%"/> - <col width="2%" /> + <col width="2%"/> - <col width="7%" /> + <col width="7%"/> - <col width="2%" /> + <col width="2%"/> - <col width="7%" /> + <col width="7%"/> - <col width="2%" /> + <col width="2%"/> - <col width="7%" /> + <col width="7%"/> - <col width="2%" /> + <col width="2%"/> - <col width="7%" /> + <col width="7%"/> - <col width="2%" /> + <col width="2%"/> - <col width="7%" /> + <col width="7%"/> <tr> <td><screen>xxx ... ...</screen></td> - <td /> + <td/> <td><screen>... xxx ...</screen></td> - <td /> + <td/> <td><screen>... ... xxx</screen></td> - <td /> + <td/> <td><screen>x.. x.. x..</screen></td> - <td /> + <td/> <td><screen>.x. .x. .x.</screen></td> - <td /> + <td/> <td><screen>..x ..x ..x</screen></td> - <td /> + <td/> <td><screen>x.. .x. ..x</screen></td> - <td /> + <td/> <td><screen>..x .x. @@ -1994,7 +2111,8 @@ x..</screen></td> <para role="eclipse">Sd1/TicTacToe/V1</para> </annotation> - <para>This implementation already uses a so called <code language="java">enum</code> to be discussed later during an + <para>This implementation already uses a so called <code + language="java">enum</code> to be discussed later during an upcoming lecture:</para> <programlisting language="java">public enum Player { @@ -2026,7 +2144,8 @@ x..</screen></td> } }</programlisting> - <para>A <xref linkend="glo_Java" /> <code language="java">enum</code> essentially is a specialized class. + <para>A <xref linkend="glo_Java"/> <code + language="java">enum</code> essentially is a specialized class. If you don't like this yet you may safely replace the given <code language="java">enum</code> by the following class:</para> @@ -2062,7 +2181,7 @@ x..</screen></td> }</programlisting> <para>It is possible to wrap this solution into an executable - <xref linkend="glo_Jar" /> archive by adding:</para> + <xref linkend="glo_Jar"/> archive by adding:</para> <programlisting language="xml"> <plugin> <groupId>org.apache.maven.plugins</groupId> @@ -2081,7 +2200,7 @@ x..</screen></td> </plugin></programlisting> <para>This allows for console execution rather than using your - <xref linkend="glo_IDE" />:</para> + <xref linkend="glo_IDE"/>:</para> <screen>goik@mi-ESPRIMO-P910 V1> mvn install [INFO] Scanning for projects... @@ -2241,24 +2360,27 @@ Bill, please enter next field's number:</screen> <mediaobject> <videoobject> - <videodata fileref="Ref/Video/tttHumanVsComputer.webm" /> + <videodata fileref="Ref/Video/tttHumanVsComputer.webm"/> </videoobject> </mediaobject> </figure> <para>The underlying logic is considerately more difficult to - implement and requires recursion as being introduced in <xref linkend="sd1SectFactorialRecursive" />. You may want to + implement and requires recursion as being introduced in <xref + linkend="sd1SectFactorialRecursive"/>. You may want to read:</para> <itemizedlist> <listitem> - <para><link xlink:href="http://www.flyingmachinestudios.com/programming/minimax">An + <para><link + xlink:href="http://www.flyingmachinestudios.com/programming/minimax">An Exhaustive Explanation of Minimax, a Staple AI Algorithm</link></para> </listitem> <listitem> - <para><link xlink:href="http://neverstopbuilding.com/minimax">Tic Tac + <para><link + xlink:href="http://neverstopbuilding.com/minimax">Tic Tac Toe: Understanding The Minimax Algorithm</link></para> </listitem> </itemizedlist> @@ -2284,20 +2406,23 @@ Bill, please enter next field's number:</screen> <qandadiv> <qandaentry> <question> - <para>Extend <xref linkend="sd1QandaIntStoreUnbounded" /> by + <para>Extend <xref linkend="sd1QandaIntStoreUnbounded"/> by providing a method <methodname>double getAverage()</methodname> to provide statistical data on a given set of integer values. In addition provide a method <methodname>void clear()</methodname> enabling a user to support different sets of values.</para> - <para>Do not forget to extend your <xref linkend="glo_Junit" /> - tests. You may want to import the <link xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/tree/master/P/Sd1/Array/integerStoreStat">skeleton + <para>Do not forget to extend your <xref linkend="glo_Junit"/> + tests. You may want to import the <link + xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/tree/master/P/Sd1/Array/integerStoreStat">skeleton project</link> for getting started.</para> <caution> <para>When testing for equality of double values you may find - the <xref linkend="glo_Junit" /> method <methodname xlink:href="http://junit.sourceforge.net/javadoc/org/junit/Assert.html#assertEquals(double,%20double)">assertEquals()</methodname>to - be marked as <link xlink:href="https://docs.oracle.com/javase/1.5.0/docs/guide/javadoc/deprecation/deprecation.html">deprecated</link>. + the <xref linkend="glo_Junit"/> method <methodname + xlink:href="http://junit.sourceforge.net/javadoc/org/junit/Assert.html#assertEquals(double,%20double)">assertEquals()</methodname>to + be marked as <link + xlink:href="https://docs.oracle.com/javase/1.5.0/docs/guide/javadoc/deprecation/deprecation.html">deprecated</link>. Give a reason why this decision has been taken. The answer may guide you in finding a more appropriate test.</para> </caution> @@ -2308,7 +2433,8 @@ Bill, please enter next field's number:</screen> <para role="eclipse">Sd1/Array/integerStoreStat</para> </annotation> - <para>Testing for equality of two <code language="java">double</code> variables is generally a bad idea. + <para>Testing for equality of two <code + language="java">double</code> variables is generally a bad idea. Consider:</para> <programlisting language="java">double b= 1./3.; @@ -2321,7 +2447,9 @@ System.out.println(3 * b);</programlisting> <screen>0.9999999999999998</screen> <para>Thus <code language="java">assertEquals(1., b)</code> will - fail due to limited arithmetic precision. <xref linkend="glo_Junit" /> provides a method <code language="java" xlink:href="https://junit.org/junit4/javadoc/latest/org/junit/Assert.html#assertEquals(double,%20double,%20double)">assertEquals(double + fail due to limited arithmetic precision. <xref + linkend="glo_Junit"/> provides a method <code language="java" + xlink:href="https://junit.org/junit4/javadoc/latest/org/junit/Assert.html#assertEquals(double,%20double,%20double)">assertEquals(double expected, double actual, double delta)</code> addressing this problem:</para> @@ -2428,7 +2556,8 @@ public void testApp() { <para>Write a <emphasis role="bold">concise</emphasis> test which tests the above method for all numbers within the range [2, 100]. You need to know all prime numbers from this - set in order to implement a <emphasis role="bold">complete</emphasis> test for both directions + set in order to implement a <emphasis + role="bold">complete</emphasis> test for both directions <quote>is prime</quote> and <quote>is not prime</quote>.</para> </listitem> @@ -2441,8 +2570,10 @@ public void testApp() { <para>Write a method which tests prime number candidates up to an arbitrary limit (say limit == 10000) and returns the number of primes within [2, limit]. Measure this method's - execution time. You may want to consult <methodname xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/System.html#currentTimeMillis()">System.currentTimeMillis()</methodname> - or <methodname xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/System.html#nanoTime()">System.nanoTime()</methodname> + execution time. You may want to consult <methodname + xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/System.html#currentTimeMillis()">System.currentTimeMillis()</methodname> + or <methodname + xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/System.html#nanoTime()">System.nanoTime()</methodname> for that purpose.</para> </listitem> </orderedlist> @@ -2511,7 +2642,8 @@ public void testApp() { == 49</code> the last value of i to be considered will be 6. So the required test <code language="java">49 % 7</code> will never be executed thus erroneously returning true. We - have to modify the loop's limit slightly by using <code language="java">i * i <emphasis role="red"><=</emphasis> + have to modify the loop's limit slightly by using <code + language="java">i * i <emphasis role="red"><=</emphasis> candidate</code> instead:</para> <programlisting language="none"> public static boolean isPrime(final long candidate) { @@ -2519,12 +2651,14 @@ public void testApp() { ...</programlisting> <para>This way <code language="java">49 % 7</code> will be - evaluated to zero thus returning <code language="java">false</code> and thereby categorizing 49 as + evaluated to zero thus returning <code + language="java">false</code> and thereby categorizing 49 as a non-prime number.</para> </listitem> <listitem> - <para>Executing <methodname xlink:href="P/Sd1/Prime/V1/target/site/apidocs/de/hdm_stuttgart/mi/sd1/main/PrimeNumbers.html#main-java.lang.String:A-">main()</methodname> + <para>Executing <methodname + xlink:href="P/Sd1/Prime/V1/target/site/apidocs/de/hdm_stuttgart/mi/sd1/main/PrimeNumbers.html#main-java.lang.String:A-">main()</methodname> allows for estimating the prime number computing performance:</para> @@ -2561,7 +2695,8 @@ public void testApp() { 143 % 10 == 0 ? No. 143 % 11 == 0 ? Yes ==> 143 is not prime</screen> - <para>Learning from <link xlink:href="https://en.wikipedia.org/wiki/Prime_factor">prime + <para>Learning from <link + xlink:href="https://en.wikipedia.org/wiki/Prime_factor">prime factorization</link> it actually suffices testing only prime values rather than all integer values up to the already discussed square root limit:</para> @@ -2590,7 +2725,8 @@ public void testApp() { <itemizedlist> <listitem> - <para>You may want to reuse your unsorted <classname xlink:href="P/Sd1/Array/integerStoreUnbounded/target/site/apidocs/de/hdm_stuttgart/mi/sd1/store/IntegerStore.html">IntegerStore</classname> + <para>You may want to reuse your unsorted <classname + xlink:href="P/Sd1/Array/integerStoreUnbounded/target/site/apidocs/de/hdm_stuttgart/mi/sd1/store/IntegerStore.html">IntegerStore</classname> implementation to provide a dynamically growing array of integer values.</para> </listitem> @@ -2630,10 +2766,12 @@ public void testApp() { <qandadiv> <qandaentry> <question> - <para>Read the <link xlink:href="https://en.wikipedia.org/wiki/Median">definition of a + <para>Read the <link + xlink:href="https://en.wikipedia.org/wiki/Median">definition of a given sample's median</link>.</para> - <para>We want to extend exercise <xref linkend="sd1QandaIntStoreStat" /> by adding a method + <para>We want to extend exercise <xref + linkend="sd1QandaIntStoreStat"/> by adding a method <methodname>int getMedian()</methodname>. For this purpose our current implementation lacks ordering of input values. Consider the following sample of values:</para> @@ -2662,13 +2800,15 @@ public void testApp() { }</programlisting> <caution> - <para>Do not just return your internal array <code language="java">int[] values</code>! Due to the amortized + <para>Do not just return your internal array <code + language="java">int[] values</code>! Due to the amortized doubling implementation this will in most cases contain unused positions on top of added values.</para> <para>You may either construct a suitable copy containing the current elements yourself or get enlightened by reading - the <xref linkend="glo_API" /> documentation of <link xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html#copyOfRange(int%5B%5D,int,int)">copyOfRange(...)</link>.</para> + the <xref linkend="glo_API"/> documentation of <link + xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html#copyOfRange(int%5B%5D,int,int)">copyOfRange(...)</link>.</para> </caution> </listitem> @@ -2695,12 +2835,15 @@ for (final int i: unsortedValues) { <para>Do not forget to consider value sets which include duplicates and write tests accordingly!</para> - <para>Hint: The <xref linkend="glo_Junit" /> <xref linkend="glo_framework" /> provides a (convenience) method - <methodname xlink:href="http://junit.sourceforge.net/javadoc/org/junit/Assert.html#assertArrayEquals(int[],%20int[])">assertArrayEquals(...)</methodname>.</para> + <para>Hint: The <xref linkend="glo_Junit"/> <xref + linkend="glo_framework"/> provides a (convenience) method + <methodname + xlink:href="http://junit.sourceforge.net/javadoc/org/junit/Assert.html#assertArrayEquals(int[],%20int[])">assertArrayEquals(...)</methodname>.</para> </listitem> <listitem> - <para>Modify your<methodname xlink:href="P/Sd1/Array/integerStoreStat/target/site/apidocs/de/hdm_stuttgart/mi/sd1/store/IntegerStore.html#addValue-int-"> + <para>Modify your<methodname + xlink:href="P/Sd1/Array/integerStoreStat/target/site/apidocs/de/hdm_stuttgart/mi/sd1/store/IntegerStore.html#addValue-int-"> addValue(...)</methodname> method's implementation. Though there are more elaborate sorting methods available in Java we'll do it the hard way ourselves in this exercise. Consider @@ -2712,7 +2855,8 @@ store.addValue(7); store.addValue(9); store.addValue(3);</programlisting> - <para>Prior to inserting a new value our <methodname xlink:href="P/Sd1/Array/integerStoreStat/target/site/apidocs/de/hdm_stuttgart/mi/sd1/store/IntegerStore.html#addValue-int-">addValue(...)</methodname> + <para>Prior to inserting a new value our <methodname + xlink:href="P/Sd1/Array/integerStoreStat/target/site/apidocs/de/hdm_stuttgart/mi/sd1/store/IntegerStore.html#addValue-int-">addValue(...)</methodname> method shall find a suitable position inside the array of already added values to insert the new value. When adding the last value 3 in the above example the internal array already @@ -2770,7 +2914,8 @@ values newArray | 1| 2| F| 7| 9| | ...</screen> <listitem> <para>Add a dummy implementation <methodname>double getMedian()</methodname>{return 0;} to your class - <classname>IntegerStore</classname> from exercise <xref linkend="sd1QandaIntStoreStat" />.</para> + <classname>IntegerStore</classname> from exercise <xref + linkend="sd1QandaIntStoreStat"/>.</para> </listitem> <listitem> @@ -2780,7 +2925,8 @@ values newArray | 1| 2| F| 7| 9| | ...</screen> </listitem> <listitem> - <para>Finally complete the desired <code language="java">double getMedian()</code> method's + <para>Finally complete the desired <code + language="java">double getMedian()</code> method's implementation and actually test it. There must be at least one element in order to be able returning a meaningful result:</para> @@ -2800,7 +2946,8 @@ values newArray | 1| 2| F| 7| 9| | ...</screen> </listitem> <listitem> - <para>Implement a main method as in <xref linkend="sd1QandaConsoleInput" /> asking the user for an + <para>Implement a main method as in <xref + linkend="sd1QandaConsoleInput"/> asking the user for an arbitrary number of values. Then compute both their average and median like:</para> @@ -2825,8 +2972,10 @@ Your sample's median is: 1.0</screen> <orderedlist> <listitem> - <para>The <link xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html#copyOfRange(int%5B%5D,int,int)">copyOfRange(...)</link> - method in <methodname xlink:href="P/Sd1/Array/integerStoreMedianAnswer/target/site/apidocs/de/hdm_stuttgart/mi/sd1/store/IntegerStore.html#getValues--">getValues()</methodname> + <para>The <link + xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Arrays.html#copyOfRange(int%5B%5D,int,int)">copyOfRange(...)</link> + method in <methodname + xlink:href="P/Sd1/Array/integerStoreMedianAnswer/target/site/apidocs/de/hdm_stuttgart/mi/sd1/store/IntegerStore.html#getValues--">getValues()</methodname> returns that portion of our <code language="java">int[] values</code> array actually been filled with data.</para> </listitem> @@ -2854,12 +3003,15 @@ for (final int i: unsortedValues) { <para>Do not forget to consider value sets which include duplicates and write tests accordingly!</para> - <para>Hint: The <xref linkend="glo_Junit" /> <xref linkend="glo_framework" /> provides a (convenient) method - <methodname xlink:href="http://junit.sourceforge.net/javadoc/org/junit/Assert.html#assertArrayEquals(int[],%20int[])">assertArrayEquals(...)</methodname>.</para> + <para>Hint: The <xref linkend="glo_Junit"/> <xref + linkend="glo_framework"/> provides a (convenient) method + <methodname + xlink:href="http://junit.sourceforge.net/javadoc/org/junit/Assert.html#assertArrayEquals(int[],%20int[])">assertArrayEquals(...)</methodname>.</para> </listitem> <listitem> - <para>Modify your<methodname xlink:href="P/Sd1/Array/integerStoreStat/target/site/apidocs/de/hdm_stuttgart/mi/sd1/store/IntegerStore.html#addValue-int-"> + <para>Modify your<methodname + xlink:href="P/Sd1/Array/integerStoreStat/target/site/apidocs/de/hdm_stuttgart/mi/sd1/store/IntegerStore.html#addValue-int-"> addValue(...)</methodname> method's implementation. Though there are more elaborate sorting methods available in Java we'll do it the hard way ourselves in this exercise. Consider @@ -2871,7 +3023,8 @@ store.addValue(7); store.addValue(9); store.addValue(3);</programlisting> - <para>Prior to inserting a new value our <methodname xlink:href="P/Sd1/Array/integerStoreStat/target/site/apidocs/de/hdm_stuttgart/mi/sd1/store/IntegerStore.html#addValue-int-">addValue(...)</methodname> + <para>Prior to inserting a new value our <methodname + xlink:href="P/Sd1/Array/integerStoreStat/target/site/apidocs/de/hdm_stuttgart/mi/sd1/store/IntegerStore.html#addValue-int-">addValue(...)</methodname> method shall find a suitable position inside the array of already added values to insert the new value. When adding the last value 3 in the above example the internal array already @@ -2921,9 +3074,11 @@ values newArray | 1| 2| F| 7| 9| | ...</screen> </listitem> <listitem> - <para>The constructor <methodname xlink:href="P/Sd1/Array/integerStoreMedianAnswer/target/site/apidocs/de/hdm_stuttgart/mi/sd1/store/IntegerStore.html#IntegerStore-int:A-">public + <para>The constructor <methodname + xlink:href="P/Sd1/Array/integerStoreMedianAnswer/target/site/apidocs/de/hdm_stuttgart/mi/sd1/store/IntegerStore.html#IntegerStore-int:A-">public IntegerStore(final int[] values)</methodname> internally uses - our <methodname xlink:href="P/Sd1/Array/integerStoreMedianAnswer/target/site/apidocs/de/hdm_stuttgart/mi/sd1/store/IntegerStore.html#addValue-int-">addValue(...)</methodname> + our <methodname + xlink:href="P/Sd1/Array/integerStoreMedianAnswer/target/site/apidocs/de/hdm_stuttgart/mi/sd1/store/IntegerStore.html#addValue-int-">addValue(...)</methodname> method thus adding each array value one by one. Consider an alternative naive implementation:</para> @@ -2972,12 +3127,14 @@ values newArray | 1| 2| F| 7| 9| | ...</screen> </listitem> <listitem> - <para><methodname xlink:href="P/Sd1/Array/integerStoreMedianAnswer/target/site/apidocs/de/hdm_stuttgart/mi/sd1/store/IntegerStore.html#getMedian--">double + <para><methodname + xlink:href="P/Sd1/Array/integerStoreMedianAnswer/target/site/apidocs/de/hdm_stuttgart/mi/sd1/store/IntegerStore.html#getMedian--">double getMedian()</methodname></para> </listitem> <listitem> - <para><methodname xlink:href="P/Sd1/Array/integerStoreMedianAnswer/target/site/apidocs/de/hdm_stuttgart/mi/sd1/main/Driver.html#main-java.lang.String:A-">main(...)</methodname></para> + <para><methodname + xlink:href="P/Sd1/Array/integerStoreMedianAnswer/target/site/apidocs/de/hdm_stuttgart/mi/sd1/main/Driver.html#main-java.lang.String:A-">main(...)</methodname></para> </listitem> </orderedlist> </answer> @@ -2995,7 +3152,8 @@ values newArray | 1| 2| F| 7| 9| | ...</screen> <qandadiv> <qandaentry> <question> - <para>Implement a class to plot e.g. <code language="java">sin(x)</code> and other functions in a terminal + <para>Implement a class to plot e.g. <code + language="java">sin(x)</code> and other functions in a terminal like e.g.:</para> <screen> ****** @@ -3061,7 +3219,7 @@ values newArray | 1| 2| F| 7| 9| | ...</screen> }</programlisting> <para>You'll find a more sophisticated approach using interfaces - in upcoming <xref linkend="sd1SectPlotterInterface" />.</para> + in upcoming <xref linkend="sd1SectPlotterInterface"/>.</para> </answer> </qandaentry> </qandadiv> diff --git a/Doc/Sd1/gettingStarted.xml b/Doc/Sd1/gettingStarted.xml index a02e9919f..f2281e6a9 100644 --- a/Doc/Sd1/gettingStarted.xml +++ b/Doc/Sd1/gettingStarted.xml @@ -2174,8 +2174,7 @@ loop # 12</screen> <title>Maven command line usage</title> <figure xml:id="sd1_fig_mavenMiRepo"> - <title> Supplementary MI <xref linkend="glo_Maven"/> - archetypes</title> + <title>Supplementary MI <xref linkend="glo_Maven"/> archetypes</title> <itemizedlist> <listitem> @@ -2599,141 +2598,281 @@ Generating /ma/goik/First/target/site/apidocs/help-doc.html... <section xml:id="sd1FirstJavaProject"> <title>Maven and <xref linkend="glo_Soft_IntellijIDEA"/></title> - <para>Our <productname - xlink:href="https://www.jetbrains.com/idea">IntelliJ IDEA</productname> - <xref linkend="glo_IDE"/> supports the <xref linkend="glo_Maven"/> build - software to be discussed in greater detail later. Follow the subsequent - steps creating your first Maven based project.</para> + <figure xml:id="sd1_fig_mavenIdeaSupport"> + <title><xref linkend="glo_Soft_IntellijIDEA"/> <xref + linkend="glo_Maven"/> support</title> - <orderedlist> - <listitem> - <para>Configuring <filename>~/.m2/settings.xml</filename> as being - described in <xref linkend="sd1_sect_mavenCli"/> is - prerequisite.</para> - </listitem> + <itemizedlist> + <listitem> + <para>Built in <xref linkend="glo_Maven"/> support in <xref + linkend="glo_Soft_IntellijIDEA"/>.</para> + </listitem> - <listitem> - <para>Follow the steps installing the <link - xlink:href="https://plugins.jetbrains.com/plugin/7965-maven-archetype-catalogs">Maven - Archetype Catalogs</link> plugin in <productname - xlink:href="https://www.jetbrains.com/idea">IntelliJ - IDEA</productname>:</para> + <listitem> + <para>Using MI supplementary archetypes requires <link + xlink:href="sd1_sect_mavenCli">MI archetype configuration</link> + in <filename>~/.m2/settings.xml</filename>.</para> + </listitem> + </itemizedlist> + </figure> - <mediaobject> - <imageobject> - <imagedata fileref="Ref/Fig/NewProjectMavenIntellij/installArchtypeCatalogPlugin.png"/> - </imageobject> - </mediaobject> - </listitem> + <figure xml:id="sd1_fig_mavenIdeaArchetypeCatalogPlugin"> + <title><xref linkend="glo_Soft_IntellijIDEA"/> <xref + linkend="glo_Maven"/> archetype catalog plugin</title> - <listitem> - <para>After restarting <productname - xlink:href="https://www.jetbrains.com/idea">IntelliJ - IDEA</productname> configure the MI Maven archetype repository <uri - xlink:href="https://maven.mi.hdm-stuttgart.de/nexus/repository/mi-maven/archetype-catalog.xml">https://maven.mi.hdm-stuttgart.de/nexus/repository/mi-maven/archetype-catalog.xml</uri> - starting from <quote>settings</quote>:</para> + <mediaobject> + <imageobject> + <imagedata fileref="Ref/Fig/NewProjectMavenIntellij/installArchtypeCatalogPlugin.png"/> + </imageobject> + </mediaobject> + </figure> - <mediaobject> - <imageobject> - <imagedata fileref="Ref/Fig/NewProjectMavenIntellij/miMavenRepoUri.png"/> - </imageobject> - </mediaobject> - </listitem> + <figure xml:id="sd1_fig_mavenIdeaMiArchetypeRepo"> + <title><xref linkend="glo_Soft_IntellijIDEA"/> MI archetype repository + configuration</title> - <listitem> - <para>Click <option>Create New Project</option></para> + <para>Restarting <productname + xlink:href="https://www.jetbrains.com/idea">IntelliJ + IDEA</productname> and configure the MI Maven archetype repository + <uri + xlink:href="https://maven.mi.hdm-stuttgart.de/nexus/repository/mi-maven/archetype-catalog.xml">https://maven.mi.hdm-stuttgart.de/nexus/repository/mi-maven/archetype-catalog.xml</uri> + in <quote>settings</quote>:</para> - <mediaobject> - <imageobject> - <imagedata fileref="Ref/Fig/NewProjectMavenIntellij/s100_startscreen.png"/> - </imageobject> - </mediaobject> - </listitem> + <mediaobject> + <imageobject> + <imagedata fileref="Ref/Fig/NewProjectMavenIntellij/miMavenRepoUri.png"/> + </imageobject> + </mediaobject> + </figure> - <listitem> - <para>Choose a Maven archetype</para> + <figure xml:id="sd1_fig_mavenIdeaMiArchetypeNewProject"> + <title>New MI archetype project</title> - <mediaobject> - <imageobject> - <imagedata fileref="Ref/Fig/NewProjectMavenIntellij/s200_selectMavenArchetype.png"/> - </imageobject> - </mediaobject> - </listitem> + <para>Click <option>Create New Project</option>:</para> - <listitem> - <para>Define your project's group and artifact ID. In order to avoid - name clashes in projects maven requires:</para> - - <glosslist> - <glossentry> - <glossterm>GroupID</glossterm> - - <glossdef> - <para>Typically your organisation's (<abbrev>e.g.</abbrev> - company) domain name to avoid name clashes.</para> - </glossdef> - </glossentry> - - <glossentry> - <glossterm>AtifactID</glossterm> - - <glossdef> - <para>Your project's name within organisation e.g. - <code>musicarchiver</code>.</para> - </glossdef> - </glossentry> - - <glossentry> - <glossterm>Version</glossterm> - - <glossdef> - <para>Your project's version. Remember: With respect to - professional software development you may want to ship (and - sell!) different versions to your customers.</para> - </glossdef> - </glossentry> - </glosslist> + <mediaobject> + <imageobject> + <imagedata fileref="Ref/Fig/NewProjectMavenIntellij/s100_startscreen.png"/> + </imageobject> + </mediaobject> + </figure> + + <figure xml:id="sd1_fig_mavenIdeaSelectArchetype"> + <title>Selecting an archetype</title> + + <mediaobject> + <imageobjectco> + <areaspec otherunits="imagemap" units="other"> + <area coords="2,297,100,335" + linkends="sd1_fig_mavenIdeaDefineProjectMetadata-1.2" + xml:id="sd1_fig_mavenIdeaDefineProjectMetadata-1-co"/> + + <area coords="202,84,410,123" + linkends="sd1_fig_mavenIdeaDefineProjectMetadata-2.2" + xml:id="sd1_fig_mavenIdeaDefineProjectMetadata-2-co"/> + + <area coords="228,273,621,299" + linkends="sd1_fig_mavenIdeaDefineProjectMetadata-3.2" + xml:id="sd1_fig_mavenIdeaDefineProjectMetadata-3-co"/> + + <area coords="251,303,521,326" + linkends="sd1_fig_mavenIdeaDefineProjectMetadata-4" + xml:id="sd1_fig_mavenIdeaDefineProjectMetadata-4-co"/> + </areaspec> - <mediaobject> <imageobject> - <imagedata fileref="Ref/Fig/NewProjectMavenIntellij/s300_groupArtifactID.png"/> + <imagedata fileref="Ref/Fig/NewProjectMavenIntellij/s200_selectMavenArchetype.png.marked.svg"/> </imageobject> - </mediaobject> - </listitem> - <listitem> - <para>Choose your project root</para> + <calloutlist role="slideExclude"> + <callout arearefs="sd1_fig_mavenIdeaDefineProjectMetadata-1-co" + xml:id="sd1_fig_mavenIdeaDefineProjectMetadata-1.2"> + <para><xref linkend="glo_Soft_IntellijIDEA"/> project type + <xref linkend="glo_Maven"/>.</para> + </callout> + + <callout arearefs="sd1_fig_mavenIdeaDefineProjectMetadata-2-co" + xml:id="sd1_fig_mavenIdeaDefineProjectMetadata-2.2"> + <para>Tick <guibutton>Create from archetype</guibutton> + option.</para> + </callout> + + <callout arearefs="sd1_fig_mavenIdeaDefineProjectMetadata-3-co" + xml:id="sd1_fig_mavenIdeaDefineProjectMetadata-3.2"> + <para>Choose <property>archetypeGroupId</property>: + <option>de.hdm-stuttgart.mi</option>.</para> + </callout> + + <callout arearefs="sd1_fig_mavenIdeaDefineProjectMetadata-4-co" + xml:id="sd1_fig_mavenIdeaDefineProjectMetadata-4"> + <para>Within given <property>archetypeGroupId</property> + choose archetype identified by its unique values:</para> + + <itemizedlist> + <listitem> + <para><property>archetypeArtifactId</property>: + <option>mi-maven-archetype-quickstart</option> </para> + </listitem> + + <listitem> + <para><property>archetypeVersion</property>: + <option>1.1</option></para> + </listitem> + </itemizedlist> + + <note> + <para>Multiple archetypes of different versions may show up + here.</para> + </note> + </callout> + </calloutlist> + </imageobjectco> + </mediaobject> + </figure> - <tip> - <para>Create your project inside a cloud folder being synchronized - to e.g. the <link - xlink:href="https://cloud.mi.hdm-stuttgart.de">MI cloud</link>. - This way you'll be able to work seamlessly on different devices of - your choice.</para> - </tip> + <figure xml:id="sd1_fig_mavenIdeaDefineProjectMetadata"> + <title>Providing project identifier</title> - <para>Hit finish and wait for your project being created.</para> + <mediaobject> + <imageobjectco> + <areaspec otherunits="imagemap" units="other"> + <area coords="80,34,330,63" + linkends="sd1_fig_mavenIdeaDefineProjectMetadata-1" + xml:id="__area-tzqxp6"/> + + <area coords="79,67,194,94" + linkends="sd1_fig_mavenIdeaDefineProjectMetadata-2" + xml:id="__area-kleqi6"/> + + <area coords="78,97,200,130" + linkends="sd1_fig_mavenIdeaDefineProjectMetadata-3" + xml:id="__area-3qsv1b"/> + </areaspec> - <mediaobject> <imageobject> - <imagedata fileref="Ref/Fig/NewProjectMavenIntellij/s400_projectRoot.png"/> + <imagedata fileref="Ref/Fig/NewProjectMavenIntellij/s300_groupArtifactID.png.marked.svg"/> </imageobject> - </mediaobject> - </listitem> - <listitem> - <para>Enable auto import</para> + <calloutlist role="slideExclude"> + <callout arearefs="__area-tzqxp6" + xml:id="sd1_fig_mavenIdeaDefineProjectMetadata-1"> + <para><property>GroupID</property>: Typically your + organisation's (<abbrev>e.g.</abbrev> company's) reverse + domain name.</para> + + <note> + <para>This avoids name clashes between different + organisations.</para> + </note> + </callout> + + <callout arearefs="__area-kleqi6" + xml:id="sd1_fig_mavenIdeaDefineProjectMetadata-2"> + <para><property>ArtifactID</property>: Your project's name + being unique within your organisation e.g. + <option>musicarchiver</option>.</para> + + <note> + <para>This avoids name clashes within your + organisation.</para> + </note> + </callout> + + <callout arearefs="__area-3qsv1b" + xml:id="sd1_fig_mavenIdeaDefineProjectMetadata-3"> + <para><property>Version</property>: Your project's + version.</para> + + <note> + <para>With respect to professional software development you + may want to ship (and sell!) different versions to your + customers. This property allows for distinguishing + respective software version states.</para> + </note> + </callout> + </calloutlist> + </imageobjectco> + </mediaobject> + </figure> - <para>Whenever you see these options hit <option>Enable - Auto-import</option></para> + <figure xml:id="sd1_fig_mavenIdeaProjectRoot"> + <title>Your project's root</title> + + <mediaobject> + <imageobjectco> + <areaspec otherunits="imagemap" units="other"> + <area coords="113,30,238,66" + linkends="sd1_fig_mavenIdeaProjectRoot-1" + xml:id="__area-t5ostd"/> + + <area coords="120,65,425,95" + linkends="sd1_fig_mavenIdeaProjectRoot-2" + xml:id="__area-53fksd"/> + </areaspec> - <mediaobject> <imageobject> - <imagedata fileref="Ref/Fig/NewProjectMavenIntellij/s500_ImportMaven.png"/> + <imagedata fileref="Ref/Fig/NewProjectMavenIntellij/s400_projectRoot.png.marked.svg"/> </imageobject> - </mediaobject> - </listitem> - </orderedlist> + + <calloutlist role="slideExclude"> + <callout arearefs="__area-t5ostd" + xml:id="sd1_fig_mavenIdeaProjectRoot-1"> + <para>Your project's name. Should resemble your <xref + linkend="glo_Maven"/> <property>ArtifactID</property> + value.</para> + </callout> + + <callout arearefs="__area-53fksd" + xml:id="sd1_fig_mavenIdeaProjectRoot-2"> + <para>Your project's physical location within your + workstation's local file storage.</para> + + <tip> + <para>You may want to work on your projects at different + systems (e.g. MI pool, your laptop) and / or share your code + with others. Options:</para> + + <itemizedlist> + <listitem> + <para>Use a cloud folder being synchronized to a central + storage like <xref + linkend="sd1_fig_text_MiCloud"/>.</para> + </listitem> + + <listitem> + <para>Use a version control system like <xref + linkend="sd1_fig_text_MiGitSvnServer"/>.</para> + </listitem> + </itemizedlist> + </tip> + </callout> + </calloutlist> + </imageobjectco> + </mediaobject> + </figure> + + <figure xml:id="sd1_fig_mavenIdeaPomAutoImport"> + <title><filename>pom.xml</filename> content change policy</title> + + <mediaobject> + <imageobject> + <imagedata fileref="Ref/Fig/NewProjectMavenIntellij/s500_ImportMaven.png"/> + </imageobject> + </mediaobject> + + <itemizedlist> + <listitem> + <para>Your <xref linkend="glo_Maven"/> project depends on its + <filename>pom.xml</filename> file.</para> + </listitem> + + <listitem> + <para>Selecting <option>Enable Auto-import</option> allows for + automated re-reading of your <filename>pom.xml</filename>'s + changed content by <xref linkend="glo_Soft_IntellijIDEA"/>.</para> + </listitem> + </itemizedlist> + </figure> </section> <section xml:id="sd1_sect_ideaMavenImport"> diff --git a/Doc/Sda1/jpaintro.xml b/Doc/Sda1/jpaintro.xml index b669e69ec..ecceb34bd 100644 --- a/Doc/Sda1/jpaintro.xml +++ b/Doc/Sda1/jpaintro.xml @@ -1,18 +1,28 @@ <?xml version="1.0" encoding="UTF-8"?> -<chapter xmlns="http://docbook.org/ns/docbook" xmlns:db="http://docbook.org/ns/docbook" xmlns:html="http://www.w3.org/1999/xhtml" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:ns="http://docbook.org/ns/transclusion" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xila="http://www.w3.org/2001/XInclude/local-attributes" xmlns:xlink="http://www.w3.org/1999/xlink" annotations="slide" version="5.1" xml:id="chapJpaGettingStarted"> - <title>Getting started with <xref linkend="glo_JPA" /></title> +<chapter annotations="slide" version="5.1" xml:id="chapJpaGettingStarted" + xmlns="http://docbook.org/ns/docbook" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:xila="http://www.w3.org/2001/XInclude/local-attributes" + xmlns:xi="http://www.w3.org/2001/XInclude" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:ns="http://docbook.org/ns/transclusion" + xmlns:m="http://www.w3.org/1998/Math/MathML" + xmlns:html="http://www.w3.org/1999/xhtml" + xmlns:db="http://docbook.org/ns/docbook"> + <title>Getting started with <xref linkend="glo_JPA"/></title> <figure xml:id="sda1_jpa_whyJpa"> - <title>Why using <xref linkend="glo_JPA" /> ?</title> + <title>Why using <xref linkend="glo_JPA"/> ?</title> <itemizedlist> <listitem> - <para>Working with plain <xref linkend="glo_JDBC" /> is time + <para>Working with plain <xref linkend="glo_JDBC"/> is time consuming.</para> </listitem> <listitem> - <para>Addressing the <link xlink:href="https://en.wikipedia.org/wiki/Object-relational_impedance_mismatch">Object-relational + <para>Addressing the <link + xlink:href="https://en.wikipedia.org/wiki/Object-relational_impedance_mismatch">Object-relational impedance mismatch</link>.</para> </listitem> @@ -21,7 +31,7 @@ </listitem> <listitem> - <para>Repeating tasks for <xref linkend="glo_CRUD" /> + <para>Repeating tasks for <xref linkend="glo_CRUD"/> operations.</para> </listitem> @@ -50,12 +60,13 @@ </figure> <figure xml:id="sda1_jpa_OrImpedanceMismatch"> - <title>OR <link xlink:href="http://www.agiledata.org/essays/impedanceMismatch.html">impedance + <title>OR <link + xlink:href="http://www.agiledata.org/essays/impedanceMismatch.html">impedance mismatch</link></title> <informaltable border="0"> <tr> - <th><xref linkend="glo_OO" /></th> + <th><xref linkend="glo_OO"/></th> <th>Relational</th> </tr> @@ -100,7 +111,7 @@ </figure> <figure xml:id="sda1_jpa_versions_2.0"> - <title><xref linkend="glo_JPA" /> 2.0</title> + <title><xref linkend="glo_JPA"/> 2.0</title> <itemizedlist> <listitem> @@ -112,7 +123,7 @@ </listitem> <listitem> - <para><xref linkend="glo_SQL" /> hints.</para> + <para><xref linkend="glo_SQL"/> hints.</para> </listitem> <listitem> @@ -122,7 +133,7 @@ </figure> <figure xml:id="sda1_jpa_versions_2.1"> - <title><xref linkend="glo_JPA" /> 2.1</title> + <title><xref linkend="glo_JPA"/> 2.1</title> <itemizedlist> <listitem> @@ -148,7 +159,7 @@ </figure> <figure xml:id="sda1_jpa_versions_2.2"> - <title><xref linkend="glo_JPA" /> 2.2</title> + <title><xref linkend="glo_JPA"/> 2.2</title> <itemizedlist> <listitem> @@ -166,21 +177,22 @@ </figure> <figure xml:id="sda1_jpa_Overview"> - <title><xref linkend="glo_JPA" /> overview</title> + <title><xref linkend="glo_JPA"/> overview</title> <mediaobject> <imageobject> - <imagedata fileref="Ref/JpaIntro/jpaProvider.multi.svg" /> + <imagedata fileref="Ref/JpaIntro/jpaProvider.multi.svg"/> </imageobject> </mediaobject> </figure> <figure xml:id="sda1_jpaintro_fig_jpaComponents"> - <title><xref linkend="glo_JPA" /> components</title> + <title><xref linkend="glo_JPA"/> components</title> <glosslist> <glossentry> - <glossterm><classname xlink:href="https://javaee.github.io/javaee-spec/javadocs/javax/persistence/EntityManagerFactory.html">EntityManagerFactory</classname></glossterm> + <glossterm><classname + xlink:href="https://javaee.github.io/javaee-spec/javadocs/javax/persistence/EntityManagerFactory.html">EntityManagerFactory</classname></glossterm> <glossdef> <para>Bootstrapping a provider's implementation.</para> @@ -188,7 +200,8 @@ </glossentry> <glossentry> - <glossterm><classname xlink:href="https://javaee.github.io/javaee-spec/javadocs/javax/persistence/EntityManager.html">EntityManager</classname></glossterm> + <glossterm><classname + xlink:href="https://javaee.github.io/javaee-spec/javadocs/javax/persistence/EntityManager.html">EntityManager</classname></glossterm> <glossdef> <para>Managing a persistence context.</para> @@ -196,7 +209,8 @@ </glossentry> <glossentry> - <glossterm><classname xlink:href="https://javaee.github.io/javaee-spec/javadocs/javax/persistence/EntityTransaction.html">EntityTransaction</classname></glossterm> + <glossterm><classname + xlink:href="https://javaee.github.io/javaee-spec/javadocs/javax/persistence/EntityTransaction.html">EntityTransaction</classname></glossterm> <glossdef> <para>Start, commit and rollback transactions.</para> @@ -204,10 +218,11 @@ </glossentry> <glossentry> - <glossterm><classname xlink:href="https://javaee.github.io/javaee-spec/javadocs/javax/persistence/Query.html">Query</classname></glossterm> + <glossterm><classname + xlink:href="https://javaee.github.io/javaee-spec/javadocs/javax/persistence/Query.html">Query</classname></glossterm> <glossdef> - <para>Executing <xref linkend="glo_OO" /> capable queries.</para> + <para>Executing <xref linkend="glo_OO"/> capable queries.</para> </glossdef> </glossentry> </glosslist> @@ -217,20 +232,24 @@ <title>Notes on tooling</title> <figure xml:id="sda1_jpaintro_fig_jpaMavenConfig"> - <title><xref linkend="glo_Maven" /> <filename>pom.xml</filename></title> + <title><xref linkend="glo_Maven"/> <filename>pom.xml</filename></title> <itemizedlist> <listitem> - <para>Library <link xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/blob/master/Doc/Sda1/Ref/JpaIntro/P/StudyCourse_basic/pom.xml#L19">dependencies</link>.</para> + <para>Library <link + xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/blob/master/Doc/Sda1/Ref/JpaIntro/P/StudyCourse_basic/pom.xml#L19">dependencies</link>.</para> </listitem> <listitem> - <para>Metamodel generation by annotation processing supporting <link xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/blob/master/Doc/Sda1/Ref/JpaIntro/P/StudyCourse_basic/pom.xml#L109">Criteria</link> - and <link xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/blob/master/Doc/Sda1/Ref/JpaIntro/P/StudyCourse_basic/pom.xml#L92">Querydsl</link>.</para> + <para>Metamodel generation by annotation processing supporting <link + xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/blob/master/Doc/Sda1/Ref/JpaIntro/P/StudyCourse_basic/pom.xml#L109">Criteria</link> + and <link + xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/blob/master/Doc/Sda1/Ref/JpaIntro/P/StudyCourse_basic/pom.xml#L92">Querydsl</link>.</para> </listitem> <listitem> - <para>Build path adjustment <link xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/blob/master/Doc/Sda1/Ref/JpaIntro/P/StudyCourse_basic/pom.xml#L131">adding + <para>Build path adjustment <link + xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/blob/master/Doc/Sda1/Ref/JpaIntro/P/StudyCourse_basic/pom.xml#L131">adding generated metamodel class directory</link>.</para> </listitem> </itemizedlist> @@ -241,7 +260,7 @@ <mediaobject> <imageobject> - <imagedata fileref="Ref/JpaIntro/ideaAddFrameworkSupportJ2EEpersistence.png" /> + <imagedata fileref="Ref/JpaIntro/ideaAddFrameworkSupportJ2EEpersistence.png"/> </imageobject> </mediaobject> </figure> @@ -251,7 +270,7 @@ <mediaobject> <imageobject> - <imagedata fileref="Ref/JpaIntro/ideaAddFrameworkSupportHibernate.png" /> + <imagedata fileref="Ref/JpaIntro/ideaAddFrameworkSupportHibernate.png"/> </imageobject> </mediaobject> </figure> @@ -261,45 +280,55 @@ <mediaobject> <imageobject> - <imagedata fileref="Ref/JpaIntro/ideaConfigFacets.png" /> + <imagedata fileref="Ref/JpaIntro/ideaConfigFacets.png"/> </imageobject> </mediaobject> </figure> <figure xml:id="sda1_jpaintro_fig_ideaConfigAnnotationProcessing"> - <title>Criteria / <xref linkend="glo_Querydsl" /> annotation + <title>Criteria / <xref linkend="glo_Querydsl"/> annotation processing</title> <mediaobject> <imageobjectco> <areaspec otherunits="imagemap" units="other"> - <area coords="873,218,1051,264" linkends="sda1_jpaintro_fig_ideaConfigAnnotationProcessing-1.2" xml:id="targetMetamodelGeneratedClasses" /> + <area coords="873,218,1051,264" + linkends="sda1_jpaintro_fig_ideaConfigAnnotationProcessing-1.2" + xml:id="targetMetamodelGeneratedClasses"/> - <area coords="600,367,1049,398" linkends="sda1_jpaintro_fig_ideaConfigAnnotationProcessing-1" xml:id="configAnnotateProcessCriteria" /> + <area coords="600,367,1049,398" + linkends="sda1_jpaintro_fig_ideaConfigAnnotationProcessing-1" + xml:id="configAnnotateProcessCriteria"/> - <area coords="605,398,1004,427" linkends="sda1_jpaintro_fig_ideaConfigAnnotationProcessing-2" xml:id="configAnnotateProcessQuerydsl" /> + <area coords="605,398,1004,427" + linkends="sda1_jpaintro_fig_ideaConfigAnnotationProcessing-2" + xml:id="configAnnotateProcessQuerydsl"/> </areaspec> <imageobject> - <imagedata fileref="Ref/JpaIntro/ideaConfigAnnotationProcessing.png.marked.svg" /> + <imagedata fileref="Ref/JpaIntro/ideaConfigAnnotationProcessing.png.marked.svg"/> </imageobject> </imageobjectco> </mediaobject> </figure> <calloutlist> - <callout arearefs="targetMetamodelGeneratedClasses" xml:id="sda1_jpaintro_fig_ideaConfigAnnotationProcessing-1.2"> + <callout arearefs="targetMetamodelGeneratedClasses" + xml:id="sda1_jpaintro_fig_ideaConfigAnnotationProcessing-1.2"> <para>Generated metamodel classes will show up here. This directory - must be <link xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/blob/master/Doc/Sda1/Ref/JpaIntro/P/StudyCourse_basic/pom.xml#L131">configured + must be <link + xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/blob/master/Doc/Sda1/Ref/JpaIntro/P/StudyCourse_basic/pom.xml#L131">configured in pom.xml as well</link>.</para> </callout> - <callout arearefs="configAnnotateProcessCriteria" xml:id="sda1_jpaintro_fig_ideaConfigAnnotationProcessing-1"> + <callout arearefs="configAnnotateProcessCriteria" + xml:id="sda1_jpaintro_fig_ideaConfigAnnotationProcessing-1"> <para>Generate Criteria related metamodel classes.</para> </callout> - <callout arearefs="configAnnotateProcessQuerydsl" xml:id="sda1_jpaintro_fig_ideaConfigAnnotationProcessing-2"> - <para>Generate <xref linkend="glo_Querydsl" /> related metamodel + <callout arearefs="configAnnotateProcessQuerydsl" + xml:id="sda1_jpaintro_fig_ideaConfigAnnotationProcessing-2"> + <para>Generate <xref linkend="glo_Querydsl"/> related metamodel classes.</para> </callout> </calloutlist> @@ -309,7 +338,7 @@ <title>A round trip working with objects</title> <section xml:id="sda1_jpaintro_sect_createSchema"> - <title>Mapping <xref linkend="glo_OO" /> domain model to database + <title>Mapping <xref linkend="glo_OO"/> domain model to database model</title> <figure xml:id="sda1_jpaintro_figClassStudyCourse"> @@ -346,7 +375,8 @@ System.out.println(csm);</programlisting> <itemizedlist> <listitem> <para>Both <property>shortName</property> and - <property>fullName</property> must be unique and not <code language="java">null</code>.</para> + <property>fullName</property> must be unique and not <code + language="java">null</code>.</para> </listitem> <listitem> @@ -366,64 +396,87 @@ System.out.println(csm);</programlisting> <informaltable border="0"> <tr> - <td valign="top"><programlisting language="java">@Entity <co linkends="sda1_jpaintro_fig_studyCourseEntity-1" xml:id="sda1_jpaintro_fig_studyCourseEntity-1-co" /> + <td valign="top"><programlisting language="java">@Entity <co + linkends="sda1_jpaintro_fig_studyCourseEntity-1" + xml:id="sda1_jpaintro_fig_studyCourseEntity-1-co"/> public class StudyCourse { - @Id <co linkends="sda1_jpaintro_fig_studyCourseEntity-2" xml:id="sda1_jpaintro_fig_studyCourseEntity-2-co" /> - @Column <co linkends="sda1_jpaintro_fig_studyCourseEntity-3" xml:id="sda1_jpaintro_fig_studyCourseEntity-3-co" />(length = 3 <co linkends="sda1_jpaintro_fig_studyCourseEntity-4" xml:id="sda1_jpaintro_fig_studyCourseEntity-4-co" />) + @Id <co linkends="sda1_jpaintro_fig_studyCourseEntity-2" + xml:id="sda1_jpaintro_fig_studyCourseEntity-2-co"/> + @Column <co linkends="sda1_jpaintro_fig_studyCourseEntity-3" + xml:id="sda1_jpaintro_fig_studyCourseEntity-3-co"/>(length = 3 <co + linkends="sda1_jpaintro_fig_studyCourseEntity-4" + xml:id="sda1_jpaintro_fig_studyCourseEntity-4-co"/>) private String shortName; - @Column(length = 150 <coref linkend="sda1_jpaintro_fig_studyCourseEntity-4-co" />, - unique=true <co linkends="sda1_jpaintro_fig_studyCourseEntity-5" xml:id="sda1_jpaintro_fig_studyCourseEntity-5-co" />, - nullable=false <co linkends="sda1_jpaintro_fig_studyCourseEntity-6" xml:id="sda1_jpaintro_fig_studyCourseEntity-6-co" />) + @Column(length = 150 <coref + linkend="sda1_jpaintro_fig_studyCourseEntity-4-co"/>, + unique=true <co linkends="sda1_jpaintro_fig_studyCourseEntity-5" + xml:id="sda1_jpaintro_fig_studyCourseEntity-5-co"/>, + nullable=false <co linkends="sda1_jpaintro_fig_studyCourseEntity-6" + xml:id="sda1_jpaintro_fig_studyCourseEntity-6-co"/>) private String fullName; ... }</programlisting></td> - <td valign="top"><programlisting language="sql"><coref linkend="sda1_jpaintro_fig_studyCourseEntity-1-co" /> + <td valign="top"><programlisting language="sql"><coref + linkend="sda1_jpaintro_fig_studyCourseEntity-1-co"/> CREATE TABLE StudyCourse( - PRIMARY KEY <coref linkend="sda1_jpaintro_fig_studyCourseEntity-2-co" /> (shortName), - shortName varchar(3) <coref linkend="sda1_jpaintro_fig_studyCourseEntity-4-co" /> NOT NULL, + PRIMARY KEY <coref linkend="sda1_jpaintro_fig_studyCourseEntity-2-co"/> (shortName), + shortName varchar(3) <coref + linkend="sda1_jpaintro_fig_studyCourseEntity-4-co"/> NOT NULL, - UNIQUE KEY <coref linkend="sda1_jpaintro_fig_studyCourseEntity-5-co" />(fullName), - fullName varchar(150) NOT NULL <coref linkend="sda1_jpaintro_fig_studyCourseEntity-6-co" /> + UNIQUE KEY <coref linkend="sda1_jpaintro_fig_studyCourseEntity-5-co"/>(fullName), + fullName varchar(150) NOT NULL <coref + linkend="sda1_jpaintro_fig_studyCourseEntity-6-co"/> )</programlisting></td> </tr> </informaltable> </figure> <calloutlist> - <callout arearefs="sda1_jpaintro_fig_studyCourseEntity-1-co" xml:id="sda1_jpaintro_fig_studyCourseEntity-1"> - <para>The <classname xlink:href="https://javaee.github.io/javaee-spec/javadocs/javax/persistence/Entity.html">@Entity</classname> + <callout arearefs="sda1_jpaintro_fig_studyCourseEntity-1-co" + xml:id="sda1_jpaintro_fig_studyCourseEntity-1"> + <para>The <classname + xlink:href="https://javaee.github.io/javaee-spec/javadocs/javax/persistence/Entity.html">@Entity</classname> annotation marks class <classname>StudyCourse</classname> to become - a <xref linkend="glo_JPA" /> mapped entity.</para> + a <xref linkend="glo_JPA"/> mapped entity.</para> </callout> - <callout arearefs="sda1_jpaintro_fig_studyCourseEntity-2-co" xml:id="sda1_jpaintro_fig_studyCourseEntity-2"> - <para>Every <classname xlink:href="https://javaee.github.io/javaee-spec/javadocs/javax/persistence/Entity.html">@Entity</classname> - must have exactly one <classname xlink:href="https://javaee.github.io/javaee-spec/javadocs/javax/persistence/Id.html">@Id</classname> + <callout arearefs="sda1_jpaintro_fig_studyCourseEntity-2-co" + xml:id="sda1_jpaintro_fig_studyCourseEntity-2"> + <para>Every <classname + xlink:href="https://javaee.github.io/javaee-spec/javadocs/javax/persistence/Entity.html">@Entity</classname> + must have exactly one <classname + xlink:href="https://javaee.github.io/javaee-spec/javadocs/javax/persistence/Id.html">@Id</classname> property (or a combination of properties) designated to become the entities primary key.</para> </callout> - <callout arearefs="sda1_jpaintro_fig_studyCourseEntity-3-co" xml:id="sda1_jpaintro_fig_studyCourseEntity-3"> - <para><classname xlink:href="https://javaee.github.io/javaee-spec/javadocs/javax/persistence/Column.html">@Column</classname> - annotations are optional supplying additional <xref linkend="glo_JPA" /> mapping meta data</para> + <callout arearefs="sda1_jpaintro_fig_studyCourseEntity-3-co" + xml:id="sda1_jpaintro_fig_studyCourseEntity-3"> + <para><classname + xlink:href="https://javaee.github.io/javaee-spec/javadocs/javax/persistence/Column.html">@Column</classname> + annotations are optional supplying additional <xref + linkend="glo_JPA"/> mapping meta data</para> </callout> - <callout arearefs="sda1_jpaintro_fig_studyCourseEntity-4-co" xml:id="sda1_jpaintro_fig_studyCourseEntity-4"> + <callout arearefs="sda1_jpaintro_fig_studyCourseEntity-4-co" + xml:id="sda1_jpaintro_fig_studyCourseEntity-4"> <para>Limit the <property>shortName</property> and <property>fullName</property> attributes' database length.</para> </callout> - <callout arearefs="sda1_jpaintro_fig_studyCourseEntity-5-co" xml:id="sda1_jpaintro_fig_studyCourseEntity-5"> + <callout arearefs="sda1_jpaintro_fig_studyCourseEntity-5-co" + xml:id="sda1_jpaintro_fig_studyCourseEntity-5"> <para>Property <property>fullName</property> is about to become a unique key.</para> </callout> - <callout arearefs="sda1_jpaintro_fig_studyCourseEntity-6-co" xml:id="sda1_jpaintro_fig_studyCourseEntity-6"> + <callout arearefs="sda1_jpaintro_fig_studyCourseEntity-6-co" + xml:id="sda1_jpaintro_fig_studyCourseEntity-6"> <para>Since <property>fullName</property> is no primary but just a unique key we have to state the desired business rule constraint explicitly.</para> @@ -436,14 +489,16 @@ CREATE TABLE StudyCourse( <qandadiv> <qandaentry> <question> - <para>Repeat <xref linkend="sda1_jpaintro_fig_studyCourseEntity" /> but omit the + <para>Repeat <xref + linkend="sda1_jpaintro_fig_studyCourseEntity"/> but omit the <code language="java">length = 150</code> constraint.</para> <para>Analyze the generated schema. What do you observe? Give an explanation.</para> <tip> - <para>Read the <xref linkend="glo_Soft_Mysql" /> server <link xlink:href="https://dev.mysql.com/doc/refman/5.7/en/innodb-restrictions.html#innodb-maximums-minimums">Maximums + <para>Read the <xref linkend="glo_Soft_Mysql"/> server <link + xlink:href="https://dev.mysql.com/doc/refman/5.7/en/innodb-restrictions.html#innodb-maximums-minimums">Maximums and Minimums</link> documentation.</para> </tip> </question> @@ -453,9 +508,10 @@ CREATE TABLE StudyCourse( contrast to the <code language="java">unique=true</code> setting.</para> - <para><xref linkend="glo_Soft_Mysql" /> imposes upper limits on + <para><xref linkend="glo_Soft_Mysql"/> imposes upper limits on unique key lengths. Omitting <code language="java">length = - 150</code> implies type <code language="sql">VARCHAR(255)</code>. Depending on the database + 150</code> implies type <code + language="sql">VARCHAR(255)</code>. Depending on the database server's encoding the resulting length exceeds a key's maximum possible length.</para> @@ -471,7 +527,8 @@ CREATE TABLE StudyCourse( <title>Inserting objects</title> <figure xml:id="sda1_jpaintro_fig_persistence.xml"> - <title><filename xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/blob/master/Doc/Sda1/Ref/JpaIntro/P/StudyCourse_basic/src/main/resources/META-INF/persistence.xml">persistence.xml</filename> + <title><filename + xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/blob/master/Doc/Sda1/Ref/JpaIntro/P/StudyCourse_basic/src/main/resources/META-INF/persistence.xml">persistence.xml</filename> configuration</title> <programlisting language="none"><persistence...> @@ -492,30 +549,47 @@ CREATE TABLE StudyCourse( </figure> <figure xml:id="sda1_jpaintro_fig_inserByTransaction"> - <title><classname xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/blob/master/Doc/Sda1/Ref/JpaIntro/P/StudyCourse_basic/src/main/java/de/hdm_stuttgart/mi/sda1/CreateStudyCourse.java">CreateStudyCourse</classname> + <title><classname + xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/blob/master/Doc/Sda1/Ref/JpaIntro/P/StudyCourse_basic/src/main/java/de/hdm_stuttgart/mi/sda1/CreateStudyCourse.java">CreateStudyCourse</classname> using a transaction</title> <informaltable border="0"> - <colgroup width="56%" /> + <colgroup width="56%"/> - <colgroup width="44%" /> + <colgroup width="44%"/> <tr> - <td valign="top"><programlisting language="none">final EntityManagerFactory factory = <co linkends="sda1_jpaintro_fig_inserByTransaction-1" xml:id="sda1_jpaintro_fig_inserByTransaction-1-co" /> + <td valign="top"><programlisting language="none">final EntityManagerFactory factory = <co + linkends="sda1_jpaintro_fig_inserByTransaction-1" + xml:id="sda1_jpaintro_fig_inserByTransaction-1-co"/> Persistence.createEntityManagerFactory( - "<emphasis role="red">strategy_drop-and-create</emphasis>") <co linkends="sda1_jpaintro_fig_inserByTransaction-2.2" xml:id="sda1_jpaintro_fig_inserByTransaction-2.2-co" />; + "<emphasis role="red">strategy_drop-and-create</emphasis>") <co + linkends="sda1_jpaintro_fig_inserByTransaction-2.2" + xml:id="sda1_jpaintro_fig_inserByTransaction-2.2-co"/>; -final EntityManager entityManager = <co linkends="sda1_jpaintro_fig_inserByTransaction-2" xml:id="sda1_jpaintro_fig_inserByTransaction-2-co" /> +final EntityManager entityManager = <co + linkends="sda1_jpaintro_fig_inserByTransaction-2" + xml:id="sda1_jpaintro_fig_inserByTransaction-2-co"/> factory.createEntityManager(); -final EntityTransaction tx = <co linkends="sda1_jpaintro_fig_inserByTransaction-3" xml:id="sda1_jpaintro_fig_inserByTransaction-3-co" /> +final EntityTransaction tx = <co + linkends="sda1_jpaintro_fig_inserByTransaction-3" + xml:id="sda1_jpaintro_fig_inserByTransaction-3-co"/> entityManager.getTransaction(); -<emphasis role="red">tx.begin();</emphasis> <co linkends="sda1_jpaintro_fig_inserByTransaction-4" xml:id="sda1_jpaintro_fig_inserByTransaction-4-co" /> +<emphasis role="red">tx.begin();</emphasis> <co + linkends="sda1_jpaintro_fig_inserByTransaction-4" + xml:id="sda1_jpaintro_fig_inserByTransaction-4-co"/> final StudyCourse csm = new StudyCourse( - "CSM","Computer Science and Media"); <co linkends="sda1_jpaintro_fig_inserByTransaction-5" xml:id="sda1_jpaintro_fig_inserByTransaction-5-co" /> + "CSM","Computer Science and Media"); <co + linkends="sda1_jpaintro_fig_inserByTransaction-5" + xml:id="sda1_jpaintro_fig_inserByTransaction-5-co"/> - entityManager.persist(csm); <co linkends="sda1_jpaintro_fig_inserByTransaction-6" xml:id="sda1_jpaintro_fig_inserByTransaction-6-co" /> -<emphasis role="red">tx.commit(); </emphasis><co linkends="sda1_jpaintro_fig_inserByTransaction-7" xml:id="sda1_jpaintro_fig_inserByTransaction-7-co" /></programlisting></td> + entityManager.persist(csm); <co + linkends="sda1_jpaintro_fig_inserByTransaction-6" + xml:id="sda1_jpaintro_fig_inserByTransaction-6-co"/> +<emphasis role="red">tx.commit(); </emphasis><co + linkends="sda1_jpaintro_fig_inserByTransaction-7" + xml:id="sda1_jpaintro_fig_inserByTransaction-7-co"/></programlisting></td> <td valign="top"><programlisting language="sql">-- from logging @@ -527,7 +601,7 @@ final EntityTransaction tx = <co linkends="sda1_jpaintro_fig_inserByTransaction- -insert into <coref linkend="sda1_jpaintro_fig_inserByTransaction-7-co" /> +insert into <coref linkend="sda1_jpaintro_fig_inserByTransaction-7-co"/> StudyCourse( fullName, shortName) values(?, ?)</programlisting></td> @@ -536,54 +610,69 @@ insert into <coref linkend="sda1_jpaintro_fig_inserByTransaction-7-co" /> </figure> <calloutlist> - <callout arearefs="sda1_jpaintro_fig_inserByTransaction-1-co" xml:id="sda1_jpaintro_fig_inserByTransaction-1"> + <callout arearefs="sda1_jpaintro_fig_inserByTransaction-1-co" + xml:id="sda1_jpaintro_fig_inserByTransaction-1"> <para>Creating factory.</para> </callout> - <callout arearefs="sda1_jpaintro_fig_inserByTransaction-2.2-co" xml:id="sda1_jpaintro_fig_inserByTransaction-2.2"> + <callout arearefs="sda1_jpaintro_fig_inserByTransaction-2.2-co" + xml:id="sda1_jpaintro_fig_inserByTransaction-2.2"> <para><code>strategy_drop-and-create</code> refers to the first persistence unit definition in <filename>resources/persistence.xml</filename>:</para> - <programlisting language="xml"><persistence-unit name = "<emphasis role="red">strategy_drop-and-create</emphasis>"> + <programlisting language="xml"><persistence-unit name = "<emphasis + role="red">strategy_drop-and-create</emphasis>"> <properties> ... <!-- JDBC related stuff omitted--> <property name = "javax.persistence.schema-generation.database.action" value = "<emphasis role="red">drop-and-create</emphasis>"/> </properties></programlisting> - <para>This setting causes <xref linkend="glo_JPA" /> to drop and + <para>This setting causes <xref linkend="glo_JPA"/> to drop and subsequently re-create all database tables being related to an - <classname xlink:href="https://javaee.github.io/javaee-spec/javadocs/javax/persistence/Entity.html">@Entity</classname> + <classname + xlink:href="https://javaee.github.io/javaee-spec/javadocs/javax/persistence/Entity.html">@Entity</classname> annotated class.</para> </callout> - <callout arearefs="sda1_jpaintro_fig_inserByTransaction-2-co" xml:id="sda1_jpaintro_fig_inserByTransaction-2"> - <para>Creating an <classname xlink:href="https://javaee.github.io/javaee-spec/javadocs/index.html?javax/persistence/EntityManager.html">EntityManager</classname> + <callout arearefs="sda1_jpaintro_fig_inserByTransaction-2-co" + xml:id="sda1_jpaintro_fig_inserByTransaction-2"> + <para>Creating an <classname + xlink:href="https://javaee.github.io/javaee-spec/javadocs/index.html?javax/persistence/EntityManager.html">EntityManager</classname> instance.</para> </callout> - <callout arearefs="sda1_jpaintro_fig_inserByTransaction-3-co" xml:id="sda1_jpaintro_fig_inserByTransaction-3"> - <para>Creating an <classname xlink:href="https://javaee.github.io/javaee-spec/javadocs/javax/persistence/EntityTransaction.html">EntityTransaction</classname> + <callout arearefs="sda1_jpaintro_fig_inserByTransaction-3-co" + xml:id="sda1_jpaintro_fig_inserByTransaction-3"> + <para>Creating an <classname + xlink:href="https://javaee.github.io/javaee-spec/javadocs/javax/persistence/EntityTransaction.html">EntityTransaction</classname> instance.</para> </callout> - <callout arearefs="sda1_jpaintro_fig_inserByTransaction-4-co" xml:id="sda1_jpaintro_fig_inserByTransaction-4"> + <callout arearefs="sda1_jpaintro_fig_inserByTransaction-4-co" + xml:id="sda1_jpaintro_fig_inserByTransaction-4"> <para>Starting transaction.</para> </callout> - <callout arearefs="sda1_jpaintro_fig_inserByTransaction-5-co" xml:id="sda1_jpaintro_fig_inserByTransaction-5"> - <para>Creating transient <classname xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/blob/master/Doc/Sda1/Ref/JpaIntro/P/StudyCourse_basic/src/main/java/de/hdm_stuttgart/mi/sda1/model/StudyCourse.java">StudyCourse</classname> + <callout arearefs="sda1_jpaintro_fig_inserByTransaction-5-co" + xml:id="sda1_jpaintro_fig_inserByTransaction-5"> + <para>Creating transient <classname + xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/blob/master/Doc/Sda1/Ref/JpaIntro/P/StudyCourse_basic/src/main/java/de/hdm_stuttgart/mi/sda1/model/StudyCourse.java">StudyCourse</classname> instance.</para> </callout> - <callout arearefs="sda1_jpaintro_fig_inserByTransaction-6-co" xml:id="sda1_jpaintro_fig_inserByTransaction-6"> - <para>Binding transient <classname xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/blob/master/Doc/Sda1/Ref/JpaIntro/P/StudyCourse_basic/src/main/java/de/hdm_stuttgart/mi/sda1/model/StudyCourse.java">StudyCourse</classname> - instance to persistence context: The <classname xlink:href="https://javaee.github.io/javaee-spec/javadocs/index.html?javax/persistence/EntityManager.html">EntityManager</classname> + <callout arearefs="sda1_jpaintro_fig_inserByTransaction-6-co" + xml:id="sda1_jpaintro_fig_inserByTransaction-6"> + <para>Binding transient <classname + xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/blob/master/Doc/Sda1/Ref/JpaIntro/P/StudyCourse_basic/src/main/java/de/hdm_stuttgart/mi/sda1/model/StudyCourse.java">StudyCourse</classname> + instance to persistence context: The <classname + xlink:href="https://javaee.github.io/javaee-spec/javadocs/index.html?javax/persistence/EntityManager.html">EntityManager</classname> takes control of the instance's life cycle.</para> </callout> - <callout arearefs="sda1_jpaintro_fig_inserByTransaction-7-co" xml:id="sda1_jpaintro_fig_inserByTransaction-7"> + <callout arearefs="sda1_jpaintro_fig_inserByTransaction-7-co" + xml:id="sda1_jpaintro_fig_inserByTransaction-7"> <para>Committing transaction thereby persisting the <classname>StudyCourse</classname> instance.</para> </callout> @@ -606,55 +695,73 @@ insert into <coref linkend="sda1_jpaintro_fig_inserByTransaction-7-co" /> <title>Retrieving objects</title> <figure xml:id="sda1_jpaintro_fig_readStudyCourseById"> - <title><classname xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/blob/master/Doc/Sda1/Ref/JpaIntro/P/StudyCourse_basic/src/main/java/de/hdm_stuttgart/mi/sda1/ReadStudyCourseById.java">ReadStudyCourseById</classname> + <title><classname + xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/blob/master/Doc/Sda1/Ref/JpaIntro/P/StudyCourse_basic/src/main/java/de/hdm_stuttgart/mi/sda1/ReadStudyCourseById.java">ReadStudyCourseById</classname> retrieval by primary key</title> <programlisting language="none">final EntityManagerFactory factory = Persistence.createEntityManagerFactory( - "<emphasis role="red">strategy_none</emphasis>"<co linkends="sda1_jpaintro_fig_readStudyCourseById-1" xml:id="sda1_jpaintro_fig_readStudyCourseById-1-co" /> ); + "<emphasis role="red">strategy_none</emphasis>"<co + linkends="sda1_jpaintro_fig_readStudyCourseById-1" + xml:id="sda1_jpaintro_fig_readStudyCourseById-1-co"/> ); ... final StudyCourse studyCourse = - entityManager.<link xlink:href="???">find</link> <co linkends="sda1_jpaintro_fig_readStudyCourseById-2" xml:id="sda1_jpaintro_fig_readStudyCourseById-2-co" />(StudyCourse.class, "<emphasis role="red">CSM</emphasis>" <co linkends="sda1_jpaintro_fig_readStudyCourseById-3" xml:id="sda1_jpaintro_fig_readStudyCourseById-3-co" />); + entityManager.<link xlink:href="???">find</link> <co + linkends="sda1_jpaintro_fig_readStudyCourseById-2" + xml:id="sda1_jpaintro_fig_readStudyCourseById-2-co"/>(StudyCourse.class, "<emphasis + role="red">CSM</emphasis>" <co + linkends="sda1_jpaintro_fig_readStudyCourseById-3" + xml:id="sda1_jpaintro_fig_readStudyCourseById-3-co"/>); -System.out.println("Read '" + studyCourse + "'"); <co linkends="sda1_jpaintro_fig_readStudyCourseById-4" xml:id="sda1_jpaintro_fig_readStudyCourseById-4-co" /></programlisting> +System.out.println("Read '" + studyCourse + "'"); <co + linkends="sda1_jpaintro_fig_readStudyCourseById-4" + xml:id="sda1_jpaintro_fig_readStudyCourseById-4-co"/></programlisting> <screen>Read 'Computer Science and Media(CSM)'</screen> </figure> <calloutlist> - <callout arearefs="sda1_jpaintro_fig_readStudyCourseById-1-co" xml:id="sda1_jpaintro_fig_readStudyCourseById-1"> + <callout arearefs="sda1_jpaintro_fig_readStudyCourseById-1-co" + xml:id="sda1_jpaintro_fig_readStudyCourseById-1"> <para><code>strategy_none</code> refers to the second persistence unit definition in <filename>resources/persistence.xml</filename>:</para> - <programlisting language="xml"><persistence-unit name = "<emphasis role="red">strategy_none</emphasis>"> + <programlisting language="xml"><persistence-unit name = "<emphasis + role="red">strategy_none</emphasis>"> <properties> ... <!-- JDBC related stuff omitted--> <property name = "javax.persistence.schema-generation.database.action" value = "<emphasis role="red">none</emphasis>"/> </properties></programlisting> - <para><xref linkend="glo_JPA" /> will not touch the database + <para><xref linkend="glo_JPA"/> will not touch the database schema.</para> </callout> - <callout arearefs="sda1_jpaintro_fig_readStudyCourseById-2-co" xml:id="sda1_jpaintro_fig_readStudyCourseById-2"> - <para>The <methodname xlink:href="https://javaee.github.io/javaee-spec/javadocs/javax/persistence/EntityManager.html#find-java.lang.Class-java.lang.Object-">EntityManager.find(...)</methodname> + <callout arearefs="sda1_jpaintro_fig_readStudyCourseById-2-co" + xml:id="sda1_jpaintro_fig_readStudyCourseById-2"> + <para>The <methodname + xlink:href="https://javaee.github.io/javaee-spec/javadocs/javax/persistence/EntityManager.html#find-java.lang.Class-java.lang.Object-">EntityManager.find(...)</methodname> method tries to retrieve a database record corresponding to an <classname>@Entity</classname> annotated instance of the desired - <classname xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Class.html">Class</classname> + <classname + xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Class.html">Class</classname> value.</para> </callout> - <callout arearefs="sda1_jpaintro_fig_readStudyCourseById-3-co" xml:id="sda1_jpaintro_fig_readStudyCourseById-3"> + <callout arearefs="sda1_jpaintro_fig_readStudyCourseById-3-co" + xml:id="sda1_jpaintro_fig_readStudyCourseById-3"> <para>The desired study course's primary key value.</para> </callout> - <callout arearefs="sda1_jpaintro_fig_readStudyCourseById-4-co" xml:id="sda1_jpaintro_fig_readStudyCourseById-4"> + <callout arearefs="sda1_jpaintro_fig_readStudyCourseById-4-co" + xml:id="sda1_jpaintro_fig_readStudyCourseById-4"> <para>Print study course's value.</para> <note> - <para>Since the transaction has been committed changes to <code language="java">studyCourse</code> are transient and won't be + <para>Since the transaction has been committed changes to <code + language="java">studyCourse</code> are transient and won't be propagated to the database until being attached to another transaction.</para> </note> @@ -666,43 +773,64 @@ System.out.println("Read '" + studyCourse + "'"); <co linkends="sda1_jpaintro_fi <programlisting language="java">... final Query query = entityManager. - createQuery("SELECT S FROM StudyCourse S" <co linkends="sda1_jpaintro_fig_readStudyCourseAll-1.2" xml:id="sda1_jpaintro_fig_readStudyCourseAll-1.2-co" />); + createQuery("SELECT S FROM StudyCourse S" <co + linkends="sda1_jpaintro_fig_readStudyCourseAll-1.2" + xml:id="sda1_jpaintro_fig_readStudyCourseAll-1.2-co"/>); -final List<StudyCourse><co linkends="sda1_jpaintro_fig_readStudyCourseAll-1" xml:id="sda1_jpaintro_fig_readStudyCourseAll-1-co" /> studyCourses =<co linkends="sda1_jpaintro_fig_readStudyCourseAll-2" xml:id="sda1_jpaintro_fig_readStudyCourseAll-2-co" /> query.getResultList(); +final List<StudyCourse><co + linkends="sda1_jpaintro_fig_readStudyCourseAll-1" + xml:id="sda1_jpaintro_fig_readStudyCourseAll-1-co"/> studyCourses =<co + linkends="sda1_jpaintro_fig_readStudyCourseAll-2" + xml:id="sda1_jpaintro_fig_readStudyCourseAll-2-co"/> query.getResultList(); studyCourses.stream().map(s -> "Read '" + s + "'"). forEach(System.out::println);</programlisting> </figure> <calloutlist> - <callout arearefs="sda1_jpaintro_fig_readStudyCourseAll-1.2-co" xml:id="sda1_jpaintro_fig_readStudyCourseAll-1.2"> - <para>A <xref linkend="glo_JPQL" /> statement resembling <xref linkend="glo_SQL" /> but actually retrieving <xref linkend="glo_Java" /> objects rather than attribute value composed + <callout arearefs="sda1_jpaintro_fig_readStudyCourseAll-1.2-co" + xml:id="sda1_jpaintro_fig_readStudyCourseAll-1.2"> + <para>A <xref linkend="glo_JPQL"/> statement resembling <xref + linkend="glo_SQL"/> but actually retrieving <xref + linkend="glo_Java"/> objects rather than attribute value composed database records.</para> </callout> - <callout arearefs="sda1_jpaintro_fig_readStudyCourseAll-1-co" xml:id="sda1_jpaintro_fig_readStudyCourseAll-1"> - <para>Notice: <classname xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/List.html">List</classname> - in favour of <classname xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Set.html">Set</classname> + <callout arearefs="sda1_jpaintro_fig_readStudyCourseAll-1-co" + xml:id="sda1_jpaintro_fig_readStudyCourseAll-1"> + <para>Notice: <classname + xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/List.html">List</classname> + in favour of <classname + xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/Set.html">Set</classname> respecting database ordering.</para> </callout> - <callout arearefs="sda1_jpaintro_fig_readStudyCourseAll-2-co" xml:id="sda1_jpaintro_fig_readStudyCourseAll-2"> - <para>Unchecked assignment <classname xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/List.html">java.util.List</classname> - to <classname xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/List.html">java.util.List</classname><<classname xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/blob/master/Doc/Sda1/Ref/JpaIntro/P/StudyCourse_basic/src/main/java/de/hdm_stuttgart/mi/sda1/model/StudyCourse.java">StudyCourse</classname>>.</para> + <callout arearefs="sda1_jpaintro_fig_readStudyCourseAll-2-co" + xml:id="sda1_jpaintro_fig_readStudyCourseAll-2"> + <para>Unchecked assignment <classname + xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/List.html">java.util.List</classname> + to <classname + xlink:href="https://docs.oracle.com/javase/10/docs/api/java/util/List.html">java.util.List</classname><<classname + xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/blob/master/Doc/Sda1/Ref/JpaIntro/P/StudyCourse_basic/src/main/java/de/hdm_stuttgart/mi/sda1/model/StudyCourse.java">StudyCourse</classname>>.</para> </callout> </calloutlist> <figure xml:id="sda1_jpaintro_fig_readTypeViolate"> <title>Type conversion problems</title> - <programlisting language="java" linenumbering="numbered" startinglinenumber="23">final Query query = entityManager.createQuery( + <programlisting language="java" linenumbering="numbered" + startinglinenumber="23">final Query query = entityManager.createQuery( "SELECT S.shortName FROM StudyCourse AS S"); final List<StudyCourse> studyCourses = query.getResultList(); -try { <co linkends="sda1_jpaintro_fig_readTypeViolate-1" xml:id="sda1_jpaintro_fig_readTypeViolate-1-co" /> +try { <co linkends="sda1_jpaintro_fig_readTypeViolate-1" + xml:id="sda1_jpaintro_fig_readTypeViolate-1-co"/> studyCourses.stream().map(s -> "Read '" + s + "'"). - forEach(System.out::println); <co linkends="sda1_jpaintro_fig_readTypeViolate-2" xml:id="sda1_jpaintro_fig_readTypeViolate-2-co" /> -} finally <co linkends="sda1_jpaintro_fig_readTypeViolate-3" xml:id="sda1_jpaintro_fig_readTypeViolate-3-co" />{ + forEach(System.out::println); <co + linkends="sda1_jpaintro_fig_readTypeViolate-2" + xml:id="sda1_jpaintro_fig_readTypeViolate-2-co"/> +} finally <co linkends="sda1_jpaintro_fig_readTypeViolate-3" + xml:id="sda1_jpaintro_fig_readTypeViolate-3-co"/>{ factory.close(); }</programlisting> @@ -714,16 +842,20 @@ try { <co linkends="sda1_jpaintro_fig_readTypeViolate-1" xml:id="sda1_jpaintro_f </figure> <calloutlist> - <callout arearefs="sda1_jpaintro_fig_readTypeViolate-1-co" xml:id="sda1_jpaintro_fig_readTypeViolate-1"> + <callout arearefs="sda1_jpaintro_fig_readTypeViolate-1-co" + xml:id="sda1_jpaintro_fig_readTypeViolate-1"> <para><code language="java">try</code> block required for later cleanup.</para> </callout> - <callout arearefs="sda1_jpaintro_fig_readTypeViolate-2-co" xml:id="sda1_jpaintro_fig_readTypeViolate-2"> - <para>The culprit causing the <classname xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/ClassCastException.html">ClassCastException</classname>.</para> + <callout arearefs="sda1_jpaintro_fig_readTypeViolate-2-co" + xml:id="sda1_jpaintro_fig_readTypeViolate-2"> + <para>The culprit causing the <classname + xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/ClassCastException.html">ClassCastException</classname>.</para> </callout> - <callout arearefs="sda1_jpaintro_fig_readTypeViolate-3-co" xml:id="sda1_jpaintro_fig_readTypeViolate-3"> + <callout arearefs="sda1_jpaintro_fig_readTypeViolate-3-co" + xml:id="sda1_jpaintro_fig_readTypeViolate-3"> <para>Cleaning up persistence context in presence of an exception.</para> </callout> @@ -732,12 +864,17 @@ try { <co linkends="sda1_jpaintro_fig_readTypeViolate-1" xml:id="sda1_jpaintro_f <figure xml:id="sda1_jpaintro_fig_readShortNames"> <title>Reading <code language="java">shortName</code> values</title> - <programlisting language="none">final List<<emphasis role="red">String</emphasis> <co linkends="sda1_jpaintro_fig_readShortNames-1" xml:id="sda1_jpaintro_fig_readShortNames-1-co" />> studyCourseShortNames = entityManager. - createQuery("SELECT <emphasis role="red">S.shortName</emphasis> <co linkends="sda1_jpaintro_fig_readShortNames-2" xml:id="sda1_jpaintro_fig_readShortNames-2-co" /> FROM StudyCourse AS S"). + <programlisting language="none">final List<<emphasis role="red">String</emphasis> <co + linkends="sda1_jpaintro_fig_readShortNames-1" + xml:id="sda1_jpaintro_fig_readShortNames-1-co"/>> studyCourseShortNames = entityManager. + createQuery("SELECT <emphasis role="red">S.shortName</emphasis> <co + linkends="sda1_jpaintro_fig_readShortNames-2" + xml:id="sda1_jpaintro_fig_readShortNames-2-co"/> FROM StudyCourse AS S"). getResultList(); studyCourseShortNames.stream(). - map(s -> "Read '" + s <co linkends="sda1_jpaintro_fig_readShortNames-3" xml:id="sda1_jpaintro_fig_readShortNames-3-co" /> + "'"). + map(s -> "Read '" + s <co linkends="sda1_jpaintro_fig_readShortNames-3" + xml:id="sda1_jpaintro_fig_readShortNames-3-co"/> + "'"). forEach(System.out::println);</programlisting> <screen>Read 'CSM' @@ -745,22 +882,29 @@ studyCourseShortNames.stream(). </figure> <calloutlist> - <callout arearefs="sda1_jpaintro_fig_readShortNames-1-co" xml:id="sda1_jpaintro_fig_readShortNames-1"> + <callout arearefs="sda1_jpaintro_fig_readShortNames-1-co" + xml:id="sda1_jpaintro_fig_readShortNames-1"> <para>Corresponding to <emphasis role="red">s.shortName</emphasis> our result will be a list of strings rather than a list of - <classname xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/blob/master/Doc/Sda1/Ref/JpaIntro/P/StudyCourse_basic/src/main/java/de/hdm_stuttgart/mi/sda1/model/StudyCourse.java">StudyCourse</classname> + <classname + xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/blob/master/Doc/Sda1/Ref/JpaIntro/P/StudyCourse_basic/src/main/java/de/hdm_stuttgart/mi/sda1/model/StudyCourse.java">StudyCourse</classname> instances.</para> </callout> - <callout arearefs="sda1_jpaintro_fig_readShortNames-2-co" xml:id="sda1_jpaintro_fig_readShortNames-2"> + <callout arearefs="sda1_jpaintro_fig_readShortNames-2-co" + xml:id="sda1_jpaintro_fig_readShortNames-2"> <para>The attribute <code language="java">shortName</code> from - class <classname xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/blob/master/Doc/Sda1/Ref/JpaIntro/P/StudyCourse_basic/src/main/java/de/hdm_stuttgart/mi/sda1/model/StudyCourse.java">StudyCourse</classname>.</para> + class <classname + xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/blob/master/Doc/Sda1/Ref/JpaIntro/P/StudyCourse_basic/src/main/java/de/hdm_stuttgart/mi/sda1/model/StudyCourse.java">StudyCourse</classname>.</para> </callout> - <callout arearefs="sda1_jpaintro_fig_readShortNames-3-co" xml:id="sda1_jpaintro_fig_readShortNames-3"> + <callout arearefs="sda1_jpaintro_fig_readShortNames-3-co" + xml:id="sda1_jpaintro_fig_readShortNames-3"> <para><code language="java">s</code> already represents an instance - of <classname xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html">String</classname> - thus no <methodname xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html#toString()">toString()</methodname> + of <classname + xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html">String</classname> + thus no <methodname + xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html#toString()">toString()</methodname> conversion is being required.</para> </callout> </calloutlist> @@ -791,16 +935,20 @@ public class StudyCourse { <informaltable border="0"> <tr> - <td valign="top"><programlisting language="java">final StudyCourse csm <co linkends="sda1_jpaintro_fig_updateStudyCourse-1" xml:id="sda1_jpaintro_fig_updateStudyCourse-1-co" />= entityManager. + <td valign="top"><programlisting language="java">final StudyCourse csm <co + linkends="sda1_jpaintro_fig_updateStudyCourse-1" + xml:id="sda1_jpaintro_fig_updateStudyCourse-1-co"/>= entityManager. find(StudyCourse.class, "CSM"); final EntityTransaction tx = entityManager.getTransaction(); tx.begin(); - csm.setFullName( <co linkends="sda1_jpaintro_fig_updateStudyCourse-2" xml:id="sda1_jpaintro_fig_updateStudyCourse-2-co" /> + csm.setFullName( <co linkends="sda1_jpaintro_fig_updateStudyCourse-2" + xml:id="sda1_jpaintro_fig_updateStudyCourse-2-co"/> "Computerwissenschaft und Medien"); -tx.commit(); <co linkends="sda1_jpaintro_fig_updateStudyCourse-3" xml:id="sda1_jpaintro_fig_updateStudyCourse-3-co" /></programlisting></td> +tx.commit(); <co linkends="sda1_jpaintro_fig_updateStudyCourse-3" + xml:id="sda1_jpaintro_fig_updateStudyCourse-3-co"/></programlisting></td> <td valign="top"><screen>MariaDB [hdm]> select * from StudyCourse; @@ -815,17 +963,21 @@ tx.commit(); <co linkends="sda1_jpaintro_fig_updateStudyCourse-3" xml:id="sda1_j </figure> <calloutlist> - <callout arearefs="sda1_jpaintro_fig_updateStudyCourse-1-co" xml:id="sda1_jpaintro_fig_updateStudyCourse-1"> - <para>Retrieving instance from database. Variable <code language="java">csm</code> is bound to the persistence + <callout arearefs="sda1_jpaintro_fig_updateStudyCourse-1-co" + xml:id="sda1_jpaintro_fig_updateStudyCourse-1"> + <para>Retrieving instance from database. Variable <code + language="java">csm</code> is bound to the persistence context.</para> </callout> - <callout arearefs="sda1_jpaintro_fig_updateStudyCourse-2-co" xml:id="sda1_jpaintro_fig_updateStudyCourse-2"> + <callout arearefs="sda1_jpaintro_fig_updateStudyCourse-2-co" + xml:id="sda1_jpaintro_fig_updateStudyCourse-2"> <para>Changing instance's <code language="java">fullName</code> property's value.</para> </callout> - <callout arearefs="sda1_jpaintro_fig_updateStudyCourse-3-co" xml:id="sda1_jpaintro_fig_updateStudyCourse-3"> + <callout arearefs="sda1_jpaintro_fig_updateStudyCourse-3-co" + xml:id="sda1_jpaintro_fig_updateStudyCourse-3"> <para>Committing transaction will automatically commit all persistence context related changes.</para> </callout> @@ -833,7 +985,7 @@ tx.commit(); <co linkends="sda1_jpaintro_fig_updateStudyCourse-3" xml:id="sda1_j </section> <section xml:id="sda1_jpaintro_sectQueryDsl"> - <title><xref linkend="glo_Querydsl" /></title> + <title><xref linkend="glo_Querydsl"/></title> <figure xml:id="sda1_jpaintro_fig_multipleInsertStudyCourse"> <title>Populating the database</title> @@ -847,7 +999,7 @@ tx.commit();</programlisting> </figure> <figure xml:id="sda1_jpaintro_fig_DomainModelDatabaseInterface"> - <title><xref linkend="glo_JPQL" />: Domain model and database</title> + <title><xref linkend="glo_JPQL"/>: Domain model and database</title> <programlisting language="none">final <emphasis role="red">List<StudyCourse></emphasis> studyCourses = @@ -866,11 +1018,11 @@ entityManager.createQuery( </figure> <figure xml:id="sda1_jpaintro_fig_jpaQueryAlternatives"> - <title><xref linkend="glo_JPA" /> query alternatives</title> + <title><xref linkend="glo_JPA"/> query alternatives</title> <glosslist> <glossentry> - <glossterm><xref linkend="glo_JPQL" />:</glossterm> + <glossterm><xref linkend="glo_JPQL"/>:</glossterm> <glossdef> <programlisting language="none">entityManager.createQuery( @@ -879,18 +1031,22 @@ entityManager.createQuery( </glossentry> <glossentry> - <glossterm><link xlink:href="https://www.tutorialspoint.com/jpa/jpa_criteria_api.htm">Criteria + <glossterm><link + xlink:href="https://www.tutorialspoint.com/jpa/jpa_criteria_api.htm">Criteria queries</link>:</glossterm> <glossdef> - <programlisting language="none">criteria.select(<emphasis role="red">studyCourseRoot</emphasis>); -criteria.where( builder.<emphasis role="red">like</emphasis>( <emphasis role="red">studyCourseRootRoot</emphasis>. - get(<emphasis role="red">StudyCourse_.shortName</emphasis>), "<emphasis role="red">C%</emphasis>" ) );</programlisting> + <programlisting language="none">criteria.select(<emphasis + role="red">studyCourseRoot</emphasis>); +criteria.where( builder.<emphasis role="red">like</emphasis>( <emphasis + role="red">studyCourseRootRoot</emphasis>. + get(<emphasis role="red">StudyCourse_.shortName</emphasis>), "<emphasis + role="red">C%</emphasis>" ) );</programlisting> </glossdef> </glossentry> <glossentry> - <glossterm><xref linkend="glo_Querydsl" />:</glossterm> + <glossterm><xref linkend="glo_Querydsl"/>:</glossterm> <glossdef> <programlisting language="java">new JPAQuery(entityManager). @@ -904,10 +1060,10 @@ criteria.where( builder.<emphasis role="red">like</emphasis>( <emphasis role="re </section> <section xml:id="sda1_jpa_sect_JpqlQuery"> - <title><xref linkend="glo_JPQL" /></title> + <title><xref linkend="glo_JPQL"/></title> <figure xml:id="sda1_jpaintro_fig_jpqlSecurityProblem"> - <title><xref linkend="glo_JPQL" /></title> + <title><xref linkend="glo_JPQL"/></title> <programlisting language="none">final Query query = entityManager.createQuery( "SELECT S FROM StudyCourse AS S WHERE S.shortName like <emphasis role="red">'C%'</emphasis>");</programlisting> @@ -921,7 +1077,7 @@ where studycours0_.shortName like <emphasis role="red">'C%'</emphasis></screen> </figure> <figure xml:id="sda1_jpaintro_fig_jpqlSecurityPrepared"> - <title><xref linkend="glo_JPQL" /> parameter</title> + <title><xref linkend="glo_JPQL"/> parameter</title> <programlisting language="none">final Query query = entityManager.createQuery( "SELECT S FROM StudyCourse AS S WHERE S.shortName like :pattern"); @@ -934,22 +1090,35 @@ where studycours0_.shortName like <emphasis role="red">?</emphasis></programlis </figure> <figure xml:id="sda1_jpaintro_fig_jpqlRecordRetrieval"> - <title><xref linkend="glo_JPQL" /> record retrieval</title> + <title><xref linkend="glo_JPQL"/> record retrieval</title> <programlisting language="none">final Query queryRecords = entityManager.createQuery( - "SELECT S.<emphasis role="red">fullName</emphasis>, S.<emphasis role="red">shortName</emphasis> FROM StudyCourse AS S" <co linkends="sda1_jpaintro_fig_jpqlRecordRetrieval-1" xml:id="sda1_jpaintro_fig_jpqlRecordRetrieval-1-co" />); + "SELECT S.<emphasis role="red">fullName</emphasis>, S.<emphasis role="red">shortName</emphasis> FROM StudyCourse AS S" <co + linkends="sda1_jpaintro_fig_jpqlRecordRetrieval-1" + xml:id="sda1_jpaintro_fig_jpqlRecordRetrieval-1-co"/>); queryRecords.getResultList().stream(). map(r -> { - final Object[] record = (Object[]) r; <co linkends="sda1_jpaintro_fig_jpqlRecordRetrieval-2" xml:id="sda1_jpaintro_fig_jpqlRecordRetrieval-2-co" /> - return (String)<emphasis role="red">record[0]</emphasis> + " (" + (String)<emphasis role="red">record[1]</emphasis> + ")" <co linkends="sda1_jpaintro_fig_jpqlRecordRetrieval-3" xml:id="sda1_jpaintro_fig_jpqlRecordRetrieval-3-co" />; - }).forEach(System.out::println)<co linkends="sda1_jpaintro_fig_jpqlRecordRetrieval-4" xml:id="sda1_jpaintro_fig_jpqlRecordRetrieval-4-co" /> ;</programlisting> - - <screen><emphasis role="red">Computer Science and Media</emphasis> (<emphasis role="red">CSM</emphasis>) ...</screen> + final Object[] record = (Object[]) r; <co + linkends="sda1_jpaintro_fig_jpqlRecordRetrieval-2" + xml:id="sda1_jpaintro_fig_jpqlRecordRetrieval-2-co"/> + return (String)<emphasis role="red">record[0]</emphasis> + " (" + (String)<emphasis + role="red">record[1]</emphasis> + ")" <co + linkends="sda1_jpaintro_fig_jpqlRecordRetrieval-3" + xml:id="sda1_jpaintro_fig_jpqlRecordRetrieval-3-co"/>; + }).forEach(System.out::println)<co + linkends="sda1_jpaintro_fig_jpqlRecordRetrieval-4" + xml:id="sda1_jpaintro_fig_jpqlRecordRetrieval-4-co"/> ;</programlisting> + + <screen><emphasis role="red">Computer Science and Media</emphasis> (<emphasis + role="red">CSM</emphasis>) ...</screen> </figure> <calloutlist> - <callout arearefs="sda1_jpaintro_fig_jpqlRecordRetrieval-1-co" xml:id="sda1_jpaintro_fig_jpqlRecordRetrieval-1"> - <para>Retrieving two attribute values <emphasis role="red">fullName</emphasis> and <emphasis role="red">shortName</emphasis> from + <callout arearefs="sda1_jpaintro_fig_jpqlRecordRetrieval-1-co" + xml:id="sda1_jpaintro_fig_jpqlRecordRetrieval-1"> + <para>Retrieving two attribute values <emphasis + role="red">fullName</emphasis> and <emphasis + role="red">shortName</emphasis> from <classname>StudyCourse</classname> records.</para> <note> @@ -959,36 +1128,47 @@ queryRecords.getResultList().stream(). </note> </callout> - <callout arearefs="sda1_jpaintro_fig_jpqlRecordRetrieval-2-co" xml:id="sda1_jpaintro_fig_jpqlRecordRetrieval-2"> - <para>Compile time prior knowledge: <xref linkend="glo_JPA" /> wraps + <callout arearefs="sda1_jpaintro_fig_jpqlRecordRetrieval-2-co" + xml:id="sda1_jpaintro_fig_jpqlRecordRetrieval-2"> + <para>Compile time prior knowledge: <xref linkend="glo_JPA"/> wraps each database record into an <classname>Object[]</classname> array typically (albeit in the current example) containing heterogeneous instance references corresponding to database types being involved.</para> <para>The array's size equals the number of database attributes being - requested being 2 in the given example. <emphasis role="red">fullName</emphasis> and <emphasis role="red">shortName</emphasis> record values appear at array index + requested being 2 in the given example. <emphasis + role="red">fullName</emphasis> and <emphasis + role="red">shortName</emphasis> record values appear at array index positions 0 and 1 respectively.</para> <note> - <para>As with plain <xref linkend="glo_JDBC" /> you are on your own + <para>As with plain <xref linkend="glo_JDBC"/> you are on your own handling types being involved accordingly. Obviously there is no - compile time type checking whatsoever. <code language="java" xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.20.2">instanceof</code> + compile time type checking whatsoever. <code language="java" + xlink:href="https://docs.oracle.com/javase/specs/jls/se7/html/jls-15.html#jls-15.20.2">instanceof</code> may save you from troubles.</para> </note> </callout> - <callout arearefs="sda1_jpaintro_fig_jpqlRecordRetrieval-3-co" xml:id="sda1_jpaintro_fig_jpqlRecordRetrieval-3"> - <para>Digging into array values: Since both <emphasis role="red">fullName</emphasis> and <emphasis role="red">shortName</emphasis> are strings identical casts can be + <callout arearefs="sda1_jpaintro_fig_jpqlRecordRetrieval-3-co" + xml:id="sda1_jpaintro_fig_jpqlRecordRetrieval-3"> + <para>Digging into array values: Since both <emphasis + role="red">fullName</emphasis> and <emphasis + role="red">shortName</emphasis> are strings identical casts can be used.</para> <note> <para>The two casts are used for illustration purposes: In the - current example omitting these will have no effect at all: The <xref linkend="glo_Java" /> runtime will call the overridden <methodname xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html#toString()">toString()</methodname> + current example omitting these will have no effect at all: The <xref + linkend="glo_Java"/> runtime will call the overridden <methodname + xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html#toString()">toString()</methodname> method anyway.</para> - <para>Calling non-<classname xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Object.html">Object</classname> - methods like e.g. <methodname xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html#toUpperCase()">toUpperCase()</methodname> + <para>Calling non-<classname + xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/Object.html">Object</classname> + methods like e.g. <methodname + xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html#toUpperCase()">toUpperCase()</methodname> however requires a cast:</para> <programlisting language="none">final Query queryRecords = entityManager.createQuery( @@ -1003,14 +1183,16 @@ queryRecords.getResultList().stream(). </note> </callout> - <callout arearefs="sda1_jpaintro_fig_jpqlRecordRetrieval-4-co" xml:id="sda1_jpaintro_fig_jpqlRecordRetrieval-4"> + <callout arearefs="sda1_jpaintro_fig_jpqlRecordRetrieval-4-co" + xml:id="sda1_jpaintro_fig_jpqlRecordRetrieval-4"> <para>Print values.</para> </callout> </calloutlist> </section> <section xml:id="sda1_jpa_sect_criteriaQuery"> - <title><link xlink:href="https://www.tutorialspoint.com/jpa/jpa_criteria_api.htm">Criteria + <title><link + xlink:href="https://www.tutorialspoint.com/jpa/jpa_criteria_api.htm">Criteria queries</link></title> <figure xml:id="sda1_jpaintro_fig_criteriaMetaData"> @@ -1018,7 +1200,7 @@ queryRecords.getResultList().stream(). <mediaobject> <imageobject> - <imagedata fileref="Ref/JpaIntro/criteriumMetaAnnotate.multi.svg" /> + <imagedata fileref="Ref/JpaIntro/criteriumMetaAnnotate.multi.svg"/> </imageobject> </mediaobject> </figure> @@ -1039,7 +1221,7 @@ final List<StudyCourse> studyCourses = entityManager. studyCourses.stream().map(s -> "Read '" + s + "'"). forEach(System.out::println);</programlisting> - <para>What about <xref linkend="glo_SQL" /> injection?</para> + <para>What about <xref linkend="glo_SQL"/> injection?</para> </figure> <figure xml:id="sda1_jpaintro_fig_criteria_injectionSafe"> @@ -1053,33 +1235,37 @@ where studycours0_.shortName like <emphasis role="red">?</emphasis></programlist </section> <section xml:id="sda1_jpa_sect_querydsl"> - <title><xref linkend="glo_Querydsl" /></title> + <title><xref linkend="glo_Querydsl"/></title> <figure xml:id="sda1_jpaintro_fig_querydslMetaData"> - <title><xref linkend="glo_Querydsl" /> entity metamodel</title> + <title><xref linkend="glo_Querydsl"/> entity metamodel</title> <mediaobject> <imageobject> - <imagedata fileref="Ref/JpaIntro/queryDslMetaAnnotate.multi.svg" /> + <imagedata fileref="Ref/JpaIntro/queryDslMetaAnnotate.multi.svg"/> </imageobject> </mediaobject> </figure> <figure xml:id="sda1_jpaintro_fig_QuerydslAbout"> - <title>From <quote xlink:href="http://www.querydsl.com/static/querydsl/latest/reference/html/ch02.html#jpa_integration">Querying + <title>From <quote + xlink:href="http://www.querydsl.com/static/querydsl/latest/reference/html/ch02.html#jpa_integration">Querying JPA</quote></title> - <para><quote><xref linkend="glo_Querydsl" /> for <xref linkend="glo_JPA" /> is an alternative to both <xref linkend="glo_JPQL" /> - and <link xlink:href="https://www.tutorialspoint.com/jpa/jpa_criteria_api.htm">Criteria + <para><quote><xref linkend="glo_Querydsl"/> for <xref + linkend="glo_JPA"/> is an alternative to both <xref linkend="glo_JPQL"/> + and <link + xlink:href="https://www.tutorialspoint.com/jpa/jpa_criteria_api.htm">Criteria queries</link>.</quote></para> - <para><quote>It combines the dynamic nature of <link xlink:href="https://www.tutorialspoint.com/jpa/jpa_criteria_api.htm">Criteria - queries</link> with the expressiveness of <xref linkend="glo_JPQL" /> and + <para><quote>It combines the dynamic nature of <link + xlink:href="https://www.tutorialspoint.com/jpa/jpa_criteria_api.htm">Criteria + queries</link> with the expressiveness of <xref linkend="glo_JPQL"/> and all that in a fully typesafe manner.</quote></para> </figure> <figure xml:id="sda1_jpaintro_fig_querydslLike"> - <title><xref linkend="glo_Querydsl" /> query</title> + <title><xref linkend="glo_Querydsl"/> query</title> <informaltable border="0"> <tr> @@ -1164,7 +1350,7 @@ where studycours0_.shortName like <emphasis role="red">?</emphasis> escape '!'</ <glosslist> <glossentry> - <glossterm><xref linkend="glo_Soft_Mysql" />:</glossterm> + <glossterm><xref linkend="glo_Soft_Mysql"/>:</glossterm> <glossdef> <programlisting language="none">CREATE TABLE StudyCourse ( @@ -1187,7 +1373,8 @@ where studycours0_.shortName like <emphasis role="red">?</emphasis> escape '!'</ </figure> <figure xml:id="sda1_jpaintro_fig_RdbmsInsertIdentity"> - <title><code language="sql">INSERT</code> omitting <code language="sql">id</code></title> + <title><code language="sql">INSERT</code> omitting <code + language="sql">id</code></title> <programlisting language="none">INSERT INTO StudyCourse (fullName, shortName) @@ -1205,14 +1392,20 @@ VALUES('Mobile Media ', 'MMB');</programlisting> <informaltable border="0"> <tr> <td valign="top"><programlisting language="none">@Entity public class StudyCourse { - @Id <co linkends="sda1_jpaintro_fig_generatedIdentity-1" xml:id="sda1_jpaintro_fig_generatedIdentity-1-co" /> - @GeneratedValue <co linkends="sda1_jpaintro_fig_generatedIdentity-2" xml:id="sda1_jpaintro_fig_generatedIdentity-2-co" /> + @Id <co linkends="sda1_jpaintro_fig_generatedIdentity-1" + xml:id="sda1_jpaintro_fig_generatedIdentity-1-co"/> + @GeneratedValue <co linkends="sda1_jpaintro_fig_generatedIdentity-2" + xml:id="sda1_jpaintro_fig_generatedIdentity-2-co"/> (strategy=<emphasis role="red">GenerationType.IDENTITY</emphasis>) <emphasis role="red">Long id</emphasis>; - @Column(... unique = true <co linkends="sda1_jpaintro_fig_generatedIdentity-3" xml:id="sda1_jpaintro_fig_generatedIdentity-3-co" />) + @Column(... unique = true <co + linkends="sda1_jpaintro_fig_generatedIdentity-3" + xml:id="sda1_jpaintro_fig_generatedIdentity-3-co"/>) private String shortName; - @Column(...unique = true <co linkends="sda1_jpaintro_fig_generatedIdentity-4" xml:id="sda1_jpaintro_fig_generatedIdentity-4-co" />) + @Column(...unique = true <co + linkends="sda1_jpaintro_fig_generatedIdentity-4" + xml:id="sda1_jpaintro_fig_generatedIdentity-4-co"/>) private String fullName; ... @Override @@ -1223,37 +1416,44 @@ VALUES('Mobile Media ', 'MMB');</programlisting> <td valign="top"><screen>CREATE TABLE StudyCourse ( id bigint(20) NOT NULL - AUTO_INCREMENT <coref linkend="sda1_jpaintro_fig_generatedIdentity-2-co" />, + AUTO_INCREMENT <coref linkend="sda1_jpaintro_fig_generatedIdentity-2-co"/>, fullName varchar(150) NOT NULL, shortName varchar(3) NOT NULL, - PRIMARY KEY (id), <coref linkend="sda1_jpaintro_fig_generatedIdentity-1-co" /> - UNIQUE KEY ... (fullName), <coref linkend="sda1_jpaintro_fig_generatedIdentity-4-co" /> - UNIQUE KEY ... (shortName) <coref linkend="sda1_jpaintro_fig_generatedIdentity-3-co" /> + PRIMARY KEY (id), <coref linkend="sda1_jpaintro_fig_generatedIdentity-1-co"/> + UNIQUE KEY ... (fullName), <coref + linkend="sda1_jpaintro_fig_generatedIdentity-4-co"/> + UNIQUE KEY ... (shortName) <coref + linkend="sda1_jpaintro_fig_generatedIdentity-3-co"/> )</screen></td> </tr> </informaltable> </figure> <calloutlist> - <callout arearefs="sda1_jpaintro_fig_generatedIdentity-1-co" xml:id="sda1_jpaintro_fig_generatedIdentity-1"> + <callout arearefs="sda1_jpaintro_fig_generatedIdentity-1-co" + xml:id="sda1_jpaintro_fig_generatedIdentity-1"> <para>Defining the primary key.</para> </callout> - <callout arearefs="sda1_jpaintro_fig_generatedIdentity-2-co" xml:id="sda1_jpaintro_fig_generatedIdentity-2"> + <callout arearefs="sda1_jpaintro_fig_generatedIdentity-2-co" + xml:id="sda1_jpaintro_fig_generatedIdentity-2"> <para>Database auto generated value.</para> </callout> - <callout arearefs="sda1_jpaintro_fig_generatedIdentity-3-co" xml:id="sda1_jpaintro_fig_generatedIdentity-3"> + <callout arearefs="sda1_jpaintro_fig_generatedIdentity-3-co" + xml:id="sda1_jpaintro_fig_generatedIdentity-3"> <para>First business key.</para> </callout> - <callout arearefs="sda1_jpaintro_fig_generatedIdentity-4-co" xml:id="sda1_jpaintro_fig_generatedIdentity-4"> + <callout arearefs="sda1_jpaintro_fig_generatedIdentity-4-co" + xml:id="sda1_jpaintro_fig_generatedIdentity-4"> <para>Second business key.</para> </callout> </calloutlist> <figure xml:id="sda1_jpaintro_fig_createNewStudyCourse"> - <title><classname xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/blob/master/Doc/Sda1/Ref/JpaIntro/P/StudyCourse_surrogate/src/main/java/de/hdm_stuttgart/mi/sda1/model/StudyCourse.java">StudyCourse</classname> + <title><classname + xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/blob/master/Doc/Sda1/Ref/JpaIntro/P/StudyCourse_surrogate/src/main/java/de/hdm_stuttgart/mi/sda1/model/StudyCourse.java">StudyCourse</classname> creation</title> <informaltable border="0"> @@ -1279,7 +1479,8 @@ log.info(csm);</programlisting></td> </figure> <figure xml:id="sda1_jpaintro_fig_entityStudent"> - <title>Entity <classname xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/blob/master/Doc/Sda1/Ref/JpaIntro/P/StudyCourse_surrogate/src/main/java/de/hdm_stuttgart/mi/sda1/model/Student.java">Student</classname></title> + <title>Entity <classname + xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/blob/master/Doc/Sda1/Ref/JpaIntro/P/StudyCourse_surrogate/src/main/java/de/hdm_stuttgart/mi/sda1/model/Student.java">Student</classname></title> <informaltable border="0"> <tr> @@ -1359,7 +1560,8 @@ public class StudyCourse { </figure> <figure xml:id="sda1_jpaintro_fig_studentsToStudyCourse"> - <title><classname xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/blob/master/Doc/Sda1/Ref/JpaIntro/P/StudyCourse_surrogate/src/main/java/de/hdm_stuttgart/mi/sda1/CreateUniversity.java">CreateUniversity</classname></title> + <title><classname + xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/blob/master/Doc/Sda1/Ref/JpaIntro/P/StudyCourse_surrogate/src/main/java/de/hdm_stuttgart/mi/sda1/CreateUniversity.java">CreateUniversity</classname></title> <programlisting language="java"> final List<Student> students = new Vector<>(); students.add(new Student("Jill Evans")); @@ -1381,8 +1583,10 @@ public class StudyCourse { <question> <para>Read the <productname>mi-maven-archetype-jpa-hibernate</productname> - archetype's <link xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/blob/master/ws/Archetypes/mi-maven-archetype-jpa-hibernate/src/main/resources/archetype-resources/Readme.md#eclipse-ide-users">documentation</link> - to derive a <xref linkend="glo_Maven" /> project from it <link linkend="sd1SectUsingMavenEclipse">using the MI archetype + archetype's <link + xlink:href="https://gitlab.mi.hdm-stuttgart.de/goik/GoikLectures/blob/master/ws/Archetypes/mi-maven-archetype-jpa-hibernate/src/main/resources/archetype-resources/Readme.md#eclipse-ide-users">documentation</link> + to derive a <xref linkend="glo_Maven"/> project from it <link + linkend="sd1FirstJavaProject">using the MI archetype catalog</link>. For the sake of a simplified discussion regarding package names choose the following <property>groupId</property> and <property>artifactId</property> values:</para> @@ -1398,10 +1602,10 @@ public class StudyCourse { <orderedlist> <listitem> - <para>Get used to <xref linkend="glo_JPA" /> using the existing + <para>Get used to <xref linkend="glo_JPA"/> using the existing data model first. Execute <classname>jpaintro.university.CreateAirline</classname> and - watch the generated <xref linkend="glo_SQL" /> + watch the generated <xref linkend="glo_SQL"/> statements.</para> <tip> @@ -1422,7 +1626,9 @@ public class StudyCourse { <listitem> <para>Execute <classname>jpaintro.university.SearchByIcao</classname>. - Visualize the <xref linkend="glo_JPA" /> generated <xref linkend="glo_SQL" /> statements and explain the <xref linkend="glo_JDBC" /> layer messages including search parameter + Visualize the <xref linkend="glo_JPA"/> generated <xref + linkend="glo_SQL"/> statements and explain the <xref + linkend="glo_JDBC"/> layer messages including search parameter values.</para> <tip> @@ -1462,7 +1668,8 @@ public class StudyCourse { <tip> <itemizedlist> <listitem> - <para>Read the <link xlink:href="https://www.objectdb.com/java/jpa/query/api">TypedQuery + <para>Read the <link + xlink:href="https://www.objectdb.com/java/jpa/query/api">TypedQuery section</link> and add an appropriate <code>... where name like 'S%'</code> clause.</para> </listitem> @@ -1472,8 +1679,10 @@ public class StudyCourse { <listitem> <para>A <quote>best practices</quote> advice recommends - supplying a business key in addition to a <link xlink:href="https://en.wikipedia.org/wiki/Surrogate_key">surrogate - primary key</link>. Read <link xlink:href="https://javaee.github.io/javaee-spec/javadocs/javax/persistence/Column.html">Annotation + supplying a business key in addition to a <link + xlink:href="https://en.wikipedia.org/wiki/Surrogate_key">surrogate + primary key</link>. Read <link + xlink:href="https://javaee.github.io/javaee-spec/javadocs/javax/persistence/Column.html">Annotation Type Column</link> and define a unique, non-null integer property <property>courseNumber</property> in your <classname>Lecture</classname> class.</para> @@ -1499,43 +1708,59 @@ public class StudyCourse { <screen>... DEBUG [main] util.LogHelper (LogHelper.java:102) - PersistenceUnitInfo [ -name: strategy_drop-and-create <co linkends="sda1HibernateSchemaLog-1" xml:id="sda1HibernateSchemaLog-1-co" /> +name: strategy_drop-and-create <co linkends="sda1HibernateSchemaLog-1" + xml:id="sda1HibernateSchemaLog-1-co"/> ... -INFO [main] cfg.Environment (Environment.java:213) - HHH000206: hibernate.properties not found <co linkends="sda1HibernateSchemaLog-2" xml:id="sda1HibernateSchemaLog-2-co" /> +INFO [main] cfg.Environment (Environment.java:213) - HHH000206: hibernate.properties not found <co + linkends="sda1HibernateSchemaLog-2" + xml:id="sda1HibernateSchemaLog-2-co"/> ... -INFO [main] ... Connection properties: {user=hdmuser, password=XYZ} <co linkends="sda1HibernateSchemaLog-3" xml:id="sda1HibernateSchemaLog-3-co" /> -INFO [main] ... Autocommit mode: false <co linkends="sda1HibernateSchemaLog-4" xml:id="sda1HibernateSchemaLog-4-co" /> +INFO [main] ... Connection properties: {user=hdmuser, password=XYZ} <co + linkends="sda1HibernateSchemaLog-3" + xml:id="sda1HibernateSchemaLog-3-co"/> +INFO [main] ... Autocommit mode: false <co + linkends="sda1HibernateSchemaLog-4" + xml:id="sda1HibernateSchemaLog-4-co"/> ... -INFO [main] dialect.Dialect ... Using dialect: org.hibernate.dialect.MySQL5InnoDBDialect <co linkends="sda1HibernateSchemaLog-5" xml:id="sda1HibernateSchemaLog-5-co" /> +INFO [main] dialect.Dialect ... Using dialect: org.hibernate.dialect.MySQL5InnoDBDialect <co + linkends="sda1HibernateSchemaLog-5" + xml:id="sda1HibernateSchemaLog-5-co"/> ... - drop table if exists Airline <co linkends="sda1HibernateSchemaLog-7" xml:id="sda1HibernateSchemaLog-7-co" /> + drop table if exists Airline <co linkends="sda1HibernateSchemaLog-7" + xml:id="sda1HibernateSchemaLog-7-co"/> ... - create table Airline ( <co linkends="sda1HibernateSchemaLog-8" xml:id="sda1HibernateSchemaLog-8-co" /> + create table Airline ( <co linkends="sda1HibernateSchemaLog-8" + xml:id="sda1HibernateSchemaLog-8-co"/> id bigint not null auto_increment, icaoCode varchar(255), name varchar(255), primary key (id) ) ENGINE=InnoDB ... -insert into Airline (icaoCode, name) values (?, ?) <co linkends="sda1HibernateSchemaLog-9" xml:id="sda1HibernateSchemaLog-9-co" /> +insert into Airline (icaoCode, name) values (?, ?) <co + linkends="sda1HibernateSchemaLog-9" + xml:id="sda1HibernateSchemaLog-9-co"/> ...</screen> <calloutlist> - <callout arearefs="sda1HibernateSchemaLog-1-co" xml:id="sda1HibernateSchemaLog-1"> + <callout arearefs="sda1HibernateSchemaLog-1-co" + xml:id="sda1HibernateSchemaLog-1"> <para>Using <code><persistence-unit name="jpa-recreate" ...></code> from file <filename>persistence.xml</filename>.</para> </callout> - <callout arearefs="sda1HibernateSchemaLog-2-co" xml:id="sda1HibernateSchemaLog-2"> + <callout arearefs="sda1HibernateSchemaLog-2-co" + xml:id="sda1HibernateSchemaLog-2"> <para>Hibernate may as well use a configuration file <filename>hibernate.properties</filename> in favour of - <xref linkend="glo_JPA" /> + <xref linkend="glo_JPA"/> <filename>persistence.xml</filename>.</para> </callout> - <callout arearefs="sda1HibernateSchemaLog-3-co" xml:id="sda1HibernateSchemaLog-3"> - <para>Opening a <xref linkend="glo_JDBC" /> connection as + <callout arearefs="sda1HibernateSchemaLog-3-co" + xml:id="sda1HibernateSchemaLog-3"> + <para>Opening a <xref linkend="glo_JDBC"/> connection as being defined in <filename>persistence.xml</filename>:</para> @@ -1548,17 +1773,20 @@ insert into Airline (icaoCode, name) values (?, ?) <co linkends="sda1HibernateSc passwords!</para> </callout> - <callout arearefs="sda1HibernateSchemaLog-4-co" xml:id="sda1HibernateSchemaLog-4"> + <callout arearefs="sda1HibernateSchemaLog-4-co" + xml:id="sda1HibernateSchemaLog-4"> <para>Allowing grouping of statements into transactions.</para> </callout> - <callout arearefs="sda1HibernateSchemaLog-5-co" xml:id="sda1HibernateSchemaLog-5"> + <callout arearefs="sda1HibernateSchemaLog-5-co" + xml:id="sda1HibernateSchemaLog-5"> <para>Choosing the desired <productname>Mysql</productname> backend.</para> </callout> - <callout arearefs="sda1HibernateSchemaLog-7-co" xml:id="sda1HibernateSchemaLog-7"> + <callout arearefs="sda1HibernateSchemaLog-7-co" + xml:id="sda1HibernateSchemaLog-7"> <para>Drop table <classname>Airline</classname> if exists. This is due to the <code><property name="hibernate.hbm2ddl.auto" value="create-drop" @@ -1566,13 +1794,17 @@ insert into Airline (icaoCode, name) values (?, ?) <co linkends="sda1HibernateSc <filename>persistence.xml</filename>.</para> </callout> - <callout arearefs="sda1HibernateSchemaLog-8-co" xml:id="sda1HibernateSchemaLog-8"> + <callout arearefs="sda1HibernateSchemaLog-8-co" + xml:id="sda1HibernateSchemaLog-8"> <para>Creating the database table.</para> </callout> - <callout arearefs="sda1HibernateSchemaLog-9-co" xml:id="sda1HibernateSchemaLog-9"> + <callout arearefs="sda1HibernateSchemaLog-9-co" + xml:id="sda1HibernateSchemaLog-9"> <para>Inserting data using PreparedStatements. Notice the - two question marks (?, ?) representing <xref linkend="glo_JDBC" /> <interfacename xlink:href="https://docs.oracle.com/javase/10/docs/api/java/sql/PreparedStatement.html">PreparedStatement</interfacename> + two question marks (?, ?) representing <xref + linkend="glo_JDBC"/> <interfacename + xlink:href="https://docs.oracle.com/javase/10/docs/api/java/sql/PreparedStatement.html">PreparedStatement</interfacename> place holders.</para> </callout> </calloutlist> @@ -1644,14 +1876,17 @@ TRACE [main] sql.BasicBinder (BasicBinder.java:65) - binding parameter [1] as [V </section> <section xml:id="sda1SectRdbms2catalogJpa"> - <title>Exporting <xref linkend="glo_XML" /> catalog data using <xref linkend="glo_JPA" />.</title> + <title>Exporting <xref linkend="glo_XML"/> catalog data using <xref + linkend="glo_JPA"/>.</title> <qandaset defaultlabel="qanda" xml:id="sda1QandaRdbms2catalogJpa"> <qandadiv> <qandaentry> <question> - <para>In <xref linkend="sda1SectRelationadatal2Xml" /> you exported - RDBMS data to <xref linkend="glo_XML" /> by means of <xref linkend="glo_JDBC" />. In this follow up exercise <xref linkend="glo_JPA" /> will be used facilitating the database reading + <para>In <xref linkend="sda1SectRelationadatal2Xml"/> you exported + RDBMS data to <xref linkend="glo_XML"/> by means of <xref + linkend="glo_JDBC"/>. In this follow up exercise <xref + linkend="glo_JPA"/> will be used facilitating the database reading part following:</para> <orderedlist> @@ -1665,7 +1900,8 @@ TRACE [main] sql.BasicBinder (BasicBinder.java:65) - binding parameter [1] as [V </listitem> <listitem> - <para>Add required properties among with <xref linkend="glo_JPA" /> annotations to + <para>Add required properties among with <xref + linkend="glo_JPA"/> annotations to <classname>de.hdm_stuttgart.mi.sda1.sql2catalog.model.Product</classname> and <classname>de.hdm_stuttgart.mi.sda1.sql2catalog.model.Description</classname>.</para> @@ -1674,29 +1910,33 @@ TRACE [main] sql.BasicBinder (BasicBinder.java:65) - binding parameter [1] as [V <para>Since <classname>Description</classname> instances are composites with respect to <classname>Product</classname> (Composition rather than aggregation or association) you - might want to use <interfacename xlink:href="https://en.wikibooks.org/wiki/Java_Persistence/ElementCollection">@ElementCollection</interfacename> - in favour of <interfacename xlink:href="https://en.wikibooks.org/wiki/Java_Persistence/ManyToOne">@ManyToOne</interfacename> - and <interfacename xlink:href="https://en.wikibooks.org/wiki/Java_Persistence/OneToMany">@OneToMany</interfacename>.</para> + might want to use <interfacename + xlink:href="https://en.wikibooks.org/wiki/Java_Persistence/ElementCollection">@ElementCollection</interfacename> + in favour of <interfacename + xlink:href="https://en.wikibooks.org/wiki/Java_Persistence/ManyToOne">@ManyToOne</interfacename> + and <interfacename + xlink:href="https://en.wikibooks.org/wiki/Java_Persistence/OneToMany">@OneToMany</interfacename>.</para> </tip> <tip> <para>Regarding ordering of descriptions you may want to - read <interfacename xlink:href="https://javaee.github.io/javaee-spec/javadocs/javax/persistence/OrderColumn.html">@OrderColumn</interfacename>'s + read <interfacename + xlink:href="https://javaee.github.io/javaee-spec/javadocs/javax/persistence/OrderColumn.html">@OrderColumn</interfacename>'s documentation.</para> </tip> </listitem> <listitem> - <para>The <xref linkend="glo_Junit" /> test class + <para>The <xref linkend="glo_Junit"/> test class <classname>rdbms2catalog.TestSchema</classname> does contain - <xref linkend="glo_JPA" /> data inserting code being commented + <xref linkend="glo_JPA"/> data inserting code being commented out. Having your data model completed you may un comment these. Test execution will then populate your database with sample data.</para> </listitem> <listitem> - <para>Implement the actual RDBMS to <xref linkend="glo_XML" /> + <para>Implement the actual RDBMS to <xref linkend="glo_XML"/> export application.</para> <tip> diff --git a/Doc/Sda1/sax.xml b/Doc/Sda1/sax.xml index 897701160..09ccbeb44 100644 --- a/Doc/Sda1/sax.xml +++ b/Doc/Sda1/sax.xml @@ -1,5 +1,11 @@ <?xml version="1.0" encoding="UTF-8"?> -<section xmlns="http://docbook.org/ns/docbook" xmlns:db="http://docbook.org/ns/docbook" xmlns:html="http://www.w3.org/1999/xhtml" xmlns:m="http://www.w3.org/1998/Math/MathML" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xi="http://www.w3.org/2001/XInclude" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:id="sax"> +<section version="5.0" xml:id="sax" xmlns="http://docbook.org/ns/docbook" + xmlns:xlink="http://www.w3.org/1999/xlink" + xmlns:xi="http://www.w3.org/2001/XInclude" + xmlns:svg="http://www.w3.org/2000/svg" + xmlns:m="http://www.w3.org/1998/Math/MathML" + xmlns:html="http://www.w3.org/1999/xhtml" + xmlns:db="http://docbook.org/ns/docbook"> <title>XML APIs, the Simple API for XML (SAX)</title> <section xml:id="sda1SaxRecommendedReading"> @@ -7,29 +13,36 @@ <itemizedlist> <listitem> - <para><link xlink:href="https://www.ibm.com/developerworks/xml/tutorials/x-usax/x-usax.html">Understanding + <para><link + xlink:href="https://www.ibm.com/developerworks/xml/tutorials/x-usax/x-usax.html">Understanding SAX</link></para> </listitem> <listitem> - <para>Sections <link xlink:href="http://tutorials.jenkov.com/java-xml/">1</link> till <link xlink:href="http://tutorials.jenkov.com/java-xml/sax-example.html">6</link> + <para>Sections <link + xlink:href="http://tutorials.jenkov.com/java-xml/">1</link> till <link + xlink:href="http://tutorials.jenkov.com/java-xml/sax-example.html">6</link> from the <link xlink:href="http://tutorials.jenkov.com/java-xml/">Java & XML Tutorial</link>.</para> </listitem> </itemizedlist> <para>Try to answer the following question: Why do developers sometimes - derive a handler from <classname xlink:href="https://docs.oracle.com/javase/10/docs/api/org/xml/sax/helpers/DefaultHandler.html">DefaultHandler</classname> - and why do they sometimes prefer implementing <link xlink:href="https://docs.oracle.com/javase/10/docs/api/org/xml/sax/ContentHandler.html">ContentHandler</link>?</para> + derive a handler from <classname + xlink:href="https://docs.oracle.com/javase/10/docs/api/org/xml/sax/helpers/DefaultHandler.html">DefaultHandler</classname> + and why do they sometimes prefer implementing <link + xlink:href="https://docs.oracle.com/javase/10/docs/api/org/xml/sax/ContentHandler.html">ContentHandler</link>?</para> </section> <section xml:id="saxPrinciple"> - <title>The principle of a <acronym xlink:href="http://www.saxproject.org">SAX</acronym> application</title> + <title>The principle of a <acronym + xlink:href="http://www.saxproject.org">SAX</acronym> application</title> <para>We are already familiar with transformations of XML document instances to other formats. Sometimes the capabilities being offered by a given transformation approach do not suffice for a given problem. - Obviously a general purpose programming language like <xref linkend="glo_Java" /> offers superior means to perform advanced + Obviously a general purpose programming language like <xref + linkend="glo_Java"/> offers superior means to perform advanced manipulations of XML document trees.</para> <para>Before diving into technical details we present an example exceeding @@ -43,7 +56,7 @@ <mediaobject> <imageobject> - <imagedata fileref="Ref/Fig/saxxmlrdbms.fig" scale="65" /> + <imagedata fileref="Ref/Fig/saxxmlrdbms.fig" scale="65"/> </imageobject> </mediaobject> </figure> @@ -51,7 +64,7 @@ <para>Our catalog might look like:</para> <figure xml:id="simpleCatalog"> - <title>A <xref linkend="glo_XML" /> based catalog.</title> + <title>A <xref linkend="glo_XML"/> based catalog.</title> <programlisting language="xml"><catalog> <item orderNo="<emphasis role="bold">3218</emphasis>">Swinging headset</item> @@ -122,18 +135,24 @@ INSERT INTO Product VALUES('<emphasis role="bold">9921</emphasis>', 121.50)</pro capabilities: XSLT does not enable us to RDBMS content. However some XSLT processors provide extensions for this task.</para> - <para>It is tempting to write a <xref linkend="glo_Java" /> application - which might use e.g. <trademark xlink:href="https://en.wikipedia.org/wiki/Java_Database_Connectivity">JDBC</trademark> + <para>It is tempting to write a <xref linkend="glo_Java"/> application + which might use e.g. <trademark + xlink:href="https://en.wikipedia.org/wiki/Java_Database_Connectivity">JDBC</trademark> for database access. But how do we actually read and parse a XML file? - Sticking to the <xref linkend="glo_Java" /> standard we might use a <link xlink:href="https://docs.oracle.com/javase/10/docs/api/java/io/InputStream.html">FileInputStream</link> + Sticking to the <xref linkend="glo_Java"/> standard we might use a <link + xlink:href="https://docs.oracle.com/javase/10/docs/api/java/io/InputStream.html">FileInputStream</link> instance to read from <code>catalog.xml</code> and write a XML parser by - ourself. Fortunately <orgname>SUN</orgname>'s <trademark xlink:href="http://www.oracle.com/technetwork/java/javase">JDK</trademark> - already includes an API denoted <acronym xlink:href="http://www.saxproject.org">SAX</acronym>, the + ourself. Fortunately <orgname>SUN</orgname>'s <trademark + xlink:href="http://www.oracle.com/technetwork/java/javase">JDK</trademark> + already includes an API denoted <acronym + xlink:href="http://www.saxproject.org">SAX</acronym>, the <emphasis>S</emphasis>imple <emphasis>A</emphasis>pi for - <emphasis>X</emphasis>ml. The<productname xlink:href="http://www.oracle.com/technetwork/java/javase/jdk-7-readme-429198.html">JDK</productname> + <emphasis>X</emphasis>ml. The<productname + xlink:href="http://www.oracle.com/technetwork/java/javase/jdk-7-readme-429198.html">JDK</productname> also includes a corresponding parser implementation. In addition there are third party <acronym xlink:href="http://www.saxproject.org">SAX</acronym> - parser implementations available like <productname xlink:href="https://xerces.apache.org">Xerces</productname> from the + parser implementations available like <productname + xlink:href="https://xerces.apache.org">Xerces</productname> from the <orgname xlink:href="https://www.apache.org">Apache Foundation</orgname>.</para> @@ -143,7 +162,7 @@ INSERT INTO Product VALUES('<emphasis role="bold">9921</emphasis>', 121.50)</pro <mediaobject> <imageobject> - <imagedata fileref="Ref/Fig/updateinfo.fig" /> + <imagedata fileref="Ref/Fig/updateinfo.fig"/> </imageobject> </mediaobject> @@ -179,7 +198,8 @@ INSERT INTO Product VALUES('<emphasis role="bold">9921</emphasis>', 121.50)</pro development. A key press <emphasis>event</emphasis> for example will be forwarded by an application's <emphasis>event handler</emphasis> to a callback function (sometimes called a <emphasis>handler</emphasis> method) - being implemented by an application developer. The <acronym xlink:href="http://www.saxproject.org">SAX</acronym> API works the same + being implemented by an application developer. The <acronym + xlink:href="http://www.saxproject.org">SAX</acronym> API works the same way: A parser reads a XML document generating events which <emphasis>may</emphasis> be handled by an application. During document parsing the XML tree structure gets <quote>flattened</quote> to a sequence @@ -191,7 +211,7 @@ INSERT INTO Product VALUES('<emphasis role="bold">9921</emphasis>', 121.50)</pro <mediaobject> <imageobject> - <imagedata fileref="Ref/Fig/saxmodel.pdf" /> + <imagedata fileref="Ref/Fig/saxmodel.pdf"/> </imageobject> </mediaobject> </figure> @@ -204,12 +224,14 @@ INSERT INTO Product VALUES('<emphasis role="bold">9921</emphasis>', 121.50)</pro <mediaobject> <imageobject> - <imagedata fileref="Ref/Fig/saxapparch.pdf" /> + <imagedata fileref="Ref/Fig/saxapparch.pdf"/> </imageobject> <caption> - <para>A <acronym xlink:href="http://www.saxproject.org">SAX</acronym> application - consists of a <acronym xlink:href="http://www.saxproject.org">SAX</acronym> parser and an + <para>A <acronym + xlink:href="http://www.saxproject.org">SAX</acronym> application + consists of a <acronym + xlink:href="http://www.saxproject.org">SAX</acronym> parser and an implementation of event handlers being specific to the application. The application is developed by implementing the two handlers.</para> @@ -218,7 +240,8 @@ INSERT INTO Product VALUES('<emphasis role="bold">9921</emphasis>', 121.50)</pro </figure> <para>An Error Handler is required since the XML stream may contain - errors. In order to implement a <acronym xlink:href="http://www.saxproject.org">SAX</acronym> application we have + errors. In order to implement a <acronym + xlink:href="http://www.saxproject.org">SAX</acronym> application we have to:</para> <orderedlist> @@ -264,11 +287,13 @@ INSERT INTO Product VALUES('<emphasis role="bold">9921</emphasis>', 121.50)</pro <section xml:id="saxIntroExample"> <title>First steps</title> - <para>Our first <acronym xlink:href="http://www.saxproject.org">SAX</acronym> toy application + <para>Our first <acronym + xlink:href="http://www.saxproject.org">SAX</acronym> toy application <classname>sax.stat.v1.ElementCount</classname> shall simply count the number of elements it finds in an arbitrary XML document. In addition the <acronym xlink:href="http://www.saxproject.org">SAX</acronym> events shall - be written to standard output generating output sketched in <xref linkend="saxFlattenEvent" />. The application's central implementation + be written to standard output generating output sketched in <xref + linkend="saxFlattenEvent"/>. The application's central implementation reads:</para> <figure xml:id="saxElementCount"> @@ -317,8 +342,10 @@ public class ElementCount { } ...</programlisting> <para>In order to keep an application independent from a specific parser - implementation the <acronym xlink:href="http://www.saxproject.org">SAX</acronym> uses the so called - <link xlink:href="http://www.dofactory.com/Patterns/PatternAbstract.aspx">Abstract + implementation the <acronym + xlink:href="http://www.saxproject.org">SAX</acronym> uses the so called + <link + xlink:href="http://www.dofactory.com/Patterns/PatternAbstract.aspx">Abstract Factory Pattern</link> instead of simply calling a constructor from a vendor specific parser class.</para> @@ -343,25 +370,31 @@ public class ElementCount { ... public class MyEventHandler extends <classname>org.xml.sax.helpers.DefaultHandler</classname> { - public void <emphasis role="bold"><emphasis role="bold">startDocument()</emphasis></emphasis><co xml:id="programlisting_eventhandler_startDocument" /> { + public void <emphasis role="bold"><emphasis role="bold">startDocument()</emphasis></emphasis><co + xml:id="programlisting_eventhandler_startDocument"/> { System.out.println("Opening Document"); } - public void <emphasis role="bold">endDocument()</emphasis><co xml:id="programlisting_eventhandler_endDocument" /> { + public void <emphasis role="bold">endDocument()</emphasis><co + xml:id="programlisting_eventhandler_endDocument"/> { System.out.println("Closing Document"); } public void <emphasis role="bold">startElement(String namespaceUri, String localName, String rawName, - Attributes attrs)</emphasis> <co xml:id="programlisting_eventhandler_startElement" />{ + Attributes attrs)</emphasis> <co + xml:id="programlisting_eventhandler_startElement"/>{ System.out.println("Opening \"" + rawName + "\""); elementCount++; } public void <emphasis role="bold">endElement(String namespaceUri, String localName, - String rawName)</emphasis><co xml:id="programlisting_eventhandler_endElement" />{ + String rawName)</emphasis><co + xml:id="programlisting_eventhandler_endElement"/>{ System.out.println("Closing \"" + rawName + "\""); } - public void <emphasis role="bold">characters(char[] ch, int start, int length)</emphasis><co xml:id="programlisting_eventhandler_characters" />{ + public void <emphasis role="bold">characters(char[] ch, int start, int length)</emphasis><co + xml:id="programlisting_eventhandler_characters"/>{ System.out.println("Content \"" + new String(ch, start, length) + '"'); } - public int getElementCount() <co xml:id="programlisting_eventhandler_getElementCount" />{ + public int getElementCount() <co + xml:id="programlisting_eventhandler_getElementCount"/>{ return elementCount; } private int elementCount = 0; @@ -388,7 +421,8 @@ public class MyEventHandler extends <classname>org.xml.sax.helpers.DefaultHandle <callout arearefs="programlisting_eventhandler_endElement"> <para>Called each time an element like <tag class="starttag">item - ...</tag> gets closed by its counterpart <tag class="endtag">item</tag>.</para> + ...</tag> gets closed by its counterpart <tag + class="endtag">item</tag>.</para> </callout> <callout arearefs="programlisting_eventhandler_characters"> @@ -400,7 +434,8 @@ public class MyEventHandler extends <classname>org.xml.sax.helpers.DefaultHandle <callout arearefs="programlisting_eventhandler_getElementCount"> <para><function>getElementCount()</function> is a getter method to read only access the private field <varname>elementCount</varname> - which gets incremented in <coref linkend="programlisting_eventhandler_startElement" /> each time an XML + which gets incremented in <coref + linkend="programlisting_eventhandler_startElement"/> each time an XML element opens.</para> </callout> </calloutlist> @@ -437,36 +472,43 @@ public class ElementCountDriver { <para>Processing the catalog example instance yields:</para> <screen>Opening Document -<emphasis role="bold">Opening "catalog"</emphasis> <co xml:id="programlisting_catalog_output" /> +<emphasis role="bold">Opening "catalog"</emphasis> <co + xml:id="programlisting_catalog_output"/> Content " " -<emphasis role="bold">Opening "item"</emphasis> <co xml:id="programlisting_catalog_item1" /> +<emphasis role="bold">Opening "item"</emphasis> <co + xml:id="programlisting_catalog_item1"/> Content "Swinging headset" Closing "item" Content " " -<emphasis role="bold">Opening "item"</emphasis> <co xml:id="programlisting_catalog_item2" /> +<emphasis role="bold">Opening "item"</emphasis> <co + xml:id="programlisting_catalog_item2"/> Content "200W Stereo Amplifier" Closing "item" Content " " Closing "catalog" Closing Document -<emphasis role="bold">Document contains 3 elements</emphasis> <co xml:id="programlisting_catalog_elementcount" /></screen> +<emphasis role="bold">Document contains 3 elements</emphasis> <co + xml:id="programlisting_catalog_elementcount"/></screen> <calloutlist> <callout arearefs="programlisting_catalog_output"> - <para>Start parsing element <tag class="starttag">catalog</tag>.</para> + <para>Start parsing element <tag + class="starttag">catalog</tag>.</para> </callout> <callout arch="" arearefs="programlisting_catalog_item1"> <para>Start parsing element <tag class="starttag">item - orderNo="3218"</tag>Swinging headset<tag class="endtag" role="">item</tag>.</para> + orderNo="3218"</tag>Swinging headset<tag class="endtag" + role="">item</tag>.</para> </callout> <callout arch="" arearefs="programlisting_catalog_item2"> <para>Start parsing element <tag class="starttag">item - orderNo="9921"</tag>200W Stereo Amplifier<tag class="endtag" role="">item</tag>.</para> + orderNo="9921"</tag>200W Stereo Amplifier<tag class="endtag" + role="">item</tag>.</para> </callout> <callout arearefs="programlisting_catalog_elementcount"> @@ -479,7 +521,8 @@ Closing Document content is due to whitespace being located between elements. For example a newline appears between the the <tag class="starttag">catalog</tag> and the first <tag class="starttag">item</tag> element. The parser - encapsulates this whitespace in a call to the <methodname xlink:href="https://docs.oracle.com/javase/10/docs/api/org/xml/sax/ContentHandler.html#characters(char%5B%5D,int,int)">characters()</methodname> + encapsulates this whitespace in a call to the <methodname + xlink:href="https://docs.oracle.com/javase/10/docs/api/org/xml/sax/ContentHandler.html#characters(char%5B%5D,int,int)">characters()</methodname> method. In an application this call will typically be ignored. XML document instances in a professional context will typically not contain any newline characters at all. Instead the whole document is represented @@ -488,16 +531,19 @@ Closing Document will not appear.</para> <para>The <code>characters(char[] ch, int start, int length)</code> - method's signature looks somewhat strange regarding <xref linkend="glo_Java" /> conventions. One might expect <code>characters(String - s)</code>. But this way the <acronym xlink:href="http://www.saxproject.org">SAX</acronym> API allows efficient + method's signature looks somewhat strange regarding <xref + linkend="glo_Java"/> conventions. One might expect <code>characters(String + s)</code>. But this way the <acronym + xlink:href="http://www.saxproject.org">SAX</acronym> API allows efficient parser implementations: A parser may initially allocate a reasonable large - <code>char</code> array of say 128 bytes sufficient to hold 64 (<link xlink:href="http://unicode.org">Unicode</link>) characters. If this buffer + <code>char</code> array of say 128 bytes sufficient to hold 64 (<link + xlink:href="http://unicode.org">Unicode</link>) characters. If this buffer gets exhausted the parser might allocate a second buffer of double size thus implementing an <quote>amortized doubling</quote> algorithm:</para> <mediaobject> <imageobject> - <imagedata fileref="Ref/Fig/saxcharacter.pdf" /> + <imagedata fileref="Ref/Fig/saxcharacter.pdf"/> </imageobject> </mediaobject> @@ -505,7 +551,8 @@ Closing Document The second content <code>200W Stereo Amplifier</code> and the third content <code>Earphone</code> both fit in the second buffer. Subsequent content may require further buffer allocations. Such a strategy minimizes - the number of time consuming <code>new </code> <classname xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html">String</classname> + the number of time consuming <code>new </code> <classname + xlink:href="https://docs.oracle.com/javase/10/docs/api/java/lang/String.html">String</classname> <code>(...)</code> constructor calls being necessary for the more convenient API variant <code>characters(String s)</code>.</para> </section> @@ -513,13 +560,15 @@ Closing Document <section xml:id="saxRegistry"> <title>Event- and error handler registration</title> - <para>Our first <acronym xlink:href="http://www.saxproject.org">SAX</acronym> application suffers + <para>Our first <acronym + xlink:href="http://www.saxproject.org">SAX</acronym> application suffers from the following deficiencies:</para> <itemizedlist> <listitem> <para>The error handling is very sparse. It completely relies on - exceptions being thrown by classes like <classname xlink:href="https://docs.oracle.com/javase/10/docs/api/org/xml/sax/SAXException.html">SAXException</classname> + exceptions being thrown by classes like <classname + xlink:href="https://docs.oracle.com/javase/10/docs/api/org/xml/sax/SAXException.html">SAXException</classname> which frequently do not supply meaningful error information.</para> </listitem> @@ -536,14 +585,18 @@ Closing Document </listitem> </itemizedlist> - <para>We now incrementally add these features to the <acronym xlink:href="http://www.saxproject.org">SAX</acronym> parsing process. + <para>We now incrementally add these features to the <acronym + xlink:href="http://www.saxproject.org">SAX</acronym> parsing process. <acronym xlink:href="http://www.saxproject.org">SAX</acronym> offers an - interface <link xlink:href="https://docs.oracle.com/javase/10/docs/api/org/xml/sax/XMLReader.html">XmlReader</link> + interface <link + xlink:href="https://docs.oracle.com/javase/10/docs/api/org/xml/sax/XMLReader.html">XmlReader</link> to conveniently <emphasis>register</emphasis> event- and error handler instances independently instead of passing both interfaces as a single - argument to the <link xlink:href="https://docs.oracle.com/javase/10/docs/api/javax/xml/parsers/SAXParser.html#parse(java.io.File,org.xml.sax.helpers.DefaultHandler)">parse()</link> + argument to the <link + xlink:href="https://docs.oracle.com/javase/10/docs/api/javax/xml/parsers/SAXParser.html#parse(java.io.File,org.xml.sax.helpers.DefaultHandler)">parse()</link> method. We first code an error handler class by implementing the interface - <classname>org.xml.sax.ErrorHandler</classname> being part of the <acronym xlink:href="http://www.saxproject.org">SAX</acronym> API:</para> + <classname>org.xml.sax.ErrorHandler</classname> being part of the <acronym + xlink:href="http://www.saxproject.org">SAX</acronym> API:</para> <programlisting language="java">package sax.stat.v2; ... @@ -606,24 +659,30 @@ public class ElementCount { final SAXParserFactory saxPf = SAXParserFactory.newInstance(); final SAXParser saxParser = saxPf.newSAXParser(); xmlReader = saxParser.getXMLReader(); - xmlReader.setContentHandler(eventHandler); <co xml:id="programlisting_assemble_parser_setcontenthandler" /> - xmlReader.setErrorHandler(errorHandler); <co xml:id="programlisting_assemble_parser_seterrorhandler" /> + xmlReader.setContentHandler(eventHandler); <co + xml:id="programlisting_assemble_parser_setcontenthandler"/> + xmlReader.setErrorHandler(errorHandler); <co + xml:id="programlisting_assemble_parser_seterrorhandler"/> } public void parse(final String uri) throws IOException, SAXException{ - xmlReader.parse(uri); <co xml:id="programlisting_assemble_parser_invokeparse" /> + xmlReader.parse(uri); <co + xml:id="programlisting_assemble_parser_invokeparse"/> } public int getElementCount() { - return eventHandler.getElementCount(); <co xml:id="programlisting_assemble_parser_getelementcount" /> + return eventHandler.getElementCount(); <co + xml:id="programlisting_assemble_parser_getelementcount"/> } private final XMLReader xmlReader; - private final MyEventHandler eventHandler = new MyEventHandler(); <co xml:id="programlisting_assemble_parser_createeventhandler" /> - private final MyErrorHandler errorHandler = new MyErrorHandler(); <co xml:id="programlisting_assemble_parser_createerrorhandler" /> + private final MyEventHandler eventHandler = new MyEventHandler(); <co + xml:id="programlisting_assemble_parser_createeventhandler"/> + private final MyErrorHandler errorHandler = new MyErrorHandler(); <co + xml:id="programlisting_assemble_parser_createerrorhandler"/> }</programlisting> <calloutlist> <callout arearefs="programlisting_assemble_parser_setcontenthandler programlisting_assemble_parser_seterrorhandler"> - <para>Referring to <xref linkend="figureSax" os="" /> these two calls + <para>Referring to <xref linkend="figureSax" os=""/> these two calls attach the event- and error handler objects to the parser thus implementing the two arrows from the parser to the application's implementation.</para> @@ -671,14 +730,17 @@ public class ElementCount { <question> <label>Reading an element's set of attributes.</label> - <para>The example document instance does include <tag class="attribute">orderNo</tag> attribute values for each <tag class="starttag">item</tag> element. The parser does not yet show + <para>The example document instance does include <tag + class="attribute">orderNo</tag> attribute values for each <tag + class="starttag">item</tag> element. The parser does not yet show these attribute keys and their corresponding values. Read the - documentation for <classname xlink:href="https://docs.oracle.com/javase/10/docs/api/org/xml/sax/Attributes.html">org.xml.sax.Attributes</classname> + documentation for <classname + xlink:href="https://docs.oracle.com/javase/10/docs/api/org/xml/sax/Attributes.html">org.xml.sax.Attributes</classname> and extend the given code to use it.</para> - <para>You should start from the <xref linkend="glo_MIB" /> Maven + <para>You should start from the <xref linkend="glo_MIB"/> Maven archetype <code>mi-maven-archetype-sax</code>. Configuration hints - are available at <xref linkend="sd1SectUsingMavenEclipse" />.</para> + are available at <xref linkend="sd1FirstJavaProject"/>.</para> </question> <answer> @@ -755,7 +817,8 @@ Content " ...</screen> </content> </memo></programlisting> - <para>The elements <tag class="starttag">to</tag> , <tag class="starttag">name</tag>, <tag class="starttag">surname</tag> + <para>The elements <tag class="starttag">to</tag> , <tag + class="starttag">name</tag>, <tag class="starttag">surname</tag> and <tag class="starttag">para</tag> both appear multiple times. Write a SAX application which processes arbitrary XML documents and creates an alphabetically sorted list of elements being @@ -901,8 +964,10 @@ Subject: Firewall problems</screen> <para>Hint: The callback implementation of <methodname>org.xml.sax.helpers.DefaultHandler.characters(char[],int,int)</methodname> may be used to filter the desired output. You have to limit its - output to <tag class="starttag">from</tag> and <tag class="starttag">subject</tag> descendant content. Taking the - <tag class="starttag">subject</tag>Firewall problems<tag class="endtag">subject</tag> element as an example the + output to <tag class="starttag">from</tag> and <tag + class="starttag">subject</tag> descendant content. Taking the + <tag class="starttag">subject</tag>Firewall problems<tag + class="endtag">subject</tag> element as an example the corresponding event sequence reads:</para> <informaltable border="1"> @@ -1022,7 +1087,7 @@ public class MemoViewHandler extends DefaultHandler { <qandadiv> <qandaentry> <question> - <para>Consider the following <xref linkend="glo_XHTML" /> + <para>Consider the following <xref linkend="glo_XHTML"/> document instance example:</para> <programlisting language="xml"><html xmlns='http://www.w3.org/1999/xhtml'> @@ -1037,7 +1102,8 @@ public class MemoViewHandler extends DefaultHandler { </body> </html></programlisting> - <para>This instance contains three <tag class="emptytag">img</tag> elements. Two of them have an old + <para>This instance contains three <tag + class="emptytag">img</tag> elements. Two of them have an old style <property>align</property> property. Modern HTML versions prohibit this usage in favour of CSS <code><img style="vertical-align: text-top;" /></code>.</para> @@ -1070,7 +1136,7 @@ Found image element 'c.gif' having attribute align='bottom' <qandadiv> <qandaentry> <question> - <para>Consider the following <xref linkend="glo_XHTML" /> + <para>Consider the following <xref linkend="glo_XHTML"/> document instance example:</para> <programlisting language="xml"><?xml version="1.0" encoding="UTF-8"?> @@ -1085,32 +1151,44 @@ Found image element 'c.gif' having attribute align='bottom' <!-- Block level image --> <div> - <img src="dsfcjws.jpeg"/> <co linkends="sda1XhtmlImgBlockInline-1" xml:id="sda1XhtmlImgBlockInline-1-co" /> + <img src="dsfcjws.jpeg"/> <co + linkends="sda1XhtmlImgBlockInline-1" + xml:id="sda1XhtmlImgBlockInline-1-co"/> </div> - <img src="someimage.png"/> <co linkends="sda1XhtmlImgBlockInline-2" xml:id="sda1XhtmlImgBlockInline-2-co" /> + <img src="someimage.png"/> <co + linkends="sda1XhtmlImgBlockInline-2" + xml:id="sda1XhtmlImgBlockInline-2-co"/> <!-- inline image within a paragraph --> - <p>This is an <em><img src="fds.gif"/><co linkends="sda1XhtmlImgBlockInline-3" xml:id="sda1XhtmlImgBlockInline-3-co" /></em> inline image:<img - src="otherdata.png"/><co linkends="sda1XhtmlImgBlockInline-4" xml:id="sda1XhtmlImgBlockInline-4-co" />.</p> + <p>This is an <em><img src="fds.gif"/><co + linkends="sda1XhtmlImgBlockInline-3" + xml:id="sda1XhtmlImgBlockInline-3-co"/></em> inline image:<img + src="otherdata.png"/><co + linkends="sda1XhtmlImgBlockInline-4" + xml:id="sda1XhtmlImgBlockInline-4-co"/>.</p> </body> </html></programlisting> <calloutlist> - <callout arearefs="sda1XhtmlImgBlockInline-1-co" xml:id="sda1XhtmlImgBlockInline-1"> + <callout arearefs="sda1XhtmlImgBlockInline-1-co" + xml:id="sda1XhtmlImgBlockInline-1"> <para>First block level image.</para> </callout> - <callout arearefs="sda1XhtmlImgBlockInline-2-co" xml:id="sda1XhtmlImgBlockInline-2"> + <callout arearefs="sda1XhtmlImgBlockInline-2-co" + xml:id="sda1XhtmlImgBlockInline-2"> <para>Second block level image.</para> </callout> - <callout arearefs="sda1XhtmlImgBlockInline-3-co" xml:id="sda1XhtmlImgBlockInline-3"> + <callout arearefs="sda1XhtmlImgBlockInline-3-co" + xml:id="sda1XhtmlImgBlockInline-3"> <para>First inline image.</para> </callout> - <callout arearefs="sda1XhtmlImgBlockInline-4-co" xml:id="sda1XhtmlImgBlockInline-4"> + <callout arearefs="sda1XhtmlImgBlockInline-4-co" + xml:id="sda1XhtmlImgBlockInline-4"> <para>Second inline image.</para> </callout> </calloutlist> @@ -1120,7 +1198,8 @@ Found image element 'c.gif' having attribute align='bottom' <orderedlist> <listitem> <para>All <tag class="emptytag">img</tag> elements having - either <tag class="emptytag">body</tag>, <tag class="emptytag">div</tag>, <tag class="emptytag">th</tag> + either <tag class="emptytag">body</tag>, <tag + class="emptytag">div</tag>, <tag class="emptytag">th</tag> or <tag class="emptytag">td</tag> parent elements are considered to be block level images.</para> </listitem> @@ -1131,7 +1210,7 @@ Found image element 'c.gif' having attribute align='bottom' </listitem> </orderedlist> - <para>Write a <xref linkend="glo_SAX" /> application which counts + <para>Write a <xref linkend="glo_SAX"/> application which counts both the number of block level and inline images separately. On invocation the above instance shall yield the following output:</para> @@ -1180,14 +1259,16 @@ Document contains 2 inline <img> elements.</screen> <programlisting language="xml"><catalog> <item orderNo="3218">Swinging headset</item> - <item orderNo="9921">200W Stereo Amplifier</item> <emphasis role="bold"><!-- second entry forbidden + <item orderNo="9921">200W Stereo Amplifier</item> <emphasis + role="bold"><!-- second entry forbidden by schema --></emphasis> </catalog></programlisting> <caption> - <para>In contrast to <xref linkend="saxMissItem" /> this document is + <para>In contrast to <xref linkend="saxMissItem"/> this document is well formed. But it is not <emphasis role="bold">valid</emphasis> with - respect to the schema since more than one <tag class="starttag">item</tag> elements are present.</para> + respect to the schema since more than one <tag + class="starttag">item</tag> elements are present.</para> </caption> </figure> @@ -1200,12 +1281,14 @@ Document contains 2 inline <img> elements.</screen> <para>The string <code>http://xml.org/sax/features/validation</code> serves as a key. Since this is an ordinary string value a parser may or - may not implement it. The <acronym xlink:href="http://www.saxproject.org">SAX</acronym> standard defines two + may not implement it. The <acronym + xlink:href="http://www.saxproject.org">SAX</acronym> standard defines two exception classes for dealing with feature related errors:</para> <variablelist> <varlistentry> - <term><link xlink:href="https://docs.oracle.com/javase/10/docs/api/org/xml/sax/SAXNotRecognizedException.html">SAXNotRecognizedException</link></term> + <term><link + xlink:href="https://docs.oracle.com/javase/10/docs/api/org/xml/sax/SAXNotRecognizedException.html">SAXNotRecognizedException</link></term> <listitem> <para>The feature is not known to the parser.</para> @@ -1213,7 +1296,8 @@ Document contains 2 inline <img> elements.</screen> </varlistentry> <varlistentry> - <term><link xlink:href="https://docs.oracle.com/javase/10/docs/api/org/xml/sax/SAXNotSupportedException.html">SAXNotSupportedException</link></term> + <term><link + xlink:href="https://docs.oracle.com/javase/10/docs/api/org/xml/sax/SAXNotSupportedException.html">SAXNotSupportedException</link></term> <listitem> <para>The feature is known to the parser but the parser does not @@ -1223,7 +1307,8 @@ Document contains 2 inline <img> elements.</screen> </varlistentry> </variablelist> - <para>The <productname xlink:href="https://projects.apache.org/project.html?xerces-xml_commons_resolver">xml-commons + <para>The <productname + xlink:href="https://projects.apache.org/project.html?xerces-xml_commons_resolver">xml-commons resolver project </productname>offers an implementation being able to process various catalog file formats. Maven based project allow the corresponding library import by adding the following dependency:</para> @@ -1234,7 +1319,8 @@ Document contains 2 inline <img> elements.</screen> <version>1.2</version> </dependency></programlisting> - <para>We need a properties file <link xlink:href="https://xerces.apache.org/xml-commons/components/resolver/tips.html">CatalogManager.properties</link> + <para>We need a properties file <link + xlink:href="https://xerces.apache.org/xml-commons/components/resolver/tips.html">CatalogManager.properties</link> defining XML catalogs to be used and additional parameters:</para> <literallayout># Catalogs are relative to this properties file @@ -1250,22 +1336,26 @@ prefer=public</literallayout> <para>This configuration uses some catalogs from the <trademark>Oxygen</trademark> <trademark>Eclipse</trademark> plugin. We may now add a resolver to our SAX application by referencing the above - configuration file <coref linkend="resolverPropertyFile" /> and registering - the resolver to our SAX parser instance <coref linkend="resolverRegister" />:</para> + configuration file <coref linkend="resolverPropertyFile"/> and registering + the resolver to our SAX parser instance <coref + linkend="resolverRegister"/>:</para> <programlisting language="java">xmlReader = saxParser.getXMLReader(); // Set up resolving PUBLIC identifier - final CatalogManager cm = new CatalogManager("<emphasis role="bold">CatalogManager.properties</emphasis>" <co xml:id="resolverPropertyFile" /> ); + final CatalogManager cm = new CatalogManager("<emphasis role="bold">CatalogManager.properties</emphasis>" <co + xml:id="resolverPropertyFile"/> ); final CatalogResolver resolver = new CatalogResolver(cm); - xmlReader.setEntityResolver(resolver) <co xml:id="resolverRegister" />;</programlisting> + xmlReader.setEntityResolver(resolver) <co xml:id="resolverRegister"/>;</programlisting> </section> <section xml:id="saxNamespace"> <title>Namespaces</title> - <para>In order to make a <acronym xlink:href="http://www.saxproject.org">SAX</acronym> parser application - namespace aware we have to activate two <acronym xlink:href="http://www.saxproject.org">SAX</acronym> parsing + <para>In order to make a <acronym + xlink:href="http://www.saxproject.org">SAX</acronym> parser application + namespace aware we have to activate two <acronym + xlink:href="http://www.saxproject.org">SAX</acronym> parsing features:</para> <programlisting language="java">xmlReader = saxParser.getXMLReader(); @@ -1273,7 +1363,8 @@ xmlReader.setFeature("http://xml.org/sax/features/namespaces", true); xmlReader.setFeature("http://xml.org/sax/features/namespace-prefixes", true);</programlisting> <para>This instructs the parser to pass the namespace's name for each - element. Namespace prefixes like <code>xsl</code> in <tag class="starttag">xsl:for-each</tag> are also passed and may be used by an + element. Namespace prefixes like <code>xsl</code> in <tag + class="starttag">xsl:for-each</tag> are also passed and may be used by an application:</para> <programlisting language="java">package sax; @@ -1333,13 +1424,15 @@ localName='HTML'</screen> <itemizedlist> <listitem> <para>Elements belonging to the namespace - <code>http://www.w3.org/1999/XSL/Transform</code> like <tag class="emptytag">xsl:value-of select="..."</tag> have to be + <code>http://www.w3.org/1999/XSL/Transform</code> like <tag + class="emptytag">xsl:value-of select="..."</tag> have to be interpreted as instructions by the processor.</para> </listitem> <listitem> <para>Elements <emphasis role="bold">not</emphasis> belonging to the - namespace <code>http://www.w3.org/1999/XSL/Transform</code> like <tag class="emptytag">html</tag> or <tag class="starttag">fo:block</tag> + namespace <code>http://www.w3.org/1999/XSL/Transform</code> like <tag + class="emptytag">html</tag> or <tag class="starttag">fo:block</tag> are copied <quote>as is</quote> to the output.</para> </listitem> </itemizedlist> @@ -1395,7 +1488,7 @@ localName='HTML'</screen> <para>Data being contained in catalog instances shall be transferred to a relational database system. Implement and test a - <xref linkend="glo_SAX" /> application by following the + <xref linkend="glo_SAX"/> application by following the subsequently described steps:</para> <glosslist> @@ -1434,17 +1527,21 @@ localName='HTML'</screen> <glossterm>SAX Application</glossterm> <glossdef> - <para>The order of appearance of the XML elements <tag class="starttag">product</tag>, <tag class="starttag">name</tag> and <tag class="starttag">age</tag> does not permit a linear + <para>The order of appearance of the XML elements <tag + class="starttag">product</tag>, <tag + class="starttag">name</tag> and <tag + class="starttag">age</tag> does not permit a linear generation of suitable SQL <code>INSERT</code> statements by - a <xref linkend="glo_SAX" /> content handler. Instead you + a <xref linkend="glo_SAX"/> content handler. Instead you will have to keep copies of local element values when implementing <methodname>org.xml.sax.ContentHandler.startElement(String,String,String,org.xml.sax.Attributes)</methodname> and related callback methods. The following sequence of insert statements corresponds to the XML data being - contained in <xref linkend="catalogProductDescriptionsExample" />. You may use + contained in <xref + linkend="catalogProductDescriptionsExample"/>. You may use these statements as a blueprint to be generated by your - <xref linkend="glo_SAX" /> application:</para> + <xref linkend="glo_SAX"/> application:</para> <programlisting language="sql"><emphasis role="bold">INSERT INTO Product VALUES ('mpt', 'Monkey picked tea', NULL);</emphasis> INSERT INTO Description VALUES('mpt', 0, @@ -1456,7 +1553,7 @@ INSERT INTO Description VALUES('instantTent', 0, 'Exclusive WeatherTec system.') INSERT INTO Description VALUES('instantTent', 1, '4-person, 1-room tent'); INSERT INTO Description VALUES('instantTent', 2, 'Pre-attached tent poles');</programlisting> - <para>Provide a suitable <xref linkend="glo_Junit" /> + <para>Provide a suitable <xref linkend="glo_Junit"/> test.</para> </glossdef> </glossentry> @@ -1481,48 +1578,61 @@ INSERT INTO Description VALUES('instantTent', 2, 'Pre-attached tent poles');</pr <orderedlist> <listitem> - <para>The <xref linkend="glo_SQL" /> database schema might + <para>The <xref linkend="glo_SQL"/> database schema might read:</para> <programlisting language="sql">CREATE TABLE Product ( - id CHAR(20) NOT NULL PRIMARY KEY <co linkends="catalog2sqlSchema-1" xml:id="catalog2sqlSchema-1-co" /> + id CHAR(20) NOT NULL PRIMARY KEY <co linkends="catalog2sqlSchema-1" + xml:id="catalog2sqlSchema-1-co"/> ,name VARCHAR(255) NOT NULL - ,age SMALLINT <co linkends="catalog2sqlSchema-2" xml:id="catalog2sqlSchema-2-co" /> + ,age SMALLINT <co linkends="catalog2sqlSchema-2" + xml:id="catalog2sqlSchema-2-co"/> ); CREATE TABLE Description ( - product CHAR(20) NOT NULL REFERENCES Product <co linkends="catalog2sqlSchema-3" xml:id="catalog2sqlSchema-3-co" /> - ,orderIndex int NOT NULL <co linkends="catalog2sqlSchema-4" xml:id="catalog2sqlSchema-4-co" /> -- preserving the order of descriptions + product CHAR(20) NOT NULL REFERENCES Product <co + linkends="catalog2sqlSchema-3" + xml:id="catalog2sqlSchema-3-co"/> + ,orderIndex int NOT NULL <co linkends="catalog2sqlSchema-4" + xml:id="catalog2sqlSchema-4-co"/> -- preserving the order of descriptions -- belonging to a given product ,text VARCHAR(255) NOT NULL - ,UNIQUE(product, orderIndex) <co linkends="catalog2sqlSchema-5" xml:id="catalog2sqlSchema-5-co" /> + ,UNIQUE(product, orderIndex) <co linkends="catalog2sqlSchema-5" + xml:id="catalog2sqlSchema-5-co"/> );</programlisting> <calloutlist> - <callout arearefs="catalog2sqlSchema-1-co" xml:id="catalog2sqlSchema-1"> + <callout arearefs="catalog2sqlSchema-1-co" + xml:id="catalog2sqlSchema-1"> <para>The primary key constraint implements the uniqueness of <tag class="starttag">product id='xyz'</tag> values</para> </callout> - <callout arearefs="catalog2sqlSchema-2-co" xml:id="catalog2sqlSchema-2"> - <para>Nullability of <code>age</code> implements <tag class="starttag">age</tag> elements being optional.</para> + <callout arearefs="catalog2sqlSchema-2-co" + xml:id="catalog2sqlSchema-2"> + <para>Nullability of <code>age</code> implements <tag + class="starttag">age</tag> elements being optional.</para> </callout> - <callout arearefs="catalog2sqlSchema-3-co" xml:id="catalog2sqlSchema-3"> + <callout arearefs="catalog2sqlSchema-3-co" + xml:id="catalog2sqlSchema-3"> <para><tag class="starttag">description</tag> elements being children of <tag class="starttag">product</tag> are being implemented by a foreign key to its identifying owner thus forming weak entities.</para> </callout> - <callout arearefs="catalog2sqlSchema-4-co" xml:id="catalog2sqlSchema-4"> + <callout arearefs="catalog2sqlSchema-4-co" + xml:id="catalog2sqlSchema-4"> <para>The attribute <code>orderIndex</code> allows descriptions to be sorted thus maintaining the original - order of appearance of <tag class="starttag">description</tag> elements.</para> + order of appearance of <tag + class="starttag">description</tag> elements.</para> </callout> - <callout arearefs="catalog2sqlSchema-5-co" xml:id="catalog2sqlSchema-5"> + <callout arearefs="catalog2sqlSchema-5-co" + xml:id="catalog2sqlSchema-5"> <para>The <code>orderIndex</code> attribute is unique within the set of descriptions belonging to the same product.</para> @@ -1547,7 +1657,7 @@ INSERT INTO Description VALUES('instantTent', 1, 'Pre-attached tent poles'); INSERT INTO Description VALUES('instantTent', 2, 'Exclusive WeatherTec system.'); -- end of current product entry --</programlisting> - <para>So a <xref linkend="glo_Junit" /> test may just execute + <para>So a <xref linkend="glo_Junit"/> test may just execute the XML to SQL converter and then compare the effective output to the above reference file.</para> </listitem> @@ -1563,14 +1673,16 @@ INSERT INTO Description VALUES('instantTent', 2, 'Exclusive WeatherTec system.') <qandadiv> <qandaentry> <question> - <para>We want to extend the SAX examples counting <link linkend="saxElementCount">elements</link> and of arbitrary + <para>We want to extend the SAX examples counting <link + linkend="saxElementCount">elements</link> and of arbitrary document instances. Consider the following XSL sample document - containing <xref linkend="glo_XHTML" />:</para> + containing <xref linkend="glo_XHTML"/>:</para> <programlisting language="xml"><?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" - xmlns:xs="http://www.w3.org/2001/XMLSchema" <co xml:id="xhtmlCombinedNs_Svg" /> - xmlns:h="http://www.w3.org/1999/xhtml" <co xml:id="xhtmlCombinedNs_Xhtml" /> + xmlns:xs="http://www.w3.org/2001/XMLSchema" <co + xml:id="xhtmlCombinedNs_Svg"/> + xmlns:h="http://www.w3.org/1999/xhtml" <co xml:id="xhtmlCombinedNs_Xhtml"/> exclude-result-prefixes="xs" version="2.0"> <xsl:template match="/"> @@ -1597,12 +1709,14 @@ INSERT INTO Description VALUES('instantTent', 2, 'Exclusive WeatherTec system.') </xsl:stylesheet></programlisting> - <para>This XSL stylesheet defines two different namespaces <coref linkend="xhtmlCombinedNs_Svg" /> and <coref linkend="xhtmlCombinedNs_Xhtml" />.</para> + <para>This XSL stylesheet defines two different namespaces <coref + linkend="xhtmlCombinedNs_Svg"/> and <coref + linkend="xhtmlCombinedNs_Xhtml"/>.</para> - <para>Implement a <xref linkend="glo_SAX" /> application being able + <para>Implement a <xref linkend="glo_SAX"/> application being able to group elements from arbitrary XML documents by namespaces along with their corresponding frequencies of occurrence. The intended - output for the previous <xref linkend="glo_XSL" /> example shall + output for the previous <xref linkend="glo_XSL"/> example shall look like:</para> <screen>Namespace '<emphasis role="bold">http://www.w3.org/1999/xhtml</emphasis>' contains: @@ -1643,7 +1757,7 @@ Namespace '<emphasis role="bold">http://www.w3.org/1999/XSL/Transform</emphasis> </annotation> <para>The above solution contains both a running application and a - (incomplete) <xref linkend="glo_Junit" /> test.</para> + (incomplete) <xref linkend="glo_Junit"/> test.</para> </answer> </qandaentry> </qandadiv> diff --git a/Doc/Sda2/jpa.xml b/Doc/Sda2/jpa.xml index 81a48ffa3..f3f48e8f6 100644 --- a/Doc/Sda2/jpa.xml +++ b/Doc/Sda2/jpa.xml @@ -260,9 +260,9 @@ <version>5.1.0.Final</version> </dependency></programlisting> - <para>The MI department provides a dedicated archetype + <para>The MI department provides a dedicated <quote>mi-maven-archetype-jpa-hibernate</quote>. See <xref - linkend="sd1SectUsingMavenEclipse"/> for archetype repository + linkend="sd1FirstJavaProject"/> for archetype repository configuration.</para> </section> @@ -1867,14 +1867,14 @@ public class User { @Column(nullable = false, length = 32)public final String getNumber() ... @Temporal(TemporalType.TIMESTAMP) @Column(nullable = false) public Date getCreated() ...</programlisting> - <programlisting language="java">package inherit.v1; + <programlisting language="java">package inherit.v1; ... @Entity @DiscriminatorValue(value = "Credit card" <co xml:id="billingMapSingleTableDiscriminatorCredit"/>) public class CreditCard extends BillingDetails { - ... //Nothing JPA related happens here</programlisting> - <programlisting language="java">package inherit.v1; + ... //Nothing JPA related happens here</programlisting> <programlisting + language="java">package inherit.v1; ... @Entity @DiscriminatorValue(value = "Bank account" <co -- GitLab