2013-08-07 5 views
1

Это так странно, когда я делаю новый Session Bean в Netbeans, он имеет возможность для создания local interface, и remote. Однако, если я выберу remote, список содержит существующую Java SE и ME. Если я выберу любой из них (кстати, один из них я планировал использовать в качестве GUI-клиента для боба позже). Он делает сессионные компоненты в моем Enterprise Application, но добавляет удаленный класс в проект Java SE. Я не понимаю, о чем это?Netbeans Дистанционные в проекте (EJB)

 My Netbeans Project Tree

enter image description here

enter image description here

+0

Не могли бы вы добавить заголовки NewStudent * .java, чтобы мы могли видеть пакет, класс/интерфейсы и их аннотации. – Beryllium

+0

@ Beryllium Я добавил две вещи, которые вы упомянули, можете ли вы сейчас понять? –

+0

Не могли бы вы заменить метод 'testing' другой реализацией? – Beryllium

ответ

2

При создании лица без EJB Sesion боба, он может реализовать локальный и/или удаленный интерфейса .

В вашем случае я предлагаю использовать удаленный интерфейс , потому что один из ваших клиентов будет удалено: командная строка, автономное приложение, как правило, не работают на хосте сервера приложений (в отличии от сервлета который обычно находится в одном JVM).

Попробуйте спроектировать удаленный интерфейс таким образом, что один взаимодействие с пользователем результатов в один вызов к EJB слоя. Если ваше автономное приложение работает достаточно быстро, сервлет, вероятно, также будет достаточно быстрым. Если вы сделаете это наоборот, вы, возможно, узнаете, что дизайн интерфейса, который работает для сервлета, не подходит не подходит для удаленного доступа.

Есть некоторые семантические и технические различия между местной а удаленного интерфейс: Используя первое означает, что интерфейс предназначен для использования только с локального хоста (так много звонков, на самом деле не влияют на производительность). Локальные бобы живут только в одной JVM. Это влияет на поведение относительно вызова по значению/ссылке (см. Why do we need separate Remote and Local interfaces for EJB 3.0 session beans).


Что касается скриншотов NetBeans:

  • (удаленный) клиента имеет удаленный интерфейс в своей области. Это нормально, так как не нужно ничего видеть.

  • На сервере/стороне EJB есть все остальное: EJB и локальный интерфейс. Единственная вещь, которая, кажется, отсутствует, - это дистанционное взаимодействие, как это делает EJB. Возможно, в нем есть некоторая магия среды IDE NetBeans, но стороне сервера также нужен удаленный интерфейс.

+0

Это мой вопрос, почему 'Netbeans' добавляет интерфейс' remote' в проект Java 'SE', sine, я не создавал этот файл, мне просто нужен удаленный интерфейс вместе с локальным интерфейсом, но если я не буду, t сделать это вручную, «Netbeans» дает мне возможность добавлять удаленный интерфейс в какой-то другой проект. –

+0

Где еще, если нет в другом проекте? Если у вас нет удаленного клиента, вам не нужен удаленный интерфейс, потому что с «только сервлетами» достаточно локального интерфейса. Поэтому, возможно, IDE хочет вести вас в рекомендованном направлении, поэтому с этой точки зрения это имеет смысл. Рассмотрим два пакета, которые вам нужно построить позже: один для клиента (только для удаленного интерфейса) и один для сервера (реализация EJB и т. Д.), – Beryllium

1

EJBs предназначены для компонентов, которые "исполняют бизнес-логику". Они могут использоваться локально (называемые другими компонентами на самом сервере приложений) или удаленно клиентом (например, апплет, настольное приложение).

В последнем случае вы получаете доступ к EJB через удаленный интерфейс (что имеет смысл, что он должен быть включен вместе с клиентом, не так ли?) Плюс некоторая конфигурация, которая сообщает клиенту, как подключиться к серверу, фактически выполняет эти бобы.

+0

Ну, я хочу получить доступ к этому компоненту на самом деле от моего клиента, но я боролся с этим. Итак, как это поможет мне связать форму этого клиента с этим компонентом? –

+0

И вы имеете в виду, что «имеет смысл быть включенным с клиентом», не предполагается, что все эти классы будут на сервере ** Glasfish ** в моем случае? А затем от моего клиента, чтобы получить доступ к этому интерфейсу, через ** JDNI ** или каким-то образом? –

+1

@LaliPali Реализация вашего бина и локальный интерфейс живут на сервере. Однако удаленный интерфейс, хотя и может жить на сервере, должен жить на клиенте. Ниже приведена страница часто задаваемых вопросов для Java EE 5, описывающая, как настроить JNDI для доступа к удаленным EJB https://glassfish.java.net/javaee5/ejb/EJB_FAQ.html#nonJavaEEwebcontainerRemoteEJB. Вам нужно будет найти точную конфигурацию для вашего конкретного сервера, чтобы все было правильно, поскольку параметры конфигурации имеют тенденцию к изменению. – rdcrng

0

Вот вопрос, и я сильно боролся с этим: При создании объекта EJB из классов сущностей, NetBeans даст вам возможность создавать удаленные интерфейсы. Это то, что я делаю, потому что у меня будет несколько автономных клиентов, обращающихся к этим ejb. Когда вы указываете NetBeans, вы хотите создать удаленные интерфейсы, это заставляет вас размещать их в другом проекте. Это все хорошо, пока вы не определите реализацию, которая выглядит примерно так:

public class DataFacade extends AbstractFacade<MyEntityClass> implements DataFacadeRemote { 
... 
} 

Теперь, когда вы пытаетесь развернуть EJB банку для Glassfish, он утверждает, что нет объекта EJB в вашем банке, и это правильно так что, поскольку он ничего не знает об интерфейсе DataFacadeRemote. То, что я сделал для решения этой круглой задачи, - создать библиотечную банку, которую я скопировал на сервер стеклянной рыбы вручную. Затем, когда я развертываю банку ejb, он с радостью находит библиотечную банку и понимает классы фасадов (ejbs). Это также является монументальной болью, потому что необходимо скопировать библиотечную банку каждый раз, когда у вас есть изменения в интерфейсе или классах сущностей, и для перезагрузки библиотеки может потребоваться перезагрузка сервера приложений, поскольку, похоже, это не происходит автоматически.

Если я тоже делаю что-то неправильно, я буду благодарен за толкание в правильном направлении.

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