The last year, I was at Jazoon 08, and I forget to tell you how good some of their presentation about Maven were

Let the Continuous Build Embrace Your Database

"JUnit tests should not depend on database state." - "Set up your test data before you run your test." - We figure this just does not always scale. Mocking test data for hundreds of tables may not be suitable and database schemes evolve as the application does.
These are common challenges when developing large J2EE systems. This presentation shows practical approaches for project setups and (functional) tests that decided to depend on a database. Developers and build servers may or may not share the database and support for this should be as simple as possible. We give an overview of what proved to be a good setup for an Eclipse / Maven 2 based development and build environment that relies on an evolving relational schema.

Read More Here 

The PDF cannot be downloaded, fortunately  I‘ve made a backup just in case 2 years ago. I did upload the presentation at SlideShare

Here is the mind map I’ve done during the presentation

  • Continuous build for DB
    • db changes
      • SQL script patches
      • changes in chema
      • different db state for  each trunk tag branches?
      • = hell of synchronization issues
      • they put script in SVN
      • only run modified scripts between each or last build
      • run SQL script against references db before pushing the same changes to prod
      • ex: developer commit, build server poll SVNand launch build, then propagate
      • they use continuum
    • they have made a framework that has some tables more to keep which files .SQL has run
    • and what .sql revision svn it was
    • so they can only run delta scripts
    • ex: version 1.0 in prod, but bug appear
      • -> open a branch
      • -> automatic run of branch sql scripts also to trunk
    • Idempotent
      • but the same script apply twice on different database status do not gibe the same result
        • so they have to make script idempotent by checking/handling all previous versions
      • views ad trigger can be Idempotent easily
    • they have DB quality checks
      • primary keys constraints
      • foreign keys
      • etc..
  • fightning bugs
    • not breaking sql scripts
    • no regressions
  • rerunnable junit functional tests
    • auto rollback junit class
      • their own impl of datasource
        • and connection
    • don’t expect developer to properly rollback called in teardown
    • extends autorollbackjunittestcase.class
    • autorollbacktestcase also existing in spring see spring-test.jar
  • eclipse maven setup
    • for junit tests
    • read junit.properties
    • if any junit-fritz.properties  exist it will use the user config file
      • good idea
      • the file will e committed but wont break continuum build server
    • multi modules
      • different classpath (test and main) between eclipse and maven
      • they use propertes in pom.xml and  variable in properties
        • -> filter
  • done by teslekurs
    • they have 70 modules
    • netcetera.ch
  • make a try
    • go to workspace in dos
      • run in pk common "mvn clean test" it should build common like in teamcity
    • Use spring test framework of spring 2.5
  • outlook
    • only oracle
    • they search good test data among their 1TB data
    • want to use maven in also in eclipse, they use the command line right now
  • ideas
    • they store the script they have run to create the database and their SVN revision in db

      someone in room has propose to keep the data in build and add a column to know if data was created by Junit or by the main code


Database with junit

You might like also

Fetching artifact programmatically through REST/API in Nexus 3.x
There is so many case where it is desirable to pull down artifact from Sonatype Nexus using REST API, unfortunately Nexus 3.x Rest API are still under development... Some use cases in Nexus 2.x: You have a script that uses REST call to pull down the LATEST maven artifacts every night from Nexus and deploys them. You make extensive use of the REST API in all your puppet modules You use the Atlassian Puppet module for Nexus for creating repository, …
815 Days ago
When working with many feature/release/bugix/hotfix branches, it is a bad idea to start changing the pom version as this will create merge conflicts using pull request. this plugin allow you to keep in ALL branches the same pom version for all your projects, for example MASTER-SNAPSHOT the version will be derived from branch name automagically :-) You may want to read more first these 2 short articles Update Maven pom version on GIT checkout in TeamCity maven-release-plugin with GIT git-branch-renamer-maven-plugin …
827 Days ago
Review: Getting Started with Apache Maven by Russell Gold
Some time ago I was asked if I would like to write a review about one of the new video courses from Packt Publishing. It was "Getting Started with Apache Maven" http://bit.ly/1fycmpP by Russell Gold and since I have been using Maven for some years now (since 2007) and did publish some articles myself, I thought it would be nice to help them promote Apache Maven. The course is organized in eight chapters, forty videos with a length between two …
2014 Days ago
Update Maven pom version on GIT checkout in TeamCity
Here is a solution to the following problems Deriving Maven artifact version from GIT branch, Update pom version on GIT checkout automatically, Add the ability to use Pull request with Apache Maven. You have a workflow requirement that require you to have the artifact version of a module externally defined from the current branch in GIT. For example You want to start working on a new feature branch “feature-memory-improvement”, so you branch from master a new branch named feature/feature-memory-improvement Having …
2019 Days ago
Easily Compress Web Application Resources with EhCache
Resources such as JavaScript and CSS files can be compressed before being sent to the browser, improving network efficiencies and application load time in certain case. If you are not using Apache with mod_deflate or nginx in front of your web application, you may need to implement resources compression yourself…. Wait! don’t start writing your own filter to compress files like CSS, html, txt, javascript it is way more difficult than you think to properly handle http response headers and …
2501 Days ago
Tomcat 7 and Apache Maven
Here is 3 different way to control the lifetime a local Tomcat 7 container using Apache Maven. A typical scenario would be to start a servlet container prior to running integration tests (Selenium, SAHI or using any other framework you can think of ) With the following examples, you will be able to start an instance of Tomcat 7 running your web application in the pre-integration-test phase and stop the instance in the post-integration-test phase. You can also decide to …
2501 Days ago
Apache Maven copy local file to a remote server server using SSH
I will show you in an Apache Maven configuration file how to copy files to server each time the package phase is executed. Solution with Ant SCP task This snippet of code is a ready to use code that make use of Apache Ant task scp, Just put this snippet of code in your Maven module where the assembly is executed or anywhere else to push all tar.gz files to a server just run a maven mvn package, you can …
2689 Days ago
Apache M2Eclipse: Get rid of Duplicate resources when opening resources and types
In this small post, I’ll show you how to remove duplicated resources in the Open Resource view of Eclipse Eclipse – M2Eclipse – Subversive …
2695 Days ago
Apache Maven 3 Cookbook
&160; First a big thanks to Packt Publishing for having sent me this book to review! I did enjoy going through this book, while I did not learn a lot of new stuff (I am using Apache Maven daily since 2006!), I found it to be concise and would recommend it anytime to any of my colleagues. But let’s go through my review of this cookbook of over 50 recipes towards optimal Java Software Engineering with Maven 3: Apache Maven
2837 Days ago
Apache Maven 3 Cookbook Review
Thanks to Packt Publishing for having sent me this book to review. I will publish a review in the next coming days Grasp the fundamentals and extend Apache Maven 3 to meet your needs Implement engineering practices in your application development process with Apache Maven Collaboration techniques for Agile teams with Apache Maven Use Apache Maven with Java, Enterprise Frameworks, and various other cutting-edge technologies Develop for Google Web Toolkit, Google App Engine, and Android Platforms using Apache Maven You …
2883 Days ago