4

JBoss-4.2.3.GA で以下の設定でアプリケーション ear ファイルをデプロイしようとしています

jboss-app.xml

<jboss-app>
    <loader-repository>
        com.xxxx.xxx:loader=<ear-name>
      <loader-repository-config>
        java2ParentDelegation=false
      </loader-repository-config>  
    </loader-repository>
</jboss-app>

persistence.xml (スニペットのみ)

<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle10gDialect"/>
<property name="hibernate.hbm2ddl.auto" value="validate"/>
<property name="hibernate.show_sql" value="false"/>
<property name="hibernate.format_sql" value="false"/>
<property name="jboss.entity.manager.factory.jndi.name" value="java:/XXXXFactory"/>

展開中に次のロガー情報を取得しました。例外が INFO ロガーにリストされている理由がわかりません。これについて気にすることはできますか?

16:30:07,239 INFO  [STDOUT] 16:30:07,238 INFO  [SettingsFactory] JDBC driver: Oracle JDBC driver, version: 11.2.0.3.0
javax.ejb.EJBException: org.hibernate.HibernateException: unknown Oracle major version [11]
    at org.jboss.ejb3.tx.Ejb3TxPolicy.handleExceptionInOurTx(Ejb3TxPolicy.java:63)
    at org.jboss.aspects.tx.TxPolicy.invokeInOurTx(TxPolicy.java:83)


Caused by: org.hibernate.HibernateException: unknown Oracle major version [11]
    at org.hibernate.dialect.DialectFactory$1.getDialectClass(DialectFactory.java:135)
    at org.hibernate.dialect.DialectFactory.determineDialect(DialectFactory.java:65)
    at org.hibernate.dialect.DialectFactory.buildDialect(DialectFactory.java:39)
    at org.hibernate.cfg.SettingsFactory.determineDialect(SettingsFactory.java:426)

注: JBoss-Seam-2.2.0.GA を使用しています

試した:これこれあれ

追加情報が必要な場合はお知らせください。jboss で利用可能なライブラリを耳に戻そうとしています。

更新:試行

  1. アプリケーションが 2 つの異なるセッションを使用しており
    、別のレガシー コード用の hibernate.cfg.xml が 1 つあることがわかりました。そこには方言が指定されていません。
  2. cfg.xml に Oracle10g 方言を追加すると、上記の不明な oracle バージョン エラーがスローされなくなりましたが、10gDialect をロードできなかったために例外が発生しました。
  3. 美しさは、両方のセッションが同じデータソースを指していることです。
4

3 に答える 3

9

追加してみてください

hibernate.dialect=org.hibernate.dialect.Oracle10gDialect

またJBoss/server/default/deploy/ejb3.deployer/META-INF/persistence.properties

これは、JBoss-4.2.3.GAにバンドルされているHibernate3.2.4.sp1とojdbc511.1.0.6.0(両方ともJBossグローバルライブラリ)で機能します。

アップデート

また、古いバージョンのhibernateがクラスパスのどこかに存在しないことを再確認してください。

JBoss-Seam-2.2.0.GAディストリビューションはHibernate3.3.1.GAをバンドルしますが、Oracle Database 11gのHibernate方言は?少なくともHibernate 3.3.2+ is required for recent JDBC drivers

JBoss-4.2.3.GAにバンドルされているHibernate3.2.4.sp1には、一部の最新のスタッフがバックポートされている場合があります。

于 2012-09-19T05:45:31.610 に答える
0
  public String getDialectClass(int majorVersion) throws Throwable
        {
            switch(majorVersion)
            {
            case 8: // '\b'
                return (DialectFactory.class$org$hibernate$dialect$Oracle8iDialect != null ? DialectFactory.class$org$hibernate$dialect$Oracle8iDialect : (DialectFactory.class$org$hibernate$dialect$Oracle8iDialect = DialectFactory._mthclass$("org.hibernate.dialect.Oracle8iDialect"))).getName();

            case 9: // '\t'
                return (DialectFactory.class$org$hibernate$dialect$Oracle9iDialect != null ? DialectFactory.class$org$hibernate$dialect$Oracle9iDialect : (DialectFactory.class$org$hibernate$dialect$Oracle9iDialect = DialectFactory._mthclass$("org.hibernate.dialect.Oracle9iDialect"))).getName();

            case 10: // '\n'
                return (DialectFactory.class$org$hibernate$dialect$Oracle10gDialect != null ? DialectFactory.class$org$hibernate$dialect$Oracle10gDialect : (DialectFactory.class$org$hibernate$dialect$Oracle10gDialect = DialectFactory._mthclass$("org.hibernate.dialect.Oracle10gDialect"))).getName();

            case 11: // '\013'
                return (DialectFactory.class$org$hibernate$dialect$Oracle10gDialect != null ? DialectFactory.class$org$hibernate$dialect$Oracle10gDialect : (DialectFactory.class$org$hibernate$dialect$Oracle10gDialect = DialectFactory._mthclass$("org.hibernate.dialect.Oracle10gDialect"))).getName();



        }



            throw new HibernateException("unknown Oracle major version [" + majorVersion + "]");
        }

実際、これは DialectFactory のコードであるため、データベースのバージョンが 11 を超えると、この問題が発生します。スイッチケースを追加して問題を解決しました。

于 2016-05-30T08:49:40.430 に答える
0

この種の例外に直面したことはありませんが、私には非常に明確に聞こえます。

Hibernate の DialectFactory は、データベース エンジン タイプのある種のマッピングを維持する必要があります。

(バージョンを含む)実際の方言に。全体の問題は、Oracle 11 への登録されたマッピングがないことです。

最初の賭けとして、この特定のクラスを調べます。使用している休止状態のバージョンはわかりませんが、少なくとも私が見つけたソースによると、Oracle 11 はサポートされていないようです (ここを見てください) その ''MAPPERS'' ハッシュを見てください地図を見ればわかります... オープンソースのルールはこちら ;)

したがって、休止状態を最新バージョンにアップグレードするのが最善だと思います(最新バージョンでマッパーが更新されていることを確認してください)。または、少なくともアプリケーションサーバーをデバッグして、パラメーターがメソッドに渡されるものなどを把握します。

もちろん、Hibernate のカスタム バージョンをビルドすることも可能ですが、それを好ましい解決策と見なすべきではないと思います。

「その」記事ですでに見つけたように、デフォルトの方言をオーバーライドすることも検討します:)なぜ機能しないのかわかりませんが、デバッグしたほうがよいでしょう。たぶん、どこかでJBossに方言も使用するように指示する必要があります...

お役に立てれば

于 2012-09-19T05:58:01.053 に答える