<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Mysql on Janik von Rotz</title>
    <link>https://janikvonrotz.ch/tags/mysql/</link>
    <description>Recent content in Mysql on Janik von Rotz</description>
    <generator>Hugo</generator>
    <language>en</language>
    <lastBuildDate>Thu, 08 Oct 2015 16:03:44 +0000</lastBuildDate>
    <atom:link href="https://janikvonrotz.ch/tags/mysql/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>Zabbix stack with Vagrant, CoreOS and Docker</title>
      <link>https://janikvonrotz.ch/2015/10/08/zabbix-stack-with-vagrant-coreos-and-docker/</link>
      <pubDate>Thu, 08 Oct 2015 16:03:44 +0000</pubDate>
      <guid>https://janikvonrotz.ch/2015/10/08/zabbix-stack-with-vagrant-coreos-and-docker/</guid>
      <description>&lt;p&gt;This short guide shows you how to set up a virtual Zabbix Network Monitoring Stack with MySQL and CoreOS deployed by Docker.&lt;/p&gt;&#xA;&lt;p&gt;On your host machine make sure that these tools are available.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://www.vagrantup.com/downloads&#34;&gt;Vagrant&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.virtualbox.org/wiki/Downloads&#34;&gt;VirtualBox&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://git-scm.com/downloads&#34;&gt;Git&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;First we are going to setup a virtual machine with Vagrant.&lt;/p&gt;&#xA;&lt;p&gt;Create a project directory and open navigate there with your command line.&#xA;Next clone the CoreOS Vagrant repository.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;git clone https://github.com/coreos/coreos-vagrant/&#xA;cd coreos-vagrant&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;This repository is preconfigured CoreOS installation.&lt;/p&gt;&#xA;&lt;p&gt;Open up the &lt;code&gt;Vagrant&lt;/code&gt; file and edit the lines as showed below.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;$vm_memory = 2024&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Now install and run the virtual machine with Vagrant.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;vagrant up&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;If this command finishes without an error, your virtual machine should be up and running in the VirtualBox environment.&lt;/p&gt;&#xA;&lt;p&gt;Now connect to the virtual machine with ssh.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;vagrant ssh&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Hint: For windows hosts, make sure that the ssh.exe binary that is shipped with Git is available in your system PATH variable.&lt;/p&gt;&#xA;&lt;p&gt;CoreOS has Docker pre-installed, so no worry about that. We will now deploy our MySQL and Zabbix stack with preconfigured Docker images.&lt;/p&gt;&#xA;&lt;p&gt;Install and run the MySQL with Docker.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;docker run --name mysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=password -d mysql:latest&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Install and the phpMyAdmin image.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;docker run -d --name phpmyadmin --link mysql:mysql -p 1234:80 nazarpc/phpmyadmin&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Get the configuration of your MySQL container.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;docker inspect mysql&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;And look for the IPv4 address. We will use in the next statement.&lt;/p&gt;&#xA;&lt;p&gt;Run the Zabbix image&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;docker run \&#xA;-d \&#xA;--name zabbix \&#xA;-p 80:80 \&#xA;-p 10051:10051 \&#xA;-link mysql:db \&#xA;--env=&amp;quot;DB_USER=root&amp;quot; \&#xA;--env=&amp;quot;DB_PASS=password&amp;quot; \&#xA;--env=&amp;quot;SLACK_WEBHOOK=webhook_url&amp;quot; \&#xA;million12/zabbix-server&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Now open the browser on your host machine to &lt;code&gt;http://host_ip&lt;/code&gt; and login with &lt;code&gt;Admin:zabbix&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;p&gt;You can get the host machines ip by tipping &lt;code&gt;ifconfig&lt;/code&gt; on command line.&lt;/p&gt;&#xA;&lt;p&gt;You phpMyAdmin installation is accessbile under &lt;code&gt;http://host_ip:1234&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;h1 id=&#34;troubleshooting&#34;&gt;Troubleshooting&lt;/h1&gt;&#xA;&lt;p&gt;In case some fails are doesn&amp;rsquo;t work as supposed, follow these steps:&lt;/p&gt;&#xA;&lt;p&gt;Reboot your virtual machine.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo reboot&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Login and start the docker containers.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;docker start container_name&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Check if the containers have been started successfully.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;docker ps&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h1 id=&#34;source&#34;&gt;Source&lt;/h1&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://hub.docker.com/r/million12/zabbix-server/&#34;&gt;https://hub.docker.com/r/million12/zabbix-server/&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Build a Java 3-tier application from scratch - Part 1: Introduction and project setup</title>
      <link>https://janikvonrotz.ch/2015/03/15/build-a-java-3-tier-application-from-scratch-part-1-introduction-and-project-setup/</link>
      <pubDate>Sun, 15 Mar 2015 16:57:38 +0000</pubDate>
      <guid>https://janikvonrotz.ch/2015/03/15/build-a-java-3-tier-application-from-scratch-part-1-introduction-and-project-setup/</guid>
      <description>&lt;p&gt;Welcome to my first post of the Java 3-tier application tutorial. In this tutorial I will tell show how you can develope a Model-View-Controller based Java desktop and server application using the latest tools and frameworks.&lt;/p&gt;&#xA;&lt;p&gt;This tutorial uses advanced techniques and programming paradigms, make sure to meet at least the following requirements:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;MySQL Database design and administration&lt;/li&gt;&#xA;&lt;li&gt;Eclipse development&lt;/li&gt;&#xA;&lt;li&gt;Java classes, interfaces and generics&lt;/li&gt;&#xA;&lt;li&gt;MVC programming concept&lt;/li&gt;&#xA;&lt;li&gt;ORM techniques&lt;/li&gt;&#xA;&lt;li&gt;JAX-RS with jackson aka RESTeasy with JSON&lt;/li&gt;&#xA;&lt;li&gt;Restful webservices&lt;/li&gt;&#xA;&lt;li&gt;CRUD Data access object&lt;/li&gt;&#xA;&lt;li&gt;Booo to XML, hail to JSON&lt;/li&gt;&#xA;&lt;li&gt;Gradle build and task scripts&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I also recommend to finish my other tutorial first (if not done yet): Superb Java development with Gradle, Hibernate, FlywayDB, JavaFX and Eclipse &lt;a href=&#34;https://janikvonrotz.ch/2015/03/03/superb-java-development-with-gradle-hibernate-flywaydb-javafx-and-eclipse-part-1/&#34;&gt;Part 1&lt;/a&gt; and &lt;a href=&#34;https://janikvonrotz.ch/2015/03/05/superb-java-development-with-gradle-hibernate-flywaydb-javafx-and-eclipse-part-2/&#34;&gt;Part 2&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;p&gt;To accomplish this tutorial you will need several development tools and frameworks.&lt;/p&gt;&#xA;&lt;p&gt;I will definitely use these programs:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.eclipse.org/&#34;&gt;Eclipse&lt;/a&gt;: The development IDE recommended for this tutorial.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.mysql.com/&#34;&gt;MySQL server&lt;/a&gt;: OpenSource database server.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://gradle.org/&#34;&gt;Gradle&lt;/a&gt;: A task runner and package manager for your Java project (in case you&amp;rsquo;re a web developer that would be bower and grunt).&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://www.oracle.com/technetwork/java/javase/downloads/javafxscenebuilder-info-2157684.html&#34;&gt;JavaFX Scene Builder&lt;/a&gt; Tool to create user interfaces.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1 id=&#34;architecture&#34;&gt;Architecture&lt;/h1&gt;&#xA;&lt;p&gt;Our strategy for this project is quite simple. EclipseLink will communicate with the database and acts as our ORM, JAX-RS is used to create our JSON restful webservice and JavaFX is the framework for our client app. Below is a picture that shows our Architecture, the commuication flow and where we use 3rd party libraries.&lt;/p&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://janikvonrotz.ch/wp-content/uploads/2015/03/Java-3-tier-Architektur-v2.png&#34;&gt;&lt;img src=&#34;https://janikvonrotz.ch/wp-content/uploads/2015/03/Java-3-tier-Architektur-v2.png&#34; alt=&#34;Untitled&#34;&gt;&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Our application architecture consists of 3 eclipse projects:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;client: Thin app to interact with the application&lt;/li&gt;&#xA;&lt;li&gt;webservice: Communicates with the database and serves the REST interfaces.&lt;/li&gt;&#xA;&lt;li&gt;common: Components used by both projects.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1 id=&#34;project-setup&#34;&gt;Project setup&lt;/h1&gt;&#xA;&lt;p&gt;Now we are going to set up these 3 projects with gradle.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Create a project folder &lt;code&gt;/../&amp;lt;project&amp;gt;&lt;/code&gt; somewhere on your drive.&lt;/li&gt;&#xA;&lt;li&gt;To this folder add 3 more directories: &lt;code&gt;common&lt;/code&gt;, &lt;code&gt;webservice&lt;/code&gt; and &lt;code&gt;client&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;In the project folder and within these 3 directories add a &lt;code&gt;build.gradle&lt;/code&gt; file.&lt;/li&gt;&#xA;&lt;li&gt;Add a second file called &lt;code&gt;settings.gradle&lt;/code&gt; to the project folder.&lt;/li&gt;&#xA;&lt;li&gt;Open your command line and navigate to the project folder: &lt;code&gt;cd &amp;lt;project&amp;gt;&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Update the file content as showed below.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;settings.gradle&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;include &amp;#34;:common&amp;#34;, &amp;#34;:webservice&amp;#34;, &amp;#34;:client&amp;#34;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This file will tell gradle that we work with a multiproject setup.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;build.gradle&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;subprojects {&#xA;&#xA;  apply plugin: &amp;#34;java&amp;#34;&#xA;  apply plugin: &amp;#34;eclipse&amp;#34;&#xA;&#xA;  repositories {&#xA;    mavenCentral()&#xA;  }&#xA;&#xA;  configurations {&#xA;    lombok&#xA;  }&#xA;&#xA;  dependencies {&#xA;     testCompile &amp;#39;junit:junit:4.+&amp;#39;&#xA;     compile &amp;#39;org.projectlombok:lombok:1.+&amp;#39;&#xA;     lombok &amp;#39;org.projectlombok:lombok:1.+&amp;#39;&#xA;  }&#xA;&#xA;  // install lombok for Eclipse&#xA;&#xA;  sourceSets.each{ sourceSet -&amp;gt;&#xA;    sourceSet.compileClasspath += configurations.lombok&#xA;    sourceSet.ext.delombok = new File(buildDir, &amp;#34;generated-src/delombok/&amp;#34; + sourceSet.name);&#xA;  }&#xA;&#xA;  task installLombok() {&#xA;    dependsOn configurations.lombok&#xA;  } &amp;lt;&amp;lt; {&#xA;      File jarFile = null;&#xA;      configurations.lombok.resolvedConfiguration.resolvedArtifacts.find {&#xA;          if (&amp;#34;lombok&amp;#34;.equals(it.name)) {&#xA;              jarFile = it.file;&#xA;          }&#xA;      }&#xA;      javaexec {&#xA;          main=&amp;#34;-jar&amp;#34;&#xA;          args = [&#xA;              jarFile,&#xA;              &amp;#34;install&amp;#34;,&#xA;              &amp;#34;auto&amp;#34;&#xA;          ]&#xA;      }&#xA;  }&#xA;  eclipseProject.dependsOn installLombok&#xA;&#xA;  // install lombok for Javadoc&#xA;&#xA;  task delombok() {&#xA;    dependsOn configurations.compile&#xA;    dependsOn configurations.lombok&#xA;  } &amp;lt;&amp;lt; {&#xA;      File jarFile = null;&#xA;      configurations.lombok.resolvedConfiguration.resolvedArtifacts.find {&#xA;          if (&amp;#34;lombok&amp;#34;.equals(it.name)) {&#xA;              jarFile = it.file;&#xA;          }&#xA;      }&#xA;      sourceSets.each{ sourceSet -&amp;gt;&#xA;          def classPath = sourceSet.compileClasspath.files.join(&amp;#34;;&amp;#34;)&#xA;          def delombokPath = sourceSet.ext.delombok&#xA;          delombokPath.mkdirs();&#xA;          javaexec {&#xA;              main = &amp;#34;-jar&amp;#34;&#xA;              args jarFile, &amp;#34;delombok&amp;#34;&#xA;              if (!classPath.empty) {&#xA;                  args &amp;#34;-c&amp;#34;, classPath&#xA;              }&#xA;              args &amp;#34;-d&amp;#34;, delombokPath&#xA;              args sourceSet.allJava.srcDirs&#xA;          }&#xA;      }&#xA;  }&#xA;&#xA;  javadoc {&#xA;      dependsOn delombok&#xA;      source = sourceSets.main.ext.delombok&#xA;  }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;This is the master gradle build file and contains definition for each subproject.&#xA;The java and eclipse plugin allows us to import the 3 projects into Eclipse as a Java project.&#xA;Maven central is our main repository, this is the provider where we download our libraries.&#xA;Within this project we will make use of &lt;a href=&#34;http://projectlombok.org/&#34;&gt;project lombok&lt;/a&gt;. This project intends to get rid of the implementation process of getter and setter methods by generating them with annotations. You will see in the next chapter how this works.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;common/build.gradle&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;dependencies {&#xA;  compile &amp;#39;org.eclipse.persistence:javax.persistence:2.+&amp;#39;&#xA;  compile &amp;#39;org.eclipse.persistence:eclipselink:2.+&amp;#39;&#xA;&#xA;  compile &amp;#39;org.codehaus.jackson:jackson-core-asl:1.+&amp;#39;&#xA;  compile &amp;#39;org.codehaus.jackson:jackson-mapper-asl:1.+&amp;#39;&#xA;  &#xA;  compile &amp;#39;org.jboss.resteasy:resteasy-jaxrs:3.+&amp;#39;&#xA;  compile &amp;#39;org.jboss.resteasy:resteasy-jaxb-provider:3.+&amp;#39;&#xA;  compile &amp;#39;org.jboss.resteasy:resteasy-client:3.+&amp;#39;&#xA;  &#xA;  compile &amp;#39;org.apache.commons:commons-lang3:3.+&amp;#39;&#xA;  compile &amp;#39;com.typesafe:config:1.+&amp;#39;&#xA;  compile &amp;#39;org.slf4j:slf4j-simple:1.+&amp;#39;&#xA;  compile &amp;#39;com.github.javafaker:javafaker:0.+&amp;#39;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Both application components going to use these libraries:&#xA;&lt;a href=&#34;http://www.eclipse.org/eclipselink/&#34;&gt;EclipseLink&lt;/a&gt;: ORM for Java.&#xA;&lt;a href=&#34;https://github.com/FasterXML/jackson-core&#34;&gt;jackson core&lt;/a&gt;: Core components of jackson to parse JSON data.&#xA;&lt;a href=&#34;https://github.com/FasterXML/jackson&#34;&gt;jackson mapper&lt;/a&gt;: Convert between POJO and JSON.&#xA;&lt;a href=&#34;https://docs.jboss.org/resteasy/docs/3.0.0.Final/userguide/html_single/#RESTEasy_Client_Framework&#34;&gt;RESTeasy client&lt;/a&gt;: client api to consume the webservice.&#xA;&lt;a href=&#34;http://resteasy.jboss.org/&#34;&gt;RESTeasy&lt;/a&gt;: JAX-RS implementation to develop RESTful client and server applications.&#xA;&lt;a href=&#34;http://commons.apache.org/&#34;&gt;Apache Commons&lt;/a&gt;: popular and reusable Java components.&#xA;&lt;a href=&#34;https://github.com/typesafehub/config&#34;&gt;Typesafe Config&lt;/a&gt;: JVM configuration library.&#xA;&lt;a href=&#34;https://github.com/DiUS/java-faker&#34;&gt;Java Faker&lt;/a&gt;: library to create fake data.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;webservice/build.gradle&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;apply plugin: &amp;#39;jetty&amp;#39;&#xA;&#xA;dependencies {&#xA;  compile project(&amp;#39;:common&amp;#39;)&#xA;  compile &amp;#39;mysql:mysql-connector-java:5.+&amp;#39;&#xA;  compile &amp;#39;org.jboss.resteasy:resteasy-jackson-provider:2.+&amp;#39;&#xA;  providedCompile &amp;#39;javax.servlet:javax.servlet-api:3.+&amp;#39;&#xA;}&#xA;&#xA;jettyRun.webAppSourceDirectory = file(&amp;#34;src/main/resources&amp;#34;)&#xA;&#xA;task seed(type:JavaExec) {&#xA;   main = &amp;#39;ch.issueman.webservice.Seed&amp;#39;&#xA;   classpath = sourceSets.main.runtimeClasspath&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Jetty is our application server, instead of the default webapp folder we will use the resources folder to configure the application.&#xA;The &lt;a href=&#34;http://dev.mysql.com/downloads/connector/j/&#34;&gt;MySQL connector&lt;/a&gt; is the database driver for EclipseLink.&#xA;The custom seed task allows us to execute the main method of our Seed class.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;client/build.gradle&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;dependencies {&#xA;  compile project(&amp;#39;:common&amp;#39;)&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;The client uses common dependencies only.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Run two gradle tasks on the command line.&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;gradle build&lt;/code&gt;: This will build the Java application project.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;gradle eclipse&lt;/code&gt;: Creates the required files such as &lt;code&gt;.project&lt;/code&gt; to import the projects into eclipse.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;/li&gt;&#xA;&lt;li&gt;Finally set the workspace path of eclipse to the folder that contains the &lt;code&gt;&amp;lt;project&amp;gt;&lt;/code&gt; directory and import the projects within the &lt;code&gt;&amp;lt;project&amp;gt;&lt;/code&gt; folder.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Congratulation you&amp;rsquo;ve finished the first part of this tutorial. Can&amp;rsquo;t wait to see you in the next part ;)&lt;/p&gt;&#xA;&lt;h1 id=&#34;update&#34;&gt;Update&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;2015-03-28: I&amp;rsquo;ve replaced Hibernate with EclipseLink and dropped FlywayDB as we create the database with EclipseLink.&lt;/li&gt;&#xA;&lt;li&gt;2015-04-01: Added project lombok to eclipse and and project dependencies.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1 id=&#34;links&#34;&gt;Links&lt;/h1&gt;&#xA;&lt;p&gt;Here are all links to the other parts of this tutorial.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://janikvonrotz.ch/2015/03/15/build-a-java-3-tier-application-from-scratch-part-1-introduction-and-project-setup/&#34;&gt;Part 1: Introduction and project setup&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://janikvonrotz.ch/2015/03/28/build-a-java-3-tier-application-from-scratch-part-2-model-setup/&#34;&gt;Part 2: Model setup&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://janikvonrotz.ch/2015/03/30/build-a-java-3-tier-application-from-scratch-part-3-object-relational-mapping/&#34;&gt;Part 3: Object-relational mapping&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://janikvonrotz.ch/2015/03/31/build-a-java-3-tier-application-from-scratch-part-4-webservice/&#34;&gt;Part 4: Webservice&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://janikvonrotz.ch/2015/04/01/build-a-java-3-tier-application-from-scratch-part-5-client-controller/&#34;&gt;Part 5: Client controller&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://janikvonrotz.ch/2015/04/02/build-a-java-3-tier-application-from-scratch-part-6-client-view/&#34;&gt;Part 6: Client view&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1 id=&#34;source&#34;&gt;Source&lt;/h1&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://www.mkyong.com/&#34;&gt;Several Java tutorials from Mykong.com&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;http://stackoverflow.com/questions/25852641/recipe-how-do-i-use-lombok-with-eclipse-gradle-and-javadocs&#34;&gt;How do I use Lombok with Eclipse, Gradle, and Javadocs?&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Superb Java development with Gradle, Hibernate, FlywayDB, JavaFX and Eclipse - Part 1</title>
      <link>https://janikvonrotz.ch/2015/03/03/superb-java-development-with-gradle-hibernate-flywaydb-javafx-and-eclipse-part-1/</link>
      <pubDate>Tue, 03 Mar 2015 23:53:04 +0000</pubDate>
      <guid>https://janikvonrotz.ch/2015/03/03/superb-java-development-with-gradle-hibernate-flywaydb-javafx-and-eclipse-part-1/</guid>
      <description>&lt;blockquote&gt;&#xA;&lt;p&gt;Wow that&amp;rsquo;s the best Java tutorial I&amp;rsquo;ve seen so far!&lt;/p&gt;&#xA;&lt;/blockquote&gt;&#xA;&lt;p&gt;-You in a few minutes.&lt;/p&gt;&#xA;&lt;p&gt;Sounds selfish, doesn&amp;rsquo;t it? Well it has the right to be, it took me 2 hours to write that! Don&amp;rsquo;t hesitate now and turn on your dev machine.&#xA;After this tutorial you have to rethink your Java development process and if you don&amp;rsquo;t have one yet this is the best place to start.&#xA;I will show you the most advanced tools to speed up your Java development environment and collaboration capabilities.&#xA;In this tutorial we are going to develop a simple MVC (Model, View, Controller) application ruled by the DRY (Don&amp;rsquo;t repeat yourself) approach.&lt;/p&gt;&#xA;&lt;p&gt;The crappy picture below shows what&amp;rsquo;s going on according to my brain.&lt;/p&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://janikvonrotz.ch/wp-content/uploads/2015/03/Project-Concept.png&#34; alt=&#34;Project Concept&#34;&gt;&lt;/p&gt;&#xA;&lt;p&gt;So what do I excepect from you? Well, make sure you know at least a little bit about the following topics:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Java Collection Framework&lt;/li&gt;&#xA;&lt;li&gt;Java Classes and Interfaces&lt;/li&gt;&#xA;&lt;li&gt;Java Development with Eclipse&lt;/li&gt;&#xA;&lt;li&gt;MySQL database and SQL scripts&lt;/li&gt;&#xA;&lt;li&gt;Feeling comfortable with the command line&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s get startet with the tools. You don&amp;rsquo;t have to install them yet, first I will explain them in detail.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://gradle.org/&#34;&gt;Gradle&lt;/a&gt;: A task runner and package manager for your Java project (in case you&amp;rsquo;re a web developer that would be bower and grunt).&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://hibernate.org/orm/&#34;&gt;Hibernate ORM&lt;/a&gt;: Object Relation Manager that simplifies database transactions by applying an abstraction layer.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://flywaydb.org/&#34;&gt;Flyway&lt;/a&gt;: An awesome database migration tool (works perfect within a team and git as version control).&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://www.oracle.com/technetwork/java/javase/overview/javafx-overview-2158620.html&#34;&gt;JavaFX&lt;/a&gt;: Framework for rich application.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.eclipse.org/&#34;&gt;Eclipse&lt;/a&gt;: The development IDE of your choice.&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://www.mysql.com/&#34;&gt;MySQL server&lt;/a&gt;: OpenSource database server.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Got it? Now we are going to install some stuff.&lt;/p&gt;&#xA;&lt;h1 id=&#34;installation&#34;&gt;Installation&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Start with MySQL. The easiest way to get MySQL on your computer is to install a whole web development stack. They usually come with phpmyadmin which is greate to view your database content and other usefull tools preinstalled. I recommand the &lt;a href=&#34;https://bitnami.com/stack/nginx&#34;&gt;Nginx Stack by Bitnami&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Next, if not done yet, install &lt;a href=&#34;https://www.eclipse.org/&#34;&gt;Eclipse&lt;/a&gt;.&lt;/li&gt;&#xA;&lt;li&gt;And finally get &lt;a href=&#34;http://gradle.org/&#34;&gt;Gradle&lt;/a&gt; to run.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;As told Gradle is our servant for the project. Follow these steps to set up our project directory and dependencies.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Create a project folder somewhere on your disk &lt;code&gt;C:/../&amp;lt;project&amp;gt;&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;Open the command line (on windows please use PowerShell) and open the project folder &lt;code&gt;cd C:/../&amp;lt;project&amp;gt;&lt;/code&gt;.&lt;/li&gt;&#xA;&lt;li&gt;In the project folder create a file named &lt;strong&gt;build.gradle&lt;/strong&gt;.&lt;/li&gt;&#xA;&lt;li&gt;In the order as showed below, paste the snippets into the file.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;build.gradle&lt;/strong&gt; - start&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;buildscript {&#xA;    repositories {&#xA;        mavenCentral()&#xA;    }&#xA;    dependencies {&#xA;        classpath &amp;#39;mysql:mysql-connector-java:5.1.34&amp;#39;&#xA;        classpath &amp;#39;org.flywaydb:flyway-gradle-plugin:3.1&amp;#39;&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Adds the Flyway database migration tool to your gradle task library.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;apply plugin: &amp;#39;java&amp;#39;&#xA;apply plugin: &amp;#39;eclipse&amp;#39;&#xA;apply plugin: &amp;#39;flyway&amp;#39;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Gradle plugins to set up the project.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;repositories {&#xA;    mavenCentral()&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Gradle gets dependencies from the maven repository.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;dependencies {&#xA;    compile &amp;#39;org.hibernate:hibernate-core:4.3.8.Final&amp;#39;&#xA;    compile &amp;#39;mysql:mysql-connector-java:5.1.34&amp;#39;&#xA;    &#xA;    testCompile group: &amp;#39;junit&amp;#39;, name: &amp;#39;junit&amp;#39;, version: &amp;#39;4.+&amp;#39;&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;These commands compile hibernate, mysql and depending libraries for our Java project.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;flyway {&#xA;    url = &amp;#39;jdbc:mysql://localhost:3306&amp;#39;&#xA;    user = &amp;#39;issuemanager&amp;#39;&#xA;    password = &amp;#39;issuemanager&amp;#39;&#xA;    schemas = [&amp;#39;issuemanager&amp;#39;]&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Flyway task configuration section. Make sure to update these fields.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;build.gradle&lt;/strong&gt; - end&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Open &lt;code&gt;http://localhost/phpmyadmin&lt;/code&gt;, login and setup a user and a database with the same definitions.&lt;/li&gt;&#xA;&lt;li&gt;On your command line run: &lt;code&gt;gradle build&lt;/code&gt;. This will download and compile all dependencies.&lt;/li&gt;&#xA;&lt;li&gt;Run: &lt;code&gt;gradle eclipse&lt;/code&gt;. This will create the files required to import the project into eclipse.&lt;/li&gt;&#xA;&lt;li&gt;Start eclipse and import the project. Don&amp;rsquo;t close the command line yet!&lt;/li&gt;&#xA;&lt;li&gt;Update the eclipse project structure according to the yellow marked files and directories showed below. Leave all the files except &lt;strong&gt;build.gradle&lt;/strong&gt; empty.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;img src=&#34;https://janikvonrotz.ch/wp-content/uploads/2015/03/Eclipse-Project-Structure.png&#34; alt=&#34;Eclipse Project Structure&#34;&gt;&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Update the &lt;code&gt;*.sql&lt;/code&gt; files with these statements:&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;V1__create_person_table.sql&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;create&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;table&lt;/span&gt; person(&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    id int &lt;span style=&#34;color:#66d9ef&#34;&gt;NOT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;NULL&lt;/span&gt; AUTO_INCREMENT, &lt;span style=&#34;color:#66d9ef&#34;&gt;PRIMARY&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;KEY&lt;/span&gt; (id),&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    name varchar(&lt;span style=&#34;color:#ae81ff&#34;&gt;100&lt;/span&gt;) &lt;span style=&#34;color:#66d9ef&#34;&gt;NOT&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;NULL&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This snippets creates the MySQL person table.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;V2__add_people.sql.sql&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-sql&#34; data-lang=&#34;sql&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;insert&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;into&lt;/span&gt; PERSON (NAME) &lt;span style=&#34;color:#66d9ef&#34;&gt;values&lt;/span&gt; (&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Axel&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;insert&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;into&lt;/span&gt; PERSON (NAME) &lt;span style=&#34;color:#66d9ef&#34;&gt;values&lt;/span&gt; (&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Mr. Foo&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;insert&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;into&lt;/span&gt; PERSON (NAME) &lt;span style=&#34;color:#66d9ef&#34;&gt;values&lt;/span&gt; (&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#39;Ms. Bar&amp;#39;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This snippet adds people to the persons table.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Switch back to your command line and run: &lt;code&gt;gradle flywayMigrate&lt;/code&gt;. This will create the person table according to your snippets.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;If everything worked fine so far we are ready to write some code.&lt;/p&gt;&#xA;&lt;h1 id=&#34;coding---controller&#34;&gt;Coding - Controller&lt;/h1&gt;&#xA;&lt;p&gt;We will start with the DAO interface and the CRUD (create, read, update, delete) controller.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Update the Data Access Object interface.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;DAO.java&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;package&lt;/span&gt; ch.hslu.issueman;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; java.io.Serializable;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; java.util.List;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;interface&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;DAO&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;T, Id &lt;span style=&#34;color:#66d9ef&#34;&gt;extends&lt;/span&gt; Serializable&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;persist&lt;/span&gt;(T t);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; T &lt;span style=&#34;color:#a6e22e&#34;&gt;getById&lt;/span&gt;(Id id);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; List&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;T&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;getAll&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;update&lt;/span&gt;(T t);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;delete&lt;/span&gt;(T t);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;deleteAll&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This interface defines the functions required to communicate with the database later. As you can see we will use generics as we don&amp;rsquo;t want to create the same interface implementation for every model (despite we only have one model in this example).&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Update the basic Controller class.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;I will split the controller in multiple snippets and explain what&amp;rsquo;s going on in detail.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Controller.java&lt;/strong&gt; - start&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;package&lt;/span&gt; ch.hslu.issueman;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; java.io.Serializable;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; java.util.List;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; org.hibernate.Session;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; org.hibernate.SessionFactory;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; org.hibernate.Transaction;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; org.hibernate.boot.registry.StandardServiceRegistryBuilder;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; org.hibernate.cfg.Configuration;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Controller&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;T, Id &lt;span style=&#34;color:#66d9ef&#34;&gt;extends&lt;/span&gt; Serializable&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;implements&lt;/span&gt; DAO&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;T, Id&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;private&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;final&lt;/span&gt; Class&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;T&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; clazz;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;private&lt;/span&gt; Session currentSession;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;private&lt;/span&gt; Transaction currentTransaction;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;protected&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Controller&lt;/span&gt;(Class&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;T&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; clazz) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;        &lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;clazz&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; clazz;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    }&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;ul&gt;&#xA;&lt;li&gt;&lt;code&gt;clazz&lt;/code&gt; and the extended Controller constructor is a workaround to store the generic class type and retrieved it later.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;currentSession&lt;/code&gt; is used to store a MySQL database access session.&lt;/li&gt;&#xA;&lt;li&gt;&lt;code&gt;currentTransaction&lt;/code&gt; is helper to manage database commits.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; Session &lt;span style=&#34;color:#a6e22e&#34;&gt;openCurrentSession&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;currentSession &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; getSessionFactory().&lt;span style=&#34;color:#a6e22e&#34;&gt;openSession&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; currentSession;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; Session &lt;span style=&#34;color:#a6e22e&#34;&gt;openCurrentSessionwithTransaction&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;currentSession &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; getSessionFactory().&lt;span style=&#34;color:#a6e22e&#34;&gt;openSession&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;currentTransaction &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; currentSession.&lt;span style=&#34;color:#a6e22e&#34;&gt;beginTransaction&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; currentSession;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#x9;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;closeCurrentSession&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;currentSession.&lt;span style=&#34;color:#a6e22e&#34;&gt;close&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;closeCurrentSessionwithTransaction&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;currentTransaction.&lt;span style=&#34;color:#a6e22e&#34;&gt;commit&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;currentSession.&lt;span style=&#34;color:#a6e22e&#34;&gt;close&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#x9;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;private&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; SessionFactory &lt;span style=&#34;color:#a6e22e&#34;&gt;getSessionFactory&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;Configuration configuration &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; Configuration().&lt;span style=&#34;color:#a6e22e&#34;&gt;configure&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;StandardServiceRegistryBuilder builder &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; StandardServiceRegistryBuilder()&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&#x9;.&lt;span style=&#34;color:#a6e22e&#34;&gt;applySettings&lt;/span&gt;(configuration.&lt;span style=&#34;color:#a6e22e&#34;&gt;getProperties&lt;/span&gt;());&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;SessionFactory sessionFactory &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; configuration.&lt;span style=&#34;color:#a6e22e&#34;&gt;buildSessionFactory&lt;/span&gt;(builder.&lt;span style=&#34;color:#a6e22e&#34;&gt;build&lt;/span&gt;());&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; sessionFactory;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; Session &lt;span style=&#34;color:#a6e22e&#34;&gt;getCurrentSession&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; currentSession;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;setCurrentSession&lt;/span&gt;(Session currentSession) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;currentSession&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; currentSession;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; Transaction &lt;span style=&#34;color:#a6e22e&#34;&gt;getCurrentTransaction&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; currentTransaction;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;setCurrentTransaction&lt;/span&gt;(Transaction currentTransaction) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;currentTransaction&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; currentTransaction;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;These lines provide methods to interact with the hibernate session manager. Not very interesting also quite common.&#xA;Below you&amp;rsquo;ll see that we will use &lt;code&gt;CurrentSession&lt;/code&gt; to read from the database and &lt;code&gt;CurrentSessionwithTransaction&lt;/code&gt; for operations such as &lt;code&gt;delete&lt;/code&gt; in the database.&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;persist&lt;/span&gt;(T t) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;openCurrentSessionwithTransaction();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;getCurrentSession().&lt;span style=&#34;color:#a6e22e&#34;&gt;save&lt;/span&gt;(t);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;closeCurrentSessionwithTransaction();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; T &lt;span style=&#34;color:#a6e22e&#34;&gt;getById&lt;/span&gt;(Id id) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;openCurrentSession();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;@SuppressWarnings&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;unchecked&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;T t &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; (T) getCurrentSession().&lt;span style=&#34;color:#a6e22e&#34;&gt;get&lt;/span&gt;(clazz, id);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;closeCurrentSession();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; t;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;@SuppressWarnings&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;unchecked&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; List&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;T&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;getAll&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;openCurrentSession();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;List&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;T&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; list &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; (List&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;T&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;) getCurrentSession().&lt;span style=&#34;color:#a6e22e&#34;&gt;createQuery&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;from &amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; clazz.&lt;span style=&#34;color:#a6e22e&#34;&gt;getName&lt;/span&gt;()).&lt;span style=&#34;color:#a6e22e&#34;&gt;list&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;closeCurrentSession();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; list;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;update&lt;/span&gt;(T t) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;openCurrentSessionwithTransaction();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;getCurrentSession().&lt;span style=&#34;color:#a6e22e&#34;&gt;update&lt;/span&gt;(t);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;closeCurrentSessionwithTransaction();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;delete&lt;/span&gt;(T t) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;openCurrentSessionwithTransaction();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;getCurrentSession().&lt;span style=&#34;color:#a6e22e&#34;&gt;delete&lt;/span&gt;(t);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;closeCurrentSessionwithTransaction();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;deleteAll&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;openCurrentSessionwithTransaction();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;List&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;T&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; people &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; getAll();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; (T t : people) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;delete(t);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;closeCurrentSessionwithTransaction();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;printToJson&lt;/span&gt;(List&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;T&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; l) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; size &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; l.&lt;span style=&#34;color:#a6e22e&#34;&gt;size&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;System.&lt;span style=&#34;color:#a6e22e&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;println&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;[&amp;#34;&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;for&lt;/span&gt; (T i : l) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;System.&lt;span style=&#34;color:#a6e22e&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;println&lt;/span&gt;(((Model) i).&lt;span style=&#34;color:#a6e22e&#34;&gt;toJson&lt;/span&gt;());&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;if&lt;/span&gt; (&lt;span style=&#34;color:#f92672&#34;&gt;--&lt;/span&gt;size &lt;span style=&#34;color:#f92672&#34;&gt;!=&lt;/span&gt; 0){System.&lt;span style=&#34;color:#a6e22e&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;,&amp;#34;&lt;/span&gt;);}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;System.&lt;span style=&#34;color:#a6e22e&#34;&gt;out&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;print&lt;/span&gt;(&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;]&amp;#34;&lt;/span&gt;);&#x9;&#x9;&#x9;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This is the implementation of the DAO interface. Checkout the &lt;code&gt;getAll&lt;/code&gt; method, there you&amp;rsquo;ll see how the class name workaround is used.&#xA;The console output of values is Json styled.&lt;/p&gt;&#xA;&lt;p&gt;&lt;strong&gt;Controller.java&lt;/strong&gt; - end&lt;/p&gt;&#xA;&lt;p&gt;That&amp;rsquo;s it, this is our basic Controller that will be used by each Model Controller to interact with the database.&lt;/p&gt;&#xA;&lt;h1 id=&#34;coding---model&#34;&gt;Coding - Model&lt;/h1&gt;&#xA;&lt;p&gt;Now you will see the allmighty power of hibernate. It never was easier to connect a model with a SQL table.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Update the model interface.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;Model.java&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;package&lt;/span&gt; ch.hslu.issueman;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;interface&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Model&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; String &lt;span style=&#34;color:#a6e22e&#34;&gt;toJson&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Easy but usefull. Every model has to implement the &lt;code&gt;toJson&lt;/code&gt; method, because why not?&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Update the Person model with some special markup.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;Person.java&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;package&lt;/span&gt; ch.hslu.issueman;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; javax.persistence.Column;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; javax.persistence.Entity;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; javax.persistence.GeneratedValue;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; javax.persistence.GenerationType;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; javax.persistence.Id;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; javax.persistence.Table;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;@Entity&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#a6e22e&#34;&gt;@Table&lt;/span&gt;(name&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;person&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Person&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;implements&lt;/span&gt; Model{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;@Id&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;@GeneratedValue&lt;/span&gt;(strategy&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;GenerationType.&lt;span style=&#34;color:#a6e22e&#34;&gt;AUTO&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;@Column&lt;/span&gt;(name&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;id&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;private&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; id; &#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#a6e22e&#34;&gt;@Column&lt;/span&gt;(name&lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;name&amp;#34;&lt;/span&gt;)&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;    &lt;span style=&#34;color:#66d9ef&#34;&gt;private&lt;/span&gt; String name;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Person&lt;/span&gt;() {}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;Person&lt;/span&gt;(String name) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;setName(name);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;int&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;getId&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; id;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; String &lt;span style=&#34;color:#a6e22e&#34;&gt;getName&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; name;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;setName&lt;/span&gt;(String name) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;this&lt;/span&gt;.&lt;span style=&#34;color:#a6e22e&#34;&gt;name&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; name;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; String &lt;span style=&#34;color:#a6e22e&#34;&gt;toJson&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;{\&amp;#34;id\&amp;#34;: \&amp;#34;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; getId() &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;\&amp;#34;, \&amp;#34;name\&amp;#34;:\&amp;#34;&amp;#34;&lt;/span&gt; &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; getName() &lt;span style=&#34;color:#f92672&#34;&gt;+&lt;/span&gt; &lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;\&amp;#34;}&amp;#34;&lt;/span&gt;;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;} &#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Those @-Annotation will tell hibbernate which column belongs to which object attribute. Awesome! Isn&amp;rsquo;t it?&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Update the hibernate configuration file.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;hibernate.cfg.xml&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-xml&#34; data-lang=&#34;xml&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&amp;lt;?xml version=&amp;#34;1.0&amp;#34; encoding=&amp;#34;utf-8&amp;#34;?&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&amp;lt;!DOCTYPE hibernate-configuration SYSTEM &#xA;&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;&amp;#34;http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd&amp;#34;&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;hibernate-configuration&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;session-factory&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;property&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;name=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;hibernate.dialect&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;org.hibernate.dialect.MySQLDialect&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;property&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;name=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;hibernate.connection.driver_class&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;com.mysql.jdbc.Driver&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;property&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;name=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;hibernate.connection.url&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;jdbc:mysql://localhost/issuemanager&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;property&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;name=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;hibernate.connection.username&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;issuemanager&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;property&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;name=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;hibernate.connection.password&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;issuemanager&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;property&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;name=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;show_sql&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;true&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;property&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;name=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;hibernate.current_session_context_class&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;thread&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/property&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;   &lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;mapping&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;class=&lt;/span&gt;&lt;span style=&#34;color:#e6db74&#34;&gt;&amp;#34;ch.hslu.issueman.Person&amp;#34;&lt;/span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;/&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/session-factory&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;/hibernate-configuration&amp;gt;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;Add the same values as already used to configure flyway. Very important is the mapping property which finalizes the mapping process of the model with database table.&lt;/p&gt;&#xA;&lt;h1 id=&#34;coding---app&#34;&gt;Coding - App&lt;/h1&gt;&#xA;&lt;p&gt;This is the last coding part of the first tutorial.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Update the Person Controller.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;PersonController.java&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;package&lt;/span&gt; ch.hslu.issueman;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;import&lt;/span&gt; java.util.List;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;PersonController&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;implements&lt;/span&gt; DAO&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;Person, Integer&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;{&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;private&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; Controller&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;Person, Integer&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; controller;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;PersonController&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;controller &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; Controller&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;Person, Integer&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt;(Person.&lt;span style=&#34;color:#a6e22e&#34;&gt;class&lt;/span&gt;);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;persist&lt;/span&gt;(Person person) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;controller.&lt;span style=&#34;color:#a6e22e&#34;&gt;persist&lt;/span&gt;(person);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; Person &lt;span style=&#34;color:#a6e22e&#34;&gt;getById&lt;/span&gt;(Integer id) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;Person person &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; controller.&lt;span style=&#34;color:#a6e22e&#34;&gt;getById&lt;/span&gt;(id);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; person;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; List&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;Person&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;getAll&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;List&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;Person&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; people &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; controller.&lt;span style=&#34;color:#a6e22e&#34;&gt;getAll&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;return&lt;/span&gt; people;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;update&lt;/span&gt;(Person person) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;controller.&lt;span style=&#34;color:#a6e22e&#34;&gt;update&lt;/span&gt;(person);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;deleteById&lt;/span&gt;(Integer id) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;controller.&lt;span style=&#34;color:#a6e22e&#34;&gt;delete&lt;/span&gt;(controller.&lt;span style=&#34;color:#a6e22e&#34;&gt;getById&lt;/span&gt;(id));&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;delete&lt;/span&gt;(Person person) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;controller.&lt;span style=&#34;color:#a6e22e&#34;&gt;delete&lt;/span&gt;(person);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;deleteAll&lt;/span&gt;() {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;controller.&lt;span style=&#34;color:#a6e22e&#34;&gt;deleteAll&lt;/span&gt;();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;printToJson&lt;/span&gt;(List&lt;span style=&#34;color:#f92672&#34;&gt;&amp;lt;&lt;/span&gt;Person&lt;span style=&#34;color:#f92672&#34;&gt;&amp;gt;&lt;/span&gt; people) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;controller.&lt;span style=&#34;color:#a6e22e&#34;&gt;printToJson&lt;/span&gt;(people);&#x9;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;As you can see the Person Controller uses the basic Controller to do some CRUD actions. Every model controller must implement the DAO interface and must use the basic Controller.&#xA;This strategy allows us to define model depended actions within the CRUD methods.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Update the application code.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;&lt;strong&gt;App.java&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;div class=&#34;highlight&#34;&gt;&lt;pre tabindex=&#34;0&#34; style=&#34;color:#f8f8f2;background-color:#272822;-moz-tab-size:4;-o-tab-size:4;tab-size:4;&#34;&gt;&lt;code class=&#34;language-java&#34; data-lang=&#34;java&#34;&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#f92672&#34;&gt;package&lt;/span&gt; ch.hslu.issueman;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;class&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;App&lt;/span&gt; {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&lt;span style=&#34;color:#66d9ef&#34;&gt;public&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;static&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;void&lt;/span&gt; &lt;span style=&#34;color:#a6e22e&#34;&gt;main&lt;/span&gt;(String&lt;span style=&#34;color:#f92672&#34;&gt;[]&lt;/span&gt; args) {&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;PersonController PersonController &lt;span style=&#34;color:#f92672&#34;&gt;=&lt;/span&gt; &lt;span style=&#34;color:#66d9ef&#34;&gt;new&lt;/span&gt; PersonController();&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//&#x9;&#x9;PersonController.deleteAll();&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//&#x9;&#x9;Person person4 = new Person(&amp;#34;Fyodor Dostoevsky&amp;#34;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//&#x9;&#x9;Person person5 = new Person(&amp;#34;Leo Tolstoy&amp;#34;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//&#x9;&#x9;Person person6 = new Person(&amp;#34;Jane Austen&amp;#34;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//&#x9;&#x9;&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//&#x9;&#x9;PersonController.persist(person4);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//&#x9;&#x9;PersonController.persist(person5);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//&#x9;&#x9;PersonController.persist(person6);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//&#x9;&#x9;PersonController.deleteById(6);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//&#x9;&#x9;person4.setName(&amp;#34;Frodo&amp;#34;);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&lt;span style=&#34;color:#75715e&#34;&gt;//&#x9;&#x9;PersonController.update(person4);&lt;/span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;&#x9;&#x9;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;PersonController.&lt;span style=&#34;color:#a6e22e&#34;&gt;printToJson&lt;/span&gt;(PersonController.&lt;span style=&#34;color:#a6e22e&#34;&gt;getAll&lt;/span&gt;());&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;&#x9;System.&lt;span style=&#34;color:#a6e22e&#34;&gt;exit&lt;/span&gt;(0);&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#x9;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;&#xA;&lt;/span&gt;&lt;/span&gt;&lt;span style=&#34;display:flex;&#34;&gt;&lt;span&gt;}&#xA;&lt;/span&gt;&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;&lt;p&gt;This example application class shows how the Person Controller is used to retrieve and store Person object. Uncomment or comment sections to test the CRUD methods.&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Finally run the application.&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;You should see a lot of hibernate blabla and of course the Json outpout of the person table.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;Hibernate: select person0_.id as id1_0_, person0_.name as name2_0_ from person person0_&#xA;[&#xA;{&amp;#34;id&amp;#34;: &amp;#34;1&amp;#34;, &amp;#34;name&amp;#34;:&amp;#34;Axel&amp;#34;}&#xA;,{&amp;#34;id&amp;#34;: &amp;#34;2&amp;#34;, &amp;#34;name&amp;#34;:&amp;#34;Mr. Foo&amp;#34;}&#xA;,{&amp;#34;id&amp;#34;: &amp;#34;3&amp;#34;, &amp;#34;name&amp;#34;:&amp;#34;Ms. Bar&amp;#34;}&#xA;]&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;That was the first part of this tutorial and of course it was just a peek into these great tools. Hibernate offers much more possibilites to connect different models and do other awesome stuff. So don&amp;rsquo;t miss the documentation on their website or other tutorials.&#xA;I hope to see you soon in the next chapter when we create a rich client application with JavaFX.&lt;/p&gt;&#xA;&lt;h1 id=&#34;update&#34;&gt;Update&lt;/h1&gt;&#xA;&lt;p&gt;2015-03-05: Part 2 has been released: &lt;a href=&#34;https://janikvonrotz.ch/2015/03/05/superb-java-development-with-gradle-hibernate-flywaydb-javafx-and-eclipse-part-2/&#34;&gt;https://janikvonrotz.ch/2015/03/05/superb-java-development-with-gradle-hibernate-flywaydb-javafx-and-eclipse-part-2/&lt;/a&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;source&#34;&gt;Source&lt;/h1&gt;&#xA;&lt;p&gt;You can get the project from here: &lt;a href=&#34;https://codeberg.org/janikvonrotz/issue-manager/releases/tag/v1.0&#34;&gt;https://codeberg.org/janikvonrotz/issue-manager/releases/tag/v1.0&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Unattended Encrypted Incremental Backup to Amazon S3</title>
      <link>https://janikvonrotz.ch/2014/04/25/unattended-encrypted-incremental-backup-to-amazon-s3/</link>
      <pubDate>Fri, 25 Apr 2014 07:28:09 +0000</pubDate>
      <guid>https://janikvonrotz.ch/2014/04/25/unattended-encrypted-incremental-backup-to-amazon-s3/</guid>
      <description>&lt;p&gt;&lt;em&gt;This post is part of my &lt;a href=&#34;https://janikvonrotz.ch/your-own-virtual-private-server-hosting-solution/&#34;&gt;Your own Virtual Private Server hosting solution&lt;/a&gt; project.&lt;/em&gt;&lt;br&gt;&#xA;&lt;em&gt;Get the latest version of this article here: &lt;a href=&#34;https://gist.github.com/9410478&#34;&gt;https://gist.github.com/9410478&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;For this task we are going to configure a duplicity script wrapper.&#xA;Unregarded of the installation instructions it&amp;rsquo;s expected that you have already signed up for an Amazon account and know how to use their services.&lt;/p&gt;&#xA;&lt;h1 id=&#34;requirements&#34;&gt;Requirements&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://janikvonrotz.ch/2014/03/13/deploy-ubuntu-server/&#34;&gt;Ubuntu server&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://janikvonrotz.ch/2014/03/25/install-ubuntu-packages/&#34;&gt;duplicity, Git, GnuPG&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://janikvonrotz.ch/2014/04/07/install-mysql/&#34;&gt;MySQL&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://janikvonrotz.ch/2014/04/08/install-automysqlbackup/&#34;&gt;automysqlbackup&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://janikvonrotz.ch/2014/04/09/create-gpg-keys/&#34;&gt;GPG Keys&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;http://aws.amazon.com/&#34;&gt;Amazon AWS account&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://console.aws.amazon.com/iam&#34;&gt;Amazon IAM service user&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://console.aws.amazon.com/s3&#34;&gt;Amazon S3 bucket&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://janikvonrotz.ch/2014/04/10/install-s3cmd/&#34;&gt;s3cmd&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1 id=&#34;installation&#34;&gt;Installation&lt;/h1&gt;&#xA;&lt;p&gt;Clone the GitHub project.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;cd /usr/local/src&#xA;sudo git clone https://github.com/zertrin/duplicity-backup.git&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Copy the configuration file.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;cd /usr/local/src/duplicity-backup&#xA;sudo mkdir /etc/duplicity-backup&#xA;sudo cp duplicity-backup.conf.example /etc/duplicity-backup/duplicity-backup.conf&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Edit the configuration file.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo vi /etc/duplicity-backup/duplicity-backup.conf&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Update the AWS credentials.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;AWS_ACCESS_KEY_ID=&amp;quot;[aws key id]&amp;quot;&#xA;AWS_SECRET_ACCESS_KEY=&amp;quot;[aws access key]&amp;quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Update the gpg encryption settings.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;PASSPHRASE=&amp;quot;[gpg passphrase]&amp;quot;&#xA;GPG_ENC_KEY=&amp;quot;[gpg key id]&amp;quot;&#xA;GPG_SIGN_KEY=&amp;quot;[gpg key id]&amp;quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;In case you can&amp;rsquo;t remember the &lt;code&gt;gpg key id&lt;/code&gt; use the GnuPG tool.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;gpg -k&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Where the &lt;code&gt;gpg key id&lt;/code&gt; is displayed in the line &lt;code&gt;pub   2048R/&amp;gt;&amp;gt;C58886FB&amp;lt;&amp;lt; 2014-03-14&lt;/code&gt;&lt;/p&gt;&#xA;&lt;p&gt;Set the backup start directory.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;ROOT=&amp;quot;/var&amp;quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Set the S3 destination bucket.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;DEST=&amp;quot;s3+http://[bucket name]/[backup-folder]/&amp;quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Define which folder should be included in the backup.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;INCLIST=(  &amp;#34;/var/backups/mysql/latest&amp;#34; &#xA;           &amp;#34;/var/www/&amp;lt;wordpress&amp;gt;/wp-content&amp;#34; &#xA;        )&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Define which folders inside the include folders should be ignored.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;EXCLIST=(  &amp;quot;/var/www/[wordpress]/wp-content/backupwordpress*&amp;quot; )&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Update the logging settings.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;LOGDIR=&amp;#34;/var/log/duplicity-backup/&amp;#34;&#xA;LOG_FILE=&amp;#34;duplicity-`date +%Y-%m-%d_%H-%M`.txt&amp;#34;&#xA;LOG_FILE_OWNER=&amp;#34;[group]:[user]&amp;#34;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Don&amp;rsquo;t forget to create the log folder.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo mkdir /var/log/duplicity-backup&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Run the script to check wether it works or not.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo /usr/local/src/duplicity-backup/duplicity-backup.sh -c /etc/duplicity-backup/duplicity-backup.conf -b&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;To debug errors you can add the parameter &lt;code&gt;-d&lt;/code&gt;, adjust the verbosity level with &lt;code&gt;-v[1-9]&lt;/code&gt; and check the duplicity log.&lt;/p&gt;&#xA;&lt;p&gt;In case you&amp;rsquo;ll get the error &lt;code&gt;Import of duplicity.backends.giobackend Failed: No module named gio&lt;/code&gt; or &lt;code&gt;BackendException: Could not initialize backend: No module named paramiko&lt;/code&gt; you have to install some additional pyhton packages.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo apt-get install python-paramiko python-gobject-2&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;In addition if you want to use gdocs as a destination you have to install the according python libarary.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo apt-get install pyhton-gdata&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;You can list the current backup with the parameter &lt;code&gt;--list-current-files&lt;/code&gt;.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo /usr/local/src/duplicity-backup/duplicity-backup.sh -c /etc/duplicity-backup/duplicity-backup.conf --list-current-files&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Get further help for the backup script by running the script without parameters.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; sudo /usr/local/src/duplicity-backup/duplicity-backup.sh&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;scheduling the job is easily done by adding a new line to the cron configuration file.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo vi /etc/crontab&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Add the backup schedule command. The following example is executed daily a 7 o&amp;rsquo;clock.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;00 7    * * *   [user]   sudo /usr/local/src/duplicity-backup/duplicity-backup.sh -c /etc/duplicity-backup/duplicity-backup.conf -b&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Watch out for the schedule time of the automysqlbackup, you should schedule the duplicity backup job after the automysqlbackup job is done.&lt;/p&gt;&#xA;&lt;p&gt;Finally backup your configurations.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;cd ~&#xA;sudo /usr/local/src/duplicity-backup/duplicity-backup.sh -c /etc/duplicity-backup/duplicity-backup.conf --backup-script&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Answert the prompt as showed bleow.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;&amp;gt;&amp;gt; Are you sure you want to do that (&#39;yes&#39; to continue)?&#xA;yes&#xA;&#xA;Enter passphrase: [gpg passphrase]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h1 id=&#34;source&#34;&gt;Source&lt;/h1&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://www.problogdesign.com/how-to/automatic-amazon-s3-backups-on-ubuntu-debian/&#34;&gt;Automatic Amazon s3 Backups on Ubuntu / Debian&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://github.com/zertrin/duplicity-backup&#34;&gt;GitHub duplicity-backup by zertrin&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://github.com/zertrin/duplicity-backup/issues/63&#34;&gt;GitHub issue: No module named gio&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;http://www.rfc3092.net/2013/09/missing-modules-for-paramiko-and-gio-in-duplicity-foo/&#34;&gt;Missing modules for paramiko and gio in duplicity foo&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Migrate Piwik website</title>
      <link>https://janikvonrotz.ch/2014/04/24/migrate-piwik-website/</link>
      <pubDate>Thu, 24 Apr 2014 07:23:42 +0000</pubDate>
      <guid>https://janikvonrotz.ch/2014/04/24/migrate-piwik-website/</guid>
      <description>&lt;p&gt;&lt;em&gt;This post is part of my &lt;a href=&#34;https://janikvonrotz.ch/your-own-virtual-private-server-hosting-solution/&#34;&gt;Your own Virtual Private Server hosting solution&lt;/a&gt; project.&lt;/em&gt;&lt;br&gt;&#xA;&lt;em&gt;Get the latest version of this article here: &lt;a href=&#34;https://gist.github.com/9640572&#34;&gt;https://gist.github.com/9640572&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;This article assumes you&amp;rsquo;re going to move an exisiting piwik website from one server to another.&lt;/p&gt;&#xA;&lt;h1 id=&#34;requirements&#34;&gt;Requirements&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://janikvonrotz.ch/2014/03/13/deploy-ubuntu-server/&#34;&gt;Ubuntu server&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://janikvonrotz.ch/2014/03/31/install-nginx/&#34;&gt;Nginx&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://janikvonrotz.ch/2014/04/01/nginx-minimal-website/&#34;&gt;Nginx minimal website&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://janikvonrotz.ch/2014/03/20/install-php5-fpm/&#34;&gt;php5-fpm&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://janikvonrotz.ch/2014/03/25/install-php5-modules/&#34;&gt;php5-mcrypt, php5-mysql&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://janikvonrotz.ch/2014/04/11/install-nginx-php5-fpm-website/&#34;&gt;Nginx php5-fpm website&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://janikvonrotz.ch/2014/04/07/install-mysql/&#34;&gt;MySQL&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://janikvonrotz.ch/2014/04/11/increase-max-upload-for-php5-fpm-website/&#34;&gt;Increased Max Upload for php5-fpm website&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://janikvonrotz.ch/2014/04/14/install-phpmyadmin-website/&#34;&gt;phpMyAdmin website&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://janikvonrotz.ch/2014/04/22/install-piwik-website/&#34;&gt;Piwik website&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1 id=&#34;instructions&#34;&gt;Instructions&lt;/h1&gt;&#xA;&lt;p&gt;Export the existing SQL Piwik database with phpMyAdmin.&lt;/p&gt;&#xA;&lt;p&gt;Import the database export into the new Piwik database with phpMyAdmin.&lt;/p&gt;&#xA;&lt;p&gt;Update the tracking codes or update Piwik urls on the Piwik tracked websites if the hosting has changed.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Install piwik website</title>
      <link>https://janikvonrotz.ch/2014/04/22/install-piwik-website/</link>
      <pubDate>Tue, 22 Apr 2014 06:43:16 +0000</pubDate>
      <guid>https://janikvonrotz.ch/2014/04/22/install-piwik-website/</guid>
      <description>&lt;p&gt;&lt;em&gt;This post is part of my &lt;a href=&#34;https://janikvonrotz.ch/your-own-virtual-private-server-hosting-solution/&#34;&gt;Your own Virtual Private Server hosting solution&lt;/a&gt; project.&lt;/em&gt;&lt;br&gt;&#xA;&lt;em&gt;Get the latest version of this article here: &lt;a href=&#34;https://gist.github.com/9640540&#34;&gt;https://gist.github.com/9640540&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;Piwik is the leading open source web analytics platform that gives you valuable insights into your website’s visitors, your marketing campaigns and much more, so you can optimize your strategy and online experience of your visitors.&lt;/p&gt;&#xA;&lt;h1 id=&#34;requirements&#34;&gt;Requirements&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://janikvonrotz.ch/2014/03/13/deploy-ubuntu-server/&#34;&gt;Ubuntu server&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://janikvonrotz.ch/2014/03/31/install-nginx/&#34;&gt;Nginx&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://janikvonrotz.ch/2014/04/01/nginx-minimal-website/&#34;&gt;Nginx minimal website&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://janikvonrotz.ch/2014/03/20/install-php5-fpm/&#34;&gt;php5-fpm&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://janikvonrotz.ch/2014/03/25/install-php5-modules/&#34;&gt;php5-mysql&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://janikvonrotz.ch/2014/04/07/install-mysql/&#34;&gt;MySQL&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://janikvonrotz.ch/2014/04/11/install-nginx-php5-fpm-website/&#34;&gt;Nginx php5-fpm website&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1 id=&#34;installation&#34;&gt;Installation&lt;/h1&gt;&#xA;&lt;p&gt;Create the new Piwik website folder.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo mkdir /var/www/[piwik]&#xA;cd /var/www/[piwik]&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Download latest piwik&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo wget http://builds.piwik.org/latest.tar.gz&#xA;sudo tar -xzvf latest.tar.gz&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Copy Piwik content and delete unnecessary files.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo cp -r ./piwik/* ./&#xA;sudo rm -r piwik&#xA;sudo rm latest.tar.gz &amp;quot;How to install Piwik.html&amp;quot;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s create the MySQL Piwik database and user.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;mysql -u root -p&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Enter the MySQL root user password.&lt;/p&gt;&#xA;&lt;p&gt;Create the Piwik database.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;CREATE DATABASE [piwik];&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Create the Piwik database user.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;CREATE USER [piwik]@localhost;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Set the password for the Piwik database user.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;SET PASSWORD FOR [piwik]@localhost = PASSWORD(&amp;quot;[password]&amp;quot;);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Grant Piwik user full access on Piwik database.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;GRANT ALL PRIVILEGES ON [piwik].* TO [piwik]@localhost IDENTIFIED BY &#39;[password]&#39;;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Refresh MySQL and exit.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;FLUSH PRIVILEGES;&#xA;exit&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Add the Nginx configuration to an existing website.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;server{&#xA;    &#xA;    ...&#xA;    &#xA;    location /piwik{&#xA;        root /var/www;&#xA;    }&#xA;    &#xA;    ...&#xA;    &#xA;    location ~ .php$ {&#xA;        &#xA;        ...&#xA;        &#xA;        if ($request_uri ~* /piwik) {&#xA;            set $php_root /var/www;&#xA;        }&#xA;        &#xA;        ...&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Provide access to the piwik folder.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo chown -R www-data:www-data /var/www/piwik&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Finally let&amp;rsquo;s add the archive cron job which will highly improve the processing time for your piwik reports.&lt;/p&gt;&#xA;&lt;p&gt;Add a new cron job.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo vi /etc/cron.d/piwik-archive&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Add this content to the cron file.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;MAILTO=&amp;quot;[mail@example.com]&amp;quot;&#xA;5 * * * * www-data /usr/bin/php5 /var/www/[piwik]/console core:archive --url=http://[host]/piwik/ &amp;gt; /var/log/piwik/archive.log&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Then create the log folder and grant access for the user.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo mkdir /var/log/piwik&#xA;sudo chown www-data:www-data piwik&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Test config and reload Nginx service.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo nginx -t &amp;amp;&amp;amp; sudo service nginx reload&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Open your browser on &lt;code&gt;//[host]/piwik&lt;/code&gt; and install the Piwik website.&lt;/p&gt;&#xA;&lt;h1 id=&#34;source&#34;&gt;Source&lt;/h1&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://www.adminempire.com/how-to-install-piwik-on-ubuntu/&#34;&gt;How to Install Piwik on Ubuntu by AdminEmpire&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Install phpMyAdmin website</title>
      <link>https://janikvonrotz.ch/2014/04/14/install-phpmyadmin-website/</link>
      <pubDate>Mon, 14 Apr 2014 09:49:37 +0000</pubDate>
      <guid>https://janikvonrotz.ch/2014/04/14/install-phpmyadmin-website/</guid>
      <description>&lt;p&gt;&lt;em&gt;This post is part of my &lt;a href=&#34;https://janikvonrotz.ch/your-own-virtual-private-server-hosting-solution/&#34;&gt;Your own Virtual Private Server hosting solution&lt;/a&gt; project.&lt;/em&gt;&lt;br&gt;&#xA;&lt;em&gt;Get the latest version of this article here: &lt;a href=&#34;https://gist.github.com/9392925&#34;&gt;https://gist.github.com/9392925&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;phpMyAdmin is a free software tool written in PHP, intended to handle the administration of MySQL over the Web.&lt;/p&gt;&#xA;&lt;h1 id=&#34;requirements&#34;&gt;Requirements&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://janikvonrotz.ch/2014/03/13/deploy-ubuntu-server/&#34;&gt;Ubuntu server&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://janikvonrotz.ch/2014/03/31/install-nginx/&#34;&gt;Nginx&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://janikvonrotz.ch/2014/04/01/nginx-minimal-website/&#34;&gt;Nginx minimal website&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://janikvonrotz.ch/2014/03/20/install-php5-fpm/&#34;&gt;php5-fpm&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://janikvonrotz.ch/2014/03/25/install-php5-modules/&#34;&gt;php5-mcrypt, php5-mysql&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://janikvonrotz.ch/2014/04/11/install-nginx-php5-fpm-website/&#34;&gt;Nginx php5-fpm website&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://janikvonrotz.ch/2014/04/07/install-mysql/&#34;&gt;MySQL&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1 id=&#34;installation&#34;&gt;Installation&lt;/h1&gt;&#xA;&lt;p&gt;Start the installation phpMyAdmin.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo apt-get install phpmyadmin&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;As we use nginx for this installation, hit Tab and Enter on the first prompt.&lt;/p&gt;&#xA;&lt;p&gt;Chose &lt;!-- raw HTML omitted --&gt; and enter the MySQL root password on the second prompt.&lt;/p&gt;&#xA;&lt;p&gt;Create a secure password for phpMyAdmin. Don&amp;rsquo;t use the MySQL root password!&lt;/p&gt;&#xA;&lt;p&gt;Add the phpMyAdmin Nginx configuration to one of your websites.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;server{&#xA;    ...&#xA;    &#xA;    root /usr/share;&#xA;&#xA;    ...&#xA;    &#xA;    location ~ .php$ {&#xA;        ...&#xA;        &#xA;        # change the php root for phpMyAdmin&#xA;        if ($request_uri ~* /phpmyadmin) {&#xA;            set $php_root /usr/share;&#xA;        }&#xA;        &#xA;        ...&#xA;    }&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Test config and reload Nginx service.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo nginx -t &amp;amp;&amp;amp; sudo service nginx reload&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Open your browser on &lt;code&gt;//[host]/phpmyadmin&lt;/code&gt;.&lt;/p&gt;</description>
    </item>
    <item>
      <title>Install automysqlbackup</title>
      <link>https://janikvonrotz.ch/2014/04/08/install-automysqlbackup/</link>
      <pubDate>Tue, 08 Apr 2014 08:33:11 +0000</pubDate>
      <guid>https://janikvonrotz.ch/2014/04/08/install-automysqlbackup/</guid>
      <description>&lt;p&gt;&lt;em&gt;This post is part of my &lt;a href=&#34;https://janikvonrotz.ch/your-own-virtual-private-server-hosting-solution/&#34;&gt;Your own Virtual Private Server hosting solution&lt;/a&gt; project.&lt;/em&gt;&lt;br&gt;&#xA;&lt;em&gt;Get the latest version of this article here: &lt;a href=&#34;https://gist.github.com/9488132&#34;&gt;https://gist.github.com/9488132&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;AutoMySQLBackup with a basic configuration will create Daily, Weekly and Monthly backups of one or more of your MySQL databases from one or more of your MySQL servers.&lt;/p&gt;&#xA;&lt;h1 id=&#34;requirements&#34;&gt;Requirements&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://janikvonrotz.ch/2014/03/13/deploy-ubuntu-server/&#34;&gt;Ubuntu server&lt;/a&gt;&lt;/li&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://janikvonrotz.ch/2014/04/07/install-mysql/&#34;&gt;MySQL&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1 id=&#34;installation&#34;&gt;Installation&lt;/h1&gt;&#xA;&lt;p&gt;First create the backup folder.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo mkdir /var/backups/mysql&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Install the latest version of automysqlbackup from the &lt;a href=&#34;http://sourceforge.net/projects/automysqlbackup&#34;&gt;official website&lt;/a&gt;.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo mkdir /usr/local/src/automysqlbackup&#xA;cd /usr/local/src/automysqlbackup&#xA;sudo wget http://switch.dl.sourceforge.net/project/automysqlbackup/AutoMySQLBackup/AutoMySQLBackup%20VER%203.0/automysqlbackup-v3.0_rc6.tar.gz&#xA;sudo tar xvzf automysqlbackup-v3.0_rc6.tar.gz&#xA;sudo ./install.sh&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Answer the install wizard as showed below.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;global configuration diectory: default&#xA;directory for the executable: default&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Add read permissios for all in the config folder.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;cd /etc/automysqlbackup&#xA;sudo chmod a+r ./*&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Update the automysqlbackup config file.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo vi /etc/automysqlbackup/automysqlbackup.conf&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Set credentials and update the backup path.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# Username to access the MySQL server e.g. dbuser&#xA;CONFIG_mysql_dump_username=&amp;#39;root&amp;#39;&#xA;&#xA;# Password to access the MySQL server e.g. password&#xA;CONFIG_mysql_dump_password=&amp;#39;[password]&amp;#39;&#xA;&#xA;# Backup directory location e.g /backups&#xA;CONFIG_backup_dir=&amp;#39;/var/backups/mysql&amp;#39;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Unlock the latest backup in order to make backups for third party programs available&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;# Store an additional copy of the latest backup to a standard&#xA;# location so it can be downloaded by third party scripts.&#xA;CONFIG_mysql_dump_latest=&amp;#39;yes&amp;#39;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Let&amp;rsquo;s schedule the backup job by adding a daily cron script.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo vi /etc/cron.daily/automysqlbackup&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;With the following content.&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;#!/bin/sh&#xA;&#xA;/usr/local/bin/automysqlbackup /etc/automysqlbackup/automysqlbackup.conf&#xA;&#xA;chown root.root /var/backup/mysql* -R&#xA;sudo chmod -R a-x+X /var/backup/mysql&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Enable execution of the script for the owner.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo chmod o+x /etc/cron.daily/automysqlbackup&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;You can run the backup script manually.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;cd /etc/cron.daily&#xA;sudo ./automysqlbackup&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Checkout the backup folder.&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;cd /var//backup/mysql&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h1 id=&#34;source&#34;&gt;Source&lt;/h1&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://www.digitalocean.com/community/articles/how-to-backup-mysql-databases-on-an-ubuntu-vps&#34;&gt;How To Backup MySQL Databases on an Ubuntu VPS by Digital Ocean&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;http://www.a2hosting.com/kb/developer-corner/mysql/mysql-database-backups-using-automysqlbackup&#34;&gt;How to back up MySQL databases using AutoMySQLBackup by A2 hosting&lt;/a&gt;&#xA;&lt;a href=&#34;http://sourceforge.net/projects/automysqlbackup/&#34;&gt;automysqlbackup website&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Install MySQL</title>
      <link>https://janikvonrotz.ch/2014/04/07/install-mysql/</link>
      <pubDate>Mon, 07 Apr 2014 07:14:46 +0000</pubDate>
      <guid>https://janikvonrotz.ch/2014/04/07/install-mysql/</guid>
      <description>&lt;p&gt;&lt;em&gt;This post is part of my &lt;a href=&#34;https://janikvonrotz.ch/your-own-virtual-private-server-hosting-solution/&#34;&gt;Your own Virtual Private Server hosting solution&lt;/a&gt; project.&lt;/em&gt;&lt;br&gt;&#xA;&lt;em&gt;Get the latest version of this article here: &lt;a href=&#34;https://gist.github.com/9392658&#34;&gt;https://gist.github.com/9392658&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;&#xA;&lt;h1 id=&#34;introduction&#34;&gt;Introduction&lt;/h1&gt;&#xA;&lt;p&gt;MySQL is the world&amp;rsquo;s most popular open source database system.&lt;/p&gt;&#xA;&lt;h1 id=&#34;requirements&#34;&gt;Requirements&lt;/h1&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;&lt;a href=&#34;https://janikvonrotz.ch/2014/03/13/deploy-ubuntu-server/&#34;&gt;Ubuntu server&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h1 id=&#34;installation&#34;&gt;Installation&lt;/h1&gt;&#xA;&lt;p&gt;Install MySQL server&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo apt-get install mysql-server&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Set the mysql root user password during the installation&lt;/p&gt;&#xA;&lt;p&gt;Install the default MySQL databases&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo mysql_install_db&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Run the finisher script and respond except for the first prompt with yes in order to get a secure MySQL installation&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo /usr/bin/mysql_secure_installation&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Connect to your new MySQL server&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;mysql -uroot -p&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Enter the root password&lt;/p&gt;&#xA;&lt;p&gt;And run this command to get the MySQL version&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;SHOW variables LIKE &amp;quot;%version%&amp;quot;;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h1 id=&#34;source&#34;&gt;Source&lt;/h1&gt;&#xA;&lt;p&gt;&lt;a href=&#34;https://help.ubuntu.com/12.04/serverguide/mysql.html&#34;&gt;Ubuntu MySQL server guide&lt;/a&gt;&lt;/p&gt;</description>
    </item>
    <item>
      <title>Step by Step: Install WordPress Blog</title>
      <link>https://janikvonrotz.ch/2014/03/22/step-by-step-install-wordpress-blog/</link>
      <pubDate>Sat, 22 Mar 2014 10:26:15 +0000</pubDate>
      <guid>https://janikvonrotz.ch/2014/03/22/step-by-step-install-wordpress-blog/</guid>
      <description>&lt;p&gt;&lt;strong&gt;Latest Version of this guide: &lt;a href=&#34;https://gist.github.com/9320678&#34;&gt;https://gist.github.com/9320678&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;&#xA;&lt;p&gt;Finishing this guide you&amp;rsquo;ll get:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;A running WordPress installation&lt;/li&gt;&#xA;&lt;li&gt;Nginx proxy with PHP and Fast CGI&lt;/li&gt;&#xA;&lt;li&gt;MySQL server accessible with phpMyAdmin&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Specification of latest running installation:&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Date: 03.03.2014&lt;/li&gt;&#xA;&lt;li&gt;OS: Ubuntu 64 bit - 12.04.4 LTS&lt;/li&gt;&#xA;&lt;li&gt;Provider: Amazon EC2&lt;/li&gt;&#xA;&lt;li&gt;Browser: Google Chrome - 33.0.1750.117&lt;/li&gt;&#xA;&lt;li&gt;WordPress: 3.8.1&lt;/li&gt;&#xA;&lt;li&gt;Nginx: 1.1.19&lt;/li&gt;&#xA;&lt;li&gt;MySQL: 5.5.35&lt;/li&gt;&#xA;&lt;li&gt;PHP: 5.3.10&lt;/li&gt;&#xA;&lt;li&gt;phpMyAdmin: 3.4.10.1&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;p&gt;Requirements&lt;/p&gt;&#xA;&lt;ul&gt;&#xA;&lt;li&gt;Server is behind a firewall, that only allows http, https and ssh&lt;/li&gt;&#xA;&lt;li&gt;The server is accessed with ssh keys (user password authentication must be disabled)&lt;/li&gt;&#xA;&lt;li&gt;Server is not accessed with the root user&lt;/li&gt;&#xA;&lt;li&gt;You&amp;rsquo;re able to edit files with &lt;a href=&#34;http://www.cheatography.com/ericg/cheat-sheets/vi-editor/&#34;&gt;VI&lt;/a&gt;&lt;/li&gt;&#xA;&lt;/ul&gt;&#xA;&lt;h2 id=&#34;ubuntu&#34;&gt;Ubuntu&lt;/h2&gt;&#xA;&lt;p&gt;Update Ubuntu&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo apt-get update &amp;amp;&amp;amp; sudo apt-get upgrade&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Install additional packages&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo aptitude install build-essential zip git&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;mysql&#34;&gt;MySQL&lt;/h2&gt;&#xA;&lt;p&gt;Install MySQL server and php5 MySQL module&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo apt-get install mysql-server php5-mysql&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Set the mysql root user password during the installation&lt;/p&gt;&#xA;&lt;p&gt;Install the default MySQL databases&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo mysql_install_db&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Run the finisher script and respond every prompt with yes to get a secure MySQL installation&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo /usr/bin/mysql_secure_installation&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Connect to your new MySQL server&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;mysql -uroot -p&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Enter the root password&lt;/p&gt;&#xA;&lt;p&gt;And run this command to get the MySQL version&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;SHOW variables LIKE &amp;quot;%version%&amp;quot;;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;nginx&#34;&gt;Nginx&lt;/h2&gt;&#xA;&lt;p&gt;Install Nginx&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo apt-get install nginx&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Create a Nginx site configuration file&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo touch /etc/nginx/sites-available/wordpress.conf&#xA;sudo vi /etc/nginx/sites-available/wordpress.conf&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Paste this config&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;server {    &#xA;listen   80;&#xA;&#xA;&#x9;root /var/www/wordpress;&#xA;&#x9;index index.php index.html index.htm;&#xA;&#xA;&#x9;server_name [example.com];&#xA;&#xA;&#x9;location / {&#xA;&#x9;&#x9;try_files $uri $uri/ /index.php?q=$uri&amp;amp;$args;&#xA;&#x9;}&#xA;&#xA;&#x9;error_page 404 /404.html;&#xA;&#xA;&#x9;error_page 500 502 503 504 /50x.html;&#xA;&#x9;location = /50x.html {&#xA;&#x9;&#x9;root /usr/share/nginx/www;&#xA;&#x9;}&#xA;    &#xA;    client_max_body_size 10M;&#xA;&#xA;&#x9;# pass the PHP scripts to FastCGI server listening on 127.0.0.1:9000&#xA;&#x9;location ~ \.php$ {&#xA;&#x9;&#x9;try_files $uri = 404;&#xA;&#x9;&#x9;#fastcgi_pass 127.0.0.1:9000;&#xA;&#x9;&#x9;# With php5-fpm:&#xA;&#x9;&#x9;fastcgi_pass unix:/var/run/php5-fpm.sock;&#xA;&#x9;&#x9;fastcgi_index index.php;&#xA;&#x9;&#x9;include fastcgi_params;&#xA;&#x9;}&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Optionally you can rewrite false urls to a specified canonical url&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;server {&#xA;    listen       80;&#xA;    server_name  www.example.com  example.com;&#xA;    if ($http_host = www.example.org) {&#xA;        rewrite  (.*)  http://[example.com]$1;&#xA;    }&#xA;    ...&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Create a symlink to the config file&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo ln -s /etc/nginx/sites-available/wordpress.conf /etc/nginx/sites-enabled/wordpress.conf&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Restart Ngnix&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo service nginx restart&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Check Nginx version&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;nginx -v&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;h2 id=&#34;php&#34;&gt;PHP&lt;/h2&gt;&#xA;&lt;p&gt;Install PHP with FastCGI support&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo apt-get install php5-fpm&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;configure PHP installaton&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt; sudo vi /etc/php5/fpm/php.ini&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Find the line &lt;code&gt;cgi.fix_pathinfo=1&lt;/code&gt; by pressing ESC and enter&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;/;cgi.fix_pathinfo=1&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Uncomment this line and change value to 0&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;cgi.fix_pathinfo=0&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;If this number is kept as 1, the php interpreter will do its best to process the file that is as near to the requested file as possible. This is a possible security risk. If this number is set to 0, conversely, the interpreter will only process the exact file path—a much safer alternative.&lt;/p&gt;&#xA;&lt;p&gt;Find the line &lt;code&gt;; default extension directory.&lt;/code&gt; and insert below&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;extension=mcrypt.so&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Update the listening port for the php fpm&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo vi /etc/php5/fpm/pool.d/www.conf&#xA;Set listen = /var/run/php5-fpm.sock&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Restart the service&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo service php5-fpm restart&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Create the website folder&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo mkdir /var/www/wordpress&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Add a PHP info file&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo vi /var/www/wordpress/info.php&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Set content&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;&amp;lt;?php&#xA;phpinfo();&#xA;?&amp;gt;&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Open your browser on &lt;a href=&#34;http://example.com/info.php&#34;&gt;http://example.com/info.php&lt;/a&gt;&lt;/p&gt;&#xA;&lt;p&gt;Delete this file if everything works&lt;/p&gt;&#xA;&lt;h2 id=&#34;phpmyadmin&#34;&gt;phpMyAdmin&lt;/h2&gt;&#xA;&lt;p&gt;Install phpMyAdmin&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo apt-get install phpmyadmin&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;When phpMyAdmin prompts you to choose a server (either apache or lighttpd)hit tab, and select neither one.&lt;/p&gt;&#xA;&lt;p&gt;When phpMyAdmin asks you wether to configure database for phpmyadmin with dbconfig-common. Chose &lt;!-- raw HTML omitted --&gt; and enter the MySQL root user password&lt;/p&gt;&#xA;&lt;p&gt;Hit &lt;!-- raw HTML omitted --&gt; on the MySQL application password for phpmyadmin prompt.&lt;/p&gt;&#xA;&lt;p&gt;Create a symbolic link for the phpMyAdmin website&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo ln -s /usr/share/phpmyadmin/ /usr/share/nginx/www&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Create a Nginx configuration file&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo touch /etc/nginx/sites-available/phpmyadmin.conf&#xA;sudo vi /etc/nginx/sites-available/phpmyadmin.conf&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Paste this config&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;server{&#xA;&#x9;listen 80;&#xA;&#x9;&#xA;&#x9;server_name [Your Public IP];&#xA;&#x9;root /var/www/;&#xA;&#x9;&#xA;&#x9;index index.php index.html index.htm;&#xA;&#x9;&#xA;    client_max_body_size 10M;&#xA;    &#xA;&#x9;location ~ .php$ {&#xA;&#x9;&#x9;try_files $uri = 404;&#xA;&#x9;&#x9;fastcgi_pass unix:/var/run/php5-fpm.sock;&#xA;&#x9;&#x9;fastcgi_index index.php;&#xA;&#x9;&#x9;include /etc/nginx/fastcgi_params;&#xA;&#x9;}&#xA;}&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Create a symlink to the config file&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo ln -s /etc/nginx/sites-available/phpmyadmin.conf /etc/nginx/sites-enabled/phpmyadmin.conf&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Restart Ngnix&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo service nginx restart&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Open the browser on http://[YourPublicIP]/phpmyadmin/&lt;/p&gt;&#xA;&lt;h2 id=&#34;wordpress&#34;&gt;WordPress&lt;/h2&gt;&#xA;&lt;p&gt;Open the WordPress site directory&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;cd /var/www/wordpress/&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Download latest WordPress package and untar it&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo wget http://wordpress.org/latest.tar.gz&#xA;tar -xzvf latest.tar.gz&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Copy the untared files to the current folder and delete the other files&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo cp -r ./wordpress/* ./&#xA;sudo rm -r wordpress&#xA;sudo rm latest.tar.gz&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Let&amp;rsquo;s create the MySQL WordPress user&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;mysql -u root -p&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Enter the MySQL root user password&lt;/p&gt;&#xA;&lt;p&gt;Create the WordPress database&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;CREATE DATABASE wordpress;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Create the WordPress database user&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;CREATE USER wordpress@localhost;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Set the password for the WordPress database user&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;SET PASSWORD FOR wordpress@localhost = PASSWORD(&amp;quot;[password]&amp;quot;);&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Grant WordPress user full access on WordPress database&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;GRANT ALL PRIVILEGES ON wordpress.* TO wordpress@localhost IDENTIFIED BY &#39;[password]&#39;;&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Refresh MySQL and exit&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;FLUSH PRIVILEGES;&#xA;exit&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Copy the WordPress example config file&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo cp wp-config-sample.php wp-config.php&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Edit the config file&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo vi wp-config.php&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Set database, database user and his password&lt;/p&gt;&#xA;&lt;pre tabindex=&#34;0&#34;&gt;&lt;code&gt;define(&amp;#39;DB_NAME&amp;#39;, &amp;#39;wordpress&amp;#39;);&#xA;&#xA;define(&amp;#39;DB_USER&amp;#39;, &amp;#39;wordpress&amp;#39;);&#xA;&#xA;define(&amp;#39;DB_PASSWORD&amp;#39;, &amp;#39;[password]&amp;#39;);&#xA;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Update permissions for Nginx user&lt;/p&gt;&#xA;&lt;pre&gt;&lt;code&gt;sudo chown www-data:www-data * -R &#xA;sudo usermod -a -G www-data www-data&#xA;&lt;/code&gt;&lt;/pre&gt;&#xA;&lt;p&gt;Open the browser on &lt;a href=&#34;http://example.com&#34;&gt;http://example.com&lt;/a&gt; and install you WordPress blog&lt;/p&gt;&#xA;&lt;h2 id=&#34;source&#34;&gt;Source&lt;/h2&gt;&#xA;&lt;p&gt;&lt;a href=&#34;http://dev.mysql.com/doc/refman/5.7/en/linux-installation-native.html&#34;&gt;Install MySQL&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://www.digitalocean.com/community/articles/how-to-install-linux-nginx-mysql-php-lemp-stack-on-ubuntu-12-04&#34;&gt;How To Install Linux, nginx, MySQL, PHP (LEMP) stack on Ubuntu 12.04 by Digital Ocean&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://www.digitalocean.com/community/articles/how-to-install-phpmyadmin-on-a-lemp-server/&#34;&gt;How To Install phpMyAdmin on a LEMP server by Digi&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://www.digitalocean.com/community/articles/how-to-install-wordpress-with-nginx-on-ubuntu-12-04&#34;&gt;How To Install Wordpress with nginx on Ubuntu 12.04 by Digital Ocean&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;http://nginx.org/en/docs/http/converting_rewrite_rules.html&#34;&gt;Nginx rewrite rules&lt;/a&gt;&lt;br&gt;&#xA;&lt;a href=&#34;https://dev.mysql.com/doc/refman/5.0/en/installation-version.html&#34;&gt;Get MySQL version&lt;/a&gt;&lt;/p&gt;</description>
    </item>
  </channel>
</rss>
