Общий EJB Client Jar для различных модулей под одним EAR - PullRequest
0 голосов
/ 20 марта 2012

Привет, братья по коду!

Первый вопрос здесь, поэтому я постараюсь соблюдать все стандарты.Поправьте меня, если я пропущу что-нибудь, и я исправлю это прямо сейчас.

Я немного озадачен подходом, который я должен использовать с моим заявлением.У меня есть несколько EJB-проектов и JSF-проектов под одним и тем же EAR, и, конечно, я хотел бы определить некоторые локальные интерфейсы для всех EJB-проектов.У меня есть уровень персистентности с парой модулей, подкрепленных шаблоном EAO, и точка доступа к бизнес-уровню через фасад сеанса.

Я собираюсь создать Jar-файл "SharedInterfaces", содержащий все клиентские интерфейсы.(Если нужно сказать, все клиентские файлы EJB в одном) и все интерфейсы, которые будут реализованы объектами, чтобы я мог абстрагировать проекты между собой (без зависимостей, просто общие интерфейсы для совместной работы).

Как можноЯ превращаю этот проект "SharedInterfaces" в общий EJB CLient Jar, который будет использоваться всеми модулями?С другой стороны, я могу сделать какое-то расширение интерфейса, чтобы мне не нужно было настраивать проект ... но я не уверен, что этот общий проект использует "лучшие практики".

1 Ответ

1 голос
/ 21 марта 2012

Ну, я в значительной степени понял это сам.

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

Просто для ясности я добавлю простой пример того, что я сделал. Это локальный интерфейс, который я создаю для EJB:

package org.myapp.managers;

import javax.ejb.Local;

@Local
public interface UserManagerLI extends IUserManager{

}

Затем в SharedInterfaces я просто добавляю интерфейс IUserManager:

public interface IUserManager {

    public IUser newUser(); 
    public void saveOrUpdate(IUser u, boolean hashPass);    
    public void deleteUser(IUser u);    
    public boolean checkUserAvailability(String username);  
    public IUser getUser(String username);

}

Затем, чтобы использовать его, я просто сделал инъекцию как обычно:

@ManagedBean
@SessionScoped
public class LogInBean {

    @EJB
    private IUserManager userManager;

        // Attributes, Setters, Getters and methods

}

Конечно, нужно ВСЕГДА быть осторожным с тем, что он разоблачает. Думая об интерфейсах как о контрактах на обслуживание, нельзя иметь доступ к функциям, к которым он не имеет доступа.

...