无法实例化类:org.jnp.interfaces.NamingContextFactory [英] Cannot instantiate class: org.jnp.interfaces.NamingContextFactory

查看:3071
本文介绍了无法实例化类:org.jnp.interfaces.NamingContextFactory的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的代码:

SpeakerRemote.java

SpeakerRemote.java

package test;
import javax.ejb.Remote;

@Remote
public interface SpeakerRemote {
    String sayAPhrase( String phrase );
}






SpeakerBean.java




SpeakerBean.java

package test;
import javax.ejb.Stateless;

@Stateless
public class SpeakerBean implements SpeakerRemote {
    @Override
    public String sayAPhrase( String phrase ){
         return "Speaker Service:\t" + phrase;
    }
}






我用maven组装了在这里我向您展示调用的部分:


I assembled it with maven. Here I show you invoking part:

Invoker.java

Invoker.java

import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import java.util.Properties;

public class Invoker {
    public static InitialContext getContext() throws NamingException {
        final Properties properties = new Properties();
        properties.put( Context.INITIAL_CONTEXT_FACTORY,
            "org.jnp.interfaces.NamingContextFactory" );
        properties.put( Context.PROVIDER_URL, "jnp://127.0.0.1:1099" );
        return new InitialContext( properties );
    }
}






Main.java


Main.java

import test.SpeakerRemote;
import javax.naming.InitialContext;
import javax.naming.NamingException;

public class Main {
    public static void main( String... args ) {
        try {
            InitialContext context = Invoker.getContext();
            SpeakerRemote speaker = ( SpeakerRemote ) context.lookup( "SpeakerBean/remote" );
            System.out.println( speaker.sayAPhrase( "Hello, World!" ) );
        }
        catch ( NamingException e ) {
            e.printStackTrace();
        }
    }
}

这个例外:

无法实例化类:org.jnp.interfaces.NamingContextFactory [根异常是java.lang.ClassNotFoundException:org.jnp.interfaces.NamingContextFactory]

"Cannot instantiate class: org.jnp.interfaces.NamingContextFactory [Root exception is java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory]"

请帮助我,因为我真的需要了解它!

Please help me, because I really need to understand it!

PS我使用jboss 7.1.1 Final + EJB 3.1 + Maven 3.1.1 + Java 1.7 + Win7

P.S. I use jboss 7.1.1 Final + EJB 3.1 + Maven 3.1.1 + Java 1.7 + Win7

推荐答案

7.1

通过JNDI进行远程EJB调用 - EJB客户端API或远程命名项目

从$ JBOSS_HOME / bin / client添加到classpath jboss-client.jar

Add to classpath jboss-client.jar from $JBOSS_HOME/bin/client

Properties properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");
properties.put(Context.PROVIDER_URL,"remote://127.0.0.1:4447");
// username
properties.put(Context.SECURITY_PRINCIPAL, "user");
// password
properties.put(Context.SECURITY_CREDENTIALS, "password");
// This is an important property to set if you want to do EJB invocations via the remote-naming project
properties.put("jboss.naming.client.ejb.context", true);
// create a context passing these properties
return new InitialContext(properties);



Main.java



Main.java

// lookup the bean    
SpeakerRemote speaker = (SpeakerRemote) context.lookup("myapp/myejbmodule/SpeakerBean!test.SpeakerRemote);
System.out.println( speaker.sayAPhrase( "Hello, World!" ) )



其他方法:使用JNDI远程客户端的EJB调用



添加到classpath文件jboss-ejb-client.properties

Other approach: EJB invocations from a remote client using JNDI

Add to classpath file jboss-ejb-client.properties

remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
#if you test on local machine
remote.connection.default.connect.options.org.xnio.Options.SASL_DISALLOWED_MECHANISMS=JBOSS-LOCAL-USER

remote.connections=default
remote.connection.default.host=127.0.0.1
remote.connection.default.port = 4447
remote.connection.default.username=user
remote.connection.default.password=password



Invoker.java



Invoker.java

final Hashtable<String, String> props = new Hashtable<String, String>();
props.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
return new InitialContext(props);



Main.java



Main.java

SpeakerRemote speaker = (SpeakerRemote) context.lookup("ejb:myapp/myejbmodule/SpeakerBean!test.SpeakerRemote);
System.out.println( speaker.sayAPhrase( "Hello, World!" ) )

这篇关于无法实例化类:org.jnp.interfaces.NamingContextFactory的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆