Chapter 1. A J2EE Adaptive Foundation

The Java 2 Platform, Enterprise Edition (J2EE) is the premier development platform for distributed enterprise-level solutions. By incorporating a wealth of enterprise services under the umbrella of the J2EE framework, the J2EE platform enables the skilled Java engineer to build and deploy component-based, multitiered software applications.

I believe the J2EE platform provides the services necessary for building quality enterprise solutions, but that J2EE by itself is not sufficient to deliver systems within the tight timeframes demanded by modern businesses. Achieving this goal requires taking a broader view of the enterprise-software development process than purely focusing on the services of the J2EE Framework.

The problems J2EE developers face relate to the complexity and ever-changing nature of business software. For rapidity, we need to safeguard ourselves against the schedule-destroying impact of such changes. This book looks beyond the J2EE platform and advocates the use of techniques and practices for putting in place an adaptive foundation as the basis for the rapid development of J2EE enterprise solutions.

The term adaptive foundation summarizes the requirements of this broader development approach:

  • The foundation is a set of building blocks in which a company must invest to construct a stable platform for rapid development projects.

  • Adaptive describes the need to have practices in place that have the flexibility to accommodate change within the project’s schedule.

This book introduces a range of techniques and best practices that complement the development of J2EE applications. Some of the topics we cover include iterative development, model-driven architecture, code generation, aspect-oriented programming, and test-driven development. These software engineering techniques are all candidates for inclusion in your adaptive foundation.

This opening chapter defines how investment in tools, training, and education, together with a program of continual improvement, must underpin these techniques and practices. Collectively, these elements form a solid foundation for the rapid development of enterprise systems on the J2EE platform. We look at the importance of defining this adaptive foundation as part of a wider development strategy that project teams can use as a springboard for accelerating the development process.

The Need for Rapid Development

Developers of enterprise-level software are coming under ever-increasing pressure to deliver systems in ever-decreasing timeframes. Information technology (IT) is an enabler for business, and to compete effectively, modern companies require support from the systems that underpin their core business processes. The requirement for rapid development primarily exists because of the need to have these important systems keep pace with the fast-changing nature of today’s agile businesses.

This is the yardstick for a rapid development project, not to deliver solutions in a short time-frame but to deliver business critical functionality as and when required by the business.

This presents us as professional software engineers with something of a dichotomy. While professionalism and personal pride dictate that we engineer solutions to the highest quality, business wisdom demands that the solution is both economically viable and has a short time to market. Enterprise software engineers frequently find themselves in the position aptly captured by the often-quoted adage “cost, quality and speed—pick any two”; nevertheless, the need to stay ahead of the chasing pack requires delivering on all three.

To understand why software organizations struggle to achieve these goals, let’s consider some of the unique challenges involved in producing enterprise systems.

The Enterprise Challenge

The J2EE platform is for the development of enterprise-level systems, with an enterprise system defined as an information system that supports the various business processes of an organization.

This definition caters to an extremely broad spectrum of applications and encompasses systems as large and diverse as payroll, customer billing, stock management, human resources, point-of-sale, and decision support systems, to name but a few.

Developing systems at this enterprise level presents software engineers with some very real challenges that go beyond the traditional difficulties associated with standalone shrink-wrapped software.

Here are some of the main concerns a developer must consider when designing and building enterprise-level software:

  • Security.

    Security is a high priority for all organizations, and security requirements consequently permeate all levels of the system. Virtually all corporate bodies have security policies in place that are mandatory across all applications.

  • Operational criteria.

    The operational facets of an enterprise system can encompass a wide range of requirements. Aspects such as high availability, reliability, and scalability are all prerequisites for enterprise solutions.

  • Transaction support.

    The transaction is a fundamental element of any business-oriented application. Many of today’s database vendors have long offered support for transactions. However, for the enterprise system, the boundaries of a transaction are not constrained to the database. Rather, true global transactions can involve many databases and disparate information systems. This presents very real challenges when attempting to maintain transaction integrity across all systems in an IT infrastructure.

  • Legal requirements.

    Information held by most enterprise-level systems can be of a sensitive nature. Specifically, information relating to individuals is usually covered by government legislation that serves to protect the individual’s privacy. Any system holding such data is therefore bound to comply with these overriding laws.

  • Auditing requirements.

    Auditing is closely linked with security and legal requirements. Company watchdogs monitor system access as well as the use of potentially sensitive corporate data. As such, most organizations have in place a standard set of auditing requirements for all systems.

  • Quality standards.

    Quality is now a business watchword, and quality standards permeate all levels of successful and highly structured organizations. IT systems are not excluded from these standards, and any vendor engaged in the development of bespoke software is expected to comply with whatever standards the customer believes are relevant.

  • Enterprise resources.

    A company’s IT landscape is often cluttered with enterprise resources that must be carefully negotiated. Data warehouses, integration brokers, and content management systems are but a few examples of the strategic resources with which new applications are often required to interoperate.

The J2EE platform was designed to help overcome these challenges, thereby simplifying the development of enterprise systems. This next section summarizes the benefits the J2EE platform provides the enterprise software engineer.

The J2EE Platform

The J2EE platform targets the development and deployment of distributed, multitiered software applications. J2EE achieves this by defining a rich set of services based around object distribution, transaction management, security, state management, and resource management. These services build on those already provided by the Java 2 Platform, Standard Edition (J2SE).

The features of the J2EE platform significantly reduce the overall level of effort for enterprise developers by providing a robust architectural infrastructure they would otherwise have had to implement themselves. By delegating responsibility of system concerns to the J2EE server, developers are free to focus on the implementation of distributed components that address the needs of the business.

Despite these advantages, in order to undertake the rapid development of enterprise systems, the technologies of the J2EE platform must form an integral part of a wider adaptive development approach to software engineering.

Defining an Adaptive Foundation

Undertaking the rapid development of enterprise software requires having a strategy in place that sees the entire project team suitably equipped for the task. The techniques and practices introduced throughout this book each contribute toward developing quality software for the J2EE platform faster. However, to gain maximum advantage from the topics covered, project teams must be suitably prepared for their use.

Preparation requires underpinning the topics discussed with proper tools, training, research, and ongoing support and investment from management. Combining these critical elements, along with suitable techniques from this book, gives rise to the concept of producing an adaptive foundation as the basis for the rapid development of enterprise software. The term adaptive foundation reflects both the need to have a base in place for project teams and that the elements that make up this base must have the capacity to accommodate the changing nature of business software.

Why a Foundation?

The term foundation cements the concept of requiring the necessary building blocks to be in place in order to perform rapid development. Arguably, the term framework would have been equally applicable. However, framework is already a well-used term within software engineering, and the intent was to avoid confusion with established frameworks such as Apache Struts or even J2EE.

Frameworks such as these form only part of the foundation for an effective rapid development strategy.

Why Adaptive?

Perhaps the biggest schedule killers are the continual changes that bombard a development project throughout its lifecycle. These changes originate from a variety of sources, including changes in requirements, design, scope, and even in team members, customers, and management. All have the potential to adversely impact the delivery timeframe of a software business solution.

The software engineering practices we adopt must be flexible enough to absorb the impact of such changes, allowing the course of the project to change direction when required and hence generate a system that meets the needs of the customer.

The techniques and practices included in this book all fit the criterion of being able to operate within a fluid and dynamic development environment. Within these pages, you’ll therefore find such practices as iterative development, active code generation, test-driven development, and aspect-oriented programming. These practices, and others like them, serve to supplement the enterprise development services already available on the J2EE platform.

Laying the Foundations for Rapid Development

We have established that to meet the challenges of developing enterprise software, a software development company must invest in its own adaptive foundation in order to be in a state of readiness for project work. Rapid development is not possible if a team has to learn how to use new tools and techniques during the course of a project. This learn-as-you-go-approach is commonplace in the software industry but is not conducive to the delivery of on-time solutions to the customer. Instead, investment in tools and training, along with research into the most effective development practices, should all take place well ahead of the project starting up.

This same logic applies to all facets of the project. Here is a list of the concerns in which a software development company should invest if it is to build a solid foundation for conducting rapid development projects:

  • People

  • Tools

  • Frameworks

  • Practices

  • Standards

  • Processes and procedures

  • Training

  • Continuous improvement

Over the course of the next sections, we examine how each of these elements contributes to the successful outcome of an enterprise project.

People

Developing software is a people-centric process. The success of the project revolves around the skills and experiences each member of the team brings to the development.

Endeavoring to recruit individuals with the right experience, skills, and attitude is an important factor in forming a team capable of conducting a rapid development project. A further factor is ensuring software engineers are suitably motivated and empowered to perform their work. The best method of achieving this goal is to provide a working environment that fosters personal growth through training and mentoring, and rewards and acknowledges excellence in all aspects of the software engineering discipline.

Tools

Software development is complex, and having the correct tools in place to underpin the process can contribute greatly to the accuracy and quality of the software produced. The tools selected should improve the productivity of the team, making efficient use of the skills each member of the team possesses. An experienced team will assist in the process of identifying those tools best suited to the task ahead.

Frameworks

In the context of this book, the J2EE platform is the core framework for the development of all enterprise software. Having staff with significant experience and knowledge of the J2EE platform available for working on a project is key for its success.

J2EE, however, is unlikely to be the only framework employed on a project, although it will be the most significant. Many frameworks exist that augment the services of J2EE, such as frameworks for Web application development or as an alternative persistence mechanism to entity beans. Additionally, a company may invest in the development of its own framework for a specialized business area.

Practices

Adopting best practice software engineering techniques results in better software. By investing in proven practices, companies put in place the building blocks that enable software engineers to construct high-quality enterprise solutions. Some examples of best practices include adopting a test-first, or test-driven, approach to development or the use of design patterns in software architecture.

Standards

Standards serve to unify the way we work as a team or set of teams, and provide the detail around the many and varied tasks of systems development. Examples include standards for coding, design, and documentation. They exist as a means of providing a consistent level of quality across all project artifacts.

Processes and Procedures

Having established a working set of best practices, the step of documenting them as a set of processes and procedures pulls them together as a reference for a company’s adaptive development foundation. Moreover, well-defined procedures provide a roadmap for the critical ancillary tasks that make up a complete development project. Such tasks include the use of source control, the raising and tracking of defects, and the release of software into test environments. Having procedures in place for these tasks before a project starts up is a major time saver.

Anyone embarking on a new project will have these procedures as a set of blueprints for setting up and running an effective rapid development project. Likewise, staff moving on to an existing project will have a detailed set of instructions as to how they work as part of the project team. This leaves people free to focus on the important task of developing software.

Training

Investing in training addresses the problem of the high learning curve associated with software development. Training is a must if all members of a project team are to work productively. Training is required in all elements of the way a company develops software, not just for Java and the J2EE platform. This list of training requirements includes the use of tools, methodologies, software development practices, and internal development processes and procedures.

Training needn’t be just about people sitting in classrooms and taking courses. People can learn through a variety of different mediums:

  • Independent study by reading books and articles

  • Collaborative learning with study groups

  • Attending conferences and seminars

  • Building prototypes

  • Mentoring from experienced staff

The key point is to look beyond generic classroom-based training courses, as these are likely to be unavailable for all of your chosen foundation practices.

Continuous Improvement

The software development industry does not stand still, and new tools, techniques, and practices are continually emerging. A company’s adaptive foundation for development must itself be adaptive and capable of incorporating best-of-breed practices as they emerge. Likewise, existing practices already in use by project teams should undergo continual evaluation, with feedback from teams shaping the future direction of a company’s development strategy.

Keeping the adaptive foundation up to date requires investing time and effort in a program of continuous improvement. Staff members need to research new techniques to determine their suitability, while information gained on the use of existing practices must be fed back into the process. Time must be set aside to write up the ongoing findings of a continuous improvement program, with the presentation of recommendations made periodically to the company’s development staff.

Foundation Investment Benefits

Establishing an adaptive foundation for rapid development requires a sizeable investment in terms of time and money. In a busy development shop or IT department, both of these commodities can be in short supply. Furthermore, the benefits of defining an adaptive development foundation can be difficult to justify in the short term, as the greatest returns are only realized after the completion of several projects. Consequently, convincing both company management and colleagues of the need for such an investment is not an easy task. Nevertheless, compelling reasons for making this investment exist:

  • Competitive advantage.

    This reason is also synonymous with a happy customer. The efficiencies resulting from streamlining a development process enable the production of high-quality software at a lower cost. High quality and low cost are both reasons why a customer would choose you over your competitors.

  • Resource sharing.

    Putting in place a companywide development foundation makes the process of moving between projects considerably easier for staff, as everyone understands how a project functions. The tools are familiar, as are the practices, processes, and procedures. Likewise, everyone should be working to a common set of principles and standards. No time is lost with an individual coming up to speed with the idiosyncrasies of a particular project.

  • Return on investment (ROI).

    Training budgets need to be spent wisely, and enterprise-level development tools tend to carry high price tags. Focusing money and effort on a consolidated set of development needs makes these funds go further. A consolidated approach provides a greater return than spreading scarce budgetary resources too thinly over a hotchpotch development strategy comprised of noninteroperable tools and incongruent practices.

  • Consistency.

    Following repeatable methods using a common framework and tools brings an element of repeatability to the software development process. This repeatability translates directly in accurate estimates, thereby enabling the objective evaluation of the risks of taking on new project work.

  • Improved morale.

    Finally, software developers enjoy working on projects that regard software engineering as a professional discipline. A company’s willingness to invest in its staff and promote a best-practice approach to enterprise software development is an indicator of an organization that takes software engineering seriously.

Unfortunately, several barriers exist to achieving these benefits. These next sections highlight some of the factors that must be addressed in order to see a successful adaptive foundation put in place within a company.

Critical Success Factors

There are several key factors involved in successfully adopting a companywide infrastructure for the purposes of undertaking effective, and hence rapid, software development. The establishment of a successful foundation as a base for rapid development requires meeting each of these factors, which include:

  • Achieving acceptance of the various tools, techniques, and practices by all staff

  • Ensuring all development staff receive education on the various elements that make up the adaptive foundation

  • Gaining full support from management for the uptake of the foundation

These next sections elaborate on these points and look at options for achieving these key success points.

Obtaining Developer Acceptance

Software engineers can be a very difficult crowd to please. As software development is a people-centric process, achieving a universal uptake of your proposed new development methods requires obtaining agreement and support from the people who develop the systems. Achieving this buy-in from fellow software engineers often requires the diplomacy skills of Henry Kissinger.

A companywide development approach is truly effective only if the developers are willing to embrace its methods and adopt its practices. Gaining acceptance from all developers builds up a critical mass of information, which sees the adopted tools, methods, and practices continually refined and evolved based on the experiences of the different project teams.

All project teams can benefit from this growing body of knowledge. However, teams that ignore the guidance of a company’s proven practices and follow a different path soon find themselves isolated. If trouble strikes, the relevant expertise is unlikely to be available on other teams to assist the team with any problems that arise from the use of a divergent technology.

Admittedly, this scenario is common with development technology, because new projects often embrace the latest and greatest, if for no other reason than that the customer demands it. However, in this case, examples of breakaway groups include teams that use an alternative source-control system or decide the company’s chosen development methodology is not to their liking.

tip

Adopt new techniques and practices as the project demands, but make use of a company’s proven methods where they are available.

Obtaining the support of colleagues for defining this unifying development strategy is best achieved by encouraging everyone to become actively involved in its formation. You should make it possible for everyone to research new methods and contribute to the evolution of the adaptive foundation. Avoid creating a single group charged with this responsibility, since doing so will likely generate resentment among those software engineers outside of the process.

Involving everyone in the process of forming an adaptive foundation for development may present logistical problems where a large company or IT department is involved. Where a large group is concerned, you may need to resort to other tactics. Here are a few options you might want to consider.

Seminars

Run regular seminars to advise the group on the state of play of the development strategy. Encourage questions from the floor and make sure you get back to people with answers at the next scheduled seminar. Also, be prepared to take onboard any suggestions that come out of these sessions.

Another option is to invite to people to speak at the seminars. Try to get speakers from different teams so that input is taken from all sides. You also might want to consider videoing the presentations at these seminars and making them available online.

Groupware

The setup of a collaborative Web site, or Wiki, is also a good option for your hardworking colleagues who don’t like leaving their desks to attend meetings and seminars.

tip

See http://www.tikiwiki.org or http://www.plone.org for open source versions of groupware products.

Using collaborative groupware of this nature fosters an environment of teamwork and encourages everyone to contribute feedback to the development and growth of an adaptive foundation that incorporates tools and practices everyone wants to use.

These collaborative intranet sites are also a good mechanism for the distribution of documentation on the use and application of the tools and practices that make up the foundation of the development strategy. Distribution of information on the use of the adaptive foundation relates to education, which is one of the critical success factors we discuss in the next section.

Education

When undertaking a particularly challenging software engineering task, most of us would prefer to solve the problem by taking a path we have already traveled. This usually involves falling back on the tools and techniques with which we are already familiar and consequently lie within our comfort zone. This attitude is understandable, as having become expert with a certain technology, few of us relish the thought of discarding all that hard-earned knowledge and starting from scratch with an alternative approach.

This reluctance to step outside of our own personal comfort zones is a primary reason why development strategies that prescribe the use of specific tools, methods, and practices struggle to gain widespread acceptance within an organization; people like to stick with what they already know, despite the benefits of alternative, and potentially superior, approaches. The key to overcoming this reluctance to embrace new approaches is education.

Education expands people’s comfort zones. It gives them the confidence to work with the methods of an adaptive foundation on critical projects.

To be effective, education must encompass every aspect of the software development process and be available to all members of a project team. Seminars should be run frequently, and comprehensive documentation must be available on all facets of the foundation’s methods and tools. Seminars and training courses are essential for new staff, and the makeup of projects should always include someone experienced with the adopted development process as part of the team in at least an advisory or mentoring capacity.

In my experience, failure to provide an adequate level of education on the methods of a company’s chosen development foundation leads to project teams pushing their own approaches. This situation ultimately results in a fragmented development approach between teams that does not yield the same benefits as a consolidated and cohesive development strategy.

important

Adopting a companywide development strategy does not mean being dismissive of the skills and experiences people bring to the project. The formation of an effective adaptive foundation depends on input from all staff. Rather than dismissing people’s ideas, evaluate them on merit to see if they warrant inclusion as part of the broader foundation approach.

Management Support

It isn’t possible to establish a foundation for rapid development without the full support of management. Management needs to support the concept and, where appropriate, enforce the concept.

To successfully build and maintain an adaptive foundation requires investment. Tools must be purchased, training organized, and time set aside for researching new technologies or trialing emerging development practices.

Management also has an active role to play in gaining global acceptance of the foundation’s methods. Despite the use of seminars, collaborative Web sites, and ongoing education, certain groups or individuals may still attempt to undertake project work using methods that are tangential to those of the other teams. In this instance, if teams are unable to justify their approach adequately, then management must bring these teams into line. Failure to do so will marginalize the investment in the adaptive foundation.

On a cautionary note, management should avoid being overly heavy-handed. Software development is a creative process that is unlikely to become the factory-line-production process many people would like it to be. The drive to establish a common development strategy should be tempered with the need for software engineers to trust their own judgment and be given the leeway to build solutions to the best of their capabilities.

The intent of an adaptive rapid development foundation is to augment the skills of the project team in the pursuit of building better software solutions for the customer. A fine line exists between approaches that stifle the creative process and those that encourage it. Ensuring the adopted strategy does not cross this line requires constant refinement of the approach with feedback from project teams.

To conclude this chapter, the next section outlines the contents of this book and the topics that are introduced as potential candidates for inclusion in a company’s adaptive foundation.

Summary

Proper preparation is vital to the success of a rapid development project. Companies and project teams must ready themselves for efficient development by investing in an adaptive foundation for development that encompasses a complete software development infrastructure.

This overarching adaptive infrastructure goes beyond the choice of tools, techniques, and practices, and mandates a significant investment in education and research activities necessary to maintain these elements as a suitable platform for ongoing rapid development projects.

The concepts of the adaptive foundation pervade every chapter of this book. For each tool, technique, and practice introduced, the underlying expectation is that every element adopted as part of an adaptive foundation will receive an appropriate level of investment.

Throughout the remainder of this book, we look at techniques that expand upon the J2EE platform as a basis for conducting the rapid development of enterprise software.

The next chapter looks at the techniques that have become synonymous with the subject of rapid application development and highlights the value of prototyping as part of the development process.

Additional Information

Although the contents of this book complement the J2EE platform, this book is not a reference manual for J2EE. If you require further information on the platform, an excellent starting point is Sun Microsystems’ J2EE site, which contains a comprehensive listing of J2EE resources. The Sun Web site can be found at http://java.sun.net/j2ee.

..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.148.145.2