2013-01-15 26 views
1

我有這樣的問題:不同的web服務器有不同的jndi命名規則。因此,舉例來說,如果在Tomcat中我想使用JNDI名稱爲數據源,它看起來像:Mybatis幾個jndi的名字

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

但在WebSphere或JBoss應用,我將必須提供JNDI名稱沒有「comp/env的」,就像

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

或我在配置中提供的jndi名稱。如果使用與Tomcat相同的名稱,使用「comp/env」前綴,顯然它不起作用。

有沒有辦法,所以我可以使應用程序通用於不同的Web服務?我正在考慮編寫自己的DataSource包裝來檢查jndi名稱的可用性並正確設置它。任何想法?

回答

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> 

您將需要爲每個環境

InputStream in = Resources.getResourceAsStream("myconfig.xml"); 
SqlSessionFactory tomcatSessionFactory = new SqlSessionFactoryBuilder().build(in, "tomcat"); 
SqlSessionFactory websphereSessionFactory = new SqlSessionFactoryBuilder().build(in, "websphere"); 
1

在OSGi環境創建SQL會話工廠(白羊座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>