I have been having trouble calling a Local Session bean in Glassfish.
I set up an example to show the exception I am having:
----------
[b]MainBeanLocal[/b]
[code]
package com.test;
import javax.ejb.Local;
@Local
public interface MainBeanLocal {
void testCall();
}[/code]
----------
[b]MainBean[/b]:
[code]
package com.test;
import javax.ejb.Stateless;
/**
* Session Bean implementation class MainBean
*/
@Stateless(mappedName = "ejb/MainBean")
public class MainBean implements MainBeanLocal {
@Override
public void testCall() {
System.out.println("Test Call Succeeded");
}
}[/code]
----------
[b]RemoteBeanRemote[/b]:
[code]
package com.test;
import javax.ejb.Remote;
@Remote
public interface RemoteBeanRemote {
public void callMainBean();
}[/code]
----------
[b]RemoteBean[/b]:
[code]
package com.test;
import javax.ejb.Stateless;
import javax.naming.InitialContext;
import javax.naming.NamingException;
/**
* Session Bean implementation class RemoteBean
*/
@Stateless(mappedName = "ejb/RemoteBean")
public class RemoteBean implements RemoteBeanRemote {
@Override
public void callMainBean() {
try {
InitialContext ctx = new InitialContext();
MainBeanLocal mb = (MainBeanLocal) ctx.lookup("ejb/MainBean");
mb.testCall();
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}[/code]
----------
[b]Test Code[/b]:
[code]
package com.test;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class BeanTester {
public static void main(String[] args){
try {
InitialContext ctx = new InitialContext();
RemoteBeanRemote remote = (RemoteBeanRemote) ctx.lookup("ejb/RemoteBean");
remote.callMainBean();
} catch (NamingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}[/code]
[b]Output Trace[/b]:
[code]
INFO: deployed with moduleid = TestEJB
INFO: **RemoteBusinessJndiName: ejb/RemoteBean; remoteBusIntf: com.test.RemoteBeanRemote
INFO: LDR5010: All ejb(s) of [TestEJB] loaded successfully!
WARNING: javax.naming.NameNotFoundException: MainBean not found
at com.sun.enterprise.naming.TransientContext.doLookup(TransientContext.java:216)
at com.sun.enterprise.naming.TransientContext.lookup(TransientContext.java:188)
at com.sun.enterprise.naming.SerialContextProviderImpl.lookup(SerialContextProviderImpl.java:74)
at com.sun.enterprise.naming.LocalSerialContextProviderImpl.lookup(LocalSerialContextProviderImpl.java:111)
at com.sun.enterprise.naming.SerialContext.lookup(SerialContext.java:409)
at javax.naming.InitialContext.lookup(InitialContext.java:392)
at com.test.RemoteBean.callMainBean(RemoteBean.java:19)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.enterprise.security.application.EJBSecurityManager.runMethod(EJBSecurityManager.java:1011)
at com.sun.enterprise.security.SecurityUtil.invoke(SecurityUtil.java:175)
at com.sun.ejb.containers.BaseContainer.invokeTargetBeanMethod(BaseContainer.java:2920)
at com.sun.ejb.containers.BaseContainer.intercept(BaseContainer.java:4011)
at com.sun.ejb.containers.EJBObjectInvocationHandler.invoke(EJBObjectInvocationHandler.java:203)
at com.sun.ejb.containers.EJBObjectInvocationHandlerDelegate.invoke(EJBObjectInvocationHandlerDelegate.java:117)
at $Proxy71.callMainBean(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.sun.corba.ee.impl.presentation.rmi.ReflectiveTie._invoke(ReflectiveTie.java:154)
at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatchToServant(CorbaServerRequestDispatcherImpl.java:687)
at com.sun.corba.ee.impl.protocol.CorbaServerRequestDispatcherImpl.dispatch(CorbaServerRequestDispatcherImpl.java:227)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequestRequest(CorbaMessageMediatorImpl.java:1846)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:1706)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleInput(CorbaMessageMediatorImpl.java:1088)
at com.sun.corba.ee.impl.protocol.giopmsgheaders.RequestMessage_1_2.callback(RequestMessage_1_2.java:223)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.handleRequest(CorbaMessageMediatorImpl.java:806)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.dispatch(CorbaMessageMediatorImpl.java:563)
at com.sun.corba.ee.impl.protocol.CorbaMessageMediatorImpl.doWork(CorbaMessageMediatorImpl.java:2567)
at com.sun.corba.ee.impl.orbutil.threadpool.ThreadPoolImpl$WorkerThread.run(ThreadPoolImpl.java:555)
[/code]
What am I doing wrong when calling **MainBeanLocal**? I would like to avoid dependency injection, as if the MainBeanLocal was being called from a POJO.
[b]Note:[/b] I have no trouble calling the [i][b]RemoteBean[/b][/i].. I want to be able to call the local bean from the remote bean.
[Message sent by forum member 'cloutierm' (cloutierm)]
http://forums.java.net/jive/thread.jspa?messageID=338007