Thursday, April 29, 2010

Thinking in Patterns, Problem-Solving Techniques using Java

nullThe pattern concept
“Design patterns help you learn from others' successes instead of your


own failures[2].”
Probably the most important step forward in object-oriented design is the “design patterns”

null


movement, chronicled in Design Patterns (ibid)[3]. That book shows 23 different solutions to
particular classes of problems. In this book, the basic concepts of design patterns will be
introduced along with examples. This should whet your appetite to read Design Patterns by
Gamma, et. al., a source of what has now become an essential, almost mandatory, vocabulary
for OOP programmers.
The latter part of this book contains an example of the design evolution process, starting with
an initial solution and moving through the logic and process of evolving the solution to more
appropriate designs. The program shown (a trash sorting simulation) has evolved over time,
and you can look at that evolution as a prototype for the way your own design can start as an
adequate solution to a particular problem and evolve into a flexible approach to a class of
problems.
What is a pattern?
Initially, you can think of a pattern as an especially clever and insightful way of solving a
particular class of problems. That is, it looks like a lot of people have worked out all the angles
of a problem and have come up with the most general, flexible solution for it. The problem
could be one you have seen and solved before, but your solution probably didn’t have the kind
of completeness you’ll see embodied in a pattern.
Although they’re called “design patterns,” they really aren’t tied to the realm of design. A
pattern seems to stand apart from the traditional way of thinking about analysis, design, and
implementation. Instead, a pattern embodies a complete idea within a program, and thus it
can sometimes appear at the analysis phase or high-level design phase. This is interesting
because a pattern has a direct implementation in code and so you might not expect it to show
up before low-level design or implementation (and in fact you might not realize that you need
a particular pattern until you get to those phases).
The basic concept of a pattern can also be seen as the basic concept of program design: adding
a layer of abstraction. Whenever you abstract something you’re isolating particular details,
and one of the most compelling motivations behind this is to separate things that change
from things that stay the same.


null



Another way to put this is that once you find some part of
your program that’s likely to change for one reason or another, you’ll want to keep those
changes from propagating other changes throughout your code. Not only does this make the
code much cheaper to maintain, but it also turns out that it is usually simpler to understand
(which results in lowered costs).
Often, the most difficult part of developing an elegant and cheap-to-maintain design is in
discovering what I call “the vector of change.” (Here, “vector” refers to the maximum gradient

and not a container class.)




This means finding the most important thing that changes in your
system, or put another way, discovering where your greatest cost is. Once you discover the
vector of change, you have the focal point around which to structure your design.
So the goal of design patterns is to isolate changes in your code. If you look at it this way,
you’ve been seeing some design patterns already in this book. For example, inheritance can be
thought of as a design pattern (albeit one implemented by the compiler). It allows you to
express differences in behavior (that’s the thing that changes) in objects that all have the
same interface (that’s what stays the same). Composition can also be considered a pattern,
since it allows you to change—dynamically or statically—the objects that implement your
class, and thus the way that class works.
You’ve also already seen another pattern that appears in Design Patterns: the iterator (Java
1.0 and 1.1 capriciously calls it the Enumeration; Java 2 containers use “iterator”). This
hides the particular implementation of the container as you’re stepping through and selecting
the elements one by one. The iterator allows you to write generic code that performs an
operation on all of the elements in a sequence without regard to the way that sequence is
built. Thus your generic code can be used with any container that can produce an iterator.

Pattern taxonomy

One of the events that’s occurred with the rise of design patterns is what could be thought of
as the “pollution” of the term – people have begun to use the term to mean just about
anything synonymous with “good.” After some pondering, I’ve come up with a sort of
hierarchy describing a succession of different types of categories:
1. Idiom: how we write code in a particular language to do this particular type of thing.
This could be something as common as the way that you code the process of stepping
through an array in C (and not running off the end).
2. Specific Design: the solution that we came up with to solve this particular problem.
This might be a clever design, but it makes no attempt to be general.
3. Standard Design: a way to solve this kind of problem. A design that has become
more general, typically through reuse.
4. Design Pattern: how to solve an entire class of similar problem. This usually only
appears after applying a standard design a number of times, and then seeing a
common pattern throughout these applications.
I feel this helps put things in perspective, and to show where something might fit. However, it
doesn’t say that one is better than another. It doesn’t make sense to try to take every problem
solution and generalize it to a design pattern – it’s not a good use of your time, and you can’t
force the discovery of patterns that way; they tend to be subtle and appear over time.
One could also argue for the inclusion of Analysis Pattern and Architectural Pattern in this
taxonomy.
Design principles
(Update from slides to here)
When I put out a call for ideas in my newsletter[4], a number of suggestions came back which
turned out to be very useful, but different than the above classification, and I realized that a
list of design principles is at least as important as design structures, but for a different reason:
these allow you to ask questions about your proposed design, to apply tests for quality.
• Principle of least astonishment (don’t be astonishing).
• Make common things easy, and rare things possible
• Consistency. One thing has become very clear to me, especially because of Python:
the more random rules you pile onto the programmer, rules that have nothing to do
with solving the problem at hand, the slower the programmer can produce. And this
does not appear to be a linear factor, but an exponential one.
• Law of Demeter: a.k.a. “Don’t talk to strangers.” An object should only reference
itself, its attributes, and the arguments of its methods.
• Subtraction: a design is finished when you cannot take anything else away.
• Simplicity before generality[5]. (A variation of Occam’s Razor, which says “the
simplest solution is the best”). A common problem we find in frameworks is that they
are designed to be general purpose without reference to actual systems. This leads to a
dizzying array of options that are often unused, misused or just not useful. However,
most developers work on specific systems, and the quest for generality does not
always serve them well. The best route to generality is through understanding welldefined
specific examples. So, this principle acts as the tie breaker between otherwise
equally viable design alternatives. Of course, it is entirely possible that the simpler
solution is the more general one.
• Reflexivity (my suggested term). One abstraction per class, one class per
abstraction. Might also be called Isomorphism.
• Independence or Orthogonality. Express independent ideas independently. This
complements Separation, Encapsulation and Variation, and is part of the Low-
Coupling-High-Cohesion message.
• Once and once only: Avoid duplication of logic and structure where the duplication
is not accidental, ie where both pieces of code express the same intent for the same
reason.
In the process of brainstorming this idea, I hope to come up with a small handful of
fundamental ideas that can be held in your head while you analyze a problem. However, other
ideas that come from this list may end up being useful as a checklist while walking through
and analyzing your design.
Classifying patterns
The Design Patterns book discusses 23 different patterns, classified under three purposes (all
of which revolve around the particular aspect that can vary). The three purposes are:
1. Creational: how an object can be created. This often involves isolating the details of
object creation so your code isn’t dependent on what types of objects there are and thus
doesn’t have to be changed when you add a new type of object. The aforementioned
Singleton is classified as a creational pattern, and later in this book you’ll see examples
of Factory Method and Prototype.
2. Structural: designing objects to satisfy particular project constraints. These work
with the way objects are connected with other objects to ensure that changes in the
system don’t require changes to those connections.
3. Behavioral: objects that handle particular types of actions within a program. These
encapsulate processes that you want to perform, such as interpreting a language,
fulfilling a request, moving through a sequence (as in an iterator), or implementing an
algorithm. This book contains examples of the Observer and the Visitor patterns.
The Design Patterns book has a section on each of its 23 patterns along with one or more
examples for each, typically in C++ (rather restricted C++, at that) but sometimes in
Smalltalk. (You’ll find that this doesn’t matter too much since you can easily translate the
concepts from either language into Java.) This book will revisit many of the patterns shown in
Design Patterns but with a Java orientation, since the language changes the expression and
understanding of the patterns. However, the GoF examples will not be repeated here, since I
believe that it’s possible to produce more illuminating examples given some effort. The goal is
to provide you with a decent feel for what patterns are about and why they are so important.
After years of looking at these things, it began to occur to me that the patterns themselves use
basic principles of organization, other than (and more fundamental than) those described in
Design Patterns. These principles are based on the structure of the implementations, which is
where I have seen great similarities between patterns (more than those expressed in Design
Patterns). Although we generally try to avoid implementation in favor of interface, for awhile
I thought that it was easier to understand the patterns in terms of these structural principles,
and tried reorganizing the book around the patterns based on their structure instead of the
categories presented in Design Patterns.
However, a later insight made me realize that it’s more useful to organize the patterns in
terms of the problems they solve. I believe this is a subtle but important distinction from the
way Metsker organizes the patterns by intent in Design Patterns Java Workshop (Addison-
Wesley 2002), because I hope that you will then be able to recognize your problem and search
for a solution, if the patterns are organized this way.
In the process of doing all this “book refactoring” I realized that if I changed it once, I would
probably change it again (there’s definitely a design maxim in there), so I removed all
references to chapter numbers in order to facilitate this change (the little-known “numberless
chapter” pattern ☺).
The development challenge
Issues of development, the UML process, Extreme Programming.
Is evaluation valuable? The Capability Immaturity Model:
Wiki Page: http://c2.com/cgi-bin/wiki?CapabilityImMaturityModel
Article: http://www.embedded.com/98/9807br.htm
Pair programming research:
http://collaboration.csc.ncsu.edu/laurie/

Unit testing
In an earlier version of this book I decided that unit testing was essential (for all of my books)
and that JUnit was too verbose and clunky to consider. At that time I wrote my own unit
testing framework using Java reflection to simplify the syntax necessary to achieve unit
testing. For the third edition of Thinking in Java, we developed another unit testing
framework for that book which would test the output of examples.
In the meantime, JUnit has changed to add a syntax remarkably similar to the one that I used
in an earlier version of this book. I don’t know how much influence I may have had on that
change, but I’m simply happy that it has happened, because I no longer feel the need to
support my own system (which you can still find ) and can simply
recommend the defacto standard.
I have introduced and described the style of JUnit coding that I consider a “best
practice” (primarily because of simplicity), in Thinking in Java, 3rd edition, chapter 15. That
section provides an adequate introduction to any of the unit testing you will see associated
with this book (however, the unit testing code will not normally be included in the text of this
book). When you download the code for this book, you will find (4/9/2003: Eventually, not
yet) unit tests along with the code examples whenever possible

Location of test code

Public: in test subdirectory; different package (don’t include in jar).
Package access: same package, subdirectory path underneath library code (don’t include in
jar)
Private access: (white box testing). Nested class, strip out, or Junit addons.



null

Simplifying Idioms
Before getting into more complex techniques, it’s helpful to look at some basic ways to keep
code simple and straightforward.
Messenger
The most trivial of these is the messenger, which simply packages information into an object
to be passed around, instead of passing all the pieces around separately. Note that without the
messenger, the code for translate() would be much more confusing to read:
//: simplifying:MessengerDemo.java
package simplifying;
import junit.framework.*;
class Point { // A messenger
public int x, y, z; // Since it's just a carrier
public Point(int x, int y, int z) {
this.x = x;
this.y = y;
this.z = z;
}
public Point(Point p) { // Copy-constructor
this.x = p.x;
this.y = p.y;
this.z = p.z;
}
public String toString() {
return "x: " + x + " y: " + y + " z: " + z;
}
}
class Vector {
public int magnitude, direction;
public Vector(int magnitude, int direction) {
this.magnitude = magnitude;
this.direction = direction;
}
}
class Space {
public static Point translate(Point p, Vector v) {
p = new Point(p); // Don't modify the original
// Perform calculation using v. Dummy calculation:
p.x = p.x + 1;
p.y = p.y + 1;
p.z = p.z + 1;
return p;
}
}

public class MessengerDemo extends TestCase {
public void test() {
Point p1 = new Point(1, 2, 3);
Point p2 = Space.translate(p1, new Vector(11, 47));
String result = "p1: " + p1 + " p2: " + p2;
System.out.println(result);
assertEquals(result,
"p1: x: 1 y: 2 z: 3 p2: x: 2 y: 3 z: 4");
}
public static void main(String[] args) {
junit.textui.TestRunner.run(MessengerDemo.class);
}
} ///:~
Since the goal of a messenger is only to carry data, that data is made public for easy access.
However, you may also have reasons to make the fields private.

Collecting Parameter
Messenger’s big brother is the collecting parameter, whose job is to capture information from
the method to which it is passed. Generally, this is used when the collecting parameter is
passed to multiple methods, so it’s like a bee collecting pollen.
A container makes an especially useful collecting parameter, since it is already set up to
dynamically add objects:
//: simplifying:CollectingParameterDemo.java
package simplifying;
import java.util.*;
import junit.framework.*;
class CollectingParameter extends ArrayList {}
class Filler {
public void f(CollectingParameter cp) {
cp.add("accumulating");
}
public void g(CollectingParameter cp) {
cp.add("items");
}
public void h(CollectingParameter cp) {
cp.add("as we go");
}
}
public class CollectingParameterDemo extends TestCase {
public void test() {
Filler filler = new Filler();
CollectingParameter cp = new CollectingParameter();
filler.f(cp);
filler.g(cp);
filler.h(cp);
String result = "" + cp;
System.out.println(cp);
assertEquals(result,"[accumulating, items, as we go]");
}
public static void main(String[] args) {
junit.textui.TestRunner.run(
CollectingParameterDemo.class);
}
} ///:~

The collecting parameter must have some way to set or insert values. Note that by this
definition, a messenger could be used as a collecting parameter. The key is that a collecting
parameter is passed about and modified by the methods it is passed to.

Object quantity

The two patterns described here are solely used to control the quantity of
objects.
Singleton could actually be thought of as a special case of Object Pool, but the applications of
the Object Pool tend to be uniqe enough from Singleton that it’s worth treating the two
separately.

Dell PowerEdge M910 Blade-Server

null

PowerEdge M910

Der PowerEdge M910, ein Blade-Server in voller Höhe mit vier Sockeln, ist ideal für Virtualisierungs-Workloads oder Kernanwendungen. Er steht für hervorragende Leistung, Zuverlässigkeit und Skalierbarkeit bei einem Formfaktor mit extrem hoher Dichte.

Leistungsfähig: bis zu vier Intel Xeon Prozessoren der 7500 Serie
Skalierbar: bis zu 512 GB DDR3-RAM
Kompakt: Blade-Formfaktor in voller Höhe ermöglicht bis zu acht Blades je Gehäuse mit 10 HE

Leistungsfähig, skalierbar und kompakt

Der PowerEdgeTM M910 wurde für die Anforderungen nahezu aller IT-Umgebungen entwickelt. Mit den leistungsstarken Intel Xeon Prozessoren der 7500 Serie und erweiterten Funktionen zur Systemverwaltung ist der M910 ideal für die anspruchsvollen Anwendungen vieler Rechenzentren.
Dank der Dell FlexMem Bridge Technologie kann der M910 bei Konfigurationen mit zwei oder vier Sockeln nahtlos von 4 GB auf 512 GB DDR3-RAM skaliert werden. Mit dieser zum Patent angemeldeten Technologie kann Dell eine einzigartige Plattform bereitstellen, die mit Ihren Anforderungen wächst.
Durch die Bereitstellung dieser Funktionen in einem Blade-Server ermöglicht es Dell Ihrem Unternehmen, die Leistungsfähigkeit bei einem außergewöhnlich energieeffizienten und leicht zu verwaltenden Formfaktor erheblich zu steigern. Mit acht 4-Sockel-Servern bei 10 Höheneinheiten (HE) im Rack stellt der M910 mehr als die dreifache Dichte zur Verfügung, die traditionelle Rack-Server mit vier Höheneinheiten und vier Sockeln bieten können.


Der PowerEdge M910 nutzt die redundante Stromversorgungs-, Kühlungs- und Netzwerkinfrastruktur des Dell M1000e Blade-Gehäuses. Der PowerEdge M910 verfügt über zusätzliche Funktionen, die höchsten Schutz gegen potenzielle Ausfallzeiten bieten: er unterstützt z. B. drei vollständig redundante Architekturen pro Blade und bietet einen für zwei Datenträger geeigneten, redundanten Hypervisor.

Der PowerEdge M910 verfügt auch über Intel Xeon Prozessoren der 7500 Serie, die Hardwarefehler automatisch überwachen, melden und beheben, um die Datenintegrität und geschäftskritische Services aufrechtzuerhalten.

Wie alle Dell PowerEdge Server wird der M910 im Werk mit unserem "One-Touch"-Verfahren hergestellt. Durch dieses Verfahren wird sichergestellt, dass nur eine Person für alle Fertigungsschritte eines Servers verantwortlich ist. Dies führt zu einer noch besseren Qualitätskontrolle. Außerdem wird jeder vollständig konfigurierte Dell Server (mehrfach) auf ein Höchstmaß an Zuverlässigkeit getestet, bevor er das Werk verlässt.

Vereinfachte Systemverwaltung

Die nächste Generation des Dell OpenManageTM Softwarepakets bietet erweiterte Funktionen und standardbasierte Befehle, die in die bestehenden Systeme zur effektiven Steuerung integriert werden können.

null

Die Dell Management Console auf Basis von Altiris von Symantec bietet eine zentrale Ansicht und eine gemeinsame Datenquelle für die gesamte Infrastruktur. Die Dell Management Console basiert auf der SymantecTM Management Plattform (vormals Altiris® Notification Server), einer problemlos erweiterbaren, modularen Basis, die eine grundlegende Hardwareverwaltung oder erweiterte Funktionen wie Bestands- und Sicherheitsmanagement zur Verfügung stellt. Die Dell Management Console reduziert manuelle Arbeitsschritte, sodass Zeit und Geld gespart werden und stattdessen in strategische Funktionen der Technologie investiert werden kann.

Der Lebenszyklus-Controller ist der "Motor" der im Server integrierten erweiterten Systemverwaltungsfunktionen. Der Lebenszyklus-Controller vereinfacht typische Administratortätigkeiten, indem er umfassende Verwaltungsfunktionen, wie Systemimplementierung, System-Updates, Hardwarekonfiguration und -diagnose, über die intuitive Benutzeroberfläche Unified Server Configurator (USC) in einer Pre-OS-Umgebung bereitstellt. Es ist daher nicht mehr notwendig, eine Vielzahl unterschiedlicher CD-/DVD-Medien zu verwenden und diese zu verwalten.

Der Dell Unified Server Configurator (USC) bietet einen einzigen Zugriffspunkt für eine sichere, effiziente und benutzerfreundliche Infrastrukturverwaltung. Aufgrund der Einbettung und Integration in das System können ein schneller, konsistenter Zugriff, eine großartige Flexibilität und erweiterte Funktionen geboten werden. Mit der integrierten Treiber-Installation, den Firmware-Updates, der Hardware-Konfiguration und den Diagnosen bietet das USC-Tool die Bereitstellung eines Betriebssystems aus einer Hand.

The old mainframe

The mainframe was born some 50 plus years ago when the government needed a machine to support advanced research. Since that time it has taken its rightful place in the world’s financial transactions, transportation management, health care and industry management. Most of that code was written in COBOL and VSAM and ran on systems from CICS and IMS to DB2. Today it still fulfills those venerated roles but it has evolved into the most powerful, flexible, reliable server in the industry, running new workloads from Java to Linux. This is the machine that supports tens of thousands of users working with hundreds of terabytes of data, with response times still in sub-seconds. This is not your father’s mainframe.
Why then do many IT professionals, and as a result industry leaders, believe that migrating these trusted applications and data from a mainframe to rooms of distributed commodity servers can provide the same levels of service, security and reliability that the mainframe still excels at today? The truth is these folks don’t really know what a mainframe is, much less what makes it so powerful. Let’s take a short tour through this new mainframe, the System z10, and see what separates it from the rest. And the best way to review these differences is to look at one of those “mainframe is dead” white papers, in the form of “The Story about the IBM Mainframe Makeover” that HP has posted on their web site2.

Modern Mainframe, z/OS 10.

IBM has been building and shipping mainframe computers for over 40 years. Every generation of the mainframe gets better, faster, more efficient, and carries more and more of the data load for business and industry all over the world. In the early 90’s there were no mainframes in India or China either for that matter. Now there are a growing number of mainframes in China running the major banks and financial institutions in that emerging country.
Mainframe installations and skills are growing in India, not only running financial markets but also in place to support millions of lines of programming code that are being developed for the rest of the mainframes circling the globe.1 And yet, year after year since the first “minicomputers” were developed and shipped by Digital Equipment, Data General, and others, we have continuously heard about the mainframe being replaced by smaller, cheaper, easier to deploy technology of every kind.
Admittedly the mainframe has not assumed the role of personal computer, mobile appliance, small departmental server, nor supercomputing grid, but in fact most of the world funds clearing and transfers are still routed through mainframe connections. It has been estimated that the mainframe manages some 70% of the world’s critical data. And today, with new departmental workloads in Java, C and C++, the mainframe is assuming many of these roles with Linux on System z.
So why is it then that year after year, someone writes a paper, article or book about the demise of this most capable machine? How can rational technologists believe that there is any technology in the market today that can do what the mainframe has done, and continues to do? What would make someone believe that a hundred Intel processors, ganged together in a loosely connected environment, could replace the capabilities that the mainframe has provided all these decades? The only answer that comes to mind is that those who espouse the demise of the mainframe don’t understand either the problem, or the solution.

Monday, April 19, 2010

JBoss Enterprise Application Platform ( FAQ's )

What is JBoss Enterprise Application Platform ?

JBoss Enterprise Application Platform is the industryleading
platform for next-generation enterprise Java
applications. It provides a stable, open source foundation
for highly transactional Java applications and services.
And it's integrated, simplified, and delivered by Red Hat,
the leader in enterprise open source software.

What does it do?

By combining market-leading technologies into a single,
simple, and flexible solution, JBoss Enterprise Application
Platform makes it easy to develop, deploy, and manage
Java Enterprise Edition (EE) applications. It includes leading
open source technologies for building, deploying, and
hosting enterprise Java applications in dynamic environments.
JBoss Enterprise Application Platform provides
a stable and consistent enterprise Java foundation that
supports a variety of popular programming models and
deployment options, spanning traditional application
deployments to on- and off-premise cloud deployments.

Why should I care?

JBoss Enterprise Application Platform balances innovation
with enterprise-class stability. By integrating and certifying
the most popular Java application server on the
market with next-generation application frameworks, it
removes complexities from enterprise Java development
and deployment. JBoss Enterprise Application platform
includes high-availability features and comprehensive
administrative tooling to support, manage, and scale out
mission-critical enterprise Java applications. By including
all of the technologies needed for enterprise Java deployments
in a single subscription, JBoss Enterprise Application
Platform provides a stable platform that simplifies the
development and management of next-generation Java
applications and services. Red Hat customers take advantage
of affordable JBoss Enterprise Application Platform
subscriptions to help extend their companies' middleware
budgets and improve their total costs of ownership.
and available through flexible and affordable subscriptions,
JBoss Enterprise Application Platform includes everything
you need to build and manage rich and highly transactional
enterprise Java applications.

Benefits ?

Choice without compromise. Support the variety of popular
programming choices and deployment styles on a single,
flexible Java application platform—without compromising
on operational stability. Enterprise services for clustering,
caching, web services, security, messaging, and transactions
can be easily configured and customized across a
selection of supported programming styles (POJOs, Java
EE, Spring) and frameworks to support all of the common
types of enterprise Java applications from a single runtime
platform.

Innovation with stability. Benefit from the latest open
source innovations that have been tested and certified
for enterprise-class stability on a combination of leading
operating systems, chip architectures, and databases.
With a long-term product support lifecycle and backed
with an extensive partner ecosystem of certified independent
software vendors (ISVs), JBoss Enterprise Application
Platform provides a stable and supportable platform for
any mission-critical Java application.

Build applications faster. Take advantage of rich web
technologies and popular developer productivity frameworks
that work together from the start. Remove library
configuration complexities and conflicts. Simplify enterprise
Java development with a flexible and easy-touse
application platform. JBoss Enterprise Application
Platform, combined with JBoss Developer Studio, provides
a fully integrated development environment that helps
improve developer productivity throughout the entire
application development lifecycle.

Standard and flexible. Develop and deploy on an enterprise
Java platform that implements industry standards
in a flexible and open way. Delivered as a 100% pure
Java open source solution, JBoss Enterprise Application
Platform provides you with absolute transparency to see
exactly what's happening in your enterprise application
server. Customize configurations, tune applications, and opment and deployment platforms are in operationally in sync.

Enhanced application security. Targeted at meeting rigorous
industry security requirements, such as Common
Criteria, JBoss Enterprise Application Platform implements
all of the required Java security standards and more. In
addition to being backed by Red Hat's security response
process, JBoss Enterprise Application Platform includes
features for password masking, instance-based access control,
security negotiation, audit, and integration support
with common single sign-on solutions to help IT organizations
maintain a safe and secure middleware environment.

Simplify application management and configuration. With
JBoss Enterprise Application Platform's administration console,
spend less time configuring and managing application
and application server settings. Through its rich embedded
user interface, developers and administrators can easily
adjust configuration settings, execute controls, and drill
into application performance metrics. For enterprise-wide
management, leverage JBoss Operations Network to control,
administer, and proactively manage all of your development,
testing, and deployment environments.


What are the JBoss Enterprise Application Platform 5 Components ?

JBoss Enterprise Application Platform is a Java Enterprise
Edition (EE) application server platform. It includes default
configurations for both development and production
use and is performance-tuned from the start for highly
transactional applications in mission-critical environments.
Delivered as a single integrated distribution, JBoss
Enterprise Application Platform includes enterprise versions
of:
JBoss Application Server, the most • widely used Java
application server on the market. In addition to being
a certified Java EE 5 platform, it also provides support
for a variety of popular programming and component
models, like POJOs and Spring. Featuring a set of highly
flexible and configurable enterprise services for caching,
clustering, messaging, transactions, and security,
as well as support for a comprehensive web services

development environment for all JBoss platforms,
JBoss Developer Studio includes both tooling and an
integrated version of the certified application platform
runtime.
• JBoss Operations Network. Red Hat's comprehensive
middleware management solution gives IT operations
a single, centralized easy to use graphical management
and administration tool for all types of Java application
workloads. With JBoss Operations Network, companies
can inventory resources from operating systems
to applications; control and audit application configurations;
standardize deployments; and manage, monitor,
and tune applications for improved visibility, performance,
and availability.

What are the Platform's and Standards Support ?

JBoss Enterprise Application Platform 5
Minimum system requirements
• JDK 1.6
• 512 MB RAM
• 100 MB hard disk space
• 400 MHz CPU
Supported JDKs
• Sun JDK 1.6
• OpenJDK 1.6
• IBM JDK 1.6
Supported operating systems
JBoss Enterprise Application Platform is 100% pure Java.
It is supported on any operating system, including Red Hat
Enterprise Linux, Windows, and UNIX, as long as a supported
JDK is used.
Supported databases
JBoss Enterprise Application Platform is supported with
any JDBC compliant database. Each release is certified
with IBM DB2, Oracle, Microsoft, MySQL, PostgreSQL,
and Sybase databases.
Additional standards
• Java Transaction Service (JTS) 1.0
• CORBA 2.3.1
• JDBC 3.0
• SPNEGO / Kerberos

Supported standards

JBoss Enterprise Application Platform supports the following
standards:
Java Enterprise E • dition 5, including:
• Java Servlet 2.5, JavaServer Faces (JSF) 1.2
• JavaServer Pages (JSP) 2.1
• Java Transaction API (JTA) 1.1
• Enterprise Java Beans (EJB) 2.1, 3.0
• Java Messaging Service (JMS) 1.1
• Java Persistence API (JPA) 1.0
• Web Services Metadata for the Java Platform 2.0
(JSR 181)
• Java API for XML Web Services (JAX-WS) 2.1
• Java Architecture for XML Binding (JAXB) 2.0
• Java API for RESTful Web Services (JAX-RS) 1.0
• Web services standards
• Simple Object Access Protocol (SOAP) 1.2
• SOAP Message Transmission Optimization
Mechanism (MTOM)
• XML-Binary Optimized Packaging (XOP)
• Web Services Description Language (WSDL) 1.1, 2.0
• WS-I Basic Profile 1.1
• WS-Addressing 1.0
• WS-Security 1.1
• UDDI 2.0
• Java API for XML Web Services Addressing (JAXWSA)
1.0
• WS-Atomic Transactions 1.1
• Fast Infoset
• WS-Business Activity 1.1
• WS-Coordination 1.1
• WS-Security Policy 1.3
• WS-I Attachments Profile 1.0

Subscriptions of 32 CPUs or greater include additional
value-added features, including JBoss Operations Network
and Developer support. For subscriptions totaling fewer
than 32 CPUs, JBoss Operations Network and Developer
support subscriptions may be purchased separately.

What are the additional solutions for Java applications

Round out your JBoss Enterprise Application Platform subscription
with solutions for lighter enterprise Java applications
and productivity tools targeted at both developers
and middleware administrators:
• JBoss Enterprise Web Server. For simple web applications
and the lightest Java workloads, JBoss Enterprise
Web Server provides a stable, long-term, enterprise
product support lifecycle for Apache Web Server,
Apache Tomcat, and all of the common connectors
used in between.
• JBoss Developer Studio. Red Hat's innovative Eclipsebased
developer tool that provides a single integrated

What are the JBoss Enterprise Application Platform 5
Features

Enterprise-class performance & scalability. Take advantage
of integrated clustering and high-availability features
for superior application performance. With built-in features
for failover, caching, intelligent load balancing, and distributed
deployment, JBoss Enterprise Application Platform
is a proven foundation for highly scalable Java applications
in mission-critical environments.

Second-generation, service-based architecture.
JBoss Enterprise Application Platform is built on top
of the innovative JBoss Microcontainer architecture to
provide improved class-loading, performance, lifecycle
management, and flexibility across a wide variety of programming
and component models including Java EE,
POJOs, OSGi, and Spring. The Microcontainer lets you
separate enterprise services from the core application
server runtime engine to deliver a highly configurable
and flexible Java application platform without compromising
operational stability.

Integrated frameworks. JBoss Enterprise Application
Platform features industry-leading frameworks for building
rich Internet applications and integrating all of the technologies
required to build common types of Java applications,
from simple web apps to highly transactional Java
EE applications and everything in between. Stable, enterprise-
grade versions of each framework are integrated,
certified, and kept up to date as part the JBoss Enterprise
Application Platform product lifecycle, ensuring both develstack, JBoss Application Server supports all types
of enterprise Java applications.
Hibernate, the leading object/relational mapping and
persistence (ORM) framework.

Hibernate directly addresses enterprise Java complexities by providing
the ability to easily map an object model’s data representation
to a relational data model and corresponding
database schema. Hibernate also provides data query
and retrieval facilities that significantly reduce development
time and help eliminate the need for manual,
hand-crafted data processing using SQL and JDBC.

• Seam, a powerful application framework that simplifies
building next-generation web applications. Seam
supports a streamlined programming model and helps
overcome common framework integration issues.
Seam helps unify technologies such as Asynchronous
JavaScript and XML (AJAX), Java Server Faces (JSF),
Enterprise Java Beans (EJB 3), Java Portlets and business
process management (BPM) through a standardized
approach.

• JBoss Web Framework Kit includes popular web frameworks
for quickly and easily building light and rich Java
applications. By combining leading rich application
frameworks—Google Web Toolkit and RichFaces—with
popular Java frameworks—Spring and Apache Struts—
JBoss Web Framework Kit provides an enterprise with
a certified way to adopt popular open source frameworks
on JBoss Enterprise Middleware.
Bookmark and Share
Join the TrafficZap Exchange