EJB3 Glassfish JNDI lookup - PullRequest
       42

EJB3 Glassfish JNDI lookup

5 голосов
/ 18 апреля 2011

Я использую Eclipse IDE в комплекте со Glassfish.Я написал простое приложение EJB.но это не работает

@Stateless
@Remote(CalculatorRemote.class) 
@Local(CalculatorLocal.class) 
public class Calculator implements CalculatorRemote, CalculatorLocal {
    @Override
    public String sayHello(String name) {
        System.out.println("ejb:"+name);
        return null;
    }
}

----

@Remote
public interface CalculatorRemote {
    public String sayHello(String name);

}
-------

@Local
public interface CalculatorLocal {
    public String sayHello(String name);
}

Я написал отдельный клиент для тестирования, но не смог.не удается найти JNDI.

public class Main {

    public static void main(String[] args) throws Exception {        
        InitialContext ctx = new InitialContext();      
        CalculatorRemote bean = (CalculatorRemote) ctx.lookup("java:global/TestEAR/TEjb/Calculator!com.CalculatorRemote");
        bean.sayHello("Billy Bob");

    }

}

В журнале сервера указано

INFO: Portable JNDI names for EJB Calculator : [java:global/TestEAR/TEjb/Calculator!com.CalculatorRemote, java:global/TestEAR/TEjb/Calculator!com.CalculatorLocal]
INFO: Glassfish-specific (Non-portable) JNDI names for EJB Calculator : [com.CalculatorRemote, com.CalculatorRemote#com.CalculatorRemote]

Кроме того, я пытался

ctx.lookup("com.CalculatorRemote")

все еще не работает,

сообщение об ошибке

java.lang.NullPointerException
    at com.sun.enterprise.naming.impl.SerialContext.getRemoteProvider(SerialContext.java:297)
    at com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:271)
    at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:430)
    at javax.naming.InitialContext.lookup(InitialContext.java:392)
    at com.Main.main(Main.java:9)
Exception in thread "main" javax.naming.NamingException: Lookup failed for 'java:global/TestEAR/TEjb/Calculator!com.CalculatorRemote' in SerialContext  [Root exception is javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext  [Root exception is java.lang.NullPointerException]]
    at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:442)
    at javax.naming.InitialContext.lookup(InitialContext.java:392)
    at com.Main.main(Main.java:9)
Caused by: javax.naming.NamingException: Unable to acquire SerialContextProvider for SerialContext  [Root exception is java.lang.NullPointerException]
    at com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:276)
    at com.sun.enterprise.naming.impl.SerialContext.lookup(SerialContext.java:430)
    ... 2 more
Caused by: java.lang.NullPointerException
    at com.sun.enterprise.naming.impl.SerialContext.getRemoteProvider(SerialContext.java:297)
    at com.sun.enterprise.naming.impl.SerialContext.getProvider(SerialContext.java:271)
    ... 3 more

Пожалуйста, помогите мне.

Ответы [ 4 ]

3 голосов
/ 07 июня 2012

Можете ли вы просто добавить вышеуказанные строки:

  Properties props = new Properties();
 props.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.enterprise.naming.SerialInitContextFactory");
 props.setProperty("org.omg.CORBA.ORBInitialHost", "localhost");
 // glassfish default port value will be 3700,
props.setProperty("org.omg.CORBA.ORBInitialPort", "3700");
InitialContext ctx = new InitialContext(props);

 CalculatorRemote bean = (CalculatorRemote) ctx.lookup("java:global/TestEAR/TEjb/Calculator!    com.CalculatorRemote");

Я создал пост в блоге, используя EJB3x с Glassfish v3. http://anirbanchowdhury.wordpress.com/2012/06/07/ejb-3-application-in-glassfish-3x/

0 голосов
/ 14 мая 2011

Только сегодня у меня была проблема с этим.Ошибка вашего автономного клиента, но он будет работать в контейнере GF EJB.

Для тестирования клиента необходимо 2 вещи, чтобы заставить его работать:

  1. из GlassFish_install_folder \ glassfish \ lib get javaee, gf-Клиент и Аппсерв-рт банок.последний содержит jndi.prop, поэтому вы можете использовать c-tor по умолчанию InitialContext ();
  2. из GlassFish_install_folder \ glassfish \ modules получить все банки.

Эти банки должны быть вваш классный путь.Это глупо, но я пока не знаю минимальные банки из 2), чтобы заставить его работать.

0 голосов
/ 17 апреля 2012

Решение, как показано ниже.

В приведенном ниже коде вы должны вызывать бин в другой JVM. Например, ваш основной класс находится в JRE, а BEAN - в Glassfish JVM.


public class Main {

    public static void main(String[] args) throws Exception {        
        InitialContext ctx = new InitialContext();      
        CalculatorRemote bean = (CalculatorRemote) ctx.lookup("java:global/TestEAR/TEjb/Calculator!com.CalculatorRemote");
        bean.sayHello("Billy Bob");
    }
}
0 голосов
/ 23 апреля 2011

Я думаю, что исключение выдается, потому что вы не настроили исходный контекст должным образом.Либо создайте файл jndi.properties, либо создайте хеш-таблицу со свойствами и отправьте ее конструктору IntialContext.

Создание EJB3 с использованием Netbeans и Glassfish

...