Java EE: EJB-сущность, автономная веб-версия - PullRequest
0 голосов
/ 28 сентября 2011

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

У меня есть:

  • EJB (3.1) Project
  • Веб-проект

У меня есть проект EJB, например:

User.java

@Entity
public class User {
    //variables.. getters and setters...
}

UserManagerBean.java

@Stateful
public class UserManagerBean implements UserManager {
    //getters and setters...
    //.......
    public void addUser(User user) {
        //implemented here
    }
    //.......
}

UserManager.java

@Local
@Remote
public interface UserManager {
    //methods here
}

В веб-приложении (автономное веб-приложение) у меня есть это:

UserManager.java

public interface UserManager {
    //methods here
}

User.java

public interface User {
    //methods here
}

Сейчас .. в бобе ... Я пытаюсь получить отудаленный контекст мои бины и их использование:

//ctx is created with the specific properties to access remote context..
InitialContext ctx = new InitialContext();
userManager = (UserManager)ctx.lookup("java:global/project/projectEJB/UserManagerBean");

User user = userManager.getUserById(1); //working

User new_user = (User)ctx.lookup("java:global/project/projectEJB/User"); //not working
//I know this is not supposed to work.. but how can I do this?

Я знаю, что вы не можете получить экземпляр сущности, потому что это не ejb ... Должен ли я создать нормальный класс пользователя, имеющий все какна проекте EJB?нет лучшего решения?Какие еще есть решения?Я искал Google, и кажется, что все знают, как это сделать .. только я не ...

Заранее спасибо ..

Ответы [ 2 ]

1 голос
/ 29 сентября 2011

Чтобы создать объект User, вы просто создаете обычный экземпляр Java с оператором 'new', а затем вызываете свой EJB-вызов.

User myNewUser = new User();
userManager.addUser(myNewUser);

Как на стороне клиента (ваше веб-приложение), так и на стороне сервера(Проект EJB 3.1) должен знать, как сериализовать и десериализовать объект User, поэтому каждая сторона должна иметь доступ к классу User и интерфейсам EJB.

С точки зрения упаковки вы можете связать интерфейс EJB и класс сущности Userвсе в один JAR, который используется как на стороне клиента, так и на стороне сервера.

Альтернативное развертывание может заключаться в объединении веб-приложения и EJB в одно приложение, развернутое в одной и той же JVM.

1 голос
/ 29 сентября 2011

Бины сущностей не должны создаваться непосредственно в веб-слое - потому что для их сохранения вам необходим EntityManager, который не гарантированно безопасен для потоков (и это важно в контексте сервлета).

Что вы, вероятно, захотите сделать, это написать DAO EJB с методом для создания нового пользователя, внедрить / найти его в сервлете и вызвать его.Google для шаблона "GenericDAO", чтобы начать с.

...