Calling one EJB from another EJB

R

Rizwan

Hi,

My environment is Eclipse 3.0 with Lomboz Plugin; JBoss 3.2 Application
Server; Microsoft SQL Server 2000 Database.

The web application I am working on is using 2 different datasources
(odbc-ds.xml and mssql-ds.xml). One is using Sun's ODBC-JDBC Driver while
the other one is using Microsoft's SQL Server JDBC Driver.

I have 2 EJBs (Stateless Session Beans): PageEngine and
ConfigurationManager. "PageEngine" is using Sun's ODBC-JDBC Driver while the
"ConfigurationManager" is using Microsoft's SQL Server JDBC Driver. The
"ConfigurationManager" uses Hibernate.

In one of the methods of "ConfigurationManager", I need to call a method in
"PageEngine". So I create a new method getPageEngine() in
"ConfigurationManager" to get the remote interface of "PageEngine".

private pageEngine getPageEngine() {
// Remote interface
pageEngine pe = null;

try {
// Home interface
pageEngineHome peHome = pageEngineUtil.getHome();
pe = peHome.create();
} catch (NamingException ne) {
System.out.println( "ConfigurationManager.java: getPageEngine():
NamingException= " + ne.getMessage() );
ne.printStackTrace();
} catch (RemoteException re) {
System.out.println( "ConfigurationManager.java: getPageEngine():
RemoteException= " + re.getMessage() );
re.printStackTrace();
} catch (CreateException ce) {
System.out.println( "ConfigurationManager.java: getPageEngine():
CreateException= " + ce.getMessage() );
ce.printStackTrace();
}
return pe;
}

Now I use it in my code and dispaly the data in a JSP. Everything works fine
except that in the log file I got a warning twice:


WARN [TxConnectionManager] Prepare called on a local tx. Use of local
transactions on a jta transaction with more than one branch may result in
inconsistent data in some cases of failure.

Can somebody explain this error and its remedy?

Thanks

Rizwan
 
F

Frank Langelage

Rizwan wrote:

....
I have 2 EJBs (Stateless Session Beans): PageEngine and
ConfigurationManager. "PageEngine" is using Sun's ODBC-JDBC Driver while the
"ConfigurationManager" is using Microsoft's SQL Server JDBC Driver. The
"ConfigurationManager" uses Hibernate.

In one of the methods of "ConfigurationManager", I need to call a method in
"PageEngine". So I create a new method getPageEngine() in
"ConfigurationManager" to get the remote interface of "PageEngine".

private pageEngine getPageEngine() {
// Remote interface
pageEngine pe = null; ....
return pe;
}


WARN [TxConnectionManager] Prepare called on a local tx. Use of local
transactions on a jta transaction with more than one branch may result in
inconsistent data in some cases of failure.

Can somebody explain this error and its remedy?


You're using two datasources with two separate transactions with this
datasources.
From your code the datasource/transaction used by PageEngine should
depend on ConfigurationManager, but for Local Transactions this is not
possible.
You would have to use XATransactions for both or, if there is no need
for a common transaction, set transaction attribute to "RequiresNew" for
PageEngine.
 
R

Rizwan

From your code the datasource/transaction used by PageEngine should
depend on ConfigurationManager, but for Local Transactions this is not
possible.

I think its the other way around. PageEngine does not depends on anything.
It is kind of a service to generate Web Pages. The ConfigurationManager
depends on PageEngine to accomplish a particular task.
I dont understand the "Local Transactions" in this context. Can you explain
it please?
You would have to use XATransactions for both or, if there is no need
for a common transaction, set transaction attribute to "RequiresNew" for
PageEngine.
Can you explain XATransactions? I am a newbie for this stuff.

Thanks


Frank Langelage said:
Rizwan wrote:

...
I have 2 EJBs (Stateless Session Beans): PageEngine and
ConfigurationManager. "PageEngine" is using Sun's ODBC-JDBC Driver while the
"ConfigurationManager" is using Microsoft's SQL Server JDBC Driver. The
"ConfigurationManager" uses Hibernate.

In one of the methods of "ConfigurationManager", I need to call a method in
"PageEngine". So I create a new method getPageEngine() in
"ConfigurationManager" to get the remote interface of "PageEngine".

private pageEngine getPageEngine() {
// Remote interface
pageEngine pe = null; ...
return pe;
}


WARN [TxConnectionManager] Prepare called on a local tx. Use of local
transactions on a jta transaction with more than one branch may result in
inconsistent data in some cases of failure.

Can somebody explain this error and its remedy?


You're using two datasources with two separate transactions with this
datasources.
From your code the datasource/transaction used by PageEngine should
depend on ConfigurationManager, but for Local Transactions this is not
possible.
You would have to use XATransactions for both or, if there is no need
for a common transaction, set transaction attribute to "RequiresNew" for
PageEngine.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,764
Messages
2,569,564
Members
45,040
Latest member
papereejit

Latest Threads

Top