私のプロジェクトではSeam 3
を使用しています。に@Inject
アノテーションを挿入する際に問題があります。 EnityManager
がどのPersistenceUnit
を使用するかを知るための設定があります。 EJB
とたとえば次のように入力します。Seamで@Inject EntityManagerを実行できるようにするためのコンフィグレーション3
@PersistenceContext(unitName="MY_PERSISTENCE_UNIT_NAME")
private EntityManager eManager;
がpersistence.xml
ファイルに設定されています。追加することによって、私はシーム2に関するいくつかの記事を読んだことがあるが、設定はcomponents.xml
ファイルであっ作られ
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0"
xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="MY_PERSISTENCE_UNIT_NAME" transaction-type="JTA">
<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:jboss/TimeReportDS</jta-data-source>
<mapping-file>META-INF/orm.xml</mapping-file>
<class>....</class>
<class>....</class>
<class>....</class>
<properties>
<property name="jboss.entity.manager.factory.jndi.name"
value="java:/modelEntityManagerFactory" />
<!-- PostgreSQL Configuration File -->
<property name="hibernate.connection.driver_class" value="org.postgresql.Driver" />
<property name="hibernate.connection.password" value="password" />
<property name="hibernate.connection.url" value="jdbc:postgresql://192.168.2.125:5432/t_report" />
<property name="hibernate.connection.username" value="username" />
<!-- Specifying DB Driver, providing hibernate cfg lookup
and providing transaction manager configuration -->
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect" />
<property name="hibernate.transaction.factory_class" value="org.hibernate.transaction.JTATransactionFactory"/>
<property name="hibernate.transaction.manager_lookup_class"
value="org.hibernate.transaction.JBossTransactionManagerLookup" />
<property name="hibernate.archive.autodetection" value="class" />
<!-- Useful configuration during development - developer can see structured SQL queries -->
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="false" />
</properties>
</persistence-unit>
</persistence>
:<components>
タグ内
<persistence:managed-persistence-context
name="entityManager" auto-create="true" persistence-unit-jndi-name="java:/modelEntityManagerFactory" />
ここに私の擬似的な構成です。シーム2の次のステップは、追加することです:persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<persistence ...>
<persistence-unit name="MY_PERSISTENCE_UNIT_NAME" ...>
...
<properties>
...
<property name="jboss.entity.manager.factory.jndi.name"
value="java:/modelEntityManagerFactory" />
</properties>
</persistence-unit>
</persistence>
で
<property name="jboss.entity.manager.factory.jndi.name"
value="java:/modelEntityManagerFactory" />
が、それはシーム3に何のファイルcomponents.xml
がないことを縫い目。また、永続性ユニットを指定するためのという属性は@Inject
アノテーションにありません。
私のプロジェクトを設定して、@Inject
とEntityManager
をネット上の多くの例に示すように使用してください。
私はPostgres
データベースとJBoss AS 7
を使用します。
EDIT:例を追加します。 Entity
クラスのEntityManager
は使用しません。この@Inject
でここ
@Named("validateReportAction")
@SessionScoped
public class ValidateReportAction extends ReportAction implements Serializable {
private static final long serialVersionUID = -2456544897212149335L;
@Inject
private EntityManager em;
...
}
私はEntity
@Inject
が正常に動作としてマークされているいくつかの豆に@Inject
を使用している場合、私はEclipse
「No bean is eligible for injection to the injection point [JSR-299 §5.2.1]
」
から警告を受けます。
あなたはどんな問題を抱えていますか?同じpersistence.xml内に複数の永続性ユニットがある場合は、アノテーションに識別子を使用する必要があります。それはデフォルトのものだけを持っているからです。 persistence.xmlがDAOクラスとEntityクラスと同じモジュール(JAR)にあることを確認してください。 – Perception
@Perception私が編集した投稿を見て、弁別者の例を教えてください。 – nyxz
Maistora - discriminator注釈は必要ありません。persistence.xmlには1つのPUしかありません。しかし、あなたが追加したエラーメッセージに基づいて、私はEclipseがJBoss JEE実装ファイルを見つけられないと確信しています。 Mavenを使用している場合は、POMにjboss-javaee-web-6.0依存関係を追加する必要があります。他のビルドツールを使用している場合、JARを見つけて手動でプロジェクトクラスパスに追加する必要があります。 – Perception