私はJava EE 6の新機能です。私は、EclipseLink JPA EntityManagerをインジェクトしようとしています。これを実現するさまざまな方法を模索しています。私はGlassfishとDerbyを使用しています。以下の例では、簡潔にするためにEntityManagerを直接サーブレットまたはコントローラに挿入しようとしていますが、実際にはEntityManagerをラップするDAOクラスがあります。次のように SpringとJava EEの両方を使用してJPA EntityManagerを挿入する
は、Java EE 6において、Iは、サーブレットを定義することができる:
@WebServlet(urlPatterns="/app/*")
public class FrontController extends HttpServlet {
private static final long serialVersionUID = 1L;
@PersistenceContext
private EntityManager entityManager;
}
のEntityManagerが正しくないさらなる構成で注入されます。
ここでは、理想的にはアノテーションを使用して、Springを使いたいと思います。現在、次のように私はコントローラを定義することができます。
@Controller
@RequestMapping("/testurl.htm")
public class ExampleController {
private EntityManager em;
@PersistenceContext
public void setEntityManager(EntityManager em) {
this.em = em;
}
}
春が正しく物事を配線するためには、私は自分のアプリケーションコンテキストxmlファイルに次のディレクティブを含める必要があります。
<bean id="entityManagerFactory"
class="org.springframework.orm.jpa.LocalEntityManagerFactoryBean">
<property name="persistenceUnitName" value="myPU"/>
</bean>
場合私は展開上の例外を取得し、上記のスニペットが含まれていません。 org.springframework.beans.factory.NoSuchBeanDefinitionException: No unique bean of type [javax.persistence.EntityManagerFactory] is defined: expected single bean but found 0
は私が上記のXMLスニペットを必要としない印象の下にあったthisを読みました。上記のスニペットが常に必要とされるかどうか誰にでも確認できますか?
Java EEコンテナによってEntityManagerがFrontControllerサーブレットに正常に挿入された場合、この同じEntityManagerをSpringアプリケーションコンテキストに挿入して他のSpring Beanで利用できるようになる方法はありますか?
あなた、サービス層にあなたのemをしませ注入コントローラ – NimChimpsky