1

私はそのような問題を抱えています.Webサーバーごとにjndiの命名規則が異なります. たとえば、Tomcat でデータソースに jndi 名を使用したい場合は、次のようになります。

<dataSource type="JNDI">
    <property name="data_source" value="java:comp/env/jdbc/myJndiName"/>
</dataSource>

しかし、WebSphere または Jboss では、「comp/env」なしで jndi 名を指定する必要があります。

<dataSource type="JNDI">
    <property name="data_source" value="java:jdbc/myJndiName"/>
</dataSource>

または、構成で指定した jndi 名。「comp/env」プレフィックスを使用して Tomcat と同じ名前を使用すると、明らかに機能しません。

アプリをさまざまな Web サービスに対してユニバーサルにする方法はありますか? 私は、jndi 名の可用性をチェックして適切に設定する独自の DataSource ラップを作成することを考えていました..何かアイデアはありますか?

4

2 に答える 2

2

Mybatis 環境は、あなたが探しているものかもしれません。

http://mybatis.github.com/mybatis-3/configuration.html#environments

あなたの場合、設定は次のようになります

<environments default="tomcat">
    <environment id="tomcat">
        <transactionManager type="JDBC"/>
        <dataSource type="JNDI">
            <property name="data_source" value="java:comp/env/jdbc/myJndiName"/>
        </dataSource>
    </environment>
    <environment id="websphere">
        <transactionManager type="JDBC"/>
        <dataSource type="JNDI">
            <property name="data_source" value="java:jdbc/myJndiName"/>
        </dataSource>
    </environment>
</environments>

環境ごとに sql セッション ファクトリを作成する必要があります。

InputStream in = Resources.getResourceAsStream("myconfig.xml");
SqlSessionFactory tomcatSessionFactory = new SqlSessionFactoryBuilder().build(in, "tomcat");
SqlSessionFactory websphereSessionFactory = new SqlSessionFactoryBuilder().build(in, "websphere");
于 2013-04-02T16:21:18.393 に答える
1

OSGI 環境 (Aries JNDI) では、構成を次のように検索します。

<environment id="development">
   <transactionManager type="JDBC"/>
    <dataSource type="JNDI">
    <property name="data_source" value="osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=jdbc/Ds)"/>
  </dataSource>

于 2015-02-25T05:21:46.613 に答える