The inception of the Extreme Programming methodology has brought test-driven development and continuous integration into mainstream Java development practices. Applying these techniques to Java server-side development can quickly become a nightmare if you don't have the right tools. This article describes how to deal with continuous integration and how to use DbUnit in conjunction with JUnit to control the test environment end-to-end by setting up the state of the database before each test.
Automated builds aren't just for development teams — they can be extended to facilitate moving software from development all the way into production. This article describes how to use Ant with Java™ Secure Channel for remotely deploying software into multiple target environments.
With software applications becoming increasingly complex and the demand for rapid deployment (including rapid prototyping) of software applications increasing, automated tools and updated methods for software development have become necessary. It follows that these new software development processes require new approaches for software safety. One company’s 15-element Software Safety Process has now been adapted to a model-driven, spiral software development effort. This process provides an open working relationship to incrementally identify the causes of hazards at different levels.
With so many Continuous Integration (CI) servers to choose from, it can be difficult to decide which one is right for you. This article looks at a handful of open source CI servers, including Continuum, CruiseControl, and Luntbuild, using a consistent evaluation criteria and illustrative examples.
Service-oriented architecture (SOA) is taking a center stage in enterprise architecture. SOA enables parallel development by multiple disparate teams, each with its own delivery and maintenance schedule. In this article, I will examine service-versioning approaches, allowing service implementations to evolve without breaking existing consumers, leading to more loosely coupled SOA implementations. The basic idea of service versioning is fairly simple, but its implementation requires strict governance. I will discuss units of versioning; service changes, constituting a new version; service version life-cycle considerations; and version deployment/access approaches. The method-based service versioning proposed here allows one to minimize the impact of versioning and to reduce amount of deployed code. Semantic messaging for service-interface definitions makes service implementation more resilient to change.
While language-oriented toolsets become more advanced the range of development and deployment tools for databases remains primitive. How often is the DBA left sitting in the corner? Are you scared to change your database because other applications are using it? Do you have difficulty rolling out incremental changes to your databases? Does your database prevent you from releasing your software more frequently? Using real-world experiences - and the principles outlined in Ambler and Sadalage’s Refactoring Databases, this paper aims to demonstrate how to take control of the database and make it possible to incrementally evolve and improve its design. With these techniques the database need no longer be the bottleneck in your develop-test-deploy process. This paper features ideas on how to best use open source tools including Ant, CruiseControl and dbdeploy.
EGit is an Eclipse Team provider for the Git version control system. Git is a distributed SCM, which means every developer has a full copy of all history of every revision of the code, making queries against the history very fast and versatile.