Click here to close now.

Welcome!

Java Authors: Elizabeth White, Liz McMillan, Carmen Gonzalez, Pat Romanski, Dan Ristic

Related Topics: Java

Java: Article

It's the Aspects

A new paradigm

Aspect-oriented programming (AOP) is a promising new paradigm that came out of Xerox PARC a few years ago and is just now becoming mature and mainstream. A natural complement to object-oriented programming, it has the promise of easing the management of complex systems and making their organization much more intuitive, extendable, and flexible. AOP makes OOP multidimensional.

What is an Aspect? An Aspect is a common functionality that's scattered across methods, classes, object hierarchies, or object models. Functionality that your class or object model shouldn't be concerned about, functionality that doesn't belong as it's not what the object is all about. The AOP-ites like to call this type of functionality crosscutting concerns, as the behavior is cutting across multiple points in your object models, and yet is distinctly different from the classes it's crosscutting. AOP allows you to abstract and seamlessly componentize these concerns and apply them to your applications in a unique way that regular object-oriented programs cannot achieve very easily.

A simple example of a crosscutting concern is timing and metrics. Let's say you wanted to add code similar to Listing 1 to your application that would measure the amount of time it would take to invoke a particular method.

There are a few problems with this approach:
1.  You have to manually add this code to multiple different files, methods, and classes, which is a pain; if you want to change which methods are profiled you have to manually edit those files. In other words, this is hard to turn off and on and difficult to maintain.
2.  The profiling code really doesn't belong sprinkled throughout your application code. It makes your code bloated and harder to read as you have to enclose the timings within a try-finally block.
3.  If you want to add other metrics like a method count or a failure count, you would have to modify all the files where you manually inserted the profiling code. It's very difficult to maintain, expand, and extend your metrics functionality as it's dispersed throughout your entire code base.

This is a tiny example of how you can have common code that is sprinkled across many unrelated modules of your application; code that intrudes on the overall purpose of the Java class you're implementing. Aspect-oriented programming provides a way to pull together these common behaviors into a manageable unit and apply them to your code base. Let's look at how AOP would implement and solve this problem.

Defining an Aspect
The first thing that should be done to aspectize the metrics functionality would be to create an Aspect. The try-finally block that we originally had within the BankAccount.withdraw method should be extracted and encapsulated into its own object. Having this code within its own object enables us to easily expand and maintain any additional metrics we may want to calculate later on in the development cycle. For this object to work, it must be able to wrap around and obtain contextual information about the particular method you want to add profiling to so that metrics can be displayed. There are a few AOP frameworks out there, so rather than picking one framework to give an example in, let's look at some pseudo code that could be easily translated into a real framework later on (see Listing 2).

The MetricsAspect class pulls together the metrics functionality into one maintainable, extendable unit. The invoke method at line 3 should be called in place of the actual method you want to provide metrics for. All AOP frameworks should provide some form of abstraction for wrapping/intercepting a method call. Line 8 wraps and delegates to the actual method. Line 13 assumes that you can obtain contextual information about the method call from the AOP framework you are using.

Applying an Aspect
Now that we have extracted out the metrics functionality into a componentized Aspect, how can we apply it? This is where a pointcut comes in. A pointcut defines an entry point within your code base. It describes an event. An entry point could be a field access, a method call, or a constructor call. An event could be an exception being thrown. A pointcut is a way for you to define where you want your aspects applied. Let's look at some pseudo XML configuration for a pointcut that any AOP framework should be able to do in some form or another.

1. <method-pointcut expr="com.mc.BankAccount.withdraw(double amount)">
2. <attach-aspectclass="com.mc.MetricsAspect"/>
3. </method-pointcut>
4. <method-pointcut expr="com.mc.billing.*">
5. <attach-aspectclass="com.mc.MetricsAspect"/>
6. </method-pointcut>

Lines 1-3 define a pointcut that applies the metrics aspect to the specific method BankAccount.withdraw. Lines 4-6 define a general pointcut to apply the metrics aspect on all methods in all classes under the com.mc. billing package name. Most AOP frameworks have a rich set of pointcut expressions that you can use to apply your aspects. You can attach your aspects on an individual one-on-one basis to each Java class in your application, or you can use a more complex pointcut to specify a wide range of classes with one expression.

What this example shows is that with AOP, you're able to pull together crosscutting behavior into one object and sprinkle it easily and simply throughout your code base without making code unreadable or polluted with functionality that doesn't belong with the business logic you are implementing. Common crosscutting functionality can be maintained and extended in one place.

Another thing to notice is that the code within the BankAccount class has no idea that it's being profiled. The application developer was allowed to focus on writing business logic rather than being distracted with writing the code candy and syntactic sugar of profiling. Needed orthogonal behavior could be snapped on after the fact quite easily without even touching this existing code base. This is a very subtle significant part of AOP as this complete obliviousness allows aspects to be layered on top of or below the functionality they are crosscutting. A layered design allows you, as a system designer, to more easily snap on or remove functionality or behavior that you need. For instance, maybe you only snap on the metrics functionality when you're doing some benchmarks but want to remove this within production. Or, if the AOP framework allows for it, maybe you want to turn on metrics in production to determine where bottlenecks are.

Real-World AOP
In the early days of object-oriented programming, it was user-interface applications that helped to scope and discover object-oriented patterns and techniques. If you look at the Gang of Four's Design Patterns book (the bible of object-oriented programming), you'll see that GUIs are used in many of the coding examples that describe the patterns in the book. As GUIs helped formulate the early patterns of OO, middleware is shaping up to be the killer app for aspect-oriented programming.

Middleware, by nature, is crosscutting. It has functionality that's common across object hierarchies that really should not be mingled with business logic. The evolution of middleware has always been to abstract out how it is applied to regular simple objects. AOP completes this evolution as middleware functionality can be applied after the fact without changing the code or design of the existing business model. Packaging up middleware into a set of aspects frees developers to focus on writing the plain Java objects that make up their application's specific behavior rather than forcing them to work under an API dictated to them by their system architecture.

Take J2EE, for instance. It can be sliced and diced and served à la carte to your object model rather than going through the sometimes cumbersome and unnecessary process of implementing an EJB. For instance, let's say you were using EJB solely for the purpose of defining transactions. Transaction demarcation lines could be drawn within any class at any point using AOP. Instead of extending SessionBean and writing home, remote, and local interfaces; deciding on a JNDI binding; and defining all your <ejb-ref>s in XML; all you would have to do is define a pointcut for the method of the class you want a transaction started from and attach the transactional aspect to trigger the desired behavior.

1. <method-pointcut expr="com.mc.BankAccount.withdraw(double amount)">
2. <attach-aspect class="org.vendor.transaction.RequiredAspect"/>
3. </method-pointcut>

You can apply these same techniques to a multitude of middleware technology like remoteness, ACID, replicated caching, oneway, simple asynchronous invocations, role-based security, and persistence. AOP prevents system programming from intruding into your object model. It has the potential to completely separate the concern of middleware from your application logic. This can make your code easier to maintain and read, and more flexible as you can make system architecture decisions later on in the development process. It's a pure layered approach to applying middleware.

Conclusion
AOP is a new paradigm for expanding code reuse and easing the maintainability of your code base. It provides mechanisms to easily componentize code that is scattered throughout your object model and really needs to be organized centrally into one set of objects. When combined with something like middleware, it has the ability to isolate your business logic from the confines of system architecture, thus making your applications even more resistant to change as the landscape of APIs and public specifications changes over time. As framework developers focus on providing their functionality through aspects, the term pointcut will be morphed into pointclick as aspects are applied to an object model through the point-and-click interfaces of an IDE.

More Stories By Bill Burke

Bill Burke is chief architect of JBoss Inc., member of the EJB3 expert group, and co-author of the JBoss 4.0 Workbook in O'Reilly's Enterprise JavaBeans, 4th Edition.

Comments (5) View Comments

Share your thoughts on this story.

Add your comment
You must be signed in to add a comment. Sign-in | Register

In accordance with our Comment Policy, we encourage comments that are on topic, relevant and to-the-point. We will remove comments that include profanity, personal attacks, racial slurs, threats of violence, or other inappropriate material that violates our Terms and Conditions, and will block users who make repeated violations. We ask all readers to expect diversity of opinion and to treat one another with dignity and respect.


Most Recent Comments
Mike Jozwiak 12/29/03 08:37:57 AM EST

Hi All,

I have not looked into this, other than skimming this article.

Maybe I am missing something.

Why can''t/shouldn''t this be done with simmple objects?

Thanks,

Mike

Magesh Narayanan 12/22/03 04:35:04 PM EST

Excellent article...

Irene 12/14/03 08:39:36 PM EST

Very clear explanation of Aspect Programming!

V 12/10/03 11:36:52 AM EST

Look for the link at the bottom of the articles that says: Source Code.

mARK 12/09/03 04:36:04 PM EST

where does one find the "listing 1" mentioned in the article?

@ThingsExpo Stories
SYS-CON Events announced today that Open Data Centers (ODC), a carrier-neutral colocation provider, will exhibit at SYS-CON's 16th International Cloud Expo®, which will take place June 9-11, 2015, at the Javits Center in New York City, NY. Open Data Centers is a carrier-neutral data center operator in New Jersey and New York City offering alternative connectivity options for carriers, service providers and enterprise customers.
SYS-CON Events announced today that On the Avenue Marketing Group, a sales and marketing firm that utilizes events to market and sell products to consumers, will exhibit at SYS-CON's 16th International Cloud Expo®, which will take place on June 9-11, 2015, at the Javits Center in New York City, NY. On the Avenue Marketing Group (OTA) is a sales and marketing firm that utilizes events to market and sell products to consumers. On behalf of our clients, we attend thousands of fairs, festivals, expos, concerts, conferences, and sporting events annually, helping them reach millions of individuals ...
SYS-CON Events announced today that BroadSoft, the leading global provider of Unified Communications and Collaboration (UCC) services to operators worldwide, has been named “Gold Sponsor” of SYS-CON's WebRTC Summit, which will take place on June 9-11, 2015, at the Javits Center in New York City, NY. BroadSoft is the leading provider of software and services that enable mobile, fixed-line and cable service providers to offer Unified Communications over their Internet Protocol networks. The Company’s core communications platform enables the delivery of a range of enterprise and consumer calling...
SYS-CON Events announced today that ActiveState, the leading independent Cloud Foundry and Docker-based PaaS provider, has been named “Silver Sponsor” of SYS-CON's DevOps Summit New York, which will take place June 9-11, 2015, at the Javits Center in New York City, NY. ActiveState believes that enterprises gain a competitive advantage when they are able to quickly create, deploy and efficiently manage software solutions that immediately create business value, but they face many challenges that prevent them from doing so. The Company is uniquely positioned to help address these challenges thro...
SYS-CON Events announced today that Vitria Technology, Inc. will exhibit at SYS-CON’s @ThingsExpo, which will take place on June 9-11, 2015, at the Javits Center in New York City, NY. Vitria will showcase the company’s new IoT Analytics Platform through live demonstrations at booth #330. Vitria’s IoT Analytics Platform, fully integrated and powered by an operational intelligence engine, enables customers to rapidly build and operationalize advanced analytics to deliver timely business outcomes for use cases across the industrial, enterprise, and consumer segments.
SYS-CON Events announced today that Alert Logic, the leading provider of Security-as-a-Service solutions for the cloud, has been named “Bronze Sponsor” of SYS-CON's 16th International Cloud Expo® and DevOps Summit 2015 New York, which will take place June 9-11, 2015, at the Javits Center in New York City, NY, and the 17th International Cloud Expo® and DevOps Summit 2015 Silicon Valley, which will take place November 3–5, 2015, at the Santa Clara Convention Center in Santa Clara, CA.
SYS-CON Events announced today that Akana, formerly SOA Software, has been named “Bronze Sponsor” of SYS-CON's 16th International Cloud Expo® New York, which will take place June 9-11, 2015, at the Javits Center in New York City, NY. Akana’s comprehensive suite of API Management, API Security, Integrated SOA Governance, and Cloud Integration solutions helps businesses accelerate digital transformation by securely extending their reach across multiple channels – mobile, cloud and Internet of Things. Akana enables enterprises to share data as APIs, connect and integrate applications, drive part...
SYS-CON Events announced today that CommVault has been named “Bronze Sponsor” of SYS-CON's 16th International Cloud Expo®, which will take place on June 9-11, 2015, at the Javits Center in New York City, NY, and the 17th International Cloud Expo®, which will take place on November 3–5, 2015, at the Santa Clara Convention Center in Santa Clara, CA. A singular vision – a belief in a better way to address current and future data management needs – guides CommVault in the development of Singular Information Management® solutions for high-performance data protection, universal availability and sim...
SYS-CON Events announced today that SafeLogic has been named “Bag Sponsor” of SYS-CON's 16th International Cloud Expo® New York, which will take place June 9-11, 2015, at the Javits Center in New York City, NY. SafeLogic provides security products for applications in mobile and server/appliance environments. SafeLogic’s flagship product CryptoComply is a FIPS 140-2 validated cryptographic engine designed to secure data on servers, workstations, appliances, mobile devices, and in the Cloud.
SYS-CON Events announced today that StorPool Storage will exhibit at SYS-CON's 16th International Cloud Expo®, which will take place on June 9-11, 2015, at the Javits Center in New York City, NY. StorPool is distributed storage software that allows service providers, enterprises and other cloud builders to run data storage on standard x86 servers, instead of using expensive and inefficient storage arrays (SAN).
SYS-CON Events announced today that Site24x7, the cloud infrastructure monitoring service, will exhibit at SYS-CON's 16th International Cloud Expo®, which will take place on June 9-11, 2015, at the Javits Center in New York City, NY. Site24x7 is a cloud infrastructure monitoring service that helps monitor the uptime and performance of websites, online applications, servers, mobile websites and custom APIs. The monitoring is done from 50+ locations across the world and from various wireless carriers, thus providing a global perspective of the end-user experience. Site24x7 supports monitoring H...
SYS-CON Events announced today that Intelligent Systems Services will exhibit at SYS-CON's 16th International Cloud Expo®, which will take place on June 9-11, 2015, at the Javits Center in New York City, NY. Established in 1994, Intelligent Systems Services Inc. is located near Washington, DC, with representatives and partners nationwide. ISS’s well-established track record is based on the continuous pursuit of excellence in designing, implementing and supporting nationwide clients’ mission-critical systems. ISS has completed many successful projects in Healthcare, Commercial, Manufacturing, ...
SYS-CON Events announced today that B2Cloud, a provider of enterprise resource planning software, will exhibit at SYS-CON's 16th International Cloud Expo®, which will take place on June 9-11, 2015, at the Javits Center in New York City, NY. B2cloud develops the software you need. They have the ideal tools to help you work with your clients. B2Cloud’s main solutions include AGIS – ERP, CLOHC, AGIS – Invoice, and IZUM
The IoT Bootcamp is coming to Cloud Expo | @ThingsExpo on June 9-10 at the Javits Center in New York. Instructor. Registration is now available at http://iotbootcamp.sys-con.com/ Instructor Janakiram MSV previously taught the famously successful Multi-Cloud Bootcamp at Cloud Expo | @ThingsExpo in November in Santa Clara. Now he is expanding the focus to Janakiram is the founder and CTO of Get Cloud Ready Consulting, a niche Cloud Migration and Cloud Operations firm that recently got acquired by Aditi Technologies. He is a Microsoft Regional Director for Hyderabad, India, and one of the f...
SYS-CON Events announced today that Tufin, the market-leading provider of Security Policy Orchestration Solutions, will exhibit at SYS-CON's 16th International Cloud Expo®, which will take place on June 9-11, 2015, at the Javits Center in New York City, NY. As the market leader of Security Policy Orchestration, Tufin automates and accelerates network configuration changes while maintaining security and compliance. Tufin's award-winning Orchestration Suite™ gives IT organizations the power and agility to enforce security policy across complex, multi-vendor enterprise networks. With more than 1...
VoxImplant has announced full WebRTC support in the newest versions of its Android SDK and iOS SDK. The updated SDKs, which enable audio and video calls on mobile devices, are now compatible with the WebRTC standard to allow any mobile app to communicate with WebRTC-enabled browsers, including Google Chrome, Mozilla Firefox, Opera, and, when available, Microsoft Spartan. The WebRTC-updated SDKs represent VoxImplant's continued leadership in simplifying the development of real-time communications (RTC) services for app developers. VoxImplant (built by Zingaya, the real-time communication servi...
SYS-CON Events announced today that kintone has been named “Bronze Sponsor” of SYS-CON's 16th International Cloud Expo®, which will take place on June 9-11, 2015, at the Javits Center in New York City, NY, and the 17th International Cloud Expo®, which will take place on November 3–5, 2015, at the Santa Clara Convention Center in Santa Clara, CA. kintone promotes cloud-based workgroup productivity, transparency and profitability with a seamless collaboration space, build your own business application (BYOA) platform, and workflow automation system.
SYS-CON Events announced today that Cloudian, Inc., the leading provider of hybrid cloud storage solutions, will exhibit at SYS-CON's 16th International Cloud Expo®, which will take place on June 9-11, 2015, at the Javits Center in New York City, NY. Cloudian, Inc., is a Foster City, California - based software company specializing in cloud storage software. The main product is Cloudian, an Amazon S3-compliant cloud object storage platform, the bedrock of cloud computing systems, that enables cloud service providers and enterprises to build reliable, affordable and scalable cloud storage solu...
SYS-CON Events announced today that Gridstore™, the leader in hyper-converged infrastructure purpose-built to optimize Microsoft workloads, will exhibit at SYS-CON's 16th International Cloud Expo®, which will take place on June 9-11, 2015, at the Javits Center in New York City, NY. Gridstore™ is the leader in hyper-converged infrastructure purpose-built for Microsoft workloads and designed to accelerate applications in virtualized environments. Gridstore’s hyper-converged infrastructure is the industry’s first all flash version of HyperConverged Appliances that include both compute and storag...
SYS-CON Events announced today that IDenticard will exhibit at SYS-CON's 16th International Cloud Expo®, which will take place on June 9-11, 2015, at the Javits Center in New York City, NY. IDenticard™ is the security division of Brady Corp (NYSE: BRC), a $1.5 billion manufacturer of identification products. We have small-company values with the strength and stability of a major corporation. IDenticard offers local sales, support and service to our customers across the United States and Canada. Our partner network encompasses some 300 of the world's leading systems integrators and security s...