Can I invoke Sockets in Session beans
My server which is Jboss, needs to invoke a method on one of its clients, the call is not comming from the client. All that the server know's is the IP address of the Client. can a server invoke that client by calling a socket routine in one of the sessions beans.
are there is a better solution for this problem.
Help needed ...
Nas.
Calling sockets is not against the EJB spec. Using ServerSocket is against the specification because the socket can block and thus does not allow the EJB to passivate properly.
Using sockets or RMI from a session bean is perfectly legal and not problematic. You just have to make sure that you do the proper things in the ejbActivate and ejbPassivate methods.
Paul
Similar Messages
-
Problem while invoking a Stateless Session bean from another bean
Hi,
I have a peculiar problem while coding with Stateless Session beans. Maybe you guys can help me out over here. The scenario is as follows
There are 3 Stateless Session beans. Let Us say Bean A, B and C. There are three methods, method1, method2, and method3 inside A, B and C respectively.
From A.method1(), B.method2(), and C.method3() are being invoked sequentially. Each of these methods does some JDBC operation and then returns.
The problem is this, if C.method3() throws and exception, then I am unable to rollback the changes made by B.method2(). Those changes get "Committed" to the database.
All the 3 beans have Bean managed persistence property set. I am using WebSphere 6.1.
Any insight on why this is happening would be greatly appreciated.
Thanks In Advance
Amardeep VermaHi,
This is a matter of calling all three methods in the same transaction context. Most easy way of doing this is having a 4th session bean containing a method calling the other 3. Make sure that the Transaction Attributes are REQUIRED, which is the default.
If the calls a to different backends/databases, you need global transactions and therefor XA complient database and drivers.
HTH Robert -
Transaction can be applied to stateless session bean
is transaction can be applied to stateless session beanif yes/no why?
Just because a stateless session bean is stateless doesn't mean it doens't hold state. The stateless means it shouldn't hold any client state.
It can hold onto for example the dao objects.
The idea is that you pass all the client state to the sessionbean when calling it.
Eg.
public void doBulkOperation( User user ,string param1, String param2){
operation1( user, param1 );
operation2( user, param2 );
public void operation1( User user ,String param1){
//do some work involving user
public void operation2( User user ,String param2){
//do some work involving user
now suppose that doBulkOperation, operation1, operation2 are declared as transaction required. doBulkOperation starts the transaction if there isn't one running and joins the transaction. Then operation1 and operation2 join in the transaction.
Perfectly safe!
What you're not allowed to do is the following:
privata User user
public void doBulkOperation( User user ,string param1, String param2){
this.user = user;
operation1( param1 );
operation2( param2 );
public void operation1( String param1){
//do some work involving user
public void operation2( String param2){
//do some work involving user
This would be unsafe because concurrent calls will change the user and produce unpredictable results and possibly corrupting data.
It will work perfectly thougn if there is only one user or you're using a statefull session bean providing you don't share that bean with several clients. -
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
QingLook 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. -
Invoking DAO from session bean
Hi,
I have a session bean method "method1" that invokes a DAO method which reads/write to DB2 database table. Will the DAO's db interaction will be part of the transaction initiated by container which is defined at the session bean's method ?
If yes, then will the transaction manager put a lock on the db record till the excution of the method is completed(transaction has a method scope), though the db read(DAO invocation) is at the beginning of the method ?Thanks for your reply. But why do you feel that the container is not responsible for putting the lock as we set the transaction isolation level setting at the method level ?
The following problem led me to post my original question :
I have an application which used to run on WAS 5.0 and DB2 ver 7 patch 6 . I put a patch 10a for the DB2 drivers. After that I am getting problem executing a particular scenario. The scenario is - I have a stateless session bean method which updates a db record by invoking the an entity bean (CMP) and then accesses the same record through a DAO. But the read fails as the db record is locked. The session bean method has a transaction attribute "TX_REQUIRED". As both the db operations are part of the same transaction, I fail to understand why there should be lock on db record for the second operation ?
Do you have any clue ? -
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 -
Problem invoking gogle web service from session bean
Hello
I have developed a Web-Client which consumes the google-WebService with Apache Axis. I have generated the corresponding classes with WSDL2Java and the client works without problems. A little code fragment from my client:
GoogleSearchService service = new GoogleSearchServiceLocator();
// Now use the service to get a stub to the Service Definition Interface (SDI)
GoogleSearchPort google = service.getGoogleSearchPort();
GoogleSearchResult googleSearchResult = google.doGoogleSearch(GOOGLE_KEY, // java.lang.String key
q.toString(), //java.lang.String q
0, // int start
10, // int maxResults
false, //boolean filter
"", // java.lang.String restrict
false, //boolean safeSearch
"lang_ja|lang_en", // java.lang.String lr
"UTF-8", // java.lang.String ie
"UTF-8"); // java.lang.String oeNow I have to put the Web-Client in a SessionBean. Therfore I defined the code of the web-client in a method and put it into a stateless session bean and wrote a client for the session bean. But when the session bean invokes the corresponding method for consuming the google web service, there always occurs the following error:
[java] Exception in thread "main" java.rmi.ServerError: Unexpected Error; nested exception is:
[java] java.lang.NoClassDefFoundError: GoogleSearch/GoogleSearchService
But I have definitely all necessary classes in my classpath, like GoogleSearchService, etc. So all necessary classes are available. And the code to conume the web service als works because as said I tested it with a web-client.
Has anybody an idea what went wrong here? Is there anything important when I a web service is invoked by a session bean??:(
regards
patHas nobdy an idea?? :(( I tried for such a long time but I was not able to fix this problem....:(
Please help... -
HOWTO: Using a BC4J Application Module in an Stateless EJB Session Bean
HOWTO: Using a BC4J Application Module in an Stateless EJB Session Bean
by Steve Muench
Overview
BC4J provides automatic facilities for deploying any application module as a stateful EJB session bean. If you want to leverage the features of your BC4J application module from a stateless EJB session bean, it's not automatic but it is straightforward to implement. This howto article explains the details.
For our example, we will create a stateless EJB session bean that uses a container-managed transaction. To keep things simple, let's assume the session bean has a single public method on its remote interface named createDepartment() with the following signature:
public void createDepartment(int id, String name, String loc) throws AppException
AppException is an example of an application-specific exception that our method will throw if any problems arise during its execution.The goal of this article is to illustrate how to use the BC4J application module named com.example.hr.HRApp as part of the implementation of this createDepartment method on our stateless enterprise bean. Let's assume that the HRApp application module has a view object member named Departments, based on the com.example.hr.DeptView view object, based on the familiar DEPT table and related to the com.example.hr.Dept entity object so our view can be updateable.
Creating the Stateless Session Bean
We can start by using the JDeveloper Enterprise Bean wizard to create a new stateless session bean called StatelessSampleEJB implemented by:[list][*]com.example.StatelessSampleEJBBean (Bean class)[*]com.example.StatelessSampleEJBHome (Home interface)[*]com.example.StatelessSampleEJB (Remote interface)[list]
We then use the EJB Class Editor to add the createDepartment method to the remote interface of StatelessSampleEJB with the signature above. We edit the remote interface to make sure that it also reflects that the createDepartment method thows the AppException like this:
package com.example;
import javax.ejb.EJBObject;
import java.rmi.RemoteException;
public interface StatelessSampleEJB extends EJBObject {
void createDepartment(int id, String name, String loc)
throws RemoteException,AppException;
}Before we start adding BC4J into the picture for our implementation, our StatelessSampleEJBBean class looks like this:
package com.example;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
public class StatelessSampleEJBBean implements SessionBean {
public void ejbCreate(){}
public void ejbActivate(){}
public void ejbPassivate(){}
public void ejbRemove(){}
public void setSessionContext(SessionContext ctx){
public void createDepartment(int id, String name, String loc)
throws AppException {
// TODO: Implement method here
}We can double-click on the ejb-jar.xml file in our project to see the XML deployment descriptor for the bean we just created:
<ejb-jar>
<enterprise-beans>
<session>
<description>Session Bean ( Stateless )</description>
<display-name>StatelessSampleEJB</display-name>
<ejb-name>StatelessSampleEJB</ejb-name>
<home>com.example.StatelessSampleEJBHome</home>
<remote>com.example.StatelessSampleEJB</remote>
<ejb-class>com.example.StatelessSampleEJBBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>
</enterprise-beans>
</ejb-jar>We need to add the extra <assembly-descriptor> section in this file to indicate that the createDepartment method will require a transaction. After this edit, the ejb-jar.xml file looks like this:
<ejb-jar>
<enterprise-beans>
<session>
<description>Session Bean ( Stateless )</description>
<display-name>StatelessSampleEJB</display-name>
<ejb-name>StatelessSampleEJB</ejb-name>
<home>com.example.StatelessSampleEJBHome</home>
<remote>com.example.StatelessSampleEJB</remote>
<ejb-class>com.example.StatelessSampleEJBBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>
</enterprise-beans>
<assembly-descriptor>
<container-transaction>
<method>
<ejb-name>StatelessSampleEJB</ejb-name>
<method-name>createDepartment</method-name>
<method-params>
<method-param>int</method-param>
<method-param>java.lang.String</method-param>
<method-param>java.lang.String</method-param>
</method-params>
</method>
<trans-attribute>Required</trans-attribute>
</container-transaction>
</assembly-descriptor>
</ejb-jar>
Aggregating a BC4J Application Module
With the EJB aspects of our bean setup, we can proceed to implementing the BC4J application module aggregation.
The first thing we do is add private variables to hold the EJB SessionContext and the instance of the aggregated BC4J ApplicationModule, like this:
// Place to hold onto the aggregated appmodule instance
transient private ApplicationModule _am = null;
// Remember the SessionContext that the EJB container provides us
private SessionContext _ctx = null;and we modify the default, empty implementation of the setSessionContext() method to remember the session context like this:
public void setSessionContext(SessionContext ctx){ _ctx = ctx; }We add additional constants that hold the names of the J2EE datasource that we want BC4J to use, as well as the fully-qualified name of the BC4J application module that we'll be aggregating:
// JNDI resource name for the J2EE datasource to use
private static final String DATASOURCE = "jdbc/OracleCoreDS";
// Fully-qualified BC4J application module name to aggregate
private static final String APPMODNAME = "com.example.hr.HRApp";We expand the now-empty ejbCreate() and ejbRemove() methods to create and destory the aggregated instance of the BC4J application module that we'll use for the lifetime of the stateless session bean. When we're done, ejbCreate() it looks like this:
public void ejbCreate() throws CreateException {
try {
// Setup a hashtable of environment parameters for JNDI initial context
Hashtable env = new Hashtable();
env.put(JboContext.INITIAL_CONTEXT_FACTORY,JboContext.JBO_CONTEXT_FACTORY);
// NOTE: we want to use the BC4J app module in local mode as a simple Java class!
env.put(JboContext.DEPLOY_PLATFORM, JboContext.PLATFORM_LOCAL);
env.put(PropertyConstants.INTERNAL_CONNECTION_PARAMS,DATASOURCE);
// Create an initial context, using this hashtable of environment params
InitialContext ic = new InitialContext(env);
// Lookup a home interface for the application module
ApplicationModuleHome home = (ApplicationModuleHome)ic.lookup(APPMODNAME);
// Using the home, create the instance of the appmodule we'll use
_am = home.create();
// Register the BC4J factory to handle EJB container-managed transactions
registerContainerManagedTransactionHandlerFactory();
catch(Exception ex) {
ex.printStackTrace();
throw new CreateException(ex.getMessage());
}and ejbRemove() looks like this:
public void ejbRemove() {
try {
// Cleanup any appmodule resources before getting shutdown
_am.remove();
catch(JboException ex) { /* Ignore */ }
}The helper method named reigsterContainerManagedTransactionHandlerFactory() looks like this:
private void registerContainerManagedTransactionHandlerFactory() {
SessionImpl session = (SessionImpl)_am.getSession();
session.setTransactionHandlerFactory(
new TransactionHandlerFactory() {
public TransactionHandler createTransactionHandler() {
return new ContainerManagedTxnHandlerImpl();
public JTATransactionHandler createJTATransactionHandler() {
return new ContainerManagedTxnHandlerImpl();
}The last detail is to use the BC4J appmodule to implement the createDepartment() method. It ends up looking like this:
public void createDepartment(int id, String name, String loc)
throws AppException {
try {
// Connect the AM to the datasource we want to use for the duration
// of this single method call.
_am.getTransaction().connectToDataSource(null,DATASOURCE,false);
// Use the "Departments" view object member of this AM
ViewObject departments = _am.findViewObject("Departments");
// Create a new row in this view object.
Row newDept = departments.createRow();
// Populate the attributes from the parameter arguments.
newDept.setAttribute("Deptno", new Number(id));
newDept.setAttribute("Dname", name);
newDept.setAttribute("Loc", loc);
// Add the new row to the view object's default rowset
departments.insertRow(newDept);
// Post all changes in the AM, but we don't commit them. The EJB
// container managed transaction handles the commit.
_am.getTransaction().postChanges();
catch(JboException ex) {
// To be good EJB Container-Managed Transaction "citizens" we have
// to mark the transaction as needing a rollback if there are problems
_ctx.setRollbackOnly();
throw new AppException("Error creating dept "+ id +"\n"+ex.getMessage());
finally {
try {
// Disconnect the AM from the datasource we're using
_am.getTransaction().disconnect();
catch(Exception ex) { /* Ignore */ }
Building a Test Client
With the EJB-Tier work done, we can build a sample client program to test this new stateless EJB Session Bean by selecting the bean in the Oracle9i JDeveloper IDE and choosing "Create Sample Java Client" from the right-mouse menu.
When the "Sample EJB Client Details" dialog appears, we take the defaults of connecting to embedded OC4J container. Clicking the (OK) button generates the following test class:
import java.util.Hashtable;
import javax.naming.Context;
import javax.naming.InitialContext;
import com.example.StatelessSampleEJB;
import com.example.StatelessSampleEJBHome;
public class SampleStatelessSampleEJBClient {
public static void main(String [] args) {
SampleStatelessSampleEJBClient sampleStatelessSampleEJBClient =
new SampleStatelessSampleEJBClient();
try {
Hashtable env = new Hashtable();
env.put(Context.INITIAL_CONTEXT_FACTORY,
"com.evermind.server.rmi.RMIInitialContextFactory");
env.put(Context.SECURITY_PRINCIPAL, "admin");
env.put(Context.SECURITY_CREDENTIALS, "welcome");
env.put(Context.PROVIDER_URL,
"ormi://localhost:23891/current-workspace-app");
Context ctx = new InitialContext(env);
StatelessSampleEJBHome statelessSampleEJBHome =
(StatelessSampleEJBHome)ctx.lookup("StatelessSampleEJB");
StatelessSampleEJB statelessSampleEJB;
// Use one of the create() methods below to create a new instance
// statelessSampleEJB = statelessSampleEJBHome.create();
// Call any of the Remote methods below to access the EJB
// statelessSampleEJB.createDepartment( int id, java.lang.String name, java.lang.String loc );
catch(Throwable ex) {
ex.printStackTrace();
}We uncomment the call to the create() method and add a few calls to the createDepartment() method so that the body of the test program now looks like this:
// Use one of the create() methods below to create a new instance
statelessSampleEJB = statelessSampleEJBHome.create();
// Call any of the Remote methods below to access the EJB
statelessSampleEJB.createDepartment( 13, "Test1","Loc1");
System.out.println("Created department 13");
statelessSampleEJB.createDepartment( 14, "Test2","Loc2");
System.out.println("Created department 14");
try {
// Try setting a department id that is too large!
statelessSampleEJB.createDepartment( 23456, "Test3","Loc3");
catch (AppException ax) {
System.err.println("AppException: "+ax.getMessage());
}Before we can successfully run our SampleStatelessSampleEJBClient we need to first run the EJB bean that the client will try to connect to. Since Oracle9i JDeveloper supports local running and debugging of the EJB-Tier without doing through a full J2EE deployment step, to accomplish this prerequisite step we just need to right-mouse on the StatelessSampleEJB node in the System Navigator and select "Run". This starts up the embedded OC4J instance and runs the EJB right out of the current out path.Finally, we can run the SampleStatelessSampleEJBClient, and see the output of the test program in the JDeveloper log window:
Created department 13
Created department 14
AppException: Error creating dept 23456
JBO-27010: Attribute set with value 23456 for Deptno in Dept has invalid precision/scale
Troubleshooting
One error that might arise while running the example is that the database connection information in your data-sources.xml for the jdbc/OracleCoreDS datasource does not correspond to the database you are trying to test against. If this happens, then double-check the file .\jdev\system\oc4j-config\data-sources.xml under the JDeveloper installation home directory to make sure that the url value provided is what you expect. For example, to work against a local Oracle database running on your current machine, listening on port 1521, with SID of ORCL, you would edit this file to have an entry like this for jdbc/OracleCoreDS :
<data-source
class="com.evermind.sql.DriverManagerDataSource"
name="OracleDS"
location="jdbc/OracleCoreDS"
xa-location="jdbc/xa/OracleXADS"
ejb-location="jdbc/OracleDS"
connection-driver="oracle.jdbc.driver.OracleDriver"
username="scott"
password="tiger"
url="jdbc:oracle:thin:@localhost:1521:ORCL"
inactivity-timeout="30"
/>This is the data-sources.xml file that gets used by the embedded OC4J instance running in JDeveloper.
Conclusion
Hopefully this article has illustrated that it is straightforward to utilize the full power of BC4J in local mode as part of your EJB Stateless Session Beans using container-managed transaction. This example illustrated a single createDepartment method in the enterprise bean, but by replicating the application module interaction code that we've illustrated in createDepartment, any number of methods in your stateless session bean can use the aggregated application module instance created in the ejbCreate() method.
Code Listing
The full code listing for the SampleStatelessEJB bean implementation class looks like this:
* StatelessSampleEJB
* Illustrates how to use an aggregated BC4J application module
* in local mode as part of the implementation of a stateless
* EJB session bean using container-managed transaction.
* HISTORY
* smuench/dmutreja 14-FEB-2002 Created
package com.example;
import oracle.jbo.*;
import oracle.jbo.server.*;
import javax.ejb.*;
import oracle.jbo.domain.Number;
import oracle.jbo.common.PropertyConstants;
import java.util.Hashtable;
import javax.naming.InitialContext;
import oracle.jbo.server.ejb.ContainerManagedTxnHandlerImpl;
public class StatelessSampleEJBBean implements SessionBean {
// JNDI resource name for the J2EE datasource to use
private static final String DATASOURCE = "jdbc/OracleCoreDS";
// Fully-qualified BC4J application module name to aggregate
private static final String APPMODNAME = "com.example.hr.HRApp";
// Place to hold onto the aggregated appmodule instance
transient private ApplicationModule _am = null;
// Remember the SessionContext that the EJB container provides us
private SessionContext _ctx = null;
public void ejbCreate() throws CreateException {
try {
// Setup a hashtable of environment parameters for JNDI initial context
Hashtable env = new Hashtable();
env.put(JboContext.INITIAL_CONTEXT_FACTORY,JboContext.JBO_CONTEXT_FACTORY);
env.put(JboContext.DEPLOY_PLATFORM, JboContext.PLATFORM_LOCAL);
env.put(PropertyConstants.INTERNAL_CONNECTION_PARAMS,DATASOURCE);
// Create an initial context, using this hashtable of environment params
InitialContext ic = new InitialContext(env);
// Lookup a home interface for the application module
ApplicationModuleHome home = (ApplicationModuleHome)ic.lookup(APPMODNAME);
// Using the home, create the instance of the appmodule we'll use
_am = home.create();
// Register the BC4J factory to handle EJB container-managed transactions
registerContainerManagedTransactionHandlerFactory();
catch(Exception ex) {
ex.printStackTrace();
throw new CreateException(ex.getMessage());
public void ejbActivate(){}
public void ejbPassivate(){}
public void ejbRemove(){}
public void setSessionContext(SessionContext ctx){ _ctx = ctx; }
public void createDepartment(int id, String name, String loc)
throws AppException {
try {
// Connect the AM to the datasource we want to use for the duration
// of this single method call.
_am.getTransaction().connectToDataSource(null,DATASOURCE,false);
// Use the "Departments" view object member of this AM
ViewObject departments = _am.findViewObject("Departments");
// Create a new row in this view object.
Row newDept = departments.createRow();
// Populate the attributes from the parameter arguments.
newDept.setAttribute("Deptno", new Number(id));
newDept.setAttribute("Dname", name);
newDept.setAttribute("Loc", loc);
// Add the new row to the view object's default rowset
departments.insertRow(newDept);
// Post all changes in the AM, but we don't commit them. The EJB
// container managed transaction handles the commit.
_am.getTransaction().postChanges();
catch(JboException ex) {
// To be good EJB Container-Managed Transaction "citizens" we have
// to mark the transaction as needing a rollback if there are problems
_ctx.setRollbackOnly();
throw new AppException("Error creating dept "+ id +\n"+ex.getMessage());
finally {
try {
// Disconnect the AM from the datasource we're using
_am.getTransaction().disconnect();
catch(Exception ex) { /* Ignore */ }
private void registerContainerManagedTransactionHandlerFactory() {
SessionImpl session = (SessionImpl)_am.getSession();
session.setTransactionHandlerFactory(
new TransactionHandlerFactory() {
public TransactionHandler createTransactionHandler() {
return new ContainerManagedTxnHandlerImpl();
public JTATransactionHandler createJTATransactionHandler() {
return new ContainerManagedTxnHandlerImpl();Hi Steve, It4s me again;
About the question I made, I tried with a single assembly-descriptor tag and a single container-transaction tag in the deployment descriptor of the session bean and these were the results.
java.lang.NullPointerException
void com.evermind.server.rmi.RMIConnection.EXCEPTION_ORIGINATES_FROM_THE_REMOTE_SERVER(java.lang.Throwable)
java.lang.Object com.evermind.server.rmi.RMIConnection.invokeMethod(com.evermind.server.rmi.RMIContext, long, long, java.lang.reflect.Method, java.lang.Object[])
java.lang.Object com.evermind.server.rmi.RemoteInvocationHandler.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[])
java.lang.Object com.evermind.server.rmi.RecoverableRemoteInvocationHandler.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[])
java.lang.Object com.evermind.server.ejb.StatelessSessionRemoteInvocationHandler.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[])
void __Proxy1.modificaEnvoltura(java.lang.Integer, java.lang.Integer, java.lang.Integer, java.lang.Integer, java.lang.Integer, java.lang.Integer, java.lang.String)
void SamplemdeController.envolturaControlEJBClient.main(java.lang.String[])
Then I tried with multiple assembly-descriptor tags each with a single container-transaction tag and the results were:
java.lang.NullPointerException
void com.evermind.server.rmi.RMIConnection.EXCEPTION_ORIGINATES_FROM_THE_REMOTE_SERVER(java.lang.Throwable)
java.lang.Object com.evermind.server.rmi.RMIConnection.invokeMethod(com.evermind.server.rmi.RMIContext, long, long, java.lang.reflect.Method, java.lang.Object[])
java.lang.Object com.evermind.server.rmi.RemoteInvocationHandler.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[])
java.lang.Object com.evermind.server.rmi.RecoverableRemoteInvocationHandler.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[])
java.lang.Object com.evermind.server.ejb.StatelessSessionRemoteInvocationHandler.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[])
void __Proxy1.modificaEnvoltura(java.lang.Integer, java.lang.Integer, java.lang.Integer, java.lang.Integer, java.lang.Integer, java.lang.Integer, java.lang.String)
void SamplemdeController.envolturaControlEJBClient.main(java.lang.String[])
Finally I tried with a single assembly-descriptor and multiple container tags and the results were:
java.lang.NullPointerException
void com.evermind.server.rmi.RMIConnection.EXCEPTION_ORIGINATES_FROM_THE_REMOTE_SERVER(java.lang.Throwable)
java.lang.Object com.evermind.server.rmi.RMIConnection.invokeMethod(com.evermind.server.rmi.RMIContext, long, long, java.lang.reflect.Method, java.lang.Object[])
java.lang.Object com.evermind.server.rmi.RemoteInvocationHandler.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[])
java.lang.Object com.evermind.server.rmi.RecoverableRemoteInvocationHandler.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[])
java.lang.Object com.evermind.server.ejb.StatelessSessionRemoteInvocationHandler.invoke(java.lang.Object, java.lang.reflect.Method, java.lang.Object[])
void __Proxy1.modificaEnvoltura(java.lang.Integer, java.lang.Integer, java.lang.Integer, java.lang.Integer, java.lang.Integer, java.lang.Integer, java.lang.String)
void SamplemdeController.envolturaControlEJBClient.main(java.lang.String[])
How can I make my Stateless Session bean work out? -
RPC web service session beans and local interfaces
I am wondering if it is possible to use EJB 2.0's local
interface (vs remote interface) with 6.1's RPC web service
session beans. Since WLS generates the SOAP servlet that
invokes the RPC session bean and I do not find
a way to some how tell SOAP servlet to use local interface to
get the session bean's local home interface, I am not sure
this can be done.
Any comments would be appreciated.
Thanks.
PeterTa. Thanks for the info.
Any idea when Local I/F support is due?
-Nick
"Neal Yin" <[email protected]> wrote:
>
"Nick Minutello" <[email protected]>
wrote
in message news:3d4413a4$[email protected]..
I was just about to post the very same question - but for WLS 7.0.0.1.
There are essentially two questions:
1) (from a functional perspective)
Can I expose Local Interfaces as SOAP using the auto-generation(servicegen ant
tasks)?Local Interfaces support is coming.
2) (from a performance perspective)
Does the generated SOAP implementation go via the (expensive) RemoteInterface
(ie marshalling) - or is the RMI marshalling optimised out (by setting<enable-call-by-reference>true</>)?
You can set this option by yourself on your EJB. Web service runtime
doesn't
do any magic in this area.
Regards,
Nick
"Peter" <[email protected]> wrote:
I am wondering if it is possible to use EJB 2.0's local
interface (vs remote interface) with 6.1's RPC web service
session beans. Since WLS generates the SOAP servlet that
invokes the RPC session bean and I do not find
a way to some how tell SOAP servlet to use local interface to
get the session bean's local home interface, I am not sure
this can be done.
Any comments would be appreciated.
Thanks.
Peter -
Extremely Slow DB Query in Session Bean
OS: Redhat Linux 6.2
JVM: Sun's JDK 1.3.0_02
Weblogic 5.1 SP6
Oracle 8.1.6
Hello. I have a container-managed stateless session bean which is
invoked via a JSP and makes a read-only stored procedure call to
oracle. This database call, when invoked within the session bean,
takes over two minutes. When the same code is executed in a test JSP
pointing to the SAME database, the query takes approximately 2
seconds. NOTE: when the proc is executed in SQL Plus, I also get
approx. 2 second response time. Also, I have explicitly disabled
transactions in the deployment descriptor of the session bean.
Using the Weblogic Console, and monitoring the session bean, there is
a transaction commited after the invocation of the method making the 2
min stored procedure call. It seems as though the Container is
wrapping the call in a transaction even though I have explicitly
disabled transactions.
Any thoughts would be greatly appreciated.
Regards...Can you show me your ejb-jar.xml?
-- Rob
Jeremy wrote:
OS: Redhat Linux 6.2
JVM: Sun's JDK 1.3.0_02
Weblogic 5.1 SP6
Oracle 8.1.6
Hello. I have a container-managed stateless session bean which is
invoked via a JSP and makes a read-only stored procedure call to
oracle. This database call, when invoked within the session bean,
takes over two minutes. When the same code is executed in a test JSP
pointing to the SAME database, the query takes approximately 2
seconds. NOTE: when the proc is executed in SQL Plus, I also get
approx. 2 second response time. Also, I have explicitly disabled
transactions in the deployment descriptor of the session bean.
Using the Weblogic Console, and monitoring the session bean, there is
a transaction commited after the invocation of the method making the 2
min stored procedure call. It seems as though the Container is
wrapping the call in a transaction even though I have explicitly
disabled transactions.
Any thoughts would be greatly appreciated.
Regards... -
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 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 -
Using local session bean interface from web container using EJB 3.0
Hi,
How can you use a local session bean interface from Java (rather than data controls) in a web container using EJB 3.0?
I can use a remote interface by looking up InitialContext, but I can't find a local interface this way (even from another session EJB). I can use a local interface from an EJB using annotation "EJB", but as I understand, this is not available in the web container.
If I try to add an ejb-jar.xml file, these seems to mess up by project...
Hope you can help.
RogerThe portable way to retrieve an EJB reference in Java EE is to either inject it or look it up via the
component's private naming environment. The simplest way is :
@EJB
private DocumentManager dm;
The global JNDI name is only used as an implementation specific way to uniquely assign an
identifier to a specific Remote EJB. It's best for this not to appear directly in the source code.
There's more on global JNDI names in our EJB FAQ :
https://glassfish.dev.java.net/javaee5/ejb/EJB_FAQ.html
The alternative to annotations is to use an ejb-ref to declare the ejb dependency. The ejb-ref
is declared in the standard deployment descriptor corresponding to the component doing the
lookup. Each ejb-ref has an ejb-ref-name, e.g. <ejb-ref-name>DM_ref</ejb-ref-name>
The code looks up the ejb-ref-name relative to the java:comp/env namespace to retrieve the
EJB reference.
DocumentManager dm = (DocumentManager)
new InitialContext().lookup("java:comp/env/DM_ref"); -
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 -
Calling stored procedure from session bean method
I have a situation like this :
I have one method on a stateless session bean (and I mark this method as container managed transaction). For database related stuff, I am not using entity beans, I am using my own layer of OR mapping. This method does a lot of stuff and it involves many trips to the database, as a result of which the performance is very poor. I have identified certain pieces of functionality from this method which I think can be moved to stored procedures, while some of the functionality can still remain in the session bean method. So my scenario is like this :
session bean method start
store some data in tables(using my OR layer)
call the stored procedure
session bean method end
My question is :
Will the data that I am storing in tables from within the session bean method, be available to the code executing inside stored proc.
secondly, how do I sync the transcation which is being initiated by the container with the transaction under which the stored proc is executing or is it that the stored procedure code will also be executing under the container managed transcation.
Thanks
VimalHi Vimal,
Will the data that I am storing in tables from within
the session bean method, be available to the code
executing inside stored proc.There's only one way to find out (isn't there?)
secondly, how do I sync the transcation which is
being initiated by the container with the transaction
under which the stored proc is executing or is it
that the stored procedure code will also be executing
under the container managed transcation.Again, why not just "suck it and see!"
[Or is there some reason why you can't?]
As I interpret the EJB specification, if the transaction attribute for your session bean method is such that it starts a transaction, then that transaction will be terminated when the method completes -- and every operation that occurs within the framework of that method will be in the one transaction.
In other words, your database stored procedure should execute within the same transaction as your O/R mapping layer.
However, how OC4J behaves may not exactly follow what is written in the (EJB) specification. Hence I repeat, "try it and see for yourself".
Put it this way: as far as I know, the only way that your stored procedure would NOT see the changes made by your O/R mapping layer is if they both executed in separate transactions and the O/R mapping layer did not commit its changes before the stored procedure began its execution.
Hope this has helped.
Good Luck,
Avi.
Maybe you are looking for
-
I can't download an epub book to my ereader
I've been purchasing books from kobo & I have to make sure they are a drm book coz if they are only a epub file it will open up in my library on adobe digital edition but when I go to where all my downloaded books are it doesn't seem to come across s
-
When I got the error message, I logged off and then signed back in to this same desktop computer. When that didn't change anything I shut it down and restarted it. No change, so I rebooted again without actually shutting the computer down, and again,
-
How to view pdf files without downloading them on firefox for android
I use an Electronic Medical Record program using Firefox for android on a a Samsung Galaxy Pro 12.2 tablet. I need to view patient pdf files on the tablet. So far, the only way I have been able to accomplish this is to download the file first. It wou
-
Process chain - How to correct?
Hi friends, i have a process chain which failed at process LOAD INFOPACKAGE . subsequent to this process is UPDATE FROM PSA. . we loaded the infopackage manually and tried to repeat the Update from PSA , but it got failed. I have done any mistake
-
Start and Stop of Services for 11x
hi Can anyone please let me know the order to stop and start the services of 11x (HSS,PLANNING,ESSBASE and BI) Haven't found any documentation to in the portal related to start and stop of the services. thanks in advance Best regards krishnatilak