user1223020
user1223020

Reputation: 21

Ejb3 GlassFish - JNDI Lookup failed in SerialContext - NameNotFoundException

I'm using EJB3, GlassFish 3.0.1 and eclipse helios

I have a remote EJB

@Stateless (mappedName="TestBean")
public class TestBean implements TestBeanRemote {
public int add(int a, int b){
return a+b;
}
}

And the Remote Interface

@Remote
public interface TestBeanRemote {
    public int add(int a, int b);
}

application.xml

<?xml version="1.0" encoding="UTF-8"?>
<application xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:application="http://java.sun.com/xml/ns/javaee/application_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_6.xsd" id="Application_ID" version="6">
  <application-name>ear.proj</application-name>
  <display-name>ear.proj</display-name>
  <module>
    <web>
      <web-uri>war.proj</web-uri>
      <context-root>/war</context-root>
    </web>
  </module>
  <module>
    <ejb>ejb.proj.jar</ejb>
  </module>
</application>

I have an empty sun-ejb-jar.xml and I did not define ejb-jar.xml as I read that it's optional since EJB3 I'm putting my EJB in the EAR along with the WEB

I'm trying to call this EJB in a POJO class

InitialContext ic = new InitialContext();
ic.lookup("java:global/ear.proj/ejb.proj/TestBean");

I get the following exception javax.naming.NamingException: Lookup failed for java:global/ear.proj/ejb.proj/TestBean' in SerialContext [Root exception is javax.naming.NameNotFoundException: ear.proj]

I guess that the problem is in the EJB setup in my EAR as it's said in the GlassFish EJB FAQ that Each portable global JNDI name is printed out to the server.log during deployment while I can not find any portable keyword in the log

Instead I can see the following INFO: Cannot find module ejb.proj.ejb.jar in application bundle

Is there something I'm missing?

Upvotes: 2

Views: 5555

Answers (2)

test30
test30

Reputation: 3654

Make sure if you are deploying EJB project, you are notified about this in server.log

INFO: Portable JNDI names for EJB ${EJB_Name}: 
INFO: Glassfish-specific (Non-portable) JNDI names for EJB ${EJB_Name}:

There you will see context paths.

PS in order to see those logs, depending on configuratoin you may need to change logger settings or even you will be forces to browse through server.log file on server.

Upvotes: 1

levolutionniste
levolutionniste

Reputation: 424

Try to use:

ic.lookup("java:global/*classesdirectory*/TestBean");

where classesdirectory = the directory which contains the classes(TestBean.class) in your project tree in Eclipse.

In Netbeans you can try

ic.lookup("java:global/classes/TestBean");

because the compile classe (even package and subpackage ar)

Upvotes: 0

Related Questions