Stateful session bean and faces
I have one stateful session bean(EJB) that manages business logic and conditional page flow. In the web part i have a bunch of JSP pages and each page has it's own JSF bean with data and "submit" methods. Each bean has to keep a reference to this stateful bean and it should be the same reference among all beans. Also i have to create and destroy this bean some way (I think i can use HttpSessionBindingListener).So, any suggestions how to do this? Also i'm searching for 'tips'n'tricks' or design pattern for JSF.
anton
why do you need to hold the same EJB reference in all your JSF beans?
something is wrong with your design, you should take a closer look to see why you need this. a stateless bean does not hold client specific state and there is no difference between stateless bean instances, so your JSF beans do not have to point to the same EJB reference.
Similar Messages
-
Accessing the same stateful session bean from multiple clients in a clustered environment
I am trying to access the same stateful session bean from multiple
clients. I also want this bean to have failover support so we want to
deploy it in a cluster. The following description is how we have tried
to solve this problem, but it does not seem to be working. Any
insight would be greatly appreciated!
I have set up a cluster of three servers. I deployed a stateful
session bean with in memory replication across the cluster. A client
obtains a reference to an instance of one of these beans to handle a
request. Subsequent requests will have to use the same bean and could
come from various clients. So after using the bean the first client
stores the handle to the bean (actually the replica aware stub) to be
used by other clients to be able to obtain the bean. When another
client retrieves the handle gets the replica aware stub and makes a
call to the bean the request seems to unpredictably go to any of the
three servers rather than the primary server hosting that bean. If the
call goes to the primary server everything seems to work fine the
session data is available and it gets backed up on the secondary
server. If it happens to go to the secondary server a bean that has
the correct session data services the request but gives the error
<Failed to update the secondary copy of a stateful session bean from
home:ejb20-statefulSession-TraderHome>. Then any subsequent requests
to the primary server will not reflect changes made on the secondary
and vice versa. If the request happens to go to the third server that
is not hosting an instance of that bean then the client receives an
error that the bean was not available. From my understanding I thought
the replica aware stub would know which server is the primary host for
that bean and send the request there.
Thanks in advance,
Justin
If 'allow-concurrent-call' does exactly what you need, then you don't have a problem,
do you?
Except of course if you switch ejb containers. Oh well.
Mike
"FBenvadi" <[email protected]> wrote:
>I've got the same problem.
>I understand from you that concurrent access to a stateful session bean
>is
>not allowed but there is a
>token is weblogic-ejb-jar.xml that is called 'allow-concurrent-call'
>that
>does exactly what I need.
>What you mean 'you'll get a surprise when you go to production' ?
>I need to understand becouse I can still change the design.
>Thanks Francesco
>[email protected]
>
>"Mike Reiche" <[email protected]> wrote in message
>news:[email protected]...
>>
>> Get the fix immediately from BEA and test it. It would be a shame to
>wait
>until
>> December only to get a fix - that doesn't work.
>>
>> As for stateful session bean use - just remember that concurrent access
>to
>a stateful
>> session bean is not allowed. Things will work fine until you go to
>production
>> and encounter some real load - then you will get a surprise.
>>
>> Mike
>>
>> [email protected] (Justin Meyer) wrote:
>> >I just heard back from WebLogic Tech Support and they have confirmed
>> >that this is a bug. Here is their reply:
>> >
>> >There is some problem in failover of stateful session beans when its
>> >run from a java client.However, it is fixed now.
>> >
>> >The fix will be in SP2 which will be out by december.
>> >
>> >
>> >Mike,
>> >Thanks for your reply. I do infact believe we are correctly using
>a
>> >stateful session bean however it may have been misleading from my
>> >description of the problem. We are not accessing the bean
>> >concurrently from 2 different clients. The second client will only
>> >come into play if the first client fails. In this case we want to
>be
>> >able to reacquire the handle to our stateful session bean and call
>it
>> >from the secondary client.
>> >
>> >
>> >Justin
>> >
>> >"Mike Reiche" <[email protected]> wrote in message
>news:<[email protected]>...
>> >> You should be using an entity bean, not a stateful session bean
>for
>> >this application.
>> >>
>> >> A stateful session bean is intended to be keep state (stateful)
>for
>> >the duration
>> >> of a client's session (session).
>> >>
>> >> It is not meant to be shared by different clients - in fact, if
>you
>> >attempt to
>> >> access the same stateful session bean concurrently - it will throw
>> >an exception.
>> >>
>> >> We did your little trick (storing/retrieving handle) with a stateful
>> >session bean
>> >> on WLS 5.1 - and it did work properly - not as you describe. Our
>sfsb's
>> >were not
>> >> replicated as yours are.
>> >>
>> >> Mike
>> >>
>> >> [email protected] (Justin Meyer) wrote:
>> >> >I am trying to access the same stateful session bean from multiple
>> >> >clients. I also want this bean to have failover support so we want
>> >to
>> >> >deploy it in a cluster. The following description is how we have
>tried
>> >> >to solve this problem, but it does not seem to be working. Any
>> >> >insight would be greatly appreciated!
>> >> >
>> >> >I have set up a cluster of three servers. I deployed a stateful
>> >> >session bean with in memory replication across the cluster. A client
>> >> >obtains a reference to an instance of one of these beans to handle
>> >a
>> >> >request. Subsequent requests will have to use the same bean and
>could
>> >> >come from various clients. So after using the bean the first client
>> >> >stores the handle to the bean (actually the replica aware stub)
>to
>> >be
>> >> >used by other clients to be able to obtain the bean. When another
>> >> >client retrieves the handle gets the replica aware stub and makes
>> >a
>> >> >call to the bean the request seems to unpredictably go to any of
>the
>> >> >three servers rather than the primary server hosting that bean.
>If
>> >the
>> >> >call goes to the primary server everything seems to work fine the
>> >> >session data is available and it gets backed up on the secondary
>> >> >server. If it happens to go to the secondary server a bean that
>has
>> >> >the correct session data services the request but gives the error
>> >> ><Failed to update the secondary copy of a stateful session bean
>from
>> >> >home:ejb20-statefulSession-TraderHome>. Then any subsequent requests
>> >> >to the primary server will not reflect changes made on the secondary
>> >> >and vice versa. If the request happens to go to the third server
>that
>> >> >is not hosting an instance of that bean then the client receives
>an
>> >> >error that the bean was not available. From my understanding I
>thought
>> >> >the replica aware stub would know which server is the primary host
>> >for
>> >> >that bean and send the request there.
>> >> >
>> >> >Thanks in advance,
>> >> >Justin
>>
>
>
-
Error in updating secondary stateful session bean
Hi all,
I have set up a cluster of 2 managed servers with WebLogic 6.1. I have a
stateful session bean and several stateless session beans. the stateful
session bean keeps user info and limited cached objects, all are
serializable. it seems working fine, even after killing any one of the
servers, as long as one is alive. a java application client creates a
stateful session bean first, then calls stateless session beans with the
remote interface of the stateful bean as a method parameter. No problem
when stateful session bean is created. However, each stateless bean method
generates the following error message if I turn the debug on (level 64). No
exception stack traces, and all methods execute successfully.
<Error> <EJB> <Failed to update the secondary copy of a stateful session
bean from home:clientsession>
I wonder what causes the error, and why it tries to update the stateful
session bean. in all stateless session beans, only read into the stateful
bean.
Thank you,
Fujin
This has been fixed in WLS 6.1 SP2.
jagdip Talla wrote:
> Hi Fujin,
> please let me know, if u were able to solve the problem..
>
> hi guys,
> appreciate if you could give me some clues
> how to solve this problem ?
>
> i hv 2 WLS instances in a cluster,
> when one server instance is shut down, i keep getting these errors ?
> is it normal ?
> <Feb 19, 2002 2:57:53 PM SGT> <Error> <EJB> <Failed to update the secondary copy of a stateful session bean from home:ejb/xyzrel1_2/xxxxHome>
>
> appreciate if u can let me know, if u could solve it..?
>
> thanks n regads
> jagdip
Rajesh Mirchandani
Developer Relations Engineer
BEA Support
-
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) -
Share stateful session bean in JSF managed beans with different scope
Hi,
I have a JSF application and I want to try to use of stateful session beans.
So I created a new stateful session bean and its local interface.
@Stateful
public class StatefulSessionBean implements StatefulSessionBeanLocalInterface{
private String name;
@Local
public interface StatefulSessionBeanLocalInterface {
...In my JSF application I have a mananed bean with session context which registers the new interface by
this annotation
@EJB(name="sessionbeanref", beanInterface=StatefulSessionBeanLocalInterface.class) and set the name to something.
Now I want to fetch this name in another managed bean with request scope. So I looked up the bean and tried to get the name.
StatefulSessionBeanLocalInterface = (StatefulSessionBeanLocalInterface) new InitialContext().lookup("java:comp/env/sessionbeanref");
System.out.println(currentmailingbean.getName());but the name is null.
Why?The xsd was created via the netbeans J2EE enterprise application dialog and I think its the most recent.
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">All other annotations seem to work.
Wouldnt the lookup completely fail if the deployment process thought that it is version 1.4 ? -
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] -
Web Service from stateful Session Bean deleted after server restart
Hi,
i created a stateful session bean and from this a web service.
I am able to deploy it and it works really fine.
My problem is: after a server restart the web service is gone and i
have to deploy it again.
I have some other web services (but these are web services from stateless session beans)
but they "survive" the server restart.
I don't want to deploy the web service after every server restart, did I forget something or
is it a general problem of stateful session beans or web services?
Thanks in advance
JensHello Björn,
I am not quite sure what your problem is but did you have a look at these articles:
http://help.sap.com/saphelp_nw04/helpdata/en/4d/993441c73cef23e10000000a155106/frameset.htm
http://help.sap.com/saphelp_nw04/helpdata/en/be/2e2c4142aef623e10000000a155106/frameset.htm
I hope they can give you some idea.
Regads
Vyara -
1) Second thread call to stateful session bean.
Hi Friend,
I read your threads on otn and i compared your problem with us and i analysed that your application and my application is same, So Plese can you help me in some issues.
Friend, Please help me in these issues, Thanks for this
We have very big ADF Swing+BC Application and deployed as Stateful Session Bean. in my application there are 500 Application Modules,For each application module i created Stateful session beans and deployed it on OC4J Container but when working on deployed application then i am getting time out error after 15 min of working.
1). I set that parameter that you mentioned i.e jbo.ejb.txntimeout = 86400,but still it is giving me same error.
2). Second Issue is of ---ORA-01000: maximum open cursors exceeded
For this issue i chaged the Database Parameter i.e OpenCurser=2000, but still it is giving me same error,
is there any parameter on application module required to change so that this error will not come.
3). When i close the form then application module is not releasing database connection.
4). (oracle.oc4j.rmi.OracleRemoteException) Second thread call to stateful session bean
This error is also coming when I am using deployed application for long time i.e more than 15 min for Heavy TransactionsHi Suyog,
How r u?
We all are fine.
I alerady tried for the Max Curser Property but it is not helpfull.
I think again i have to go for closing opened db RS and statements.
Thanks
Vijay -
In-memory-replace for stateful session bean
When I add "<replication-type>InMemory</replication-type>" at the
weblogic-ejb-jar.xml file,
the client can't call this stateful session bean and happen exception.
If I delete "<replication-type>InMemory</replication-type>" at the
weblogic-ejb-jar.xml, the client can call this ejb.
How does the In-memory-replac set?
Is there any limitations about using the In-memory-replace?
The weblogic-ejb-jar.xml and the exception are list.
The weblogic-ejb-jar.xml:
<?xml version="1.0"?>
<!DOCTYPE weblogic-ejb-jar PUBLIC '-//BEA Systems, Inc.//DTD WebLogic 6.0.0
EJB//EN' 'http://www.bea.com/servers/wls600/dtd/weblogic-ejb-jar.dtd'>
<weblogic-ejb-jar>
<weblogic-enterprise-bean>
<ejb-name>test_stateful</ejb-name>
<stateful-session-descriptor>
<stateful-session-clustering>
<home-is-clusterable>True</home-is-clusterable>
<home-load-algorithm>round-robin</home-load-algorithm>
<home-call-router-class-name>beanRouter</home-call-router-class-name>
<replication-type>InMemory</replication-type>
</stateful-session-clustering>
</stateful-session-descriptor>
<jndi-name>test_stateful</jndi-name>
</weblogic-enterprise-bean>
</weblogic-ejb-jar>
The exception:
java.rmi.RemoteException: EJB Exception: ; nested exception is:
java.lang.ClassCastException:
weblogic.rmi.internal.BasicRequestDispatcher
java.lang.ClassCastException: weblogic.rmi.internal.BasicRequestDispatcher
<<no stack trace available>>
This is a Work as designed in my opinion
with NRU ,the container work with an eager remove algorithm, this as stated need pressure at the cache to push the container to remove the beans from the cache ,hence there will no passivation unless the max-beans-in-cache is reached, hence you can try reducing the max-beans-in-cache and see how the caching behaves , if It does not help ,chnage the Algorithm of caching or open a Service Request for us , we can look at this closely
Regards
Anis -
When will Stateful Session Bean be removed?
I develop a stateful session bean and deploy it in the oc4j server successfully.
I write a java GUI Frame.
This Frame call this stateful Session bean and get some data,
and hold its remote interface reference as Frame's private member.
Code like that:
public class CargoFrame extends JFrame
//private member
private DataPager dataPager;
I found that before i release CargoFrame, Stateful session bean will be removed.
And System report session time out.
And i want to know when stateful session bean will be removed,
and how to set the session time?Default is 30mts.
This is done as a parameter in orion-ejb-jar.xml. Please look at the EJB Guide at http://otn.oracle.com/docs/products/ias/doc_library/903doc_otn/generic.903/a97677/dtdxml.htm#634197 for details
regards
Debu -
What's the difference between the LRU and NRU strategy for stateful session bean?
Hi,
Does anybody know the difference between the LRU and NRU strategy for
stateful session bean?
Thanks,
LeviLRU makes the assumption that the bean that has been used a lot recently is
likely to be used again.
NRU simply removes the beans that have not been used for a stipulated amount
of time.
The algorithm for the LRU is much more complicated than the NRU. I think BEA
recommends LRU for better performance and NRU when you have memory
constraints.
"levi" <[email protected]> wrote in message
news:[email protected]..
Hi,
Does anybody know the difference between the LRU and NRU strategy for
stateful session bean?
Thanks,
Levi -
Initialize a stateful session bean from another
Hi,
I am trying to create and initialize a stateful session bean from another stateful session bean. The code is as follows
This method belongs to DefaultSessionBean where it creates the AdminSessionBean based on few checks and returns it to the client.
public AdminSession getAdminSession() throws UnknownException, WarningException {
checkSessionUser("getAdminSession");
if (isAdmin()) {
AdminSession adminSession;
try {
final Context context = IToolsUtil.getInitialContext();
adminSession = (AdminSession)context.lookup("AdminSession");
System.out.println("Successfully created the adminsession bean");
} catch (NamingException ne) {
ne.printStackTrace();
throw new UnknownException (new CatalogHelper("ITOOLS_100019", new Object[]{"Admin", ne.getMessage()}));
System.out.println("adminsession will be returned");
return adminSession;
} else {
throw new WarningException (new CatalogHelper("ITOOLS_000042", sessionUser.getUserhandle()));
}Another method in DefaultSessionBean, creates its local interface and returns it.
public DefaultSessionLocal getDefaultSessionLocal() {
DefaultSessionLocal dsl = (DefaultSessionLocal)context.getBusinessObject(DefaultSessionLocal.class);
System.out.println("local created.");
return dsl;
}Client call initialize method of the AdminSessionBean which is mentioned below:
public void initialize(DefaultSession ds) throws WarningException, UnknownException {
this.ds = ds.getDefaultSessionLocal();
this.rfl = ReadFieldList.getInstance();
this.fm = new FinderMethods();
}The client code where it gets the adminSession and initializes is
public static AdminSession getAdminSession(DefaultSession ds) throws ViewException {
AdminSession as;
try {
as = ds.getAdminSession();
System.out.println("got admin session");
} catch (WarningException we) {
we.printStackTrace();
throw new ViewException(we.getCatalogHelper());
} catch (UnknownException ue) {
ue.printStackTrace();
throw new ViewException(ue.getCatalogHelper());
} catch (OracleRemoteException ore) {
ore.printStackTrace();
throw new ViewException(new CatalogHelper("ITOOLS_050003", ore.getMessage()));
// Initialize Admin Session
try {
System.out.println("before getting it.");
as.initialize(ds);
System.out.println("adminsession is initialized");
} catch (WarningException we) {
as.remove();
as = null;
throw new ViewException(we.getCatalogHelper());
} catch (UnknownException ue) {
as.remove();
as = null;
throw new ViewException(ue.getCatalogHelper());
} catch (OracleRemoteException ore) {
as.remove();
as = null;
throw new ViewException(new CatalogHelper("ITOOLS_050003", ore.getMessage()));
System.out.println("got admin session");
return as;
}Apart from this I am using OC4J 10.1.3.1 tool test my application.
When I am calling initialize method of the AdminSession I am getting the following error.
06/10/24 12:26:08 Entered
06/10/24 12:26:08 got default session
06/10/24 12:26:08 Successfully created the adminsession bean
06/10/24 12:26:08 adminsession will be returned
06/10/24 12:26:08 got admin session
06/10/24 12:26:08 before getting it.
2006-10-24 12:26:08.156 WARNING J2EE RMI-00009 Exception returned by remote server: {0}
06/10/24 12:26:08 com.itools.vs.view.exception.ViewException
06/10/24 12:26:08 at com.itools.vs.view.util.ViewUtil.getAdminSession(ViewUtil.java:71)
06/10/24 12:26:08 at com.itools.vs.view.backing.Admin.CreateUser.submit_action(CreateUser.java:182)
06/10/24 12:26:08 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
06/10/24 12:26:08 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
06/10/24 12:26:08 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
06/10/24 12:26:08 at java.lang.reflect.Method.invoke(Method.java:585)
06/10/24 12:26:08 at com.sun.faces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:146)
06/10/24 12:26:08 at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:92)
06/10/24 12:26:08 at org.ajax4jsf.framework.ajax.AjaxActionComponent.broadcast(AjaxActionComponent.java:88)
06/10/24 12:26:08 at org.ajax4jsf.framework.ajax.AjaxViewRoot.processEvents(AjaxViewRoot.java:274)
06/10/24 12:26:08 at org.ajax4jsf.framework.ajax.AjaxViewRoot.broadcastEvents(AjaxViewRoot.java:250)
06/10/24 12:26:08 at org.ajax4jsf.framework.ajax.AjaxViewRoot.processApplication(AjaxViewRoot.java:405)
06/10/24 12:26:08 at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:95)
06/10/24 12:26:08 at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:245)
06/10/24 12:26:08 at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:110)
06/10/24 12:26:08 at javax.faces.webapp.FacesServlet.service(FacesServlet.java:213)
06/10/24 12:26:08 at com.evermind.server.http.ResourceFilterChain.doFilter(ResourceFilterChain.java:64)
06/10/24 12:26:08 at org.ajax4jsf.framework.ajax.xmlfilter.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:67)
06/10/24 12:26:08 at org.ajax4jsf.framework.ajax.xmlfilter.BaseFilter.doFilter(BaseFilter.java:223)
06/10/24 12:26:08 at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:621)
06/10/24 12:26:08 at com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:368)
06/10/24 12:26:08 at com.evermind.server.http.HttpRequestHandler.doProcessRequest(HttpRequestHandler.java:866)
06/10/24 12:26:08 at com.evermind.server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:448)
06/10/24 12:26:08 at com.evermind.server.http.HttpRequestHandler.serveOneRequest(HttpRequestHandler.java:216)
06/10/24 12:26:08 at com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:117)
06/10/24 12:26:08 at com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:110)
06/10/24 12:26:08 at oracle.oc4j.network.ServerSocketReadHandler$SafeRunnable.run(ServerSocketReadHandler.java:260)
06/10/24 12:26:08 at oracle.oc4j.network.ServerSocketAcceptHandler.procClientSocket(ServerSocketAcceptHandler.java:239)
06/10/24 12:26:08 at oracle.oc4j.network.ServerSocketAcceptHandler.access$700(ServerSocketAcceptHandler.java:34)
06/10/24 12:26:08 at oracle.oc4j.network.ServerSocketAcceptHandler$AcceptHandlerHorse.run(ServerSocketAcceptHandler.java:880)
06/10/24 12:26:08 at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:303)
06/10/24 12:26:08 at java.lang.Thread.run(Thread.java:595)
06/10/24 12:26:08 ITOOLS_050003: Failed to get Admin Session.
Exception is "Error marshalling objects, Not Serializable: java.io.NotSerializableException: DefaultSession_RemoteProxy_6nein01; nested exception is:
java.io.NotSerializableException: DefaultSession_RemoteProxy_6nein01".
[b/Your remote client passes a DefaultSession to AdminSession.initialize(..). This DefaultSession has to be a remote type. In your client, how does it get DefaultSession?
Did your client look up DefaultSession, and have it return a (sessionContext.getBusinessObject(DefaultSession.class))? If so, it should work. -
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. -
EJB 3.0 Stateful session bean shared between Servlet's
Hello
I have a bit of a noob question regarding Stateful sessions beans.
I am wanting to know if there is a way that I can share an instance of a session bean between multiple HttpServlet instances?
I am sending XML messages from a mobile J2ME application, there will be several http POST's made from the mobile client to the server. I would like these multiple POST's to be passed from the handling servlet instance to the same uniquely identified single stateful session bean instance (i can then @Remove the stateful bean when I have finished my several requests).
I would greatly appreciate any tips anyone could give me.If not, your only option is to maintain the
association yourself by creating a unique id for
each
conversation and storing that id along with the SFSB
reference in the ServletContext. Then you'll
need to pass the id in along with each invocation to
retrieve the appropriate SFSB reference.Thanks for your reply.
Will I always be presented with the same ServletContext instance? Even if the time between requests might be many minutes? Where can I learn more about how to use the ServletContext?
Thanks! -
SAME EJB 3.0 Stateful Session bean for different JSP sessions returned
Forum,
I have a strange problem utilizing stateful session beans. Please note, that I am using jdeveloper for the following:
1) Here is a basic stateful session bean:
@Stateful(name = "DemoClass")
public class DemoClassBean implements DemoClass,
DemoClassLocal, SessionSynchronization {
public static int id=0;
public DemoClassBean() {
id++;
public int getId() {
return id;
//... other methods
}2) This bean is accessed from a JSP for testing purpose, I am copying only the script used in JSP:
<%
DemoClass bean = null;
try {
bean = (DemoClass) ((new javax.naming.InitialContext()).
lookup("DemoClass "));
System.out.println("ID=" + bean.getId() );
} catch (javax.naming.NamingException e) {
// TODO
%>If this page is addressed by different clients, from different browsers, the same bean is returned.
Here is what I see in the logs:
ID=1
ID=1
ID=1
The same problem is being observed when this session bean is accessed from a JSF Backing bean.
What could be wrong? Is this a bug in oc4j / jdeveloper (version 10.1.3.3.0)?
Edited by: smw000000001 on Nov 17, 2008 10:52 AMHi,
The code for stateful is perfectly fine and working in a normal way. The way you are trying to implement the stateful session bean in your application is wrong.
think of binding the stateful session bean with HttpSession object.
So that you will get a unique stateful session bean object.
Maybe you are looking for
-
How do I install the battery on my new laptop
I don't know how to install the battery
-
SPL screen for FI payment docuemnt
Hi, SPL acreening for Financial accounting is working for limited transactions. Vendor payment document with check printing and F110 payment proposal is working fine. But with customer paymenr receipts, Manual payment document creation through F-28 i
-
Photoshop Elements 12 installation/uninstallation failure
Hi, I purchased Adobe Photoshop Elements 12 on 4 December 2013, and finally today I have tried to install it, on Windows 8.1. But there were problems, big problems. The installation program said that the installation of "Shared technologies" has fail
-
I'm trying to install windows 7 from Authentic Discs and it freezes while its completing the installation. i have a macbook pro 13inch early 2011 model and windows 7 hp 32 bit version and ultimate 32 and 64. does anyone have a clue to why its freezi
-
How can I see the distance in kilometers?
HELP! I live in Scandinavia. I bought my Nike + iPod in the US and I can't switch from miles to km like it says in the manual. Nothing happens when I press the center button on "distance-miles"... Why can't I switch from miles to km like they say in