Jul
18
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
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
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
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
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
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
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
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.