Как создать экземпляр класса, EJB или POJO? - PullRequest
0 голосов
/ 26 ноября 2010

У меня есть класс EJB или POJO (я не знаю). Я должен сделать экземпляр этого класса. Есть ли шаблон для этой операции? Или я должен вручную проверить аннотации EJB, а затем выполнить поиск JNDI?

public Object instantiate(Class c) {
  return /* ... */
}

Ответы [ 4 ]

3 голосов
/ 26 ноября 2010

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

Чтобы узнать, должен ли класс быть EJB, проверьте его аннотации:

if (clazz.isAnnotationPresent(Stateless.class)
   || clazz.isAnnotationPresent(Statefull.class)) { .. };

(и, возможно, управляемый сообщениями)

1 голос
/ 26 ноября 2010

POJO (простой Java-объект объекта) создается с помощью нового оператора.

MyClass myClass = new MyClass( args )

Он также может быть создан с помощью отражения.

MyClass myClass = MyClass.class.newInstance();
0 голосов
/ 26 ноября 2010

EJB3 - это почти POJO, который определенно имеет конструктор по умолчанию.Там нет проблем, чтобы создать его экземпляр.То же самое касается любого класса, у которого есть конструктор по умолчанию.

Просто скажите

clazz.newInstance();

и все готово.

Если вы пишете метод, который создает экземпляры любого класса, этот метод должен быть параметризован:

public <T> T instance(Class<T> clazz)
0 голосов
/ 26 ноября 2010

Да, вам нужно будет проверить аннотации EJB3 и каким-то образом выяснить, как называется JNDI (может зависеть от вашего контейнера).

Платформа Seam делает это, используя шаблон имени JNDI (см. документация на шов ).Таким образом, контексты Seam могут содержать смесь POJO и EJB.

...