1

アプリケーションでJNDI接続を使用しましたが、機能しています。しかし、接続をテストするためにJunitsを作成する必要があります。SpringFrameworkは使用していません。これは、JNDI接続を取得するために作成したメソッドです。

public Connection getConnection() throws SQLException {
        DataSource ds = null;
        InitialContext ic = null;
        Connection con = null;
        try {
            ic = new InitialContext();
            ds = (DataSource) ic.lookup("java:/DBs");
            con = ds.getConnection();
            return con;
        } catch (Exception e) {
            throw new SQLException(e);
        }

}
4

3 に答える 3

2

スプリングテストライブラリに付属しているSimpleNamingContextBuilderを利用できます。Springに固有ではないため、Springを使用していない場合でもこれを使用できます。

以下は、JUnitテストの@BeforeでJNDI接続を設定する例です。

package com.example;

import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.mock.jndi.SimpleNamingContextBuilder;


public class SomeTest
{

   @Before
   public void contextSetup () throws Exception
   {
       SimpleNamingContextBuilder builder = SimpleNamingContextBuilder.emptyActivatedContextBuilder();
       DriverManagerDataSource dataSource = new DriverManagerDataSource("org.hsqldb.jdbcDriver", "jdbc:hsqldb:mem:testdb", "sa", "");
       builder.bind("java:comp/env/jdbc/ds1", dataSource);
       builder.bind("java:comp/env/jdbc/ds2", dataSource);
   }

   @Test
   public void testSomething () throws Exception
   {
        /// test with JNDI
   }

}

更新:このソリューションは、SpringのDriverManagerDataSourceも使用します。これを使用する場合は、spring-jdbcライブラリも必要になります。ただし、これを使用する必要はありません。任意のオブジェクトを作成して、SimpleNamingContextBuilderに配置できます。たとえば、DBCP接続プール、JavaMailセッションなどです。

于 2012-10-05T13:19:16.887 に答える
1
OK. After lot of searching i found a solution.And it is working for me. I want to share this to everybody. Hope this thing might help people who are having the same issue. Please add the below code.Add ojdb6.jar and naming-common-4.1.31.jar in your test libraries                                               
 @BeforeClass
    public static void setUpClass() throws Exception {
        try {
            System.setProperty(Context.INITIAL_CONTEXT_FACTORY,
                    "org.apache.naming.java.javaURLContextFactory");
            System.setProperty(Context.URL_PKG_PREFIXES,"org.apache.naming");
            InitialContext  ic = new InitialContext();
            ic.createSubcontext("java:");
            ic.createSubcontext("java:/comp");
            ic.createSubcontext("java:/comp/env");
            ic.createSubcontext("java:/comp/env/jdbc");

            OracleConnectionPoolDataSource ocpds = new OracleConnectionPoolDataSource();
            ocpds.setURL("your URL");
            ocpds.setUser("your username");
            ocpds.setPassword("your password");

            ic.bind("java:/yourJNDIName", ocpds);

        } catch (NamingException ex) {
            Logger.getLogger(yourTesTClass.class.getName()).log(Level.SEVERE, null, ex);



        }


    }
于 2012-10-10T18:57:34.083 に答える
0

これがアプリサーバーの外部で実行されている場合は、InitialContextの呼び出しにパラメーターを指定する必要があります。ただし、多くのDataSource実装はシリアル化できないため、コンテナの外部では機能しないことにも注意してください。

あなたが書いているのは統合テストであり、それはコンテナで実行されるべきです。

于 2012-10-05T13:13:09.493 に答える