2013-03-17 5 views
2

В NetBeans-сайте how to create Application Client есть пример с использованием простых проектов (без Maven). Требуется 4 проекта (EJB, EAR, Lib, Program). Этот учебник прост и работает отлично.Клиент приложения, использующий аннотацию @EJB и Maven на Glassfish

Я хочу спросить, как сделать то же самое с Maven? Я не могу правильно получить все зависимости, поэтому, когда я пытаюсь вызвать метод EJB, он дает мне NullPointerException. Может ли кто-нибудь сказать мне, ключевые шаги (с использованием NetBeans), которые нужно выполнить? Потому что я смущен, о том, сколько проектов нужно создать? Я знаю, что мне нужны проекты Application Project, EAR и EJB, и что это? Какие специальные конфиги должны быть записаны в этих проектах pom.xml-файлов?

EDIT1:

Я не хочу явного JNDI Я хочу, чтобы иметь возможность использовать @EJB аннотаций.

+0

«Нет JNDI, но EJB» ... звучит для меня как «Я хочу запустить java-программу, но без JVM». Даже если вы не манипулируете им явно, JNDI требуется при использовании EJB. – ben75

+0

Да, извините, по моей вине, я отредактировал свой ответ. – Minutis

+0

Можете ли вы более конкретно рассказать о NPE, который вы получаете? Это вызвано отсутствием зависимостей (т. Е. Ваш jQuery appclient отсутствует зависимость от класса интерфейса)? Если да, вы получаете сообщение об ошибке при развертывании баннера appclient. – perissf

ответ

3

Вот шаги:

  1. Создание библиотеки Java классов для проведения класса интерфейса, используя папку Maven по меню нового проекта. Выберите приложение Java в папке Maven.
  2. Создайте корпоративное приложение после учебника NB. Единственное различие заключается в том, что вам нужно использовать папку Maven в меню New Project
  3. Построение библиотеки классов
  4. Убедитесь, что библиотека классов является зависимостью в Enterprise Application.
  5. Запустите приложение Enterpise. NB развернет его на сервер GF
  6. Создайте клиент приложения с помощью папки Maven. Не используйте код вставки . Функция NB для инъекции здесь безграмотного EJB, потому что он сбой (по крайней мере, в моей версии: NB 7.2). Вместо этого просто скопируйте и вставьте код, показанный в учебнике. Вам не нужен дескриптор развертывания/ejb.
  7. Измените POM клиента приложения, чтобы использовать maven-assembly-plugin для получения флага с зависимостями. Если вы не сделаете этого шага, развертывание завершится неудачно, потому что GF не может загрузить класс интерфейса.Добавьте следующие строки в закладке plugins (изменить основной класс в зависимости от обстоятельств):

    <plugin> 
         <artifactId>maven-assembly-plugin</artifactId> 
         <version>2.4</version> 
         <configuration> 
          <descriptorRefs> 
           <descriptorRef>jar-with-dependencies</descriptorRef> 
          </descriptorRefs> 
          <archive> 
           <manifest> 
            <mainClass>com.entapp.entappclient.Main</mainClass> 
           </manifest> 
          </archive> 
         </configuration> 
         <executions> 
          <execution> 
           <id>make-assembly</id> 
           <phase>package</phase> 
           <goals> 
            <goal>single</goal> 
           </goals> 
          </execution> 
         </executions> 
        </plugin> 
    
  8. Создание проекта клиента приложения с NB

  9. Запуск клиента приложения с помощью команды клиента приложения ГФ: appclient -jar EntAppClient-1.0-SNAPSHOT-jar-with-dependencies.jar

Полезные ссылки: Java EE's Buried Treasure: the Application Client Container Джейсон Ли

Важно Примечание

Чтобы развернуть клиент для своих JVM you have to install the appclient on each client machine и установить свойство целевого сервера. AppClient, кажется, имеет очень сложную структуру, которую вы не можете производить просто путем добавления этих строк (плюс сохраняемость артефактов EclipseLink):

<dependency> 
    <groupId>org.glassfish.appclient</groupId> 
    <artifactId>gf-client</artifactId> 
    <version>3.1.1</version> 
    <type>pom</type> 
    <scope>compile</scope> 
</dependency> 

Добавление этих артефактов клиента компилируется отлично, но банка не работает. И это понятно, так как файл sun-acc.xml отсутствует (этот файл необходим, потому что он содержит свойство целевого сервера). Поэтому я считаю, что единственный способ - использовать скрипт package-appclient согласно связанной документации.

+0

Я попробую это у себя дома. – Minutis

+0

Вы пробовали мое решение? Это сработало? – perissf

+0

Да, я пробовал, и он не работает. Мне странно, почему я должен запускать Application Client с помощью команды GF (9 шагов). Если я распространяю клиент приложения другим пользователям, у них не будет установлен GF на их компьютерах, и поэтому он не сможет его использовать. Также зависимости на шаге 4 немного неясны, не так ли? Потому что, если я делаю путь зависимости, который вы описали, то при создании bean-компонента и определении проекта Lib в качестве Remote он говорит «Циклические зависимости проекта». – Minutis

0

Существует полезный EJB FAQ, которые упоминают о том, как использовать @EJB для доступа к удаленному EJB с помощью ejb-ref вместе с sun-web.xml или теперь это glassfish-web.xml в следующей ссылке: -

What if I have multiple instances of the Appserver running and I want to access a Remote EJB component between them?

Если вы хотите сравнить ejb-ref и ejb-local-ref, вы можете увидеть дополнительную информацию по адресу What is the relationship between @EJB and ejb-ref/ejb-local-ref?

Надеюсь, это может помочь.

+0

Проблема сама по себе заключается не в аннотации @EJB, а в зависимостях Maven, я думаю. Потому что без maven все работает нормально. – Minutis