How to consume Stateless session bean (ejb3.0)
Hi,
Using SAP NWDS, and Java EE 5 engine, I created an EJB 3.0 project (using the wizard) that includes my bean, local and remote classes with the correponding annotation.
Now I have headhackes trying to consume (at least to call a methode from my bean).
Here is the framework:
Ejb project includes: myClassBean, myClassLocal (interface), myClassRemote(interface).
In another java project, I try to use my bean method like this:
InitialContext ctx = new InitialContext();
myClassRemote classRemote= (myClassRemote) ctx.lookup("sap.com/<name of the ear>/myClassBean");
ResultSet rs = classRemote.getMyMethod("param");
Thus this implementation do not work. The nasted exception is NameNotFound exception during the look up.
I readt a lot of document on the sdn and sap portal but all describe the creation of ejb and not really their consumption.
Can you help?
Thanks in advance,
Marc
Hi Marc,
Hope <a href="https://www.sdn.sap.comhttp://www.sdn.sap.comhttp://www.sdn.sap.com/irj/sdn/go/portal/prtroot/docs/library/uuid/605ff5f2-e589-2910-3ead-e558376e6f3d">this</a> answers your questions!
Cheers,
Vladimir
Similar Messages
-
How to use jta in toplink and stateless session bean EJB 3.0?
I have an application with techologies jsf,stateless session bean, adf, toplink
generated by toplink workbench.
In web side ı want to use two methods in stateless session bean which are updated
different tables. I call these methods in my page backing bean.
I also want to JTA in web side. My first methods is done correctly, but second method has an error. I wanto to rollback all transaction.
How can ı do that? with using JTA in Toplink...Yuichi
Did you manage to solve this? I'm doing something similar and seeing the same problem, although they're up to 7.3 SP7.
Any help greatly appreciated.
Lewis -
How to get stateful and stateless session bean in second jsp
I create stateful session bean in the first jsp, then how can I get the stateful session bean in the second jsp? I find that somebody store the bean in HttpSession.
If I store the stateful session bean in HttpSession, then I can get it in the second jsp. My problem is that I can store the stateless session bean in HttpSession, and get it in the second jsp. Then, both stateful and stateless can maintain the state in the second jsp. What is the difference between stateful and stateless session bean in this case ?
I understand the definition of stateful and stateless session bean, but I'm confuse how to use session bean. Can anyone provide sample jsp to show difference of stateful and stateless? How the stateful session bean can maintain the state for the client?Greetings,
I create stateful session bean in the first jsp, then how can I get the stateful session bean in the
second jsp? I find that somebody store the bean in HttpSession.Which is the correct scope for sharing client-specific data when 'request' scope is insufficient.
If I store the stateful session bean in HttpSession, then I can get it in the second jsp. My problem is
that I can store the stateless session bean in HttpSession, and get it in the second jsp. Then, bothWhy is that a "problem"? Does your application not require the stateless bean to be shared? If so, then don't store the EJBObject reference in the session...
stateful and stateless can maintain the state in the second jsp. What is the difference betweenWhat do you mean by this exactly?..
stateful and stateless session bean in this case ?Statefulness of session beans is in regard to maintaining client state (er, in all cases). If your "stateless" bean is receiving information from the client (i.e. its caller) - either through a create method or a business method - and that information is available (retrievable from the bean) on subsequent method calls, then that bean is, in fact, stateful - regardless of how it is deployed.
I understand the definition of stateful and stateless session bean, but I'm confuse how to use
session bean.The correct question, it here seems, is "when" to use which type... Use a "stateful" bean when information about (from) the client (i.e. the caller) must be maintained across method calls of the bean. Use a "stateless" bean for general business methods that do not depend on "prior knowledge" of the client (i.e. the caller).
Can anyone provide sample jsp to show difference of stateful and stateless? How the statefulA "sample JSP" would yield nothing additional... The semantics of calling, using, and "persisting", bean references are always the same - regardless of type or class. However, the reason(s) for using one over the other depends entirely on the needs of your application.
session bean can maintain the state for the client?I recommend that you spend more time learning about EJBs generally. In particular, it seems you require more fundamental understanding of their scope and lifecycle. Refer to sections 4, 6, and 7 of the EJB 2.0 Specification.
Regards,
Tony "Vee Schade" Cook -
Newbie: How do i use a stateless session bean in a backing bean?
I have a stateless session bean with a function 'getVoterList()'; how do i instantiate the bean and use it in from my managed bean?
I dont want to use seam; coz the stateless serrion bean/EJB is written by another developer and we cant updat eit now to use seam..
any tutorials? walk thrus or sample code?
thanks
illiI 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 Stateless Session Bean instances in pool
Hi,
I am not clear about , stateless bean having "pool" of objects to be used by multiple clients.when those instances will be created or who will generate them.
Is this pool specific to ejb container or any vendor container.
thanks in advance,Hi , my question is about Stateless Session Bean ,
how StatelessSession bean will behave when some 100
clients wil call homeObject simultaneously.The EJBs(including stateless) are single threaded so one client can access one Bean at a time. As per your question if some 100 clients are invoking home.create() method then it has to invoke on 100 EJBs. The instance pool size can be specified while deploying. In the descriptor (application server speific). So if the number of simultaneous clients is more than the pool size then some clients have to wait.
Now my second question is how and who will create
these instance .The container will create the pool as per the application server spcific deployment descriptor. -
Problem Deploying EJB3 Stateless session bean in Jboss4.0.3
Hi All,
I have developed an EJB 3 Stateless session bean and tried to deploy in JBoss 4.0.3 , But i get the following Exception.
javax.naming.NameNotFoundException: ejb not bound
at org.jnp.server.NamingServer.getBinding(NamingServer.java:491)
at org.jnp.server.NamingServer.getBinding(NamingServer.java:499)
at org.jnp.server.NamingServer.getObject(NamingServer.java:505)
at org.jnp.server.NamingServer.lookup(NamingServer.java:249)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:610)
at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:572)
at javax.naming.InitialContext.lookup(InitialContext.java:351)
at org.apache.jsp.session_jsp._jspService(org.apache.jsp.session_jsp:69)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:81)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.jboss.web.tomcat.security.CustomPrincipalValve.invoke(CustomPrincipalValve.java:39)
at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:157)
at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:59)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)
at java.lang.Thread.run(Thread.java:595)
I am sorry if the question is silly..... My Remote Interface will be one like this
import javax.ejb.Remote;
@Remote
public interface CityService {
public String getCity();
And My Bean Class will be
import javax.ejb.EJB;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.EntityTransaction;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
@EJB
@Remote(CityService.class)
@Stateless(mappedName="ejb/CityService")
public class CityServiceBean implements CityService {
public String getCity(){
return "Chennai Metropolitan";
And the client which invokes the bean will be
InitialContext ctx = new InitialContext();
CityService c = (CityService)ctx.lookup("ejb/CityService");
System.out.println("Msg from Bean"+c.getCity());
please help me out of this issue....
Thanks in advanceford wrote:
If you deploy your application in a .ear, you also can use this:
You have to set a name to your EJBBean -> @Stateless(name = "XXX")
The client for remote interface -> cxt.lookup(Name_of_your_own_ear_without_extension + "/XXX/Remote");
The client for local interface -> cxt.lookup(Name_of_your_own_ear_without_extension + "/XXX/Local");the problem with this approach is that if you version your ears, the version numbers show up in the jndi names, and your client code will be hard coded to specific server versions. -
How to integrate hibernate with Stateless Session bean in weblogic10.0
Hi,
I need to invoke hibernate(3.x) DAO from EJB Stateless Session bean(EJB2.x). I am using mysql database. Can somebody please post the configuration.
Thanks in advance,
Rushi.Hi Deepak,
Thanks for your reply.
Actually, our stand alone java application already using spring-hibernate feature. Now we are planning divide our application into modules and deploy each module as ejb beans. As it is already integrated with spring-hibernate we are not using entity beans as of now. My understanding is container uses some default transcation management .so, my question is what are all the configurations needs to be done to let weblogic 10.0 server uses org.springframework.orm.hibernate3.HibernateTransactionManager. I mean, is there are any .xml file in weblogic to configure all these? please reply deepak I am struck here..
Regards,
Rushi. -
Calling EJB 3.0 Stateless Session Bean
Dear all,
I created a stateless session bean with a hello world method on it. Now i want to call the method from a BeanDecorator class, through a getter metod. When i use the jndi lookup in my getter, i can call the helloWorld method without a problem. However, when i dont use the jndi lookup, and only use the @EJB annotation, i always get a nullpointer.
This is working:
InitialContext ic = new InitialContext();
test = (TestLocal)ic.lookup("test.be/ear~bd/LOCAL/TestBean/"+TestLocal.class.getName());
test.helloWorld()
This gives nullpointer:
@EJB
private TestLocal test;
test.helloWorld();
What is the correct way to consume session beans without having to explicitly code the jndi lookup?
Kind regards.Hi,
any annotation like this can be used only in "managed classes" like Session Beans, Servlets etc. Managed classes are those classes managed by the J2EE server. Managed here means, lifetime controlled by server.
You can find this in J2EE specification.
Frank -
Call stateless session bean EJB 2.0 from Webdynpro Java UI
Hello,
Can someone please tell me asto how to call a stateless session bean EJB 2.0 from Webdynpro Java UI?
The NWDS version is 7.0.
Thanks and Regards,
AryaHi Aryadipta
Please check this pdfs
https://www.sdn.sap.com/irj/scn/index?rid=/library/uuid/b00917dc-ead4-2910-3ebb-b0a63e49ef10&overridelayout=true
Steps for calling stateless session bean in Webdynpro java
Go to NWDS -> open perspective ->j2ee
select EJB Module Project ->create a project with name
Open the Project -->RC on ejb-jar.xml -> Select new --> EJB
Give name to EJB Bean (First letter should be in capital letters)
select the type of bean as Stateless session bean and give the package name to store that EJB bean.
After that Expand ejb-jar.xml and then select the <projectEJB>
Double click on this on method tab double click you will get business method where we will create the methods for business logic
Double click on projectEJB and then RC on bean tab and write required business logic in bean window as follows(based on requirement we will design a business logic).
After writing the business logic go to project -> rebuild
Till now we have created one EJB jar file
then go to File-->Enterprise Application Project -->create a project (projectEAR)
After creating a project click on next-> here we will have ear projects and then we select specific project required for our application.(here select projectEJB)
After that Calculate EAR project will be available on j2ee explorer.
Right click on <Bean> here
select New->Web Service->give a name to webservice and select Default configuration type as simple SOAP
-->click next -> Finish.
That webservice and related are created in ejb-jar.xml .
Expand the ejb-jar.xml.and double click on < webservice>
RC ProjectEJB -> Build EJB Archive RC on CalculateEAR ->Build applicationarchive.
Expand the projectEAR->RC on CalculateEAR.ear->Deploy to J2EE Engine
Double click on calculateEAR.ear ->Webservice navigator tab ->we eill servers expand the node
select the specific WebService
Here we test the webservice by click on Test and test it.
After that go to Web dynpro perspective ->create one webdynpro Project and one component
RC on model> Select import Web Service model(last)>give model name and package
and select radio button as local file system or URL
Go to WSnavigator->copy the WSDL path and paste it in model WSDL path and click on finish.
from here onwards steps are same as that adaptive RFC model
Hope it helps
Thanks
Tulasi Palnati
Edited by: Tulasi Palnati on Aug 26, 2009 12:15 PM
Edited by: Tulasi Palnati on Aug 26, 2009 12:43 PM -
WLS10 and Stateless Session Bean
I tried to create EJB3 application example.
1. Created Stateless Session Bean that implements Remote and Local interfaces:
Session Bean code:
package com.session;
import javax.ejb.Local;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.ejb.TransactionAttribute;
import javax.ejb.TransactionAttributeType;
@Stateless(mappedName="SessionBeanService")
@Remote(ISessionBeanRemote.class)
@Local(ISessionBeanLocal.class)
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class SessionBean implements ISessionBeanLocal,
ISessionBeanRemote
public String reply(){
return "MySessionBean - success !!!";
Remote Interface code :
package com.session;
public interface ISessionBeanRemote
public String reply();
Local Interface code:
package com.session;
public interface ISessionBeanLocal
public String reply();
application.xml:
<?xml version="1.0" encoding="UTF-8"?>
<application 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/application_5.xsd"
version="5">
<display-name>EJB3 Sample Application</display-name>
<module>
<ejb>beans.jar</ejb>
</module>
</application>
weblogic-application.xml:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE weblogic-application PUBLIC
"-//BEA Systems, Inc.//DTD WebLogic Application 8.1.0//EN"
"http://www.bea.com/ns/weblogic/90/weblogic-application.xsd">
<weblogic-application>
<classloader-structure>
<module-ref>
<module-uri>beans.jar</module-uri>
</module-ref>
</classloader-structure>
</weblogic-application>
2. I packaged classes into EAR file and deployed to WLS10.
I didn't include any weblogic specific XML descriptors besides weblogic-application.jar.
My client code lookes as follows:
public void test(){
Context context = getMyServerContext();
// THIS JNDI NAME I SEE ON MY SERVER JNDI TREE
String jndiName = "sessionbeansbeans_jarSessionBean_ISessionBeanRemote";
Object obj;
obj = context.lookup(jndiName);
System.out.println(" obj class : " + obj.getClass().getName());
ISessionBeanRemote remote = (ISessionBeanRemote) PortableRemoteObject.narrow(
obj, ISessionBeanRemote.class );
String res = remote.reply();
System.out.println("res : "+res);
I get an Exception:
Exception occurred!
java.lang.ClassCastException: Cannot narrow remote object to com.session.ISessionBeanRemote
at weblogic.iiop.PortableRemoteObjectDelegateImpl.narrow(PortableRemoteObjectDelegateImpl.java:242)
at javax.rmi.PortableRemoteObject.narrow(PortableRemoteObject.java:137)
at ca.cgi.mvest.test.server.wms.GlFacadeTest.runTest(GlFacadeTest.java:91)
at ca.cgi.mvest.test.server.wms.GlFacadeTest.<init>(GlFacadeTest.java:53)
at ca.cgi.mvest.test.server.wms.GlFacadeTest.main(GlFacadeTest.java:151)
java.lang.ClassCastException: Cannot narrow remote object to com.session.ISessionBeanRemote
My server console have the following output:
Root cause of ServletException.java.lang.NoClassDefFoundError: com/session/SessionBean_7pp7ls_ISessionBeanRemot
eIntf
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:12
4)
at weblogic.utils.classloaders.GenericClassLoader.defineClass(GenericCla
ssLoader.java:338)
at weblogic.utils.classloaders.GenericClassLoader.findLocalClass(Generic
ClassLoader.java:291)
Truncated. see log file for complete stacktrace
Server logs a problem already on the line when I do lookup
on JNDI name even before narrow();
It looks like my EAR was missing something. But server never complained during deployment.
May be someone can direct me to a real sample of Weblogic10-ejb3.0 application, since examples that come with WLS 10 intallation combersome and do not follow
docmentation.
Thanks in advance for any suggestion.Hello Freind
The main different b\w stateful and statless is that stateful maintain state of method conversation means it has record that which method call before this method
but in case of stateless conversation state does not saved second different we can say that create method in stateless having no parameter but statefull having parameter I think u can understand easily
With Best Regards
Rajesh Pandey
email :[email protected]
url :-- http://www.sixthquadrant.com
Mob :-- 9811903737
Delhi India -
JCo 3.0 Server and Stateless Session Bean
Hello,
I use JCO (3.0) and I need to integrate SAP with JBoss.
The SAP Module is calling EJB-Services over JCo.
How would the architectur looks like?
I start with using an MBean to start and stob the native JCO-Server over JMX.
This still works.
But it doesn't work:
The Client(SAP) calls the JCoServer (works fine).
But the call off the EJB failed.
What solutions do you have to share?
Do you use a stateless session bean?
Best regards
PeterThe program ID should be with length 8 max
-
Stateless session Bean - xml and ejb-jar.xml file ???
Dear Experts,
Stateless-session bean
For Creating an ear file
we need ejb-jar.xml and weblogic-ejb-jar.xml files
Is these files are already available
or we have to type these files ??
Advance Thanks
Rengaraj.RMy best advice: surrender to use an IDE.
You wonder sometimes at how much productivity (read as 'time') could be wasted by doing something that could be done automatically. For a learning experience or a once only exercise is fine but as a routine thing, not worth it.
Cheers -
Calling Stateless Session bean from Servlet
Dear Friends,
A help will be Appreciated...
I created a EJB (Stateless Session Bean) using WebSphere Application Developer with its Business logic in Main bean. Its working perfectly fine using UTC (Standalone Test Client). But when i use a servlet to communicate with this EJB, its giving me error as follows:
Error Stack:
java.lang.NoClassDefFoundError: package name/DemoHome
at java.lang.Class.newInstance0(Native Method)
at java.lang.Class.newInstance(Class.java:254)
at java.beans.Beans.instantiate(Beans.java:213)
at java.beans.Beans.instantiate(Beans.java:57)
at com.ibm.servlet.engine.webapp.WebAppServletManager.loadServlet(WebAppServletManager.java:148)
at com.ibm.servlet.engine.webapp.WebAppServletManager.getServletReference(WebAppServletManager.java:287)
at com.ibm.servlet.engine.webapp.WebApp.getServletReference(WebApp.java:354)
at com.ibm.servlet.engine.webapp.WebAppRequestDispatcherInfo.calculateInfo(WebAppRequestDispatcherInfo.java:167)
at com.ibm.servlet.engine.webapp.WebAppRequestDispatcherInfo.<init>(WebAppRequestDispatcherInfo.java:51)
at com.ibm.servlet.engine.webapp.WebApp.getRequestDispatcher(WebApp.java:1145)
at com.ibm.servlet.engine.srt.WebAppInvoker.handleInvocationHook(WebAppInvoker.java:179)
at com.ibm.servlet.engine.invocation.CachedInvocation.handleInvocation(CachedInvocation.java:67)
at com.ibm.servlet.engine.srp.ServletRequestProcessor.dispatchByURI(ServletRequestProcessor.java:122)
at com.ibm.servlet.engine.oselistener.OSEListenerDispatcher.service(OSEListener.java:315)
at com.ibm.servlet.engine.http11.HttpConnection.handleRequest(HttpConnection.java:60)
at com.ibm.ws.http.HttpConnection.readAndHandleRequest(HttpConnection.java:323)
at com.ibm.ws.http.HttpConnection.run(HttpConnection.java:252)
at com.ibm.ws.util.CachedThread.run(ThreadPool.java:122)
For more Info let me provide the snipets of how i used the Sevlet:
Client.java
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import packagename.*; //package name of imported ear file which is in
//classpath
public class Client extends HttpServlet {
public void doGet(
javax.servlet.http.HttpServletRequest request,
javax.servlet.http.HttpServletResponse response)
throws javax.servlet.ServletException, java.io.IOException {
PrintWriter out=response.getWriter();
Properties p = new Properties();
p.put(javax.naming.Context.PROVIDER_URL, "iiop:///");
p.put(javax.naming.Context.INITIAL_CONTEXT_FACTORY,"com.ibm.websphere.naming.WsnInitialContextFactory");
try {
InitialContext initial = new InitialContext(p);
Object objref = initial.lookup("JDemo");
DemoHome home = (DemoHome)PortableRemoteObject.narrow(objref,DemoHome.class);
Demo demo = home.create();
int r=demo.testBean(4);
out.println("EJB RESULT= "+r);
} catch (Exception ex) {
System.err.println("Caught an unexpected exception!");
ex.printStackTrace();
Kindly provide ur solution to this problem. Urgent solution will be helpful as its a part of our present project.
Thanking you for ur esteemed help.
regards,
Arun.Perhaps you webserver can't see your package jar file.
Try putting it in WEB-INF\lib directory of your app and restart your server. -
Stateless Session Bean has no Context when called from WAR
Hello,
Here is the code for my stateless session bean (it will carry out certain actions based on the timer service)
package DigestTest;
import java.io.BufferedWriter;
import java.io.FileWriter;
import java.util.Date;
import javax.ejb.*;
import javax.ejb.TimedObject;
import javax.ejb.Timer;
* This is the bean class for the MasterTimerBean enterprise bean.
* Created Sep 7, 2006 9:05:09 AM
* @author ttaylor
public class MasterTimerBean implements SessionBean, MasterTimerRemoteBusiness, MasterTimerLocalBusiness, TimedObject
private SessionContext context;
public void setSessionContext(SessionContext aContext)
context = aContext;
* @see javax.ejb.SessionBean#ejbActivate()
public void ejbActivate()
* @see javax.ejb.SessionBean#ejbPassivate()
public void ejbPassivate()
* @see javax.ejb.SessionBean#ejbRemove()
public void ejbRemove()
// </editor-fold>
* See section 7.10.3 of the EJB 2.0 specification
* See section 7.11.3 of the EJB 2.1 specification
public void ejbCreate()
// TODO implement ejbCreate if necessary, acquire resources
// This method has access to the JNDI context so resource aquisition
// spanning all methods can be performed here such as home interfaces
// and data sources.
public void ejbTimeout(Timer timer)
try
BufferedWriter writer = new BufferedWriter(new FileWriter("C:\\timerTest.txt"));
writer.write("Timer has tripped");
writer.newLine();
writer.flush();
writer.close();
catch(Exception e)
return;
// Add business logic below. (Right-click in editor and choose
// "EJB Methods > Add Business Method" or "Web Service > Add Operation")
public String initializeTimer()
String result = "\n\nInitializing Timer\n";
try
// Create Your Timer
if(context!=null)
TimerService ts = context.getTimerService();
result = result+"Instantiating Timer Object\n";
Timer timer = ts.createTimer(new Date(), 5000, "TestTimer");
result = result+"About to grab TimerHandle";
TimerHandle timerHandle = timer.getHandle();
else
result = result+"\nContext Object is null\n";
catch (Exception e)
result = result+"\nError:\n"+e.toString();
return result;
public String writerTest()
String result = "about to write";
try
result = result+"\nOpening the file";
BufferedWriter writer = new BufferedWriter(new FileWriter("C:\\timerTest.txt"));
result = result+"\nWriter Test Passed";
writer.write("Writer Works");
writer.newLine();
result = result+"\nFlushing writer";
writer.flush();
result = result+"\nClosing writer";
writer.close();
catch (Exception e)
result = result+"\n"+e.toString();
return result;
I am calling initializeTimer() from a jsp page with a simple <jsp:useBean tag>.
The program keeps returning that the context variable is not set(this is from the context!=null conditional in initializeTimer()). I am very confused, I thought that setContext(...) was called by the container upon instantiation (and thus should happen completely without any action from me).
How am I able to call a session bean that has not had the context set?
Any information is appreciated,
Thanks,
Scottthank you for your reply, rajeevm007.
it seems that the question is really a problem now.
i think i should update weblogic to the lastest version and confirm this question. if it still in there, it seems that we have to reset the global variables all manually. so, now, we are discussing that should we modify all the ejbs, or wait the next version of weblogic. :) of cause the second choice is a joke.
no other good choice?
maybe in the march of the next year....
cheers
thank you again. -
Not be able to obtain a transacted session within stateless session bean
I need some assistance on creating a transacted session. For some reason while within a stateless session bean, I am unable to create a transacted session even though I'm specifying to create the transacted queue session. Can anyone provide any assistance to me on this? It would be much appreciated.
Here is the code snippets involved with the problem:
Code snipet from ejb-jar.xml:
<session>
<display-name>Initial Request</display-name>
<ejb-name>InitialRequestBean</ejb-name>
<ejb-class>com.raytheon.rds.jms.InitialRequestBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>
Code from stateless session bean:
static Logger logger;
private QueueConnectionFactory connectionFactory;
private SessionContext sc;
private Queue requestQueue;
public String processRequest(String msgBody)
logger.log(Level.INFO, "In processRequest(String).", msgBody);
QueueConnection con = null;
QueueSession session = null;
QueueSender sender = null;
TextMessage message = null;
String messageID = null;
QueueReceiver receiver = null;
TemporaryQueue replyQueue = null;
boolean transacted = false;
try
//Create the infrastructure (ie. The connection & the session)
logger.log(Level.FINE, "Creating connection");
con = connectionFactory.createQueueConnection();
logger.log(Level.FINE, "Creating session");
session = con.createQueueSession(true, Session.AUTO_ACKNOWLEDGE);
//Note: This line above was changed in all possible permutation and still didn't work such as using Session.SESSION_TRANSACTED
transacted = session.getTransacted();
logger.log(Level.FINE, "Is session transacted? : " + transacted);
//Note: This line above is constantly saying false
//Now first, setup the temporary reply queue and its listener
replyQueue = session.createTemporaryQueue();
logger.log(Level.FINE, "Creating receiver/consumer");
receiver = session.createReceiver(replyQueue);
con.start();
//Now create the requestor that will make the request message and put it on the request queue
logger.log(Level.FINE, "Creating Requestor/Producer");
sender = session.createSender(requestQueue);
//Now create the message and make sure that you put the "JMSReplyTo" property to the temporary response queue we just created
message = session.createTextMessage();
message.setJMSReplyTo(replyQueue);
logger.log(Level.FINE, "Created message: " + message.getJMSMessageID());
//Now add the actual info you want to send
message.setText(msgBody);
//Now send the message
logger.log(Level.INFO, "Sending message: " + message.getText());
sender.send(message);
//Now wait until we get a response
logger.log(Level.FINE, "Waiting for the response message");
Message responseMsg = receiver.receive(20000); //Toggle the "0" to specify timeout in millisectionds
//Process the message
logger.log(Level.FINE, "Processing the response message");
if(null != responseMsg)
logger.log(Level.FINE, "responseMsg is : " + responseMsg.toString());
messageID = processMessage(responseMsg);
logger.log(Level.FINE, "Response is : " + messageID);
//close the connection
logger.log(Level.FINE, "Stopping the connection");
con.stop();
catch (Throwable t)
// JMSException could be thrown
logger.log(Level.SEVERE, "Exception Thrown in sendRequest: ", t);
sc.setRollbackOnly();
finally
//Close the sender
if (sender != null)
try
logger.log(Level.FINE, "Closing the sender");
sender.close();
catch (JMSException e)
logger.log(Level.WARNING, "JMSException Thrown when trying to close the sender to the request queue: ", e);
else
logger.log(Level.FINE, "Sender is already closed.");
//Close the receiver
if (receiver != null)
try
logger.log(Level.FINE, "Closing the receiver");
receiver.close();
catch (JMSException e)
logger.log(Level.WARNING, "JMSException Thrown when trying to close the receiver to the request queue: ", e);
else
logger.log(Level.FINE, "Receiver is already closed.");
//Close the session
if (session != null)
try
logger.log(Level.FINE, "Closing the session");
session.close();
catch (JMSException e)
logger.log(Level.WARNING, "JMSException Thrown when trying to close the session to the request queue: ", e);
else
logger.log(Level.FINE, "Session is already closed.");
//Close the connection
if (con != null)
try
logger.log(Level.FINE, "Closing the connection");
con.close();
catch (JMSException e)
logger.log(Level.WARNING, "JMSException Thrown when trying to close the connection to the reply queue: ", e);
else
logger.log(Level.FINE, "Connection is already closed.");
return messageID;
}I found the answer through lots of painful searching.
http://blogs.sun.com/fkieviet/entry/request_reply_from_an_ejb
This weblog from Frank Kieviet from a sun blog explains what's happening behind the scenes.
Then I proceeded to create a Bean-Managed Transaction out of my EJB, which is using EJB 3.0. This requires the tag:
@TransactionManagement(value= TransactionManagementType.BEAN)
Note: I got this information from http://download.oracle.com/docs/cd/B31017_01/web.1013/b28221/servtran001.htm#BAJIBAFF
Then I just added the code specified in Frank's blog and everything is working now. The main portion of the code looks like this now:
//begin the user transaction
ctx.getUserTransaction().begin();
//Create the infrastructure (ie. The connection & the session)
logger.log(Level.FINE, "Creating connection");
con = connectionFactory.createQueueConnection();
//Create the session
logger.log(Level.FINE, "Creating session");
session = con.createQueueSession(false, Session.SESSION_TRANSACTED);
transacted = session.getTransacted();
logger.log(Level.FINE, "Is session transacted? : " + transacted);
//Now create the sender that will make the request message and put it on the request queue
logger.log(Level.FINE, "Creating Sender");
sender = session.createSender(requestQueue);
//Now create the message
message = session.createTextMessage();
//Now add the actual info you want to send
message.setText(msgBody);
logger.log(Level.FINE, "Created message: " + message.getJMSMessageID());
//Now first, setup the temporary reply queue and its listener
replyQueue = session.createTemporaryQueue();
if(null != replyQueue)
logger.log(Level.FINE, "Created temporary queue: " + replyQueue.getQueueName());
else
logger.log(Level.FINE, "Temporary Queue could not be created.");
//make sure that you put the "JMSReplyTo" property to the temporary response queue we just created
message.setJMSReplyTo(replyQueue);
//Now send the message
logger.log(Level.INFO, "Sending message: " + message.getText());
sender.send(message);
//Now start the connection
logger.log(Level.FINE, "Starting the connection");
con.start();
//commit the changes
ctx.getUserTransaction().commit();
ctx.getUserTransaction().begin();
//Create the receiver
logger.log(Level.FINE, "Creating Receiver");
receiver = session.createReceiver(replyQueue);
//Now wait until we get a response
logger.log(Level.FINE, "Waiting for the response message");
Message responseMsg = receiver.receive(20000); //Toggle the "0" to specify timeout in millisectionds
//Process the message
logger.log(Level.FINE, "Processing the response message");
if(null != responseMsg)
logger.log(Level.FINE, "responseMsg is : " + responseMsg.toString());
else
logger.log(Level.FINE, "No response came back.");
messageID = processMessage(responseMsg);
logger.log(Level.FINE, "Response is : " + messageID);
logger.log(Level.FINE, "Transaction is complete");
//commit the changes
ctx.getUserTransaction().commit();
Maybe you are looking for
-
How to populate the fields in a report.
Hi, I've created a function module which calls a report. The report generates a file with sequence no. in the application server. The problem now is that I want the data from the presentation layer but the Z-Report doesn't generate any output with da
-
Wireless HP Officejet 6500 problem
My printer is less than 2 months old all of a sudden I can not print, it says its disconnected. It is wireless how can it be disconnected. Anyone knows why?
-
My Macbook pro keeps freezing while playing videos
experience frequent stalls/hangs, accompanied by the spinning beach ball progress indicator every time I play video's. weither it be on youtube or VLC player or any video player for that matter. It happens during games I have on here and also happens
-
Parameter passing by value or by reference in function module
hi everybody: Im a beginner for abap. Below description is described in online help. In function module, the CALL FUNCTION statement can pass import, export, and changing parameters either by value or by reference. Table parameters are always transfe
-
Inventory days of supply bex report
Hi experts, I am working on inventory days of supply bex report which i would like some help on. I do know that we have a standard query for this,however i feel standard wont fit the requirement completely. We have around 3-4 plants. Each plant will