Q. What is JSR?
A. Java Specification Request.
Q. I know the expansion, but, what is JSR?
A. Java Specification Requests are "actual descriptions of proposed and final specifications for the Java platform". In other words, a JSR describes a new feature or a new API that is to be added to the Java platform. This is described in a formal document. Initially a draft document will be created. Then, it will be widely debated and reviewed until a final document is arrived at.
Q. Ok, so, does JSR covers only the JSE?
A. No. A JSR can cover one or more of the 3 editions - JME, JSE and JEE. The 'target' platform for each JSR is decided separately.
Q. Is there more than one JSR?
A. Yes, there are many. Each JSR deals with a particular feature or a particular API. Each JSR is given a unique number with which we can identify it. JSRs are more popularly known by thier name. For example, JSR 303 is also known as the Validation JSR. Here, 303 is the unique number provided to identify this JSR.
Q. Sounds interesting, can you elaborate?
A. Sure. Let's continue with our validation example. There was no standard mechanism available to perform validations on Java objects. Many vendors developed their own mechanisms to deal with this. The Hibernate Validator was one of them. Now, suppose you have used a particular vendor's solution in your code and is running successfully. What if another vendor comes up with a better-performing solution? In this case, you can't just swap jars. You will have to change your code. And that is what we have been trying not to do with Java. Isn't it? Remeber "Write Once, Run Anywhere". So, there was a JSR created to develop a standard API/framework for handling validation in Java. This is JSR 303.
Q. Oh I see, any standardization is welcome. So, did Hibernate validator got converted into JSR 303?
A. Not exactly. Generally, when a JSR is created for a specific feature, the existing solutions are looked at and the good points of each solution is taken and merged into the JSR as much as possible. Or at least, the JSR looks at a way to take the best ideas of each solution as much possible and comes up with a final document.
Q. Hmm. So, then what happens?
A. The JCP has a EC (Executive Committe) which approves the final specification and then the development of RI can start.
Q. RI? Now, what's that?
A. RI is Reference Implementation. Remember that JSR is only a specification. We also need an implementation, don't we? So, a Reference Implementation is developed which also proves that it is feasible to implement the specification.
Q. So, then, which vendor gets to develop the RI?
A. None. RI is usually an open-source implementation of the specification.
Q. Wow, I am hooked up. I want to know all about JSRs. How do I know what new JSRs are created?
A. The best place to find this out is from the home of JSR: http://jcp.org/en/jsr/overview
Q. How do I keep track of a particular JSR?
A. Each JSR has a home page of sorts. For example, for the Validation JSR, the link is: http://jcp.org/en/jsr/detail?id=303
Q. Who creates these new JSRs?
A. Anyone can create a new JSR proposal. Companies or individuals become members of JCP first and then are eligible to submit JSR proposals.
Q. Ok, what is JCP?
A. Java Community Process. "The JCP is the mechanism for developing standard technical specifications for Java technology." So, for each desired feature or API, a new JSR has to be created. This is done via the JCP. In other words, JCP is a process established to develop and revise Java technology specifications. It is an open participative process and involves the community in it.
Q. Why does it have to involve the community?
A. "The JCP fosters the evolution of the Java platform in cooperation with the international Java developer community". This means, we, the Java developers can have a say in the direction of Java. Isn't that cool? Also, you and me can't hide behind an excuse like, "if only they let me do that..."
Q. Really, can I join JCP for free, really?
A. JCP membership is free for individuals, but, organizations need to pay an annual fee.