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