Hello,
Can anyone tell me about the magic incantations to use so that a servlet in
a web app can find the local interface of a session bean in a EJB where both
are in the same Enterprise application (EAR file). Below is the detail.
Thank you in advance for your help
Mho
I am using tomcat 6.0.20 and openEJB 3.1.1 . (BTW I am using Eclipse J2EE
Galileo as an IDE which even allowing for my lack of experties I think may
have some issues of its own but this problem I am pretty sure is not caused
by the IDE)
To demonstrate this problem I have created a simple ear file that looks like
this:
http://www.nabble.com/file/p25310144/aif6_ear.jpg
ext is a web app with a servlet "Agent" that just tries to talk to a session
bean that is in an EJB called "service".
So I load up the ext.war file and also aif6.ear file in Tomcat and restart
Tomcat.
( Note: I need to load the war file separately because Catalina looks for
the document root for web app in /ext. Naturally when the EAR file is
expanded the document root is in /aif6/ext and Catalina throws an exception
saying it cant find the web app. To make it happy I have to put the war file
in the webapp directory. -- that is another problem that I will have to fix
-- I am not sure this is related to the problem I am asking about in this
email if anyone has a suggestion I will be grateful)
The closest I have come to making this work is to use a snippet that I found
in a previous response to someone in this forum. The Agen servlet has code
in it that looks like this :
Properties p = new Properties();
p.put("java.naming.factory.initial","org.apache.openejb.client.RemoteInitialContextFactory");
p.put("java.naming.provider.url", "http://127.0.0.1:8080/openejb/ejb");
initialContext = new InitialContext(p);
try{
object = initialContext.lookup("ToDoSesBeanLocal");
}catch (Exception e){
logger.info("Cant open context "+e.toString());
return false;
}
(My specific question is about the counterpart to "java.naming.provider.url"
that would let me use a local resource
The EJB has a session bean with a local interface. When I run the servlet I
get this exception:
****** Cant open context javax.naming.NamingException: Not remotable:
'ToDoSesBeanLocal'. Business Local interfaces are not remotable as per the
EJB specification. To disable this restriction, set the system property
'openejb.remotable.businessLocals=true' in the server.
It seems to me that doing what the exception says (BTW thank you openEJB
folks for the very informative Exception) will create a remote interface but
I should be able to hook this up with a local interface and avoid the
overhead.
to complete the picture let me outline the rest. The session bean is really
a front for a MDB and it looks like this
(some import stuff here)
@Stateless(mappedName = "ToDoSesBeanMapped")
public class ToDoSesBean implements ToDoSesBeanLocal {
public ToDoSesBean() {
// TODO Auto-generated constructor stub
}
@Resource
private ConnectionFactory connectionFactory;
@Resource(name = "ToDoBean")
private Queue todoQueue;
@Resource(name = "ToDo_AcknowlegeQueue")
private Queue todo_acknowlegeQueue;
public void sendMessage(String text) throws JMSException {
Connection connection = null;
Session session = null;
try {
connection = connectionFactory.createConnection();
connection.start();
// Create a Session
session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
// Create a MessageProducer from the Session to the Topic or Queue
MessageProducer producer = session.createProducer(todoQueue);
producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
(and so on...)
The code snippet for the local test that works locally but for some reason
does not work in the servlet looks like this
Properties properties = new Properties();
properties.setProperty(Context.INITIAL_CONTEXT_FACTORY,"org.apache.openejb.client.LocalInitialContextFactory");
InitialContext initialContext = new InitialContext(properties);
Object object = initialContext.lookup("ToDoSesBeanLocal");
--
View this message in context: http://www.nabble.com/question-about-using-openEJB%2Btomcat-with-ear-file-tp25310144p25310144.html
Sent from the OpenEJB User mailing list archive at Nabble.com.
|