Использование Spring MVC 3.0 и аннотации @EJB без mappedName? - PullRequest
12 голосов
/ 21 октября 2011

Я создаю новое веб-приложение на Java с Spring MVC 3.0 и хочу использовать как можно больше стандартных Java EE 6.(Я на Glassfish 3.1.1.) Настоящий драйвер хочет использовать веб-фреймворк MVC, а не JSF.

Поэтому я ищу лучший способ внедрить EJB-компоненты в мои контроллеры Spring.У меня был некоторый успех, но я не доволен тем, как он выглядит, и я надеялся найти лучший способ.

Это сработало, найдя EJB через JNDI:

// EJB 
@Stateless
public class Service {
  @PersistenceContext(name="MAIN")
  private EntityManager em;

  public void doSomething() { .... } 

}

// Spring 
@Controller
public class HomeController {
   @EJB(mappedName="java:global/springtest/Service") 
   private Service service;

   // controller methods use service 
}

НоЯ недоволен необходимостью отображения "mappedName" на аннотацию @EJB в контроллере.

Есть ли лучший способ сделать это?

Хорошая новость заключается в том, что я могу использовать одну и ту же аннотацию @Inject в EJB и бинах Spring, и единственное отличие состоит в том, какая среда создает объект и выполняет инъекцию.

Ответы [ 2 ]

2 голосов
/ 29 декабря 2011

Если вы используете

mappedName="java:module/Service"

вместо

mappedName="java:global/springtest/Service"

Вам не нужно беспокоиться об имени приложения. Это делает код более переносимым. Я думаю, что это решит некоторые ваши проблемы

0 голосов
/ 24 октября 2011

Для Spring вы можете обернуть поиск JNDI в JndiObjectFactoryBean:

<bean id="serviceBean" class="org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiName" value="java:global/springtest/Service" />
    <property name="resourceRef" value="true" />
</bean>

Тогда вы , вероятно, (поправьте меня, если я ошибаюсь) сможете использоватьэто с @Inject без аннотации @Named("serviceBean"):

@Inject
private Service service;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...