Внедрение jBoss EJB в управляемый компонент JSF 2.0, запущенный в веб-приложении tomcat - PullRequest
4 голосов
/ 19 июля 2011

Я уже некоторое время осматриваюсь и не могу найти решение, проблема в следующем:

  1. У меня есть приложение EJB3, развернутое в jBoss 6.0 с удаленными ejb.
  2. У меня есть веб-приложение (JSF 2.0), развернутое в Tomcat 6.0.

Я не хочу запускать веб-приложение tomcat в jBoss, это приложение работает под tomcat, и архитектура должна оставаться прежней.

Я не хочу искать EJB вручную (я хочу внедрить его), другими словами, я не хочу делать это так:

Properties properties = new Properties();                                                        
properties.setProperty("java.naming.factory.initial", "org.jnp.interfaces.NamingContextFactory");
properties.setProperty("java.naming.provider.url", "jnp://localhost:1099");                      
properties.setProperty("java.naming.factory.url.pkgs", "org.jboss.naming:org.jnp.interfaces");   

Context c = new InitialContext();                                                                
MySB mySB = (MySB) c.lookup("MySB/remote"); 

Что мне нужно, так это вставить JBoss EJB в управляемые bean-компоненты в приложении Tomcat, например

@EJB(name="MySB/remote")
protected MySB mySB;

как будто MySB/remote находится в локальном JNDI кота, но на самом деле его смотрят с JNDI jBoss за кулисами.

это возможно?

1 Ответ

1 голос
/ 05 августа 2011

Вы можете сделать это с CDI. К сожалению, поддержка CDI не поставляется со стандартным механизмом сервлетов, таким как Tomcat, поэтому, если вы хотите развернуть приложение JSF, которое использует аннотации CDI, вам нужно получить реализацию спецификации CDI. Эталонная реализация JSR 299 известна как Weld . Для его установки вам необходимо:

1) положить weld-servlet.jar в папку WEB-INF\lib вашего приложения JSF

2) добавить следующее определение слушателя к вашему web.xml:

<listener>
    <listener-class>org.jboss.weld.environment.servlet.Listener</listener-class>
</listener> 

3) добавьте пустой файл beans.xml рядом с файлами web.xml и face-config.xml в папку WEB-INF приложения:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/beans_1_0.xsd">
</beans>

Наконец, вам нужно @Inject ваш EJB в управляемых bean-компонентах.

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

...