0

プロジェクトは Hibernate を使用し、Jboss 5.1 にデプロイします。Hibernate は JNDI を使用してデータソースを取得します。

DAO レイヤーの JUnit テストを作成したいので、Jboss を実行せずにテストするために JNDI データ ソースとトランザクション マネージャーを作成する必要があります。

このために、私はコードを書きました:

System.out.println(LocateRegistry.getRegistry());
Registry reg = LocateRegistry.createRegistry(1099);


Properties properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
properties.put(Context.URL_PKG_PREFIXES, "org.jboss.naming");
properties.put(Context.PROVIDER_URL, "localhost:1099");

InitialContext initialContextcontext = new InitialContext(properties);

名前付きオブジェクト アプリケーションをルックアップまたはバインドしようとすると、縮みます。そしてしばらくすると、タイムアウト例外がスローされます。Bind サブコンテキストが同じ例外をスローする

Mavenには依存関係が含まれています:

  <groupId>org.jboss.client</groupId>
  <artifactId>jbossall-client</artifactId>
  <version>4.2.3.GA</version>

調査の後、私はこの記事http://something-about-tech.blogspot.com/2008/12/injecting-jndi-datasource-for-junit.htmlに直面しました。しかし、このような行Registry reg = LocateRegistry.createRegistry(1099);が見落とされています..私は混乱しています...

関連記事 ( Registering MySQL DataSource with JNDI for Hibernate ) で、レジストリ データソースに興味がありましたが、

Context.INITIAL_CONTEXT_FACTORY="com.sun.jndi.rmi.registry.RegistryContextFactory"

助けてください。

4

1 に答える 1

1

org.jnp.interfaces.NamingContextFactoryは JBoss 固有のプロトコルであるため、RMI レジストリへの接続には使用できません。このテストを試す

public class Test1 implements Serializable, Remote {

    public static void main(String[] args) throws Exception {
        Registry reg = LocateRegistry.createRegistry(1099);
        Context ctx = new InitialContext();
        ctx.bind("rmi://localhost/xxx", new Test1());
        Test1 t1 = (Test1) ctx.lookup("rmi://localhost/xxx");
        System.out.println(t1);
    }
}
于 2013-05-15T06:53:28.770 に答える