使用Spring MVC 3.0和@EJB注释没有mappedName?

wrs*_*der 12 model-view-controller spring ejb

我正在使用Spring MVC 3.0创建一个新的Java webapp,并希望尽可能多地使用标准的Java EE 6.(我在使用Glassfish 3.1.1.)真正的驱动程序是想要使用MVC Web框架而不是JSF.

所以我正在寻找将EJB注入Spring控制器的最佳方法.我取得了一些成功,但我对它的外观并不满意,我希望找到更好的方法.

通过JNDI查找EJB,这很有效:

// 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 
}
Run Code Online (Sandbox Code Playgroud)

但是我对控制器中需要@EJB注释的"mappedName"感到不满意.

有一个更好的方法吗?

但好消息是,我可以在EJB和Spring bean中使用相同的@Inject注释,唯一的区别是哪个框架正在创建对象并进行注入.

MaD*_*aDa -1

对于 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>
Run Code Online (Sandbox Code Playgroud)

然后你可能(如果我错了请纠正我)能够在@Inject 没有注释的情况下使用它@Named("serviceBean")

@Inject
private Service service;
Run Code Online (Sandbox Code Playgroud)