Equivalent of spring-hibernate-xml but annotation-driven.
diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..cd7e53e
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,4 @@
+*.iml
+.idea/
+target/
+*.log
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..cc8cf5c
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,144 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
+            http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+    <modelVersion>4.0.0</modelVersion>
+    <groupId>com.dohbedoh</groupId>
+    <artifactId>spring-hibernate-annotations</artifactId>
+    <version>0.0.1-SNAPSHOT</version>
+    <packaging>war</packaging>
+
+    <name>spring-hibernate-annotations</name>
+    <description>Sandbox for Spring/Hibernate framework using Annotations configuration</description>
+
+    <properties>
+        <!-- Generic properties -->
+        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
+        <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
+        <!--Build-->
+        <maven.war.version>2.6</maven.war.version>
+        <maven.compiler.version>3.3</maven.compiler.version>
+        <!--Development-->
+        <java.version>1.8</java.version>
+        <!-- Spring -->
+        <spring-framework.version>4.2.2.RELEASE</spring-framework.version>
+        <!-- Hibernate / JPA -->
+        <hibernate.version>4.3.5.Final</hibernate.version>
+        <!-- MySQL connector -->
+        <mysql-connector.version>5.1.30</mysql-connector.version>
+        <!-- Apache DBCP -->
+        <apache-dbcp.version>2.0</apache-dbcp.version>
+        <!-- Logging -->
+        <logback.version>1.1.3</logback.version>
+        <slf4j.version>1.7.5</slf4j.version>
+    </properties>
+
+    <dependencyManagement>
+        <!-- Ensure all Spring dependencies are of the same version (Bill of Materials) -->
+        <dependencies>
+            <dependency>
+                <groupId>org.springframework</groupId>
+                <artifactId>spring-framework-bom</artifactId>
+                <version>${spring-framework.version}</version>
+                <type>pom</type>
+                <scope>import</scope>
+            </dependency>
+        </dependencies>
+    </dependencyManagement>
+
+    <dependencies>
+
+        <!-- Spring Context -->
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-context</artifactId>
+            <exclusions>
+                <exclusion>
+                    <groupId>commons-logging</groupId>
+                    <artifactId>commons-logging</artifactId>
+                </exclusion>
+            </exclusions>
+        </dependency>
+
+        <!-- Spring ORM support -->
+        <dependency>
+            <groupId>org.springframework</groupId>
+            <artifactId>spring-orm</artifactId>
+        </dependency>
+
+        <!-- Logging with SLF4J & LogBack -->
+        <!--Bridge from JCL (Spring) to SLF4J -->
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>jcl-over-slf4j</artifactId>
+            <version>${slf4j.version}</version>
+        </dependency>
+        <!--SLF4J - Logging Facade-->
+        <dependency>
+            <groupId>org.slf4j</groupId>
+            <artifactId>slf4j-api</artifactId>
+            <version>${slf4j.version}</version>
+        </dependency>
+        <!-- Logback - Logging implementation -->
+        <dependency>
+            <groupId>ch.qos.logback</groupId>
+            <artifactId>logback-classic</artifactId>
+            <version>${logback.version}</version>
+        </dependency>
+        <dependency>
+            <groupId>ch.qos.logback</groupId>
+            <artifactId>logback-core</artifactId>
+            <version>${logback.version}</version>
+        </dependency>
+
+        <!-- Hibernate -->
+        <dependency>
+            <groupId>org.hibernate</groupId>
+            <artifactId>hibernate-core</artifactId>
+            <version>${hibernate.version}</version>
+        </dependency>
+
+        <!-- MySQL Connector Java dependency (JDBC driver for MySQL) -->
+        <dependency>
+            <groupId>mysql</groupId>
+            <artifactId>mysql-connector-java</artifactId>
+            <version>${mysql-connector.version}</version>
+        </dependency>
+
+        <!--Apache Commons DBCP dependency (for database connection pooling)-->
+        <dependency>
+            <groupId>org.apache.commons</groupId>
+            <artifactId>commons-dbcp2</artifactId>
+            <version>${apache-dbcp.version}</version>
+        </dependency>
+
+    </dependencies>
+
+    <build>
+        <plugins>
+            <plugin>
+                <!-- Plugin to package in a WAR file -->
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-war-plugin</artifactId>
+                <version>${maven.war.version}</version>
+                <configuration>
+                    <failOnMissingWebXml>false</failOnMissingWebXml>
+                </configuration>
+            </plugin>
+            <plugin>
+                <!-- Maven compiler configured with JDK 8 -->
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-compiler-plugin</artifactId>
+                <version>${maven.compiler.version}</version>
+                <configuration>
+                    <source>${java.version}</source>
+                    <target>${java.version}</target>
+                </configuration>
+            </plugin>
+        </plugins>
+    </build>
+
+
+</project>
diff --git a/src/main/java/com/dohbedoh/SpringHibernateAnnotations.java b/src/main/java/com/dohbedoh/SpringHibernateAnnotations.java
new file mode 100644
index 0000000..a7644f1
--- /dev/null
+++ b/src/main/java/com/dohbedoh/SpringHibernateAnnotations.java
@@ -0,0 +1,19 @@
+package com.dohbedoh;
+
+import com.dohbedoh.dao.CompanyDAO;
+import org.springframework.context.annotation.AnnotationConfigApplicationContext;
+
+/**
+ * Created by Allan on 23/10/2015.
+ */
+public class SpringHibernateAnnotations {
+
+    public static void main(String[] args) {
+        AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
+        context.register(SpringHibernateAnnotationsConfig.class);
+        context.refresh();
+
+        CompanyDAO companyDAO = context.getBean(CompanyDAO.class);
+        System.out.println(companyDAO.findAll().size());
+    }
+}
diff --git a/src/main/java/com/dohbedoh/SpringHibernateAnnotationsConfig.java b/src/main/java/com/dohbedoh/SpringHibernateAnnotationsConfig.java
new file mode 100644
index 0000000..f94fa83
--- /dev/null
+++ b/src/main/java/com/dohbedoh/SpringHibernateAnnotationsConfig.java
@@ -0,0 +1,33 @@
+package com.dohbedoh;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.beans.factory.config.PropertyPlaceholderConfigurer;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.ComponentScan;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.PropertySource;
+import org.springframework.context.support.PropertySourcesPlaceholderConfigurer;
+import org.springframework.transaction.annotation.EnableTransactionManagement;
+
+/**
+ * Created by Allan on 24/10/2015.
+ */
+@Configuration
+@EnableTransactionManagement
+@ComponentScan
+public class SpringHibernateAnnotationsConfig {
+
+    public static final Logger logger = LoggerFactory.getLogger(SpringHibernateAnnotationsConfig.class);
+
+    @Bean
+    public PropertySourcesPlaceholderConfigurer propertyPlaceHolder() {
+        PropertySourcesPlaceholderConfigurer propertyPlaceholder = new PropertySourcesPlaceholderConfigurer();
+//        propertyPlaceholder.setLocations(
+//                new ClassPathResource("classpath:database/database.properties"),
+//                new ClassPathResource("classpath:database/hibernate.properties")
+//        );
+        logger.info("Configurer created!");
+        return propertyPlaceholder;
+    }
+}
diff --git a/src/main/java/com/dohbedoh/config/DataSourceConfig.java b/src/main/java/com/dohbedoh/config/DataSourceConfig.java
new file mode 100644
index 0000000..bbdcd62
--- /dev/null
+++ b/src/main/java/com/dohbedoh/config/DataSourceConfig.java
@@ -0,0 +1,37 @@
+package com.dohbedoh.config;
+
+import org.apache.commons.dbcp2.BasicDataSource;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.PropertySource;
+
+import javax.sql.DataSource;
+
+/**
+ * Created by Allan on 25/10/2015.
+ */
+@Configuration
+@PropertySource("classpath:database/database.properties")
+public class DataSourceConfig {
+
+    @Value("${jdbc.driverClassName}")
+    private String driverClassName;
+    @Value("${jdbc.url}")
+    private String url;
+    @Value("${jdbc.username}")
+    private String username;
+    @Value("${jdbc.password}")
+    private String password;
+
+    @Bean
+    public DataSource dataSource() {
+
+        BasicDataSource dataSource = new BasicDataSource();
+        dataSource.setDriverClassName(driverClassName);
+        dataSource.setUrl(url);
+        dataSource.setUsername(username);
+        dataSource.setPassword(password);
+        return dataSource;
+    }
+}
diff --git a/src/main/java/com/dohbedoh/config/HibernateConfig.java b/src/main/java/com/dohbedoh/config/HibernateConfig.java
new file mode 100644
index 0000000..d491e88
--- /dev/null
+++ b/src/main/java/com/dohbedoh/config/HibernateConfig.java
@@ -0,0 +1,54 @@
+package com.dohbedoh.config;
+
+import org.hibernate.SessionFactory;
+import org.springframework.beans.factory.annotation.Value;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+import org.springframework.context.annotation.PropertySource;
+import org.springframework.orm.hibernate4.HibernateTransactionManager;
+import org.springframework.orm.hibernate4.LocalSessionFactoryBean;
+import org.springframework.transaction.PlatformTransactionManager;
+
+import javax.sql.DataSource;
+import java.util.Properties;
+
+/**
+ * Created by Allan on 24/10/2015.
+ */
+@Configuration
+@PropertySource("classpath:database/hibernate.properties")
+public class HibernateConfig {
+
+    @Value("${hibernate.dialect}")
+    private String dialect;
+    @Value("${hibernate.show_sql}")
+    private String showSql;
+    @Value("${hibernate.format_sql}")
+    private String formatSql;
+
+    @Bean
+    public LocalSessionFactoryBean setupSessionFactory(DataSource dataSource) {
+        LocalSessionFactoryBean sessionFactoryBean = new LocalSessionFactoryBean();
+        sessionFactoryBean.setDataSource(dataSource);
+        sessionFactoryBean.setPackagesToScan("com.dohbedoh.model");
+
+        Properties hibernateProperties = new Properties();
+        hibernateProperties.setProperty("dialect", dialect);
+        hibernateProperties.setProperty("show_sql", showSql);
+        hibernateProperties.setProperty("format_sql", formatSql);
+
+        sessionFactoryBean.setHibernateProperties(hibernateProperties);
+        return sessionFactoryBean;
+    }
+
+    @Bean
+    public PlatformTransactionManager transactionManager(
+            SessionFactory sessionFactory,
+            DataSource dataSource) {
+
+        HibernateTransactionManager transactionManager = new HibernateTransactionManager();
+        transactionManager.setSessionFactory(sessionFactory);
+        transactionManager.setDataSource(dataSource);
+        return transactionManager;
+    }
+}
diff --git a/src/main/java/com/dohbedoh/dao/AbstractDAO.java b/src/main/java/com/dohbedoh/dao/AbstractDAO.java
new file mode 100644
index 0000000..3b06ccc
--- /dev/null
+++ b/src/main/java/com/dohbedoh/dao/AbstractDAO.java
@@ -0,0 +1,24 @@
+package com.dohbedoh.dao;
+
+import org.hibernate.Session;
+import org.hibernate.SessionFactory;
+import org.springframework.beans.factory.annotation.Autowired;
+
+/**
+ * Created by Allan on 23/10/2015.
+ */
+public abstract class AbstractDAO {
+
+    @Autowired
+    private SessionFactory sessionFactory;
+
+    protected Session getSession() { return sessionFactory.getCurrentSession(); }
+
+    public void persist(Object entity) {
+        getSession().persist(entity);
+    }
+
+    public void delete(Object entity) {
+        getSession().delete(entity);
+    }
+}
\ No newline at end of file
diff --git a/src/main/java/com/dohbedoh/dao/CompanyDAO.java b/src/main/java/com/dohbedoh/dao/CompanyDAO.java
new file mode 100644
index 0000000..fb69562
--- /dev/null
+++ b/src/main/java/com/dohbedoh/dao/CompanyDAO.java
@@ -0,0 +1,48 @@
+package com.dohbedoh.dao;
+
+import com.dohbedoh.model.Company;
+
+import java.util.List;
+
+/**
+ * Created by Allan on 12/10/2015.
+ */
+public interface CompanyDAO {
+
+    /**
+     * Delete a company.
+     * @param company {@link Company}
+     */
+    void delete(Company company);
+
+    /**
+     * Delete a company by Id.
+     * @param companyId a company id
+     */
+    void deleteById(String companyId);
+
+    /**
+     * Find a Company by name.
+     * @param name a company name
+     * @return {@link Company}
+     */
+    Company findByName(String name);
+
+    /**
+     * Get a the list of all companies.
+     * @return {@link List} of {@link Company}
+     */
+    List<Company> findAll();
+
+    /**
+     * Insert a company.
+     * @param company a {@link Company}
+     */
+    void insert(Company company);
+
+    /**
+     * Update a company.
+     * @param company a {@link Company}
+     */
+    void update(Company company);
+}
diff --git a/src/main/java/com/dohbedoh/dao/impl/CompanyDAOImpl.java b/src/main/java/com/dohbedoh/dao/impl/CompanyDAOImpl.java
new file mode 100644
index 0000000..c960235
--- /dev/null
+++ b/src/main/java/com/dohbedoh/dao/impl/CompanyDAOImpl.java
@@ -0,0 +1,62 @@
+package com.dohbedoh.dao.impl;
+
+import com.dohbedoh.dao.AbstractDAO;
+import com.dohbedoh.dao.CompanyDAO;
+import com.dohbedoh.model.Company;
+import org.hibernate.Criteria;
+import org.hibernate.Query;
+import org.hibernate.criterion.Restrictions;
+import org.springframework.stereotype.Repository;
+import org.springframework.transaction.annotation.Transactional;
+
+import java.util.List;
+
+/**
+ * Created by Allan on 23/10/2015.
+ */
+@Repository(value = "CompanyDAO")
+public class CompanyDAOImpl extends AbstractDAO implements CompanyDAO {
+
+    @Override
+    @Transactional
+    public void delete(Company company){
+        getSession().delete(company);
+    }
+
+    @Override
+    @Transactional
+    public void deleteById(String companyId) {
+        Query query = getSession().createSQLQuery("delete from company where company_id = :company_id");
+        query.setString("company_id", companyId);
+        query.executeUpdate();
+    }
+
+    @Override
+    @Transactional
+    public Company findByName(String name){
+        Criteria criteria = getSession().createCriteria(Company.class);
+        criteria.add(Restrictions.eq("name", name));
+        return (Company) criteria.uniqueResult();
+    }
+
+    @Override
+    @Transactional
+    public List<Company> findAll() {
+//        return (List<Company>) getSession()
+//                .createCriteria(Company.class)
+//                .setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY).list();
+        return (List<Company>) getSession().createCriteria(Company.class).list();
+    }
+
+    @Override
+    @Transactional
+    public void insert(Company company){
+        getSession().save(company);
+    }
+
+    @Override
+    @Transactional
+    public void update(Company company){
+        getSession().update(company);
+    }
+}
diff --git a/src/main/java/com/dohbedoh/model/Company.java b/src/main/java/com/dohbedoh/model/Company.java
new file mode 100644
index 0000000..b69e681
--- /dev/null
+++ b/src/main/java/com/dohbedoh/model/Company.java
@@ -0,0 +1,56 @@
+package com.dohbedoh.model;
+
+import javax.persistence.*;
+
+/**
+ * Simple Company: A name, a list of employees.
+ * <p>
+ * Created by Allan on 1/10/2015.
+ */
+@Entity
+@Table(name = "COMPANY")
+public class Company {
+
+    @Id
+    @GeneratedValue
+    @Column(name = "COMPANY_ID", precision = 5, scale = 0)
+    private int companyId;
+    @Column(name = "COMPANY_NAME", length = 32, nullable = false)
+    private String companyName;
+    @Column(name = "COMPANY_ADDRESS_ID", precision = 5, scale = 0, nullable = false)
+    private int addressId;
+    @Column(name = "COMPANY_CONTACT_ID", precision = 5, scale = 0, nullable = false)
+    private int contactId;
+
+    public int getCompanyId() {
+        return companyId;
+    }
+
+    public void setCompanyId(int companyId) {
+        this.companyId = companyId;
+    }
+
+    public String getCompanyName() {
+        return companyName;
+    }
+
+    public void setCompanyName(String companyName) {
+        this.companyName = companyName;
+    }
+
+    public int getAddressId() {
+        return addressId;
+    }
+
+    public void setAddressId(int addressId) {
+        this.addressId = addressId;
+    }
+
+    public int getContactId() {
+        return contactId;
+    }
+
+    public void setContactId(int contactId) {
+        this.contactId = contactId;
+    }
+}
diff --git a/src/main/java/com/dohbedoh/service/CompanyService.java b/src/main/java/com/dohbedoh/service/CompanyService.java
new file mode 100644
index 0000000..cdbc1d4
--- /dev/null
+++ b/src/main/java/com/dohbedoh/service/CompanyService.java
@@ -0,0 +1,15 @@
+package com.dohbedoh.service;
+
+import com.dohbedoh.dao.CompanyDAO;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.stereotype.Service;
+
+/**
+ * Created by Allan on 12/10/2015.
+ */
+@Service(value = "companyService")
+public class CompanyService {
+
+    @Autowired
+    private CompanyDAO companyDAO;
+}
diff --git a/src/main/ressources/database/boostrap.sql b/src/main/ressources/database/boostrap.sql
new file mode 100644
index 0000000..1b628a9
--- /dev/null
+++ b/src/main/ressources/database/boostrap.sql
@@ -0,0 +1,117 @@
+CREATE DATABASE DOHBEDOH;
+
+USE DOHBEDOH;
+
+CREATE TABLE CONTACT (
+	CONTACT_ID SMALLINT UNIQUE NOT NULL,
+	CONTACT_PHONE_NUMBER VARCHAR(12) NOT NULL,
+	CONTACT_FAX_NUMBER VARCHAR(12),
+	CONTACT_EMAIL VARCHAR(30),
+	PRIMARY KEY (CONTACT_ID)
+);
+CREATE INDEX CONTACT_ID_IDX ON CONTACT (CONTACT_ID);
+
+CREATE TABLE ADDRESS (
+	ADDRESS_ID SMALLINT UNIQUE NOT NULL,
+	ADDRESS_NUMBER VARCHAR(4) NOT NULL,
+	ADDRESS_LINE_1 VARCHAR(20) NOT NULL,
+	ADDRESS_LINE_2 VARCHAR(20),
+	ADDRESS_ZIP_CODE VARCHAR(5) NOT NULL,
+	ADDRESS_CITY VARCHAR(20) NOT NULL,
+	ADDRESS_STATE VARCHAR(20) NOT NULL,
+	ADDRESS_COUNTRY VARCHAR(20) NOT NULL,
+	PRIMARY KEY (ADDRESS_ID)
+);
+CREATE INDEX ADDRESS_ID_IDX ON ADDRESS (ADDRESS_ID);
+
+CREATE TABLE COMPANY (
+	COMPANY_ID SMALLINT UNIQUE NOT NULL,
+	COMPANY_NAME VARCHAR(32) NOT NULL,
+	COMPANY_ADDRESS_ID SMALLINT NOT NULL,
+	COMPANY_CONTACT_ID SMALLINT NOT NULL,
+	PRIMARY KEY (COMPANY_ID),
+	CONSTRAINT FOREIGN KEY (COMPANY_ADDRESS_ID) REFERENCES ADDRESS(ADDRESS_ID),
+	CONSTRAINT FOREIGN KEY (COMPANY_CONTACT_ID) REFERENCES CONTACT(CONTACT_ID)
+);
+CREATE INDEX COMPANY_ID_IDX ON COMPANY (COMPANY_ID);
+
+INSERT INTO CONTACT (CONTACT_ID, CONTACT_PHONE_NUMBER, CONTACT_FAX_NUMBER, CONTACT_EMAIL)
+VALUES(
+	1,
+	'0412345678',
+	'0412345679',
+	'office@company1.com'
+);
+INSERT INTO CONTACT (CONTACT_ID, CONTACT_PHONE_NUMBER, CONTACT_FAX_NUMBER, CONTACT_EMAIL)
+VALUES(
+	2,
+	'0423456789',
+	'0423456780',
+	'office@company2.com'
+);
+
+INSERT INTO ADDRESS (ADDRESS_ID, ADDRESS_NUMBER, ADDRESS_LINE_1, ADDRESS_LINE_2, ADDRESS_ZIP_CODE, ADDRESS_CITY, ADDRESS_STATE, ADDRESS_COUNTRY)
+VALUES
+(
+	1,
+	'123',
+	'Main St',
+	'Floor 17',
+	'4000',
+	'Brisbane',
+	'QLD',
+	'Australia'
+);
+
+INSERT INTO ADDRESS
+(
+	ADDRESS_ID,
+	ADDRESS_NUMBER,
+	ADDRESS_LINE_1,
+	ADDRESS_LINE_2,
+	ADDRESS_ZIP_CODE,
+	ADDRESS_CITY,
+	ADDRESS_STATE,
+	ADDRESS_COUNTRY
+)
+VALUES
+(
+	2,
+	'123',
+	'Main St',
+	'Floor 5',
+	'4000',
+	'Brisbane',
+	'QLD',
+	'Australia'
+);
+
+INSERT INTO COMPANY
+(
+	COMPANY_ID,
+	COMPANY_NAME,
+	COMPANY_ADDRESS_ID,
+	COMPANY_CONTACT_ID
+)
+VALUES
+(
+	1,
+	'Allan Corporation Pty Ltd',
+	1,
+	1
+);
+
+INSERT INTO COMPANY
+(
+	COMPANY_ID,
+	COMPANY_NAME,
+	COMPANY_ADDRESS_ID,
+	COMPANY_CONTACT_ID
+)
+VALUES
+(
+	2,
+	'Kaichu Corporation Pty Ltd',
+	2,
+	2
+);
\ No newline at end of file
diff --git a/src/main/ressources/database/database.properties b/src/main/ressources/database/database.properties
new file mode 100644
index 0000000..f4d43f8
--- /dev/null
+++ b/src/main/ressources/database/database.properties
@@ -0,0 +1,4 @@
+jdbc.driverClassName=com.mysql.jdbc.Driver
+jdbc.url=jdbc:mysql://localhost:8084/dohbedoh
+jdbc.username=root
+jdbc.password=admin
\ No newline at end of file
diff --git a/src/main/ressources/database/hibernate.properties b/src/main/ressources/database/hibernate.properties
new file mode 100644
index 0000000..a4f381a
--- /dev/null
+++ b/src/main/ressources/database/hibernate.properties
@@ -0,0 +1,3 @@
+hibernate.dialect = org.hibernate.dialect.MySQLDialect
+hibernate.show_sql = true
+hibernate.format_sql = false
\ No newline at end of file
diff --git a/src/main/ressources/logback.xml b/src/main/ressources/logback.xml
new file mode 100644
index 0000000..e2a8267
--- /dev/null
+++ b/src/main/ressources/logback.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<configuration>
+
+    <!-- Example of a Console appender -->
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+        <!-- encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
+        <encoder>
+            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n</pattern>
+        </encoder>
+    </appender>
+
+    <!-- Example of a File appender : this appender only write service package logs as defined by the service logger-->
+    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
+        <file>maven-java-sandbox.log</file>
+        <encoder>
+            <pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
+        </encoder>
+    </appender>
+
+    <!-- Strictly speaking, the level attribute is not necessary since -->
+    <!-- the level of the root level is set to DEBUG by default.       -->
+    <root level="INFO">
+        <appender-ref ref="STDOUT" />
+    </root>
+
+    <!-- Set the log level to a specific package in the application -->
+    <!-- Setting the same appender to multiple logger may duplicate the logs (if appender attached to an ancestor) -->
+    <!-- Additivity flag specify whether the logging output should be send to the ancestors appender as well -->
+    <logger name="service" level="DEBUG" additivity="false">
+        <appender-ref ref="FILE" />
+    </logger>
+
+</configuration>
\ No newline at end of file
diff --git a/src/test/java/com/dohbedoh/dao/CompanyDAOTest.java b/src/test/java/com/dohbedoh/dao/CompanyDAOTest.java
new file mode 100644
index 0000000..93a7558
--- /dev/null
+++ b/src/test/java/com/dohbedoh/dao/CompanyDAOTest.java
@@ -0,0 +1,21 @@
+package com.dohbedoh.dao;
+
+/**
+ * Created by Allan on 23/10/2015.
+ */
+public class CompanyDAOTest {
+
+    private CompanyDAO companyDAO;
+
+    public void testUpdate() {
+
+    }
+
+    public void testInsert() {
+
+    }
+
+    public void testDelete() {
+
+    }
+}
diff --git a/src/test/java/com/dohbedoh/service/CompanyServiceTest.java b/src/test/java/com/dohbedoh/service/CompanyServiceTest.java
new file mode 100644
index 0000000..3110859
--- /dev/null
+++ b/src/test/java/com/dohbedoh/service/CompanyServiceTest.java
@@ -0,0 +1,7 @@
+package com.dohbedoh.service;
+
+/**
+ * Created by Allan on 23/10/2015.
+ */
+public class CompanyServiceTest {
+}
diff --git a/src/test/ressources/logback-test.xml b/src/test/ressources/logback-test.xml
new file mode 100644
index 0000000..2fa5628
--- /dev/null
+++ b/src/test/ressources/logback-test.xml
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<configuration>
+
+    <!-- Example of a Console appender -->
+    <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
+        <!-- encoders are assigned the type ch.qos.logback.classic.encoder.PatternLayoutEncoder by default -->
+        <encoder>
+            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{5} - %msg%n</pattern>
+        </encoder>
+    </appender>
+
+    <!-- Example of a File appender : this appender only write service package logs as defined by the service logger-->
+    <appender name="FILE" class="ch.qos.logback.core.FileAppender">
+        <file>maven-java-sandbox.log</file>
+        <encoder>
+            <pattern>%date %level [%thread] %logger{10} [%file:%line] %msg%n</pattern>
+        </encoder>
+    </appender>
+
+    <!-- Strictly speaking, the level attribute is not necessary since -->
+    <!-- the level of the root level is set to DEBUG by default.       -->
+    <root level="WARN">
+        <appender-ref ref="STDOUT" />
+    </root>
+
+    <!-- Set the log level to a specific package in the application -->
+    <!-- Setting the same appender to multiple logger may duplicate the logs (if appender attached to an ancestor) -->
+    <!-- Additivity flag specify whether the logging output should be send to the ancestors appender as well -->
+    <logger name="service" level="INFO" additivity="true">
+        <appender-ref ref="FILE" />
+    </logger>
+
+</configuration>
\ No newline at end of file