2013-09-01 6 views
0

Я уже некоторое время пытался изучить Java EE, но никогда не мог запустить пример EJB. Руководство Oracle использует netbeans, но я должен узнать, как это сделать в Eclipse. Также книги не помогли и не просмотрели видео.Удаленный клиент EJB Eclipse

Я могу запускать сервлеты, jsp, jsf без проблем, но у меня всегда были проблемы с EJB. Что мне не хватает?

Проблема в конфигурации внутри Eclipse, я думаю. Мой Структура проекта в Eclipse, заключается в следующем:

My Project Structure in Eclipse is the following

Шифр ​​Helloworld.java файла:

package helloworld.ejb; 
import javax.ejb.Remote; 

@Remote 
public interface HelloWorld { 
    public String outputHelloWorld(); 
} 

Код HelloWorldBean.java файла

package helloworld.ejb; 
import javax.ejb.Stateless; 

@Stateless 
public class HelloWorldBean implements HelloWorld { 
    public String outputHelloWorld() { 
    return "Hello World!"; 
    } 
} 

кодекс HelloWorldClient.java

package helloworldprojectclient; 

import javax.ejb.EJB; 
import helloworld.ejb.HelloWorld; 

public class HelloWorldClient { 
@EJB 
private static HelloWorld helloWorld; 
public static void main (String[] args) { 
    System.out.println(helloWorld.outputHelloWorld()); 
    } 
} 

Я использую Glassfish 4.0 в качестве сервера. HelloWorldProject - это проект EJB, а «helloworldprojectclient» - это обычный Java-проект, и я добавил javaee.jar (из каталога Glassfish) в путь сборки.

Когда я пытаюсь запустить HelloWorldClient.java я получаю следующее исключение:

Exception in thread "main" java.lang.NullPointerException at helloworldprojectclient.HelloWorldClient.main(HelloWorldClient.java:10) который следующую строку: System.out.println (helloWorld.outputHelloWorld());

В чем проблема? Я упоминаю, что я новичок в EJB. Спасибо!

ответ

0

Мне удалось заставить его работать. Я не знаю, правильно ли это, но в «helloworldprojectclient», если вы установили вкладку «Проект сборки» и добавили HelloWorldProject, а затем на вкладке «Библиотеки» добавьте appserv-rt.jar и javaee.jar (оба из папки из библиотеки Glassfish). то клиент должен выглядеть следующим образом:

package helloworldprojectclient; 
import javax.naming.InitialContext; 
import helloworld.ejb.HelloWorld; 

public class HelloWorldClient { 

public static void main(String[] args) { 
    try { 
     InitialContext ic = new InitialContext(); 
     HelloWorld thing = (HelloWorld) ic.lookup("helloworld.ejb.HelloWorld"); 
     System.out.println("It seems it runs: " + thing.outputHelloWorld()); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
} 

} 
2

Только в случае, если вы все еще заинтересуют в этом:

Первая версия работы это не распространяется, потому что вы пытаетесь внедрить ссылку EJB в классе, который является не управляется Container. Когда вы выполняете основной метод, аннотация @EJB игнорируется, поэтому член класса HelloWorld никогда не инициализируется.

Чтобы выполнить этот код без изменений, вам необходимо выполнить класс в Application Client Container, который будет вводить ссылку ejb.

Ваша вторая версия запускается, потому что вместо делегирования в Контейнер вы получаете ссылку ejb через службу JNDI. Это предложенный способ, когда инъекция контейнера недоступна.

Смежные вопросы