Skip to main content

[ejb-spec issues] [JIRA] Created: (EJB_SPEC-100) Provide @Idempotent functionallity to the EJB Container

  • From: "rherschke (JIRA)" <jira-no-reply@...>
  • To: issues@...
  • Subject: [ejb-spec issues] [JIRA] Created: (EJB_SPEC-100) Provide @Idempotent functionallity to the EJB Container
  • Date: Mon, 18 Mar 2013 13:52:53 +0000 (GMT+00:00)
  • Auto-submitted: auto-generated

Provide @Idempotent functionallity to the EJB Container
-------------------------------------------------------

                 Key: EJB_SPEC-100
                 URL: http://java.net/jira/browse/EJB_SPEC-100
             Project: ejb-spec
          Issue Type: Improvement
    Affects Versions: Future version
            Reporter: rherschke


My proposal is to add functionality in the EJB-Container to support 
@Idempotent for Stateless EJB methods.

A method is idempotent, when a call to this method does not have any 
side-effects. This means, that multiple calls to such a method always give 
the same result.

So a container could provide this functionality for methods of a Stateless 
Session Bean, marked with @Idempotent to cache the result of the method for 
further calls.

An example:

{code}
@Stateless
public class MyService {

    @Idempotent
    public Long add(Long a1, Long a2) {
        return a1 + a2;
    }
}
{code}

With this, a container is told to handle each call with the same arguments 
idempotent and return exactly the same value. So a call:

{code}
@Stateless
public class AnotherService {

    @EJB
    MyService myService;

    public void someMethod() {
        // assuming, this is the first call ever to this service's method...
        // the container calls the method directly and caches the result.
        System.out.println(myService.add(1024, 42));

        // the container will return always the same value, read from a 
cache, without explicitly call the method.
        for(int i = 0; i<10; i++) {
            System.out.println(myService.add(1024, 42));
        }
    }
}
{code}

A container is responsible for caching the result of the method as well as 
how long or under which circumstances the result is cached (e.g. 
WeakReference). 

Another responsibility for the container is the error handling and 
transaction rollback for idempotent methods, especially in cluster 
environments. (see the similar functionality with weblogic.javaee.Idempotent, 
but my proposal goes a bit further).

This would be a performance gain, but also a potential risk for developers, 
that do not know, what they exactly do. 

I think, there is a general need for this functionality, even in 
REST-Resources or in Cluster-Environment to simplify things and to 
standardize the behavior of containers in this way.

Comments are requested :-)

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://java.net/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        


[ejb-spec issues] [JIRA] Created: (EJB_SPEC-100) Provide @Idempotent functionallity to the EJB Container

rherschke (JIRA) 03/18/2013

[ejb-spec issues] [JIRA] Updated: (EJB_SPEC-100) Provide @Idempotent functionallity to the EJB Container

marina vatkina (JIRA) 03/18/2013

[ejb-spec issues] [JIRA] Commented: (EJB_SPEC-100) Provide @Idempotent functionallity to the EJB Container

arjan tijms (JIRA) 03/19/2013

[ejb-spec issues] [JIRA] Commented: (EJB_SPEC-100) Provide @Idempotent functionallity to the EJB Container

rherschke (JIRA) 03/19/2013
 
 
Close
loading
Please Confirm
Close