最近、単純なJava EE 6
プロジェクトを に移行しましたJava EE 7
。詳細には、これは、依存関係を からjavax:javaee-api:6.0
に変更し、ではなく にjavax:javaee-api:7.0
デプロイしたことを意味します。Glassfish 4
Glassfish 3
その後、CDI
注釈付きの依存関係を注入できなかったため、アプリケーションは機能しなくなりました。
最近、単純なJava EE 6
プロジェクトを に移行しましたJava EE 7
。詳細には、これは、依存関係を からjavax:javaee-api:6.0
に変更し、ではなく にjavax:javaee-api:7.0
デプロイしたことを意味します。Glassfish 4
Glassfish 3
その後、CDI
注釈付きの依存関係を注入できなかったため、アプリケーションは機能しなくなりました。
deployment descriptor
問題は、依存関係を見つけるための およびデフォルトの動作が で変更されたことを知らなかったことですJava EE 7
。
新しいdeployment descriptor (beans.xml)
ものは次のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
version="1.1" bean-discovery-mode="all" >
</beans>
重要なのは、がすべての依存関係を見つけるbean-discovery-mode
方法を構成する属性です。CDI
に設定するとbean-discovery-mode="all"
、 のようにCDI
動作しJava EE 6
ます。
beans.xml ファイルを削除して Glassfish 4 でインジェクションを機能させるには、スコープのパッケージも変更する必要があります。
javax.faces.bean.ApplicationScoped -> javax.enterprise.context.ApplicationScoped
javax.faces.bean.RequestScoped -> javax.enterprise.context.RequestScoped
javax.faces.bean.SessionScoped -> javax.enterprise.context.SessionScoped
javax.faces.bean.ViewScoped -> javax.faces.view.ViewScoped