0

spring 3.1.0、hibernate 4.0、jboss 7.1.1 のアプリケーションがあります。

目的-永続ユニットをロードするためのプロパティの動的拡張。

<bean id="propertyPlaceholder"  class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
    <property name="searchSystemEnvironment" value="true" />
    <property name="locations">
        <list>
                <value> file:/${PROPERTY_HOME}/jpa/kundera_jpa.properties</value>  
        </list>
    </property>
</bean>

<bean id="entityManagerFactory" class="org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean" > 
    <property name="persistenceXmlLocation" value="classpath:./META-INF/persistence.xml"/> 
    <property name="persistenceUnitName" value="cassandra"/>
    <property  name="persistenceProvider" >
         <bean class="com.impetus.kundera.KunderaPersistence" />
    </property> 
    <property name="jpaProperties">
        <props>
        <prop key="kundera.nodes">${cassandra.kundera.nodes}</prop>
        <prop key="kundera.port">${cassandra.kundera.port}</prop>
        <prop key="kundera.keyspace">${cassandra.kundera.keyspace}</prop>
        <prop key="kundera.dialect">${cassandra.kundera.dialect}</prop>
        <prop key="kundera.client.lookup.class">${cassandra.kundera.client.lookup.class}</prop>
        <prop key="jboss.as.jpa.providerModule">com.impetus.kundera</prop>
        </props>
    </property>
</bean>

persistence.xml

<persistence-unit name="cassandra">
        <properties> 
             <property name="jboss.as.jpa.managed" value="false"/> 
        </properties>   
</persistence-unit>

「jboss.as.jpa.managed」を使用して、jboss の休止状態を停止し、cassandra ユニットを自動的にロードします。上記の Bean の定義を介して、プロパティを正常にロードできます。しかし、実行時にエンティティ 'UsageItem' が次の例外を生成しています

org.hibernate.hql.internal.ast.QuerySyntaxException: UsageItem がマップされていません

しかし、奇妙なことに、persistence.xml のプロパティを手動でハードコーディングすると、同じコードが機能します -

<persistence-unit name="cassandra">
    <provider>com.impetus.kundera.KunderaPersistence</provider>
     <properties>
        <property name="kundera.nodes" value="172.16.9.70" />
        <property name="kundera.port" value="9160" /> 
        <property name="kundera.keyspace" value="iaas" />
        <property name="kundera.dialect" value="cassandra" />
        <property name="kundera.client.lookup.class" value="com.example.client.cassandra.pelops.JCPelopsClientFactory" />
        <property name="jboss.as.jpa.providerModule" value="com.impetus.kundera"/>          
    </properties>
</persistence-unit>

上記のpersistence.xmlのようにハードコーディングしているときは、 hibernateしてPersistence-unitをロードしていると言っています.Persistence -unitは完全に正常に動作しています. 春はエンティティ「UsageItem」のメタデータをロードできないと思います。春に何が欠けているのか、が先に進むことを許可していないのかわかりません。1週間経ちましたが、まだ立ち往生しています。

4

1 に答える 1

0

JBoss で Kundera を永続化プロバイダーとして使用しようとしているように見えますか?

"jboss.as.jpa.managed" を false にして最近の 2.6 リリースを試すことをお勧めします。jboss モジュールを作成してもあまり役に立たず、いくつかのライブラリをパッケージ化し、モジュールにバンドルする必要があります。

また、UsageItem が Kundera の要求に応じて @Table アノテーションで正しくアノテーション付けされている場合、動作するはずです。

-Vivek

于 2013-07-17T07:29:40.747 に答える