How can I create a stateful session bean?
I created a stateless session bean. Now I want to make it be a stateful session bean. How can I do? Where can I find a session bean sample?
Thanks
Qing
Look at this site. The tutorial explains it all.
Well if you want to convert your stateless EJB to stateful, all you have to do is change the deployment descriptor and re-deploy the ejb. You should be ready to go.
All the best.
Similar Messages
-
Creating multiple stateful session beans from a java client. (EJB 3.0)
I'm having difficulties with the following:
To access the ShoppingCartBean, I have to put the following annotation in my standalone java client:
@EJB
private static ShoppingCartRemote shoppingCartBean;
The static must be there, thus only one ShoppingCartBean will exist within my java client. But as the ShoppingCartBean is a stateful session bean, I want to be able to get different beans of the same type.
What is the correct way to do this in EJB 3.0?Great question. Because Home interfaces have been removed for the EJB 3.0 simplified
API, stateful session bean creation happens as a side-effect of injection. However, the
same is true of EJB 3.0 business interface lookups. The easiest way to create additional
stateful session beans is to lookup the same dependency that was declared via your
@EJB annotation.
E.g.,
// Assuming the declaring class is pkg1.ShoppingCartClient.java
InitialContext ic = new InitialContext();
ShoppingCartRemote scr1 = (ShoppingCartRemote)
ic.lookup("java:comp/env/pkg1.ShoppingCartClient/shoppingCartBean");
Note that the name relative to java:comp/env is the default associated with your
@EJB annotation since the name() attribute wasn't used. Alternatively, you
could have used :
@EJB(name="scb") private static ShoppingCartRemote shoppingCartBean;
InitialContext ic = new InitialContext();
ShoppingCartRemote scr1 = (ShoppingCartRemote) ic.lookup("java:comp/env/scb");
Yet another alternative is to declare the @EJB at the class-level. This just defines
the dependency without any injection, which is fine if you want to create a bunch of
them via lookup anyway.
@EJB(name="scb", beanInterface=ShoppingCartRemote.class)
public class .... { -
How to avoid Invalidation of Stateful Session Bean in case of an Exception?
Hi developers,
I'm working on a project using JSF, Toplink and EJB 3.0 using JDev.
I'm using a statefull session bean that is stored in the session but when an exception occurs in a business method in the stateful bean the bean crashed and can never be reused and returns the following trace :
06/06/05 10:19:12 java.rmi.NoSuchObjectException: Session has timed out or was invalidated
06/06/05 10:19:12 at com.evermind.server.ejb.StatefulSessionEJBObject.throwPassivisationException(StatefulSessionEJBObject.java:335)
06/06/05 10:19:12 at com.evermind.server.ejb.StatefulSessionEJBObject.OC4J_transactionPreExecute(StatefulSessionEJBObject.java:717)
06/06/05 10:19:12 at com.evermind.server.ejb.interceptor.system.TxRequiredInterceptor.invoke(TxRequiredInterceptor.java:51)
06/06/05 10:19:12 at com.evermind.server.ejb.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:69)
06/06/05 10:19:12 at com.evermind.server.ejb.interceptor.system.DMSInterceptor.invoke(DMSInterceptor.java:52)
06/06/05 10:19:12 at com.evermind.server.ejb.interceptor.InvocationContextImpl.proceed(InvocationContextImpl.java:69)
06/06/05 10:19:12 at com.evermind.server.ejb.StatefulSessionEJBObject.OC4J_invokeMethod(StatefulSessionEJBObject.java:840)
06/06/05 10:19:12 at PriseChargePS_StatefulSessionBeanWrapper21.trouverAssure(PriseChargePS_StatefulSessionBeanWrapper21.java:1747)
06/06/05 10:19:12 at Pensions.Traitements.AssureTraitement.donnerAssure(AssureTraitement.java:130)
06/06/05 10:19:12 at Pensions.view.backing.priseCharge.PriseCharge.chercherAssure_action(PriseCharge.java:189)
06/06/05 10:19:12 at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
06/06/05 10:19:12 at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
06/06/05 10:19:12 at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
06/06/05 10:19:12 at java.lang.reflect.Method.invoke(Method.java:585)
06/06/05 10:19:12 at com.sun.faces.el.MethodBindingImpl.invoke(MethodBindingImpl.java:126)
06/06/05 10:19:12 at com.sun.faces.application.ActionListenerImpl.processAction(ActionListenerImpl.java:72)
06/06/05 10:19:12 at javax.faces.component.UICommand.broadcast(UICommand.java:312)
06/06/05 10:19:12 at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:267)
06/06/05 10:19:12 at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:381)
06/06/05 10:19:12 at com.sun.faces.lifecycle.InvokeApplicationPhase.execute(InvokeApplicationPhase.java:75)
06/06/05 10:19:12 at com.sun.faces.lifecycle.LifecycleImpl.phase(LifecycleImpl.java:200)
06/06/05 10:19:12 at com.sun.faces.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:90)
06/06/05 10:19:12 at javax.faces.webapp.FacesServlet.service(FacesServlet.java:197)
06/06/05 10:19:12 at com.evermind.server.http.ResourceFilterChain.doFilter(ResourceFilterChain.java:64)
06/06/05 10:19:12 at oracle.adfinternal.view.faces.webapp.AdfFacesFilterImpl._invokeDoFilter(AdfFacesFilterImpl.java:367)
06/06/05 10:19:12 at oracle.adfinternal.view.faces.webapp.AdfFacesFilterImpl._doFilterImpl(AdfFacesFilterImpl.java:336)
06/06/05 10:19:12 at oracle.adfinternal.view.faces.webapp.AdfFacesFilterImpl.doFilter(AdfFacesFilterImpl.java:196)
06/06/05 10:19:12 at oracle.adf.view.faces.webapp.AdfFacesFilter.doFilter(AdfFacesFilter.java:87)
06/06/05 10:19:12 at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:629)
06/06/05 10:19:12 at com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:376)
06/06/05 10:19:12 at com.evermind.server.http.HttpRequestHandler.doProcessRequest(HttpRequestHandler.java:870)
06/06/05 10:19:12 at com.evermind.server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:451)
06/06/05 10:19:12 at com.evermind.server.http.HttpRequestHandler.serveOneRequest(HttpRequestHandler.java:218)
06/06/05 10:19:12 at com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:119)
06/06/05 10:19:12 at com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:112)
06/06/05 10:19:12 at oracle.oc4j.network.ServerSocketReadHandler$SafeRunnable.run(ServerSocketReadHandler.java:260)
06/06/05 10:19:12 at oracle.oc4j.network.ServerSocketAcceptHandler.procClientSocket(ServerSocketAcceptHandler.java:230)
06/06/05 10:19:12 at oracle.oc4j.network.ServerSocketAcceptHandler.access$800(ServerSocketAcceptHandler.java:33)
06/06/05 10:19:12 at oracle.oc4j.network.ServerSocketAcceptHandler$AcceptHandlerHorse.run(ServerSocketAcceptHandler.java:831)
06/06/05 10:19:12 at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:303)
Please help !Your question is not how to create/compile a stateless session bean, you are asking how to use those weblogic specific annotations. A weblogic forum is a better place to ask that.
-
How can i expose a stateless session bean with in .ear as web service?
This is my situation.
I have an .ear file and in that i have several other .jar files which are
inter-dependant, lets say
A.jar
B.jar
C.jar files
and i want to expose only A.jar as
webservice, how can i do that ?
Does WLS8.1 provided any way how to do that?
I Appreciate any suggestions and advices.
Thanks
kkI used a different method...
I used servicegen with only a.jar to create the ear.
I touch-ed my own application.xml to make it newer than the one already in the
newly created ear.
I used the ant <ear> task to add b.jar, c.jar, and application.xml to the ear.
Worked like a charm.
Mike
Bruce Stephens <[email protected]> wrote:
Hello,
See if Neal's answer here helps solve your problem using servicegen's
service element "IncludeEJBs" attribute:
http://newsgroups.bea.com/cgi-bin/dnewsweb?cmd=article&group=weblogic.developer.interest.webservices&item=2932&utag=
HTHs,
Bruce
kk wrote:
This is my situation.
I have an .ear file and in that i have several other .jar files whichare
inter-dependant, lets say
A.jar
B.jar
C.jar files
and i want to expose only A.jar as
webservice, how can i do that ?
Does WLS8.1 provided any way how to do that?
I Appreciate any suggestions and advices.
Thanks
kk -
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 intantiate Stateful session bean in EJB 3 ?
In EJB 2.x, to instantiate a Stateful Session bean the process was:
1. Lookup Home object
2. call create(args) method on Home, that in turn would call corresponding ejbCreate(args) on the bean implementation.
Now, in EJB 3, there is no concept of Home interaface, How can I instantiate a stateful session bean with some initialization parameters.
ThanksJust the spec. NetBeans should only be providing the ability to add an ejbCreate method if the bean exposes a Local or Remote 2.x view.
Each lookup or injection of a stateful session bean results in a new bean instance. As long as you call your methods to populate the additional
state right after first acquiring the stateful session bean reference it will work.
--ken -
My weblogic 7 can not run stateful session bean??
Hi,all
I create a stateful session bean in jbuilder 7 and deploy it to weblogic 7,it
successed.The Home interface have a method like this:
public TestRemote create(int var) throws RemoteException, CreateException;
But the client test bean call the create(int var) method throwing
a exception :
java.lang.IllegalArgumentException: wrong number of arguments
Start server side stack trace:
java.lang.IllegalArgumentException: wrong number of arguments
at java.lang.reflect.Constructor.newInstance(Native Method)
at weblogic.rmi.internal.OIDManager.makeActivatableServerReference(OIDManager.java:203)
at weblogic.rmi.internal.OIDManager.getReplacement(OIDManager.java:129)
at weblogic.common.internal.RemoteObjectReplacer.getReplacement(RemoteObjectReplacer.java:265)
at weblogic.common.internal.RemoteObjectReplacer.replaceObject(RemoteObjectReplacer.java:107)
at weblogic.common.internal.ChunkedObjectOutputStream.replaceObject(ChunkedObjectOutputStream.java:53)
at weblogic.common.internal.ChunkedObjectOutputStream$NestedObjectOutputStream.replaceObject(ChunkedObjectOutputStream.java:239)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:323)
at weblogic.common.internal.ChunkedObjectOutputStream.writeObject(ChunkedObjectOutputStream.java:107)
at weblogic.rjvm.MsgAbbrevOutputStream.writeObject(MsgAbbrevOutputStream.java:82)
at com.berserk.ejb.Test_a6z4o8_HomeImpl_WLSkel.invoke(Unknown Source)
at weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:346)
at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:300)
at weblogic.security.service.SecurityServiceManager.runAs(SecurityServiceManager.java:762)
at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:295)
at weblogic.rmi.internal.BasicExecuteRequest.execute(BasicExecuteRequest.java:30)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:152)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:133)
End server side stack trace
-- Failed: create(0)
at weblogic.rmi.internal.BasicOutboundRequest.sendReceive(BasicOutboundRequest.java:109)
at weblogic.rmi.internal.BasicRemoteRef.invoke(BasicRemoteRef.java:127)
at com.berserk.ejb.Test_a6z4o8_HomeImpl_WLStub.create(Unknown Source)
at com.berserk.ejb.TestClient1.create(TestClient1.java:102)
at com.berserk.ejb.TestClient1.main(TestClient1.java:199)
-- Return value from create(0): null.
Then I deploy it to the borland application server 4.5,it did work!!
Somebody can help me ?thxTry throwing a CreateException in ejbCreate (int var).
Jackie wrote:
hi,Sabha:
My source codes is like this.
the home interface:
import java.rmi.*;
import javax.ejb.*;
public interface TestHome extends EJBHome
public TestRemote create(int var) throws RemoteException, CreateException;
the remote interface :
import java.rmi.*;
import javax.ejb.*;
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2002</p>
* <p>Company: </p>
* @author unascribed
* @version 1.0
public interface TestRemote extends EJBObject
public void saycool() throws java.rmi.RemoteException;
the stateful bean:
import java.rmi.*;
import javax.ejb.*;
public class Test implements SessionBean
private SessionContext sessionContext;
private int m_var;
public void ejbCreate(int var)
this.m_var=var;
public void ejbRemove()
public void ejbActivate()
public void ejbPassivate()
public void setSessionContext(SessionContext sessionContext)
this.sessionContext = sessionContext;
public void saycool() throws java.rmi.RemoteException
System.out.println("so cool");
the client test class:
import javax.naming.*;
import java.util.Properties;
import javax.rmi.PortableRemoteObject;
* <p>Title: </p>
* <p>Description: </p>
* <p>Copyright: Copyright (c) 2002</p>
* <p>Company: </p>
* @author unascribed
* @version 1.0
public class TestClient1
static final private String ERROR_NULL_REMOTE = "Remote interface reference
is null. It must be created by calling one of the Home interface methods first.";
static final private int MAX_OUTPUT_LINE_LENGTH = 100;
private boolean logging = true;
private TestHome testHome = null;
private TestRemote testRemote = null;
//Construct the EJB test client
public TestClient1()
long startTime = 0;
if (logging)
log("Initializing bean access.");
startTime = System.currentTimeMillis();
try
//get naming context
Context ctx = getInitialContext();
//look up jndi name
Object ref = ctx.lookup("TestRemote");
//cast to Home interface
testHome = (TestHome) PortableRemoteObject.narrow(ref, TestHome.class);
if (logging)
long endTime = System.currentTimeMillis();
log("Succeeded initializing bean access.");
log("Execution time: " + (endTime - startTime) + " ms.");
catch(Exception e)
if (logging)
log("Failed initializing bean access.");
e.printStackTrace();
private Context getInitialContext() throws Exception
String url = "t3://lettam:7001";
String user = null;
String password = null;
Properties properties = null;
try
properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
properties.put(Context.PROVIDER_URL, url);
if (user != null)
properties.put(Context.SECURITY_PRINCIPAL, user);
properties.put(Context.SECURITY_CREDENTIALS, password == null
? "" : password);
return new InitialContext(properties);
catch(Exception e)
log("Unable to connect to WebLogic server at " + url);
log("Please make sure that the server is running.");
throw e;
// Methods that use Home interface methods to generate a Remote interface
reference
public TestRemote create(int var)
long startTime = 0;
if (logging)
log("Calling create(" + var + ")");
startTime = System.currentTimeMillis();
try
testRemote = testHome.create(var);
if (logging)
long endTime = System.currentTimeMillis();
log("Succeeded: create(" + var + ")");
log("Execution time: " + (endTime - startTime) + " ms.");
catch(Exception e)
if (logging)
log("Failed: create(" + var + ")");
e.printStackTrace();
if (logging)
log("Return value from create(" + var + "): " + testRemote + ".");
return testRemote;
// Methods that use Remote interface methods to access data through the bean
public void saycool()
if (testRemote == null)
System.out.println("Error in saycool(): " + ERROR_NULL_REMOTE);
return ;
long startTime = 0;
if (logging)
log("Calling saycool()");
startTime = System.currentTimeMillis();
try
testRemote.saycool();
if (logging)
long endTime = System.currentTimeMillis();
log("Succeeded: saycool()");
log("Execution time: " + (endTime - startTime) + " ms.");
catch(Exception e)
if (logging)
log("Failed: saycool()");
e.printStackTrace();
public void testRemoteCallsWithDefaultArguments()
if (testRemote == null)
System.out.println("Error in testRemoteCallsWithDefaultArguments():
" + ERROR_NULL_REMOTE);
return ;
saycool();
// Utility Methods
private void log(String message)
if (message == null)
System.out.println("-- null");
return ;
if (message.length() > MAX_OUTPUT_LINE_LENGTH)
System.out.println("-- " + message.substring(0, MAX_OUTPUT_LINE_LENGTH)
+ " ...");
else
System.out.println("-- " + message);
//Main method
public static void main(String[] args)
TestClient1 client = new TestClient1();
client.create(0);
// Use the client object to call one of the Home interface wrappers
// above, to create a Remote interface reference to the bean.
// If the return value is of the Remote interface type, you can use it
// to access the remote interface methods. You can also just use the
// client object to call the Remote interface wrappers.
Thank you for your help!!
"Sabha" <[email protected]> wrote:
Can you attach the sources of your ejb. Thanks.
-Sabha
"Jackie Lee" <[email protected]> wrote in message
news:[email protected]...
Hi,all
I create a stateful session bean in jbuilder 7 and deploy it to weblogic7,it
successed.The Home interface have a method like this:
public TestRemote create(int var) throws RemoteException,CreateException;
But the client test bean call the create(int var) method throwing
a exception :
java.lang.IllegalArgumentException: wrong number of arguments
Start server side stack trace:
java.lang.IllegalArgumentException: wrong number of arguments
at java.lang.reflect.Constructor.newInstance(Native Method)
atweblogic.rmi.internal.OIDManager.makeActivatableServerReference(OIDManager.j
ava:203)
at weblogic.rmi.internal.OIDManager.getReplacement(OIDManager.java:129)
atweblogic.common.internal.RemoteObjectReplacer.getReplacement(RemoteObjectRep
lacer.java:265)
atweblogic.common.internal.RemoteObjectReplacer.replaceObject(RemoteObjectRepl
acer.java:107)
atweblogic.common.internal.ChunkedObjectOutputStream.replaceObject(ChunkedObje
ctOutputStream.java:53)
atweblogic.common.internal.ChunkedObjectOutputStream$NestedObjectOutputStream.
replaceObject(ChunkedObjectOutputStream.java:239)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:323)
atweblogic.common.internal.ChunkedObjectOutputStream.writeObject(ChunkedObject
OutputStream.java:107)
atweblogic.rjvm.MsgAbbrevOutputStream.writeObject(MsgAbbrevOutputStream.java:8
2)
at com.berserk.ejb.Test_a6z4o8_HomeImpl_WLSkel.invoke(Unknown Source)
at weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:346)
at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:300)
atweblogic.security.service.SecurityServiceManager.runAs(SecurityServiceManage
r.java:762)
atweblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:295)
atweblogic.rmi.internal.BasicExecuteRequest.execute(BasicExecuteRequest.java:3
0)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:152)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:133)
End server side stack trace
-- Failed: create(0)
atweblogic.rmi.internal.BasicOutboundRequest.sendReceive(BasicOutboundRequest.
java:109)
at weblogic.rmi.internal.BasicRemoteRef.invoke(BasicRemoteRef.java:127)
at com.berserk.ejb.Test_a6z4o8_HomeImpl_WLStub.create(Unknown Source)
at com.berserk.ejb.TestClient1.create(TestClient1.java:102)
at com.berserk.ejb.TestClient1.main(TestClient1.java:199)
-- Return value from create(0): null.
Then I deploy it to the borland application server 4.5,it did work!!
Somebody can help me ?thx
Rajesh Mirchandani
Developer Relations Engineer
BEA Support -
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
-
"Sharing" a stateful session bean between two servlets, beans
Hello!
I just started to learn some java ee programming and was wondering how i would share one stateful session bean between two servlets.
I created the bean with @Stateful.
I tried to inject the stateful bean in both servlets by @EJB and i can manipulate the object, but each servlet seems to have its own object.
The bean has a remote interface that it implements.
What i also tried was to add the mappedName to the @Stateful expression. Something like: @Stateful(mappedName="name") and to use the bean by @EJB(mappedName="name") but it had no effect.
Im using glassfish 2.1 with netbeans 6.7.1 as my environment (standard settings)
dummy question, but i googled like hours and couldnt find anything : \
hope someone can help and sorry for my bad english
greets and thanksHi there!
I think you are searching for something like an application wide singleton. There is the possibility to define such one in the Glassfish admin console.
Hope this helps! -
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 -
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 -
Error execute query from stateful session bean
Hi,
I created a stateful session bean, it's flow are as following:
- client invoke open()
- client "iterate" using method next()
- client invoke close()
In open, I get Connection to db-source, create a PreparedStatement, and execeute the query, store in a resultset.
In next(), I traverse the resultSet using next().
In close(), I close both resultset, statemtn, and connection.
Here's the snippet of my code:public SynchCatalogBean implements SessionBean {
private Connection conn;
private PreparedStatement stmt;
private ResultSet rs;
private static final String = "SELECT ? FROM ?";
public void openCategory() throws RemoteException {
DataSource dataSource =
(DataSource)jndiContext.lookup(DATASOURCE);
con = dataSource.getConnection();
stmt = con.prepareStatement(QUERY);
stmt.setString(1, "id");
stmt.setString(2, "category");
rs = stmt.executeQuery(); //this throws exception
public String next() throws ... {
if (rs.next())
public void close() throws ... {
rs.close();
stmt.close();
conn.close();
}Well, the problem is, once I test with a simple client, the line rs = stmt.executeQuery() produce exception like this:[SynchCatalog] TRANSACTION ROLLBACK EXCEPTION:Error opening category; nested exception is:
java.rmi.RemoteException: Error opening category
[SynchCatalog] java.rmi.RemoteException: Error opening category
[SynchCatalog] at matashop.product.ejb.SynchCatalogBean.openCategory(SynchCatalogBean.java:66)
[SynchCatalog] at java.lang.reflect.Method.invoke(Native Method)
[SynchCatalog] at org.jboss.ejb.StatefulSessionContainer$ContainerInterceptor.invoke(StatefulSessionContainer.java:570)
[SynchCatalog] at org.jboss.ejb.plugins.SecurityInterceptor.invoke(SecurityInterceptor.java:190)
[SynchCatalog] at org.jboss.ejb.plugins.StatefulSessionInstanceInterceptor.invoke(StatefulSessionInstanceInterceptor.java:209)
[SynchCatalog] at org.jboss.ejb.plugins.TxInterceptorCMT.invokeNext(TxInterceptorCMT.java:133)
[SynchCatalog] at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxInterceptorCMT.java:263)
[SynchCatalog] at org.jboss.ejb.plugins.TxInterceptorCMT.invoke(TxInterceptorCMT.java:99)
[SynchCatalog] at org.jboss.ejb.plugins.LogInterceptor.invoke(LogInterceptor.java:195)
[SynchCatalog] at org.jboss.ejb.StatefulSessionContainer.invoke(StatefulSessionContainer.java:326)
[SynchCatalog] at org.jboss.ejb.plugins.jrmp.server.JRMPContainerInvoker.invoke(JRMPContainerInvoker.java:392)
...My stateful-bean is "read-only" bean, it just execute a select statement, so why Jboss complain about transaction exception? Can anyone help me?
-- Verdi March --agree, you cannot pass tablenames as ? parameters. Instead you should generate your SQL statement dynamically
private static final String = "SELECT ? FROM ";
public void openCategory() throws RemoteException {
stmt = con.prepareStatement(QUERY + "category");
stmt.setString(1, "id"); -
What are the advantages stateful session beans takes over than HttpSession
Hi
We can use HttpSession to maintain the conversational state with the client.
Then why we need to go for stateful session beans to maintain conversational state with the client.
What are advantages we can have while using stateful session beans ratherthan HttpSession????.
Regards
Dhinesh kumar RI think we can use the magic word in the software development "seperation of concerns" ;-)
HttpSession is in the Servlet/JSP tier and is mainly used in the presentation logic tier (UI, page flows, navigation etc..)
where the stateful session bean's concern is to maintain a conversational state in a business logic tier.
Through this seperation its possible, that the business tier's state is undependant from the HttpSession and you dont create a hardlink that could cause problems later. Imagine having a desktop client accessing your business logic etc. not every client needs to be a web client ;-)
I hope that the answer helps you understanding the topic :-)
Brgds,
Nail -
I am creating a web application using JSPs and want to keep stateful information from one call to the next. In the first jsp I run the code:
InitialContext ic = new InitialContext();
StatefulTestLocal testbean = ((StatefulTestLocalHome)ic.lookup("java:comp/env/ejb/StatefulTestBean")).create();
testbean.setUsername(request.getParameter("uname"));
In the second JSP I run the code:
InitialContext ic = new InitialContext();
StatefulTestLocal testbean = ((StatefulTestLocalHome)ic.lookup("java:comp/env/ejb/StatefulTestBean")).create();
testbean.setUsername(request.getParameter("uname"));
out.println("<hr>Username get<br>");
out.println(testbean.getUsername());
out.println("<hr>");
The second JSP always prints null for the username. I always thought when creating a stateful session bean, it looks for an instantiated class that is tied to the client and then if it isn't found, creates a new class. It appears to always be creating a new object.
Every example I see, shows then creating the stateful and then stuffing it into the session. Is this really the way to do it?I am creating a web application using JSPs and want to keep stateful information from one call to the next. In the first jsp I run the code:
InitialContext ic = new InitialContext();
StatefulTestLocal testbean = ((StatefulTestLocalHome)ic.lookup("java:comp/env/ejb/StatefulTestBean")).create();
testbean.setUsername(request.getParameter("uname"));
In the second JSP I run the code:
InitialContext ic = new InitialContext();
StatefulTestLocal testbean = ((StatefulTestLocalHome)ic.lookup("java:comp/env/ejb/StatefulTestBean")).create();
testbean.setUsername(request.getParameter("uname"));
out.println("<hr>Username get");
out.println(testbean.getUsername());
out.println("<hr>");
The second JSP always prints null for the username. I always thought when creating a stateful session bean, it looks for an instantiated class that is tied to the client and then if it isn't found, creates a new class. It appears to always be creating a new object.
Every example I see, shows then creating the stateful and then stuffing it into the session. Is this really the way to do it? -
Spawning thread in the stateful session bean
I ran into an interesting issue: I am spawning a thread inside
my stateful session bean's ejbCreate(...) method. The spawned
thread runs in an infinite loop until some stop signal. The
thread uses some BMP entity beans to access some data from DB,
it creates some BMP entity beans as well as creates another
stateful session bean in each iteration. The application ran
into a crash. Now I have a couple questions:
- First, is it an allowed operation to have a stateful session
bean spawn off threads? Am I violating the specs?
- Second, is it also allowed to have that thread create another
bmp entity bean and another stateful session bean? Again, am I
violating the specs also in here?
Your responses will be very much appreciated.
- SimonFrom the EJB 2.0 Spec, Section 24.1.2:
<quote>
These networking functions are reserved for the EJB Container.
Allowing the enterprise bean to use these functions could compromise
security and decrease the Container’s ability to properly manage the
runtime environment.
• The enterprise bean must not attempt to manage threads. The
enterprise bean must not attempt to start, stop, suspend, or resume
a thread; or to change a thread’s priority or name. The enter-prise
bean must not attempt to manage thread groups.
<quote>
And, spawning threads in weblogic is highly discouraged in any
server-side component. An application should not be designed this
way.
Bill
Simon wrote:
I ran into an interesting issue: I am spawning a thread inside
my stateful session bean's ejbCreate(...) method. The spawned
thread runs in an infinite loop until some stop signal. The
thread uses some BMP entity beans to access some data from DB,
it creates some BMP entity beans as well as creates another
stateful session bean in each iteration. The application ran
into a crash. Now I have a couple questions:
- First, is it an allowed operation to have a stateful session
bean spawn off threads? Am I violating the specs?
- Second, is it also allowed to have that thread create another
bmp entity bean and another stateful session bean? Again, am I
violating the specs also in here?
Your responses will be very much appreciated.
- Simon
Maybe you are looking for
-
Hierarchy on HANA Calculation View with Optional Input Parameters Fails
Hi, Has anyone succeeded in building a hierarchy on top of a calculation view with optional input parameters, where an input parameter is not filled? The original requirement came from the wish to create a parent child hierarchy on a calculation view
-
Problem in opening BI Query in Portal
Hii Expert, i have designed a BI query which is running fine in BEX analyzer and showing right result , but it is showing error when i try it to open on Portal and showing Error like: -> Fiscal year variant P3 not expected ->Variable 0FYEAR could not
-
Color Balance Issue importing from DV Deck Via Firewire...
The fact that searching google and this formum has lead to me finding NO results, I am wondering whether anyone has or is experiencing similar issues.. For some time now, I have been having this issue, which I just realized is not normal. I have a So
-
hi i have a little program with a function. function return type is int im geting return type like int chk = myfunction(somevar); int chk1 = myfunction(somevar); int chk2 = myfunction(somevar); int chk3 = myfunction(somevar);when i try to sum all the
-
JList clearSelection() problems
Hi, i am having problems clearing a selection. I am using the default selection model, how do i possibly notify the listeners if the fireValueChanged() method is protected? Sorry new ish to java really stuck. Iv tried putting my class implementing im