Professional Documents
Culture Documents
PRESENTATION ABSTRACT
Business owners believe that developing and deploying J2EE/Java applications is as
simple as using a development tool to write the application code and port that code for
both internal and external usage.
Many steps are considered when developing and deploying Java applications to the
enterprise. These include architectural surveys to better understand the scope of the
project, deployment strategies and platforms, service level agreements, quality assurance
testing, and production management. Too often one or more of these steps is ignored,
leading to failure for most projects.
This presentation discusses the pitfalls of deploying poorly developed, tested and
managed applications and then demonstrates how to mitigate the problems by focusing
on proper deployment strategies. Usage of both Oracle and Compuware technology are
discussed as part of the overall solution to improve value to the customer.
By attending this presentation, each attendee should understand how the
deployment pitfalls affect them and how Compuware can mitigate these pitfalls with
technology, helping to ensure that future deployments of Java applications are more
successful.
INTRODUCTION
Developing J2EE applications is generally the easiest portion of the application
deployment project. The technology for developing the application has already been
chosen. The platforms to be supported/deployed upon have been chosen. The target
audience has already been informed and they have also provided input into the
application design process. Resources for supporting the application deployment process
have been acquired, tested, and installed prior to the final installation. Test plans
designed to validate application functionality have been created and validated by users.
Management has agreed to the application deployment terms and service levels prior to
deployment. Or has everything been assumed it will happen?
Too many application deployments fail because one or more components of the
process is incomplete, bypassed, forgotten or ignored. Stating examples in this white
paper is unnecessary, as everyone can think of specific cases within their organization
where application rollouts failed for one reason or another.
J2EE applications increase the complexity of deployments by attempting to
integrate multiple, disparate technologies, incomplete standards, and third-party solutions
into one solution. The good news is that everything discussed in this paper, and the
associated PowerPoint presentation, applies not only to J2EE but also for EVERY
application deployment. So, read carefully, take notes and be prepared to field questions
from management when failures occur.
Paper 36726
Page 1 of 11
Application Server
Paper 36726
Page 2 of 11
Application Server
data is executed each time, or is never executed? In one extreme, resources were utilized
to retrieve and process the same data over and over again, or the code to present the
data to the user is never executed by the application.
Coding inefficiencies at the component level have a dramatic affect on application
performance as resources are exhausted by the application whereas they could have been
used by other applications. A secondary goal should be to ensure that each component of
an application properly utilizes resources it consumes, and does not disturb the
consumption of resources by ancillary applications.
Paper 36726
Page 3 of 11
Application Server
is cleansed from applications and the new deployment process is tested. Well, of course
this will work, as preexisting software that may cause conflicts or installation issues does
not exist. However, this is how many organizations test the deployment of technology.
Application deployments must include a variety of testing strategies long before the
application is migrated into the production environment. Only after exhaustive testing
should customers have the ability to use the new application to support the enterprise.
Unfortunately for Java applications, testing is not as simple as it was for
client/server applications. In many cases, application deployment testing involves
technology not within the walls of the data center; external links to web sites, data
verification organizations (i.e.: Paypall, etc.), and other internal/external applications exist
to support the business requirements of the enterprise. With additional layers of
technology imposed upon network-centric applications, the type of testing involved
becomes complicated, as any failure in these components affects both performance and
functionality. Thus, to ensure that applications perform according to the original design
requirements, full functionality testing, load/stress testing, and deployment testing must
occur before the final deployment into the production environment.
Paper 36726
Page 4 of 11
Application Server
some feedback to the application user community. The development team locates the
problem and provides a fix for the user community. However, instead of validating the
patch, the team issues the patch from the development environment, without adequate
testing, and places the patch directly into production. Application users are excited to
hear that the problem they identified to the help desk has been repaired; they proceed to
re-enter their data when the application freezes up. How could this be? This should have
been repaired. What happened?
Or how about application patches that are applied to the production environment
without any documentation as part of the follow up? When the server is reloaded, all of
the “one-time” patch repairs are lost and no one has any idea where the patches are or
what they repaired.
Last-minute patches or quick production fixes were somewhat manageable in the
client/server application age. With Java applications, the impact could be much greater,
as application changes could impact web services that are invoked from outside the
organization. Production changes must be thoroughly tested and validated prior to a
complete rollout and sufficient follow up must be performed to ensure that the integrity of
the application is not lost should other changes occur.
Paper 36726
Page 5 of 11
Application Server
Complementary technology is available for many of the tasks discussed below, however,
to simplify the selection process, a chart is provided. The theme of this chart is
“Build/Test/Manage” and showcases both Oracle and Compuware technology available for
creating a complete solution.
Oracle Compuware
Technology Technology
Building Java Constructing Java JDeveloper/Oracle OptimalJ/OptimalView/Unif
Applications Applications Portal ace
Debugging Java DevPartnerDB,
Applications DevPartnerJava
Testing Java Testing and TestPartner, QACenter,
Applications Validating Java Vantage
Applications
Load Testing Java QACenter
Applications
Managing Java Deploying Java Oracle9i Application
Application Applications Server
Deployments Managing Java Oracle Enterprise Vantage
Applications Manager
Paper 36726
Page 6 of 11
Application Server
integration code can be added to the application for a complete deployment test. This
process can be followed throughout the development process until a working application
is ready for deployment.
The above scenario generates some extra benefits. First, it accommodates a
component-based development model giving developers the ability to create and test
portions of code before the entire product must be tested. Second, because of the
additional testing, this process also helps generate the various testing scenarios required
for final application testing and deployment. Third, this procedure allows key application
components to be distributed amongst multiple development teams for development,
testing and final integration.
An alternate approach would be to model the application business requirements
before any code is created, and then generate code as modeling is completed. For
example, Compuware’s OptimalJ with its industry standard Model Driven
Architecture/Pattern Based approach towards application development, the business
requirements are modeled before any code is created or generated. Any corrections for
integration and processing are caught well in advance of code generation. Changes to the
visual model or the generated application are coordinated to ensure consistency,
completeness, and reliability. Once complete, the appropriate deployment process begins
with the generation of the code for the specific platform being used. This includes
Oracle’s 9i Application Server. The application is now ready for the remainder of the
development and deployment processing.
Paper 36726
Page 7 of 11
Application Server
that the code works, and the checks and balances are infrequently performed to ensure
that functionality is correct.
For application deployments to be successful, sufficient testing strategies are
necessary to validate all functionality within the application before users complain about
functional performance. Java applications are no exception for functional testing. In fact,
functional testing is a critical success factor for every Java application; with integration a
key component of every Java application, validating each integration component prior to
rollout only helps to complete a successful application deployment.
Multiple levels of testing are necessary and will be discussed below. They are: (1)
component testing, (2) unit testing, (3) string testing, (4) full functional testing, and (5)
load/performance testing. Technologies embedded within JDeveloper9i and OptimalJ, as
well as complementary technology can assist in these processes.
COMPONENT TESTING
A Java developer, besides validating that application code works properly, must also
examine how efficient the application is, especially as it relates to system resource
utilization (CPU, memory, etc.). Although a process is functionally correct, it may
unnecessarily exhaust system resources causing other applications to fail. Java
applications, like any other application within the enterprise, must maintain a responsible
usage of the resources it consumes.
For users of either Oracle’s JDeveloper9i or Compuware’s OptimalJ development
technologies, Compuware’s DevPartner Java Edition (DPJ) product focuses on assisting
Java developers maintain a responsible environment. DPJ provides Java developers a
window into their application and all of the components it consumes, including all system
resources, external connections, network resources, etc. DPJ’s Code Coverage feature will
allow Java developers to review what code is executing to determine if threads of code are
within a particular execution stack or are absent. This feature helps Java developers
locate and isolate functional performance issues with both invalid code execution, missing
code execution or poorly performing code. The performance profiling feature allows Java
developers to look within the bowels of the application for hidden performance problems.
CPU, memory, I/O, and network consumption rates and statistics are available to assist
the developer determine where performance bottlenecks exist and how to correct them.
DPJ accomplishes these tasks by integrating with Oracle’s 9i Application Server to
generate performance data, review statistical measures for performance bottlenecks, and
to recommend corrective actions to the development team.
Paper 36726
Page 8 of 11
Application Server
System testing is more rigorous and involves testing and validating nearly all of the
functionality of the application before it is deployed to the masses. System testing
involves the development of concrete test plans to help validate application functionality,
locate missing functionality as compared to the requirements, and to locate unnecessary
functionality that was added but not required. System testing focuses on overall
functionality as well as movement within the application to ensure that functionality is
equal throughout the application.
Java/J2EE applications are not exempt to the requirements of complete string and
system testing. In fact, Java/J2EE applications must withstand a microscopic test of
successfulness, as these applications typically rely on external resources for portions of
their functionality. For example, string testing help isolate problems with credit card
verification transactions that periodically fail or with order-entry transactions that report
invalid information from the inventory system. System testing would help diagnose
problems with discrete transactions requiring varying functionality throughout the
application. System testing, for example, would help determine if transactions conflict
with each other. System testing would also help validate the “look and feel” requirements
throughout the application.
Oracle JDeveloper9i can satisfy a subset of the string and system requirements for
most Java applications; however, it is not strategically positioned as a quality assurance
product. For that Oracle relies on partner companies to deliver functionality to satisfy the
requirements of customers. Compuware’s TestPartner is specifically designed to provide
quality assurance services for web applications using either Microsoft or Java-centric
technology. By integrating with quality assurance software like Compuware’s QACenter,
Test Partner is able to create repeatable test scripts that will test functionality, ensuring
that Java Applications achieve the desired outputs. To provide quality assurance test with
performance metrics Compuware’s Vantage is able to generate performance metrics for
all tiers of Java applications, including client, application server and the back-end
database. These metrics can be used to determine if response times from the application
are acceptable and within service level agreement guidelines.
For testing that must determine why specific Java code is performing outside
required guidelines, Oracle developers have another venue for diagnosing the problem.
Compuware’s Vantage technology can break up a network transmission into the individual
components (i.e.: SQL, HTML, HTTP, etc.) and locate the performance problem
automatically, thereby eliminating any so-called “finger pointing” between application
deployment teams members. For example, Vantage can be used to examine 100% of the
network traffic and can open specific packets to review their payloads, diagnose
performance problems and provide developers with potential resolutions.
These techniques assist application deployment teams by helping to diagnose
performance problems located during quality assurance and stress testing phases. For
Oracle developers, this technology helps to improve the code deployed to Oracle9iAS,
both in code quality and code performance. By finding the problems before the mass user
community does, developers help to improve the time required to deploy enterprise-scale
applications.
LOAD TESTING
Load testing is considered a critical step before final enterprise-wide deployment,
yet it is a step that many consider unnecessary. Statements such as “This application
Paper 36726
Page 9 of 11
Application Server
won’t fail” or “It will support thousands of concurrent users” are quite typical for ignoring
a stress test or load test phase. However, after only 50 concurrent users were successful
in accessing the application, thoughts return to steps that were ignored before final
deployment.
The goal of a complete, and thorough, load test is to provide proof that the
application will continue to operate and achieve required service level agreements as the
number of users increases and demands on the application increase. Quality assurance
testing should have been performed already so the goal is not to validate application
functionality. Should load testing locate performance-related issues that affect application
logic, the development teams can correct these issues prior to test signoff.
Load testing of Java applications is critical, as the load test is not only designed to
locate problems in the application, but also performance issues with the deployment
technology such as both the application server and the web server. Most Java application
deployments also include vanilla or “out of the box” deployments of both application
server and web server versus utilizing many of the performance-related features within
the products. Load testing helps evaluate the use of web caching, dynamic links and
much more for all tiers of the Java application. Load testing should also be a repeatable
process, without alteration, and should represent realistic transactions normally
performed by users. Fake or “creative” load test scripts only serve to validate the speed
with unrealistic processing. Ensuring that users are satisfied with performance results
should be the final acid test; if users are unable to replicate the work, they will never be
satisfied with the effort.
Compuware’s QACenter Performance Edition is uniquely adapted for load testing
Java Applications in preparation for final enterprise deployment. The QALoad components
is designed to help testers create and generate load test scripts that are repeatable and
will stress test all tiers of the application, not just the code itself. QACenter will generate
a plethora of performance statistics showing response times, latency times, I/O times, etc.
Additionally, QACenter is integrated with Vantage to monitor the overall deployment
environment to provide statistical information on how the new application testing has
affected all remaining applications in the environment. Additionally, Oracle Enterprise
Manager can manage and monitor all activities on the Oracle9i Application Server to help
determine if features should be activated/deactivated to improve overall performance.
Using a solid testing strategy, like the one mentioned here, will help ensure that service
level agreements can be maintained or exceeded and application failure will be
minimized.
PRODUCTION DEPLOYMENT
Product Deployment activities revolve around instituting the application throughout
the enterprise, managing the environment to ensure that the process goes smoothly,
monitoring enterprise resources for performance spikes and finally addressing last-minute
issues and ways to resolve them. Final coding, quality assurance testing, and load testing
should have already been performed. If not, it is guaranteed that the deployment will be
unsuccessful because the steps for deployment would be mixed in other activities.
Oracle Enterprise Manager is well qualified to manage and monitor activities and
traffic through the Oracle9i Application Server and the Oracle database. The tool include
metrics for determining if web-caching should be utilized, level of garbage collection
performed, I./O throughput, etc. Watching for unpopular wait events, locking, and
Paper 36726
Page 10 of 11
Application Server
bottlenecks plus assisting in the backup and recovery processing for all tiers of the
application are some sample activities that OEM is well qualified for. Additionally OEM’s
Change Management module can be used to track and monitor application changes stored
within the database, such as Triggers, Procedures, etc. For external code changes, it is
recommended that versioning tools be utilized.
Compuware’s Vantage can be used for many of the same activities plus it provides
insight into the activities engaged throughout the enterprise infrastructure. This is
important for researching and mitigating performance problems that may or may not be
due to newly deployed Oracle-based applications. For massively distributed applications,
Vantage can watch and expose unwanted network traffic to improve overall application
performance. It is a primary goal of Vantage to view performance from an end user or
application perspective versus from the infrastructure up. Vantage can provide insight
into how applications are performing, help locate performance bottlenecks, from a user’s
perspective, and assist the support team by providing potential solutions to the
performance issue. Application response issues are what drive help desk tickets and
increase a customer’s level of impatience; eliminating or reducing these type of issues
can significantly reduce the headaches experience during application deployments.
SUMMING IT UP
Enterprise-wide application deployment involves more than just porting the
application from the development environment and into production. Too often application
changes are made in production, immediately deployed, and immediately fail. Proper
application deployment strategies involve a host of activities beginning with rigorous
development goals, quality assurance testing, stress testing and manageability. Java
application is far more complex than most view it to be; multiple deployment
environments, varying technologies, integration issues, and user demands make the
deployment complex in structure but simple in implementation if basic steps are
executed.
Using common sense for creating the Java application, thorough debugging and
testing by both application developers and quality assurance analysts, rigorous stress/load
testing to validate service level agreements and finally proactive monitoring will help
ensure that application deployments throughout the enterprise will be more successful
than without these critical steps. Utilization of technology by both Oracle and Compuware
for development, debugging, testing and finally management will help increase the level
of success and acceptance by removing variability discovered at the last minute. Instead,
variants will be discovered earlier in the development/deployment process and corrected
before users are affected.
CONTACT INFORMATION
Stephen Karniotis is the Technical Alliance Manager and Product Manager for
Compuware’s Oracle-related technology offerings. He can be reached at
Stephen.Karniotis@Compuware.com.
Paper 36726
Page 11 of 11