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
>
-
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?
ThanksWhen 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
UsmaniThere 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
-
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 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