Featured in
Process & Practices

In-App Subscriptions Made Easy

There are various types of subscriptions: recurring, non-recurring, free-trial periods, various billing cycles and any possible billing variation one can imagine. But with lack of information online, you might discover that mobile subscriptions behave differently from what you expected. This article will make your life somewhat easier when addressing an in-app subscriptions implementation.

Featured in
Enterprise Architecture

EIP Designer: Bridging the Gap Between EA and Development

This article presents the EIP Designer project, an Eclipse-based tool for introducing integration patterns into an EA design, providing fluidity and continuity while filling the gap existing between EA practices and concrete software development.

SpringSource's Adrian Colyer Details Spring in Production

Adrian Colyer from SpringSource (formerly called Interface21) hosted a webinar on "Spring In Production" topic three weeks ago. The presentation covered the topics on Spring Runtime Kernel architecture, how Spring supports enterprise services like transactions, data access, security, and messaging, and how to tune a Spring-powered application. A white paper on this presentation is now available for download from their website.

Adrian starts the presentation with an overview of Spring Runtime saying that it is responsible for creating and managing the application components, and for managing the execution of the requests serviced by those components.

The presentation covers the following three sections:

Kernel. It consists of AOP (Aspect Oriented Programming), Resource Loading Components, and Event server. The kernel instantiates and configures the application components and manages the invocations for all requests serviced by those components. Adrian explains the inner workings of the kernel with steps of bootstrapping, configuration and assembly as well as the post processing and life cycle management of the application components. He also explains the details behind the request dispatching, resource loading, and event management.

Enterprise Services Layer. The runtime components in the enterprise service layer are plugged into the kernel using Spring extension mechanisms such as namespace handlers and post-processors. These components provide support for transaction management, data access, exception management, messaging, and security. This section also describes how Spring runtime supports JMX Integration and Web Requests Handling requirements.

Performance Tuning. Adrian recommends a "measure first" approach to tune a Java EE application using the Spring framework, so the developers can avoid any premature optimization related issues. Measuring the application performance involves using tools such as Apache JMeter, Selenium, JAMon, and a code profiler (JProfiler or Yourkit Profiler) to find out the hotspots and establish the baseline of response times in each layer in the application. He suggests that developers utilize in-container resources for database connection pooling, JMS messaging, and JMX management purposes. He also offers design tips on when to use Hibernate versus JDBC queries and to make use of Hibernate Statistics object to understand what's happening at runtime in the ORM layer.

Adrian concludes the presentation by urging the developers to take the advantage of runtime optimizations such as moving an operation that contains only persistence logic (no business logic) into the database as a stored procedure and to consider using Spring's asynchronous task executors for tasks that can be run in the background.

"Spring In Production" white paper can be downloaded from SpringSource website after completing the registration details.

Speaking to InfoQ, Adrian said the focus of the series will be "on applied topics - rather than simply explaining product features, the webinars and white papers will address best practices in developing and deploying Spring-powered applications". The next event in the webinar series will be hosted early next year.

It is unfortunate Adian did not touch on issues that I mentioned to him during our discussions including the performance penalty for AspectJ load time weaving (blog.jinspired.com/?p=133), lack of integration with a mature problem diagnostics framework, and resource transaction analysis which is especially important considering the fact that Spring is offering it own transaction management configuration outside of the Java EE specifications.