Plz help!! idempotent methods stateful session beans? (failover)

          plz help!! idempotent methods stateful session beans? (failover)
          Hi there,
          Im trying to failover my shopping cart implemented using stateful ejb, the replication
          is working but the failover is not (Object not found exception....).
          By design is hard to think on an stateful ejb using idempotent methods, but after
          checking the documentation in detail im completely confused, so im starting to
          wonder if i should use idempotent methods or manual retry in case one server is
          down.
          Plz take a loo at these explanations about faiolver in the WLS edocs.
          "....With clustered objects, automatic failover generally occurs only in cases
          where the object is idempotent.....Because of this, replica-aware stubs will not,
          by default, attempt to retry a method that fails after the request is sent but
          before it returns. This behavior can be overridden by marking a service idempotent..."
          BUT
          "By default, a stateful session bean's Home stub provides load balancing and failover
          for its method invocations to any clustered server where the bean is deployed...."
          So is possible to achieve automatic failover (not only load balancing) for stateful
          ejb without having to worry about state-changes or manual retry. (i know the retry
          is requiered if the server crashed just before finishing a transaction but this
          is not what im talking about).
          Any help will be highly appreciated
          Alan
          

          Ryan,
          Yes, im deploying using In-memory replication and clusterable elements, when try
          to invoke the method (after one of the nodes is down) i recieve an "java.rmi.NoSuchObjectException:
          Bean has been deleted".
          I believe all this could be related to some sort of issue with JNDI Lookup in
          the cluster, but haavent been able to get a clue to make it work....(almost desesperate
          by now)
          Alan
          "ryan upton" <[email protected]> wrote:
          >Alan,
          >
          >If the state isn't maintained during failover I would suspect a
          >configuration error. Have you set the <replication-type> element within
          ><stateful-session-clustering> tag in the bean's deployment descriptor?
          >
          >"Alan" <[email protected]> wrote in message
          >news:40e17cf7$1@mktnews1...
          >>
          >> Ryan,
          >>
          >>
          >> Maybe i didnt explain myself, in the scenario im dealing with I KNOW
          >the
          >method
          >> finished succesfully (example, the user succesfully added an item to
          >a
          >cart).
          >>
          >>
          >> Just after that one of the nodes goes down, and the user decides to
          >add a
          >new
          >> item (new invocation , not a retry of failed one) on the same session.
          >>
          >> This is the case in which failover should work automatically as you
          >say,
          >meaning
          >> the new method invokation should be able to retrieve the session state
          >info from
          >> the replica and switch the primary.....Well, this is the part wich
          >isnt
          >working
          >> :( as i understand it should transparently
          >>
          >> I believe could be a config issue , but have no way to make it work.
          >>
          >> Regards,
          >>
          >> Alan
          >> "ryan upton" <[email protected]> wrote:
          >> >
          >> >"Alan" <[email protected]> wrote in message
          >news:40e06296@mktnews1...
          >> >>
          >> >> Ryan,
          >> >>
          >> >> Thanks for clearing the both conditions a bit more, in this case
          >my
          >> >issue
          >> >has
          >> >> to do with the scenario #1 in which subsequent calls (invocations)
          >> >go to a
          >> >node
          >> >> which isnt avaliable(down), do you have any idea of in what conditions
          >> >the
          >> >"automnatic"
          >> >> failover would fail??? (meaning why the stub would try to dispatch
          >> >a call
          >> >to the
          >> >> same previous node)
          >> >>
          >> >> Thanks for the help again
          >> >>
          >> >
          >> >Subsequent calls won't go to a node that's down. That's the whole
          >> >point
          >> >;-). Failover is always automatic, what you are getting confused
          >on
          >> >is
          >> >automatic method re-execution upon failover which happens if the method
          >> >has
          >> >been marked as idempotent. The logic is this: if I failover to an
          >EJB
          >> >that
          >> >I know is still alive, I can't safely call the same method again.
          > Why?
          >> >Because I don't know how much of the method completed the last time
          >before
          >> >the previous bean's failure. So if the bean can yield multiple results
          >> >from
          >> >multiple invocations I had better play it safe and not re-execute
          >the
          >> >method
          >> >on the bean I failed over to (unless it's idempotent because in that
          >> >case it
          >> >doesn't matter how many times I call it, it always does the same thing).
          >> > In
          >> >scenario #1 and #2 failover is automatic and all new calls are executed
          >> >against the bean the client failed over to, but only idempotent methods
          >> >are
          >> >re-executed.
          >> >
          >> >
          >>
          >
          >
          

Similar Messages

  • Stateful Session Bean failover problem

              Hi,
              We have a WLS7.0 cluster with two managed servers. The problem we have in this
              environment is that when server one goes down and gets up and after that server
              two goes down our application gets an error "Unable to connect to Session Bean".
              HTTP session works OK, but Staful Session Bean is lost when these failovers happens.
              //Sami
              

              Hi,
              We have a WLS7.0 cluster with two managed servers. The problem we have in this
              environment is that when server one goes down and gets up and after that server
              two goes down our application gets an error "Unable to connect to Session Bean".
              HTTP session works OK, but Staful Session Bean is lost when these failovers happens.
              //Sami
              

  • Defining Stateful Session Bean Methods as Idempotent or NonIdempotent

    Hi,
              Is there any way to define a stateful session bean method as idempotent
              or non-idempotent. Is there a patch to do this if u want it in Weblogic
              6.0
              Thanks
              Sameer
              

    No, not right now... but BEA is looking into it. It has not been slated for
              a product release.
              They understand that certain getXXX methods of a stateful session bean could
              be idempotent and will look at that in the future.
              Tyler
              "Sameer Wadkar" <[email protected]> wrote in message
              news:[email protected]..
              > Hi,
              >
              > Is there any way to define a stateful session bean method as idempotent
              > or non-idempotent. Is there a patch to do this if u want it in Weblogic
              > 6.0
              >
              > Thanks
              > Sameer
              >
              

  • Howto call the @Remove method of a stateful session bean after JSF page ...

    I use EJB3, JPA, JSF in my web application. There are 2 database tables: Teacher and Student. A teacher can have many (or none) students and a student can have at most 1 teacher.
    I have a JSF page to print the teacher info and all his students' info. I don't want to load the students' info eagerly because there's another JSF page I need to display the teacher info only. So I have a stateful session bean to retrieve the teacher info and all his students' info. The persistence context in that stateful session bean has the type of PersistenceContextType.EXTENDED. The reason I choose a stateful session bean and an extended persistence context is that I want to write something like this without facing the lazy initialization exception:
    <h:dataTable value="#{backingBean.teacher.students}" var="student">
        <h:outputText value="${student.name}"/>
    </h:dataTable>Because my session bean is stateful, I have a method with the @Remove annotation. This method is empty because I don't want to persist anything to the database.
    Now, my question is: How can I make the @Remove method of my stateful session bean be called automatically when my JSF page finishes being rendered?

    Philip Petersen wrote:
    I have a few questions concerning the EJB remove method.
    1) What is the purpose of calling the remove method on stateless session
    bean?There isn't one.
    >
    2) What action does the container take when this method is called?It checks that you were allowed to call remove (a security check) and then
    just returns.
    >
    3) What happens to the stateless session bean if you do not call the remove
    method?Nothing
    >
    4) Is it a good practice to call the remove method, or should the remove
    method be avoided in the case of stateless session beans?
    Personally, I never do it.
    -- Rob
    >
    >
    Thanks in advance for any insight that you may provide.
    Phil--
    AVAILABLE NOW!: Building J2EE Applications & BEA WebLogic Server
    by Michael Girdley, Rob Woollen, and Sandra Emerson
    http://learnWebLogic.com
    [att1.html]

  • Update object returned by a business method in stateful session bean

    I have a business method in stateful session Bean returning an Object "myObject getObject()". This object can be modified by the client.
    Is it necessary at the end to notify the bean about the changes with some kind of business method "setObject(Object myObject)"? or
    the client and the bean have the same reference to the object and it isn't necessary?
    Thanks

    When an EJB returns a value, it is serialised across the wire and is effectively lost to the EJB. Any changes to the returned object by the client, will have to be notified by a call on the EJB, as in your post.
    Dave

  • Help!!! Stateful session bean clustering

              I posted this message on interest.clustering.in-memory-replication. But there is
              no answer at all. Could anyone give me
              some hints? Thanks a lot. I am a student and this work is part of my course project.
              It is due soon.
              =================================================================
              I have a big problem to get stateful session bean in-memory replication run on
              clustering. I have three server instances on three nodes and there is always errors
              from the server instance like this when I run the client to invoke the bean methods:
              <Jan 4, 2002 6:47:31 PM EST> <Error> <EJB> <Failed to update the secondary copy
              of a stateful session bean from home:stateful.ejb.AgentSTF>
              Besides, the load balancing can not work probably too. Below is what I get.
              Statistics for different servers:
              "myserver" processed 160 (12%) of 1311 invocations "ejbperf-3" processed 1151
              (88%) of 1311 invocations
              End Client...
              Load balancing works fine with stateless and entity bean.
              Any comments are greatly appreciated.
              Jenny
              

    Hi Jenny,
              Please could you open a case to the customer support ([email protected]) There is a Cr
              on this issue CR059046
              Description of the CR
              WLS 6.1SP1 - Accessing Stateful Session Bean from Stateless Session Bean in a
              cluster fails with errors
              <Oct 5, 2001 5:08:25 PM GMT+00:00> <Error> <EJB> <Failed to update the
              secondary copy of a stateful session bean from home:UserState>
              Regards
              Stephane
              Jenny Liu wrote:
              > I posted this message on interest.clustering.in-memory-replication. But there is
              > no answer at all. Could anyone give me
              > some hints? Thanks a lot. I am a student and this work is part of my course project.
              > It is due soon.
              >
              > =================================================================
              >
              > I have a big problem to get stateful session bean in-memory replication run on
              > clustering. I have three server instances on three nodes and there is always errors
              > from the server instance like this when I run the client to invoke the bean methods:
              >
              > <Jan 4, 2002 6:47:31 PM EST> <Error> <EJB> <Failed to update the secondary copy
              > of a stateful session bean from home:stateful.ejb.AgentSTF>
              >
              > Besides, the load balancing can not work probably too. Below is what I get.
              >
              > Statistics for different servers:
              > "myserver" processed 160 (12%) of 1311 invocations "ejbperf-3" processed 1151
              > (88%) of 1311 invocations
              > End Client...
              >
              > Load balancing works fine with stateless and entity bean.
              >
              > Any comments are greatly appreciated.
              >
              > Jenny
              >
              Regards,
              Stephane Kergozien
              BEA Support
              

  • Local Stateful Session Bean State Failover Cluster

              Hi,
              How are you doing? I have poured through the previous postings and still am unclear
              on the following: If we have a stateful session bean that is local is the state
              replicated in a cluster if we are using in-memory replication?
              What controls when the state is replicated? Transactions?
              What happens if the methods are not transacted? Is the state replication at the
              method level?
              Thank you so much,
              -Bart Simpson
              

    Hi Bart,
              I'm a bit unclear on it too. It's been asked before, but no definite answer
              has been provided.
              Peace,
              Cameron Purdy
              Tangosol, Inc.
              http://www.tangosol.com/coherence.jsp
              Tangosol Coherence: Clustered Replicated Cache for Weblogic
              "Bart Simpson" <[email protected]> wrote in message
              news:[email protected]..
              >
              > Hi,
              >
              > How are you doing? I have poured through the previous postings and still
              am unclear
              > on the following: If we have a stateful session bean that is local is the
              state
              > replicated in a cluster if we are using in-memory replication?
              >
              > What controls when the state is replicated? Transactions?
              >
              > What happens if the methods are not transacted? Is the state replication
              at the
              > method level?
              >
              > Thank you so much,
              > -Bart Simpson
              

  • How create  EJB 2.1 Stateful Session Bean in a EJB 3.0 Session Bean

    Hi All,
    We have been developing on EJB 2.1. We are now adding a module on EJB 3.0.
    How can we "create" a stateful session bean with create method signature similar to create(String id)?
    We have tried
    // this is the remote interface
    @EJB AddressBean abean;
    But not working
    Any help will be appreciated.

    There is no explicit create() call for EJB 3.0 session beans. It doesn't really matter though
    since you can accomplish the same thing by defining your own business method to act
    as an initializer for whatever state you'd like. E.g.
    @Remote
    public interface FooInterface {
    public void initialize(String id);
    // ... other business methods
    @EJB FooInterface fooRef;
    fooRef.initialize("foo");
    --ken                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               

  • How to track the stateful Session Bean?

    Hi all,
    Am in a serious trouble. I have a message driven bean which will get initiated when some message gets dumped into the queue. I have got session bean which i use to process message which my message driven bean takes from the queue.
    My problem is, lets say there are 3 msgs in the queue. lets say the messages be "aaaa", "aaaa" and "bbbb".
    In this case, when i read the first message, i will create an instance of the session bean to process the message "aaaa". When i receive the second message still i create an instance to process the message "aaaa". When i get the 3rd message, i create an instance to process the message "bbbb".
    My problem in this is, i want to create only one instance of session bean for the message "aaaa".
    So once i create the instance for session bean for particular message, i need to store the object or something of the instance which i created along with the message. Please help me with what i can store with which i can reffer to the session bean again.
    Please see the sample code too.
    Thanks in advance,
    Ashly
    if(msg.equals("aaaa"))
    First n;
    Object obj = ctx.lookup("ejb/First");
    FirstHome home = (FirstHome) PortableRemoteObject.narrow(obj, FirstHome.class);
    n = home.create(msg);
    }

    Hi,
    thanks for information. But i have one question. In a stateful session bean why do we have to store the Remote Interface on the client side.
    I expected in the second jsp page when i do a lookup or create, the container/server should find out whether there is a session bean already created for this session if yes, then return that particular instance of the session bean else create a new one.
    If this is not a possible case then a stateful session bean is nuthing but an instance of an object in the EJB container which does not get destroyed unless there is a time out or the remove method is called. It has nuthing to do with session because throughout the session I have to store the remote interface in the session context of the client( the client here means the jsp).
    thanks in advance
    Anurag

  • Lock Timed out exception in stateful Session Bean

    Hi All,
    We have a stateful session bean and put the reference of the bean in HttpSession
    and retrieve it from other JSP.
    While calling a method from bean, we are often getting the following exception.
    Any help please?
    weblogic.ejb.extensions.LockTimedOutException: Lock for primaryKey:1018581328443_46
    could not be acquired without waiting.
    at weblogic.ejb.internal.LockManagerImpl.lock(LockManagerImpl.java:134)
    at weblogic.ejb.internal.LockManagerImpl.lock(LockManagerImpl.java:81)
    at weblogic.ejb.internal.StatefulEJBCache.bind(StatefulEJBCache.java:447)
    at weblogic.ejb.internal.StatefulEJBObject.getContextForInvoke(StatefulEJBObject.java:159)
    at weblogic.ejb.internal.BaseEJBObject.preInvoke(BaseEJBObject.java:487)
    at com.elink.jbe.savejobses.SaveJobSesBeanEOImpl.getJobHeaderData(SaveJobSesBeanEOImpl.java:1258)
    at jsp_servlet._jobentry._jbeenquirydefaults._jspService(_jbeenquirydefaults.java:243)
    at weblogic.servlet.jsp.JspBase.service(JspBase.java:27)
    at weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:123)
    at weblogic.servlet.internal.ServletContextImpl.invokeServlet(ServletContextImpl.java:761)
    at weblogic.servlet.internal.ServletContextImpl.invokeServlet(ServletContextImpl.java:708)
    at weblogic.servlet.internal.ServletContextManager.invokeServlet(ServletContextManager.java:252)
    at weblogic.socket.MuxableSocketHTTP.invokeServlet(MuxableSocketHTTP.java:346)
    at weblogic.socket.MuxableSocketHTTP.execute(MuxableSocketHTTP.java:246)
    at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:135)

    Hi Arjuna,
    Thanks for your suggestions. But can you also help me how to make the session
    bean thread safe?
    Thanks in Advance
    Srinath
    "Arjuna Chala" <[email protected]> wrote:
    Looks like you have two threads accessing the bean at the same time.
    You
    need to make it thread safe. Also, store the handle of the session bean
    instead of the session bean itself in the session.
    By the way, session beans (handle or otherwise) are not meant to be stored
    in the HttpSession, and here is why:
    http://groups.google.com/groups?q=stateful+session+bean+httpsession&hl=en&se
    lm=3b72acb9%40newsgroups.bea.com&rnum=6
    "srinath" <[email protected]> wrote in message
    news:[email protected]...
    Hi All,
    We have a stateful session bean and put the reference of the bean inHttpSession
    and retrieve it from other JSP.
    While calling a method from bean, we are often getting the followingexception.
    Any help please?
    weblogic.ejb.extensions.LockTimedOutException: Lock forprimaryKey:1018581328443_46
    could not be acquired without waiting.
    atweblogic.ejb.internal.LockManagerImpl.lock(LockManagerImpl.java:134)
    atweblogic.ejb.internal.LockManagerImpl.lock(LockManagerImpl.java:81)
    atweblogic.ejb.internal.StatefulEJBCache.bind(StatefulEJBCache.java:447)
    atweblogic.ejb.internal.StatefulEJBObject.getContextForInvoke(StatefulEJBObjec
    t.java:159)
    atweblogic.ejb.internal.BaseEJBObject.preInvoke(BaseEJBObject.java:487)
    atcom.elink.jbe.savejobses.SaveJobSesBeanEOImpl.getJobHeaderData(SaveJobSesBea
    nEOImpl.java:1258)
    atjsp_servlet._jobentry._jbeenquirydefaults._jspService(_jbeenquirydefaults.ja
    va:243)
    at weblogic.servlet.jsp.JspBase.service(JspBase.java:27)
    atweblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java
    :123)
    atweblogic.servlet.internal.ServletContextImpl.invokeServlet(ServletContextImp
    l.java:761)
    atweblogic.servlet.internal.ServletContextImpl.invokeServlet(ServletContextImp
    l.java:708)
    atweblogic.servlet.internal.ServletContextManager.invokeServlet(ServletContext
    Manager.java:252)
    atweblogic.socket.MuxableSocketHTTP.invokeServlet(MuxableSocketHTTP.java:346)
    atweblogic.socket.MuxableSocketHTTP.execute(MuxableSocketHTTP.java:246)
    at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:135)

  • Handling Transaction in Stateful Session Bean

    I wrote a public method like public void doTransaction()
    it will call 2 private method, like: methodA and methodB
    Both private methods have db accesss statement and will update the db. They got different db connection and will close the connection when method call finished.
    How to include them to one transaction? I want to be able to rollback the job of the first method when I catch exception thrown by the second method.
    I tried simply define transaction type of the public method to be Container and Required. But it doesn't work, the first method doesn't rollback. Of course I can let the 2 private methods share a same connection and commit after finishing calling them. But how if they are in different DB?

    Ok... Here it goes...
    You can do it in the following manner.
    As you said you have got 2 private methods doing d/b updates and these are called from a public method.
    Stateful session beans since associated with a client across methods, you can take advantage of it. Write your own user defined transaction.
    Begin the transaction scope in your public before calling the 1st private method. Call the 2 methods in a try block. Once you are done with these methods, you can commit and end the transaction. If you get any exception, rollback the transaction in the catch block. Otherwise if u get any exception in the 2nd method, you can rollback the transaction there itself.
    Stateful session beans lets u allow to spawn the bean managed transaction across methods. you can begin your transaction in one method and end it in a differnt method or you can end the transaction after calling the methods.
    The problem you are dealing with can typically very well handled by writing bean managed transaction.
    Hope this helps. If you need anymore clarity on my solution, please let me know.
    -amit

  • Stateful Session Bean accesed by two JSPs.

    Hi there,
    We are having quite an issue; we have an application that stores session
    state in an stateful session bean. And we have noticed some parts of the
    application create a situation where is possible that two frames -and so two
    jsp- access the session bean at the same time. And, of course, it´s going to
    be the same instance of the session bean..... what will be the behaviour in
    this case?. Will the requests be serialized, an exception will be thrown or
    the EJB will be destroyed?. Not very sure of what would happen. I suppose
    there could be some problems with this-. I would appreciate any help.
    Many thanks. Best regards.

    Hrm. EJB spec is quite clear on what will happen (RemoteException thrown) if
    the second client attempts to use Stateful Session bean which is already in
    use (and the bean will not be destroyed - container will simply throw an
    exception after failing to acquire a lock on the bean instance without waiting
    (allow-concurrent-calls option in WebLogic allows client call to wait to acquire
    lock - this was probably added as a convinience feature for applications which
    use frames)).
    So, normally your application has to ensure that no 2 clients are able to use
    the same stateful session bean concurrently, or use allow-concurrent-calls option,
    which will do that for you, but the application will become non portable.
    Dimitri
    PS: Thanks. Maine Coon cats are the best. Ours is a 22-pound giant ;-)
    Pinklon Thomas <[email protected]> wrote:
    Hi Dimitri,
    Thnaks a lot for the help:one thing that I do not know if it´s an issue is
    that calls come from different JSPs; the strategy I have seen in another Web
    application servers is trying to activate the EJB in the middle of another
    transaction... In this situation, the container cannot activate the EJB,
    roolback the transaction and destroys the EJB.... Would Weblogic feature
    avoid this?. I will investigate on my part....
    Many many thnaks. Nice cats.
    "Dimitri Rakitine" <[email protected]> wrote in message
    news:[email protected]...
    In 6.1 you can set allow-concurrent-calls to true in this situation:
    <!--
    The allow-concurrent-calls specifies whether a stateful session bean
    instance will allow concurrent method calls. The value of this
    element may be either "True" or "False". The default value is
    "False". When a stateful session bean instance is currently in a
    method call and another (concurrent) method call arrives on the
    server, the EJB specification requires that the server throw a
    RemoteException. By default, allow-concurrent-calls is false, and the
    EJB container will follow the EJB specification. When this value is
    set to true, the EJB container will block the concurrent method call
    and allow it to proceed when the previous call has completed.
    Used in: stateful-session-descriptor
    -->
    Pinklon Thomas <[email protected]> wrote:
    Hi there,
    We are having quite an issue; we have an application that stores
    session
    state in an stateful session bean. And we have noticed some parts of the
    application create a situation where is possible that two frames -and sotwo
    jsp- access the session bean at the same time. And, of course, it´sgoing to
    be the same instance of the session bean..... what will be the behaviourin
    this case?. Will the requests be serialized, an exception will be thrownor
    the EJB will be destroyed?. Not very sure of what would happen. Isuppose
    there could be some problems with this-. I would appreciate any help.
    Many thanks. Best regards.--
    Dimitri

  • Stateful session bean destroying instance variables?

    I'm trying to use a stateful session bean as some kind of login controller and to maintain the login id and access level across JSPs and HTMLs so that once logged in, all the JSPs can obtain the login name of the current user (String) and his access level (int).
    I use the login.jsp to login and it successfully reports logging in with the correct access level retrieved from database. However, if I go to another JSP (testlogin.jsp), these 2 EJB instance variables are always destroyed and set to null and 0 when I access them again.
    What am I missing that my stateful session bean is not saving these instance variables? Do I need to put them in some serializable value objects (create a help VO class?)
    I suspected that on different JSP, I call the MemberControllerHome.create() method, it creates a new instance or something but if I don't use the create method how do I get a handle to MemberController at all?
    MemberControllerBean.java
    public class MemberControllerBean implements SessionBean {
         //initialize in ejbCreate.
         private MemberHome memberHome;
         SessionContext context;
         //Member currentLogin;
         //Current Login
         private String loginID;
         private int accessLevel;
         // Constructor
         public MemberControllerBean() {}
    ...some code in between...
    public void login(String id, String password){
              try{
                   Member member = null;
                   member = memberHome.findByPrimaryKey(id);
                   if(member.getMPassword().equals(password)){
                        this.loginID = member.getMID();
                        this.accessLevel = member.getMAccessLevel();
                   else{
                        throw new EJBException("Login failed. Invalid member ID and/or password.");
              } catch (FinderException ex) {
                   throw new EJBException("Login failed. Invalid member ID and/or password.");
         public void logout(){
              this.loginID = null;
              this.accessLevel = 4;
         public String getLoginID(){
              return this.loginID;
         public int getLoginAccessLevel(){
              return this.accessLevel;
    login.jsp
    String mID = request.getParameter("mID");
    String mPassword = request.getParameter("mPassword");
    out.println("20:" + mID + ":" + mPassword);
    if(mID != null && mPassword != null){
         out.println("22:" + mID + ":" + mPassword);
         try{
              InitialContext ic = new InitialContext();
              MemberControllerHome home = (MemberControllerHome) ic.lookup("java:comp/env/ejb/MemberController");
              MemberController mc = home.create();
              out.println("26:Logging in as " + mID + " with " + mPassword);
              mc.login(mID, mPassword);
              out.println("28:" + mc.getLoginID() + "logged in successfully at level " +
                   mc.getLoginAccessLevel() + ".");
         } catch (NamingException ex) {
              out.println("java:comp/env/ejb/MemberController not found.");
         } catch (EJBException ex) {
              out.println(ex.getMessage());
         } catch (Exception ex) {
              out.println(ex.getMessage());
    testlogin.jsp
    <%
    try{
         InitialContext ic = new InitialContext();
         MemberControllerHome home = (MemberControllerHome) ic.lookup("java:comp/env/ejb/MemberController");
         MemberController mc = home.create();
         out.println("You are logged in as <b>" + mc.getLoginID() +
              "</b> at level <b>" + mc.getLoginAccessLevel() + "</b>.");
    } catch (NamingException ex) {
         out.println("java:comp/env/ejb/MemberController not found.");
    } catch (EJBException ex) {
         out.println(ex.getMessage());
    } catch (Exception ex) {
         out.println(ex.getMessage());
    %>

    The key to the problem is that in testlogin.jsp a new stateful session bean is created. The new bean instance of course doesn't know the log-in information you stored in the old session bean. That is why the method returns null and 0 when called.
    There are couple of ways to solve the issue. The easiest solution is to store the bean instance created in Login.jsp in the jsp's implicit HttpSession object. Because login.jsp and testlogin.jsp share the same session, the bean instance can be easily stored and retrieved.
    Here is the code you need to have:
    1. in login.jsp
    session.setAttribute("MemberControllerBeanInstance", mc);
    2. in testlogin.jsp
    MemberController mc =
    (MemberController) session.getAttribute("MemberControllerBeanInstance");
    Hope it helps.

  • Transaction inside a stateful session bean

    I've a stateful session bean that represents a shopping cart.
    It has the following checkout method():
    <pre>
    /* em.getTransaction().begin(); */
    reasons.clear();
    for(CartEntry ce : entries){
    // get the book reference for the cart entry
    Book relbook = books.findById(ce.getBook().getId());
    if( ce.getQuantity()> relbook.getQuantity() ){
    reasons.add("Item not availabel in this quantity");
    // TODO: need to rollback
    /*em.getTransaction().rollback();*/
    throw new Exception();
    } else{
    // update book quantities
    relbook.setQuantity( relbook.getQuantity() - ce.getQuantity() );
    /*em.getTransaction().commit();*/
    // end of conversational state
    cancel();
    </pre>
    This method checks for the quantity of the items with respect to the quantity in the cart entries.
    How can I perform a transaction here?
    I'd like to rollback it before throwing the exception. And I'd like to commit it at the end,.
    If I use the entity manager to get the transaction, I get this error:
    Exception Description: Cannot use an EntityTransaction while using JTA.

    Its sad to see someone using EJB technology and then completely throw all benefits of it out of the window. I highly advise you to look into Container Managed Transactions; learn what they help you to do and then apply it. When you know how, it will put a smile on your face as you'll see the transaction management stuff disappear before your eyes.
    , from the time by which I decrement the item quantity in the database to the commit, no other transaction is decrementing the quantity of the same item as well??? Am I protected against this???Concurrency is a hard problem with no clearly defined answers to it other than "you need to design the code to guard against concurrency problems". In this specific case, the database protects against this happening by applying a row lock or a table lock while the transaction is active and you are making modifications. For more information about that, you should consult the documentation relating to your specific DBMS.

  • HttpSession vs. Stateful Session Bean ---- when State Session is large

    I hope most of the people come across with this issue where to put the state
    for the internet/intranet based applications when they are using
    servlet/jsps calling session beans. Weblogic 4.5.1 does support httpsession
    in-memory replication for the servlets but the stateful session beans are
    not replicated in clustered environment. Plus with stateful bean u get
    activation/passivation overhead too. So one tempts to use stateless session
    beans and store state in httpsession?
    Then what is the upper limit for the session state one can put in
    HttpSession with the weblogic? Is there any way to configure it?
    One way to overcome the httpsession size limitation is to use database for
    storing state and just store some unique Ids for the session info in
    httpSession. But then there will be overhead for database connection?(jdbc
    connection pool can provide some help here). So what is the recommended way
    for doing this provided few thousand concurrent clients with session size
    say exceeding 4kb per client?
    Thanks
    Usmani

    There are no special setting in sun-ejb-jar.xml regarding cache settings. The default settings from server.xml are used:
        <jdbc-connection-pool steady-pool-size="8" max-pool-size="32" max-wait-time-in-millis="60000" pool-resize-quantity="2" idle-timeout-in-seconds="300" is-isolation-level-guaranteed="false" is-connection-validation-required="false" connection-validation-method="auto-commit" fail-all-connections="false" datasource-classname="oracle.jdbc.pool.OracleDataSource" name="ebs">
          <property value="jdbc:oracle:thin:@myebsdbsserver:1521:ebsdevdb" name="url"/>
          <property value="ebs" name="user"/>
          <property value="ebs" name="password"/>
        </jdbc-connection-pool>
      <ejb-container steady-pool-size="32" pool-resize-quantity="16" max-pool-size="64" cache-resize-quantity="32" max-cache-size="512" pool-idle-timeout-in-seconds="600" cache-idle-timeout-in-seconds="600" removal-timeout-in-seconds="5400" victim-selection-policy="nru" commit-option="B" monitoring-enabled="true">
         </ejb-container>The Session Bean uses Container Managed Transaction. Is it possible in this case, that the bean isn't 'idle enough' in order to set into passivated?

Maybe you are looking for

  • Calendar app keeps freezing

    I've got an ipad mini which I've had for a few months and have not had any problems until now. Every time I try to look at March 2013 in the calendar app it force closes. It doesn't have any problems on any other month or view (day, weekly etc even i

  • Table handling in MII workbench

    Hi all, in my MII workbench I need to create a transaction where a BAPI is invoked. This BAPI has a table as input parameter. So I create the sequence and the appropriate actions to perform the call. My point is how do I populate the table with multi

  • How do i add a table?

    how do i insert a blank table into indesign/

  • TS3648 I have macbook OS x 10.5.8, how can I install new version.

    I have mackbook OS X 10.5.8 and I can not able to update any new version of OS X or install new version of iTunes(10.7....). please help me find out.

  • Compress for OLTP and ORA-14464

    Hello, i have a Oracle-DB 11.2 and want to use Advanced Compression. I want to create a table: CREATE TABLE TD_GE_1990 (     "name_id" NUMBER(1,0),      "name_txt" VARCHAR2(100 BYTE) ) COMPRESS FOR OLTP; But i get: SQL-Fehler: ORA-14464: Kompressions