Ashish Kulkarni

Ashish Kulkarni’s website on Java Technology, JBoss, Seam, Scotland, UK, Photography and more…

Jul
18

JBoss AS 4.2.3.GA released

Posted under Technology

JBoss have released version 4.2.3.GA of their JBoss Application Server.

This is the 3rd bug fixing release of the JBoss Application Server v4.2 series. The aim of this release is to provide fixes for bugs reported by the community against previous JBossAS v4.2.x releases. There were some backwards compatible component upgrades so switching to AS 4.2.3.GA from a previous 4.2.0/4.2.1/4.2.2 release should not present any problems.

For further details, please have a look at the detailed release notes at this location

Download it from here

Jul
10

Introduction to JBoss Seam Framework

Posted under Technology

Before introducing JBoss SEAM Framework, I would like to put some background into perspective first.

Most Java Developers are aware of Model-View-Controller (MVC) frameworks such as Struts and more recently JavaServer Faces or JSF. JSF + Java Persistence API (JPA) combination have a lot of advantages over Struts + EJB 2 combination. These are as follows:

Fewer, finer grained artifacts

  • No Data Transfer Objects (DTOs) required
  • Clean MVC
  • Less noise

  • No Struts/EJB 2.x boilerplate code
  • No direct calls to HttpSession or HttpRequest
  • Simple Object-Relational Mapping (ORM)

  • Even simpler than the Hibernate API!
  • JSF is flexible and extensible

  • Custom UI widget suites (open source)
  • Good AJAX support
  • JPA

  • Powerful object/relational mapping, far beyond EJB 2.x CMP entity beans
  • All components are POJO so easily testable with TestNG or JUnit
  • Some disadvantages of using plain JSF are:

    JSF

  • Backing bean couples layers and is just noise
  • Hard to refactor all the XML and String outcomes
  • No support for the business layer
  • Validation breaks DRY
  • XML is too verbose
  • How do we write our business layer

  • EJB3? - Unfortunately it can’t be used directly by JSF
  • EJB3? - It has no concept of scopes
  • And then there are some more challenges which are:

    Workflow

  • Ad-hoc back buttoning not suppored
  • No stateful navigation
  • No support for long running business processes
  • Multi-tab/window support is not built in

  • All operations happen in the session - so there is memory leakage
  • No support for a conversation context - so wizards have to use Session Scoped objects
  • Memory leak - objects don’t get cleaned up quickly
  • However, JSF does provide certain advantages which are:

    JSF

  • Validation code in the front-end - for example, required=”true” for input fields.
  • Provides converters for Dates, Amounts, etc.
  • Allows calling Business Layer functions directly.
  • Provides a way for outputting messages alongwith severity (error, info, etc.)
  • Let us now talk about what SEAM brings to the table.

    SEAM allows us to Begin and End a conversation - State is maintained over multiple requests
    between Begin and End.

    For example:


    @Name("itemEditor")
    @Scope(CONVERSATION)
    public class EditItemBean implements EditItem {

    @In EntityManager entityManager;
    Long id;
    Item item;

    // getter and setter pairs
    @Begin public String find(Long id) {
    item = entityManager.find(Item.class, id);
    return item == null ? "notFound" : "success";
    }

    @End public String save(Item item) {
    item = entityManager.merge(item);
    return "success";
    }

    }

    Following Scopes are available when we make use of SEAM:

    Event - Same as Http Request Scope
    Page - New to SEAM - Used just for rendering output
    Conversation - New to SEAM - Spans several requests
    Session
    Application
    Business Process - New to SEAM - Spans several conversations and even survives Server restart

    As you can see, SEAM makes a few new Scopes available to us which are Page, Conversation and Business Process.

    How does SEAM store the state information? Well, that depends upon the context we are talking about.

    In Page context, the state information is stored in the component tree of the JSF view (page). It can also be stored in HttpSession or serialized to client.

    For conversation context, SEAM stores the state information in a Segmented HttpSession. This information times out if not used thus, preventing Memory Leaks.

    In Business Process context, the state information is Persisted to database, and is handled by jBPM.

    What is Bijection?

    Unlike Spring Framework, which only allows Dependency Injection, SEAM allows Dependency Bijection.


    @Name("passwordChanger")
    public class PasswordChanger {

    @In EntityManager entityManager;
    @In @Out User currentUser;

    public void changePassword() {
    entityManager.merge(currentUser);
    }

    }

    In the above example, entityManager is being Injected whereas, currentUser is both injected as well as outjected.

    As a result, currentUser’s value will be first made available to changePassword() and then, once it is done, the objected will be made available to whoever needs it.

    Scope of currentUser itself will be governed by the scope of the User class.

    A brief explanation about JPA Persistence Context

    What is the Persistence Context (PC)?

  • It is a HashMap of all the objects I’ve loaded and stored
  • It holds (at most) one in-memory object for each database row while the PC is active
  • It is a natural first-level cache
  • It can do dirty checking of objects and write SQL as late as possible (automatic or manual flushing)
  • The Persistence Context has a flexible scope

  • default: same scope as the system transaction (JTA)
  • extended: the PC is bound to a stateful session bean
  • Which PC scope to use in JPA?

    Transaction scoped & detached objects

  • LazyInitializationException
  • NonUniqueObjectException
  • Less opportunity for caching
  • An extended persistence context of a SFSB is

  • not available during view rendering (LIE again)
  • very complicated propagation rules
  • PC has no concept of a conversation

    Advantage of SEAM managed persistence and transactions

  • SEAM managed PC is conversation scoped.
  • It remains active through conversation,
  • It is injected using @In - @In EntityManager entityManager
  • It allows use of manual flush mode
  • What else does SEAM give us?

  • Security - This can be configured to work at Page, Field, Class, Method or custom level.
  • Email templates
  • PDF templates
  • JavaScript Remoting
  • Asynchronicity (Java SE, EJB3 or Quartz)
  • Provide Google-style search in your app using Hibernate Search
  • Integration and Unit Testing
  • JSF components (deep integration into JPA)
  • Support for RichFaces, ICEFaces and Adobe Flex 3 RIA
  • Components in groovy
  • WebServices
  • More than 25 examples
  • Portal support
  • Validation
  • BPM support
  • Stateful navigation
  • SEAM 2.1 Roadmap - The near future

  • Providing Wicket as a view layer
  • Providing GWT as a view layer
  • First class support for other other containers (e.g. Websphere)
  • Identity Management
  • Single-Sign-On for security
  • Deeper integration with JBoss Portal (inter-portlet communication)
  • May
    30

    Search for the Holy Grail of CSS

    Posted under Technology

    This week, CSS layouts kept me awake into the wee hours almost every single day. I think a bit of background is in order before I go any further here.

    My company is busy developing the next generation shopping cart application. We are looking to break our usual mould and use some new technologies - well, some are old and established and some are new - such as CSS (so that we can optimise the shopping card for Search Engines), XHTML, Java EE, JBoss Seam, JSF, EJB3 and JPA.

    In the past, I have used frames and tables to a very large extent for layouts. However, this has quite a few problems:

    • Search Engines cannot work with Frames particularly well
    • Screen readers cannot read Frames and Tables based websites properly
    • Coding Login and Logout using Frames requires JavaScript hacks
    • and many more…

    So I decided to look for a way to use CSS for layouts. Initially I managed to get hold of a layout that got us off the ground. However, we quickly realised that if we were serious about our product, we needed a better layout…something that made better utilisation of the Screen real estate.

    Most CSS layouts out there are lame, to say the least. They simply use a width of 800 pixels. Come on designers, most people have a monitor with 1024 pixels width these days…and even more so on wide screen laptops such as mine. So why waste this space?

    So I set out to search for a layout that had a header, a top menu, 2 to 3 columns with one column having fluid width and a footer that stuck to the bottom of the screen/content. Easier said than done. It so happens that what I was looking for was the “Holy Grail of CSS”. And the search proved to be just as difficult and frustrating as the search for the real “Holy Grail”.

    I searched on Google. I asked the question on LinkedIn Answers. And I tried many a times in vain to create a layout of my own.

    Well, I must say, I had quite a few sleepless nights…and a lot of frustration. However, I kept at it. And finally, I have managed to come up with a set of my own layouts.

    I have uploaded all my layouts in a single zip file here.

    These layouts are as follow:

    Quite a few of them…I didn’t realise until I actually started to write about them.

    The following resources were useful in creating the above layouts:

    These layouts are free to use. And if they help you sleep any better, feel free to link back to me or drop me an email :-).

    For those of you looking to get any modifications done, I am happy to do so at a reasonable charge. Feel free to contact me.

    I hope you have found the true Holy Grail of CSS here.

    May
    23

    My experiments with Search Engine Optimisation (SEO)

    Posted under Technology

    Search Engine Optimisation seems to be the hot topic of the moment for every website and online business.

    After having done some search, I have found the basic elements that make a website rise up like a bubble through the ocean of websites on the Internet in a Search Engine.

    But the internal factors seem to be only half the story. One also needs to look at the external factors.

    Blog, blog and blog some more. That seems to be the way to go.

    Become a member of websites like LinkedIn and give some good answers to LinkedIn questions.

    Contribute some good quality content to websites that are constantly looking for content. And believe me, there are hundreds of websites that are looking for quality content.

    Anything from as simple as how to setup a SubVersion Repository on Linux to how to create a Web Application using JSF and JBoss Seam seems to attract a lot of attention.

    Luckily I have also found some websites like www.vipsem.com that allow you to quickly check your website keywords, description, etc. and give you a good idea of how the website would fare with Search Engines.

    Tricky stuff. Driving me up the wall. But then, Internet is here to stay. So are search engines. And there is no shortcut to popularity.

    Hardwork folks…hardwork and more hardwork seems to be the way to go. Or rather, smart hardwork.

    My SEO guidelines:

    • Ensure that the website is XHTML compliant.
    • Choose a meaningful title. For example, my title is “Ashish Kulkarni”.
    • Choose relevant keywords and ensure they appear in the content. For example, my keywords are Ashish Kulkarni, Ashish, Kulkarni, etc.
    • Choose a description that is relevant to the content.
    • Refrain from using irrelevant keywords. For example, if I had a keyword like “Google” or “iPhone” in my keywords, even though they are popular keywords, they would not help improve my search engine ranking.
    • Ensure that the content of your website has a good density of the keywords and that they appear in the content naturally.
    • Check your signature on blogs and forums. Ensure that the URL of your website appears every time you post a message or a comment.

    My favourite SEO tools/resources:

    May
    15

    Seam 2.0.2.GA is out!

    Posted under Technology

    JBoss have released Seam 2.0.2.GA, the premier Java EE framework.

    This release focuses on stability, component updates and documentation improvements. They’ve fixed over 150 bugs since Seam 2 was released back in November, and, with over 70 000 downloads since then, Seam 2 has had pretty good exposure.

     More details…

    May
    09

    RichFaces 3.2.1 GA released

    Posted under Technology

    RichFaces 3.2.1 GA has been released. Following is a small list of new features and bug-fixes:

    New Features Introduced
     

    • Plug’n'Skin feature introduced
    • Demo laguna skin created using plug’n’skin
    • Suggestion Box improved (JS API for calling suggestion and accessing selected Objects added)
    • Sorting futher improvements (Sorting objects not strings)
    • Filtering further improvements (default input corrected and styled)
    • DataScroller? improved (multiple instances behaviour and page binding corrected)
    • componentControl and contextMenu attachement improved

     
    Bug Fixes
     

    • dataTable and sorting, filtering features (corrections on decode)
    • scrollableDataTable fixes (Scrolling and loading data problems, cross-browser support fixes)
    • ComboBox? fixes (according to customers feedback)
    • File Upload improvements and fixes (according to community feedback and internal tests)
    • Character encoding problems(according to customers feedback)
    • Memory leaks and perfomance fixes (according to customers feedback)
    • MyFaces specific fixes
    • Opera browser support fixes
    May
    06

    JBoss Seam 2.0.2.CR2 Released

    Posted under Technology

    JBoss have released version 2.0.2.CR2 of JBoss Seam, the premier Java EE framework. This release includes a lot of bug fixes and feature requests including the use of RichFaces 3.1.4.

    More details…

    May
    01

    Contract with JPMorgan enters its second month

    Posted under Contracting

    The development contract with JPMorgan has entered its second month. Having hit the ground running, I managed to deliver 4 deliverables in these two months.