web-dev-qa-db-ja.com

JNDI「クラスをインスタンス化できません:org.jboss.naming.remote.client.InitialContextFactory」

EJBにJBossサーバーを使用していて、セッションBeanの参照を取得するためにコンソールアプリにJNDIが必要です。コンソールアプリのコードは次のようになります。

import Java.util.Properties;

import javax.naming.InitialContext;
import javax.naming.NamingException;


public class Program {

    public static void main(String[] args) throws NamingException {
        // TODO Auto-generated method stub
        Properties pr = new Properties();
        pr.put(InitialContext.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");
        pr.put(InitialContext.PROVIDER_URL,"remote://localhost:4447");
        InitialContext ic = new InitialContext(pr);

    }

}

アプリケーションを実行すると例外が発生する

Exception in thread "main" javax.naming.NoInitialContextException: Cannot instantiate class: org.jboss.naming.remote.client.InitialContextFactory [Root exception is Java.lang.ClassNotFoundException: org.jboss.naming.remote.client.InitialContextFactory]
    at javax.naming.spi.NamingManager.getInitialContext(Unknown Source)
    at javax.naming.InitialContext.getDefaultInitCtx(Unknown Source)
    at javax.naming.InitialContext.init(Unknown Source)
    at javax.naming.InitialContext.<init>(Unknown Source)
    at Program.main(Program.Java:14)
Caused by: Java.lang.ClassNotFoundException: org.jboss.naming.remote.client.InitialContextFactory
    at Java.net.URLClassLoader$1.run(Unknown Source)
    at Java.net.URLClassLoader$1.run(Unknown Source)
    at Java.security.AccessController.doPrivileged(Native Method)
    at Java.net.URLClassLoader.findClass(Unknown Source)
    at Java.lang.ClassLoader.loadClass(Unknown Source)
    at Sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at Java.lang.ClassLoader.loadClass(Unknown Source)
    at Java.lang.Class.forName0(Native Method)
    at Java.lang.Class.forName(Unknown Source)
    at com.Sun.naming.internal.VersionHelper12.loadClass(Unknown Source)
    ... 5 more
7
user3188370

次のコンテキストを使用して接続できます。私はこれを設定するために試みてテストしました。

import Java.util.Properties;
import javax.naming.Context;
import javax.naming.NamingException;


public class Program {

    public static void main(String[] args) throws NamingException {
      Properties jndiProps = new Properties();
    jndiProps.put(Context.INITIAL_CONTEXT_FACTORY,         
    "org.jboss.naming.remote.client.InitialContextFactory");
    jndiProps.put(Context.PROVIDER_URL,"remote://localhost:4447");
    jndiProps.put(Context.SECURITY_PRINCIPAL, "testuser");
    jndiProps.put(Context.SECURITY_CREDENTIALS, "testpassword");
    jndiProps.put("jboss.naming.client.ejb.context", true);
    Context ctx = new InitialContext(jndiProps);
    }

}

次に、このエラーが発生しました

JBREM000200: Remote connection failed: javax.security.sasl.SaslException: 
Authentication failed: all available authentication mechanisms failed - Could 
not register a EJB receiver for connection to remote://localhost:4447  
Java.lang.RuntimeException: javax.security.sasl.SaslException: Authentication 
failed: all available authentication mechanisms failed.

次に、add-user.shを使用してユーザーを追加しました。

enter image description here

Successful Handshakeメッセージが来ました。

2
Vinayak Pingale

上記のエラーを克服するには、2つの点に注意を払う必要があります。
まず、classpathjboss-client.jarが必要です。
2番目に、使用しているJbossのバージョンによると、プロバイダーのURLを変更する必要があります。

JBossAS 5の場合、環境で次のプロパティを設定する必要があります

env.put(Context.INITIAL_CONTEXT_FACTORY,"org.jboss.naming.NamingContextFactory");
env.put(Context.URL_PKG_PREFIXES,"org.jboss.naming:org.jnp.interfaces");
env.put(Context.PROVIDER_URL, "jnp://127.0.0.1:1099");

JBossAS 7の場合、環境で次のプロパティを設定する必要があります

env.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");
env.put(Context.PROVIDER_URL, System.getProperty(Context.PROVIDER_URL, "remote://localhost:4447"));
env.put(Context.SECURITY_PRINCIPAL, System.getProperty("username", DEFAULT_USERNAME));
env.put(Context.SECURITY_CREDENTIALS, System.getProperty("password", DEFAULT_PASSWORD));
11
Jagdish Chandra

ライブラリにjboss-client.jarとjboss-ejb3-common-client.jarを追加する必要があるかもしれません

2
gredezcici

依存関係が必要です:

<dependency>
    <groupId>org.jboss</groupId>
    <artifactId>jboss-remote-naming</artifactId>
</dependency>

https://mvnrepository.com/artifact/org.jboss/jboss-remote-naming/

WildFlyの場合は、org.wildfly.naming.client.WildFlyInitialContextFactoryフォームを使用できます。

<dependency>
    <groupId>org.wildfly</groupId>
    <artifactId>wildfly-naming-client</artifactId>
</dependency>

https://mvnrepository.com/artifact/org.wildfly/wildfly-naming-client

インポートにはbomファイルを使用できます。

<dependency>
    <groupId>org.wildfly</groupId>
    <artifactId>wildfly-ejb-client-bom</artifactId>
    <type>pom</type>
</dependency>

https://mvnrepository.com/artifact/org.wildfly/wildfly-ejb-client-bom

0
Mirimas