2015-12-06 6 views
1

я должен создать проект с интерфейсом (IGraphRemote), SessionBean (Graph) и класс клиента (AppClient)Dependency Injection в одном проекте

Я попытался подготовить простой проект с одним методом регистра (INT hwork, Струнный альбом) - hework мой номер моей домашней работы, альбом его номер моего альбома, но он не работает и возвращает ошибку: java.lang.NullPointerException, поэтому соединение не было установлено. Как я могу это исправить?

Мои файлы: IGraphRemote

public interface IGraphRemote { 
    public boolean register(int hwork, String album); 

} 

Graph

@Remote 
public class Graph implements IGraphRemote{ 
    public boolean register(int hwork, String album) {  
     return (hwork == 6 
       && album.equals("119962")); 
    } 
} 

И AppClient

public class AppClient { 

    @EJB 
    private static IGraphRemote gremote; 

    public static void main(String[] args) { 

     AppClient ap = new AppClient();    
     System.out.println(ap.gremote.register(6, "119962")); 
    } 
} 

вот мой проект project structure

Ошибка:

Exception in thread "main" java.lang.NullPointerException 
    at AppClient.main(AppClient.java:22) 
Java Result: 1 
+1

Можете ли вы опубликовать полный stacktrace вместо «NullPointerException»? – xaviert

+0

уверен, что я добавил его в свой пост – Empi

+0

Не эксперт с EJB, поэтому мой совет может быть бесполезным, но вы посмотрели http://stackoverflow.com/questions/25828542/how-to-create-a-remote -session-ejb-from-a-client и http://stackoverflow.com/questions/4168920/new-to-ejb-world-null-pointer-exception-in-ejb-client? Они также сообщили о NPE, подобном вашему. – xaviert

ответ

1

Из вашего кода, а также в трассировке стека очевидно, что вы пытаетесь запустить стандартное приложение j2se с основным методом из веб-приложения, так как вы ожидаете, что инъекция зависимостей произойдет, если не будет другого кода экземпляр ejb и ввести его в ссылку ejb. EJB является компонентом J2EE и не может быть создан в стандартном Java-приложении, для управления жизненным циклом EJB необходим контейнер ejb с сервисом именования. Вы можете создать стандартного клиента j2se, подключившись к службе именования и поиска для компонента, но ваш EJB ДОЛЖЕН быть развернут в контейнере ejb, в первую очередь, таких как TomEE, Glassfish, websphere и т. Д.

+0

Yup, thats right, теперь im, используя EJB Application Client и EJB-модуль для создания Beans, и он работает. Спасибо – Empi

0

Прежде всего, ваш EJB компонент не может быть статичным, WAHT является desrcibed здесь: Injecting a static EJB, nonsense?

Во-вторых, если вы хотите, чтобы ввести ваш EJB компонент, ваше приложение должно работать в контейнере EJB, например Glassfish или JBoss. Если вы запустите свое приложение, как простое приложение Java SE, ваш IGraphRemote gremote всегда будет null, если вы его не инициализируете самостоятельно.