首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法在JBoss 7.x中查找远程EJB

无法在JBoss 7.x中查找远程EJB
EN

Stack Overflow用户
提问于 2013-09-28 21:35:23
回答 1查看 4.2K关注 0票数 0

我正在尝试连接到部署在JBoss 7服务器中的远程EJB。通过查看从JBoss CLI获得的JNDI转储,我试图找出JNDI的名称是什么。

无论我如何尝试,我都无法查找EJB。

我认为jndi的名字应该是: java:global/XNet/api/ReceivingAPI_EJB!com.mycompany.receiving.api.ReceivingAPI_EJBRemote

下面是我正在使用的客户机:

代码语言:javascript
复制
package com.mycompany.mavenproject1;

import com.mycompany.receiving.api.ReceivingAPI_EJBRemote;
import com.mycompany.receiving.api.ReceivingAPI;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import java.util.Properties;
/**
 * Hello world!
 *
 */
public class App 
{
    public static void main( String[] args ) throws NamingException
    {
        System.out.println( "Hello World!" );


        //ReceivingAPI ejbRemote = DomainHelper.getHQApi(com.mycompany.receiving.api.ReceivingAPI.class);
        ReceivingAPI_EJBRemote ejbRemote = App.lookupRemoteStatelessCalculator();

        ejbRemote.getOpenRcvdocForSite(null, 7);
    }

//    private static ReceivingAPI_EJBRemote lookupRemoteStatelessReceiving() throws NamingException {
//        
//    }
//    
    private static ReceivingAPI_EJBRemote lookupRemoteStatelessCalculator() throws NamingException {
        final Properties jndiProperties = new Properties();
        jndiProperties.put(Context.INITIAL_CONTEXT_FACTORY, "org.jboss.naming.remote.client.InitialContextFactory");
        jndiProperties.put(Context.PROVIDER_URL,"remote://someserver.xmx.com:1199");
        // username
        jndiProperties.put(Context.SECURITY_PRINCIPAL, "mycompany1");
        // password
        jndiProperties.put(Context.SECURITY_CREDENTIALS, "<removed>");
        //final Context context = new InitialContext(jndiProperties);


        jndiProperties.put("jboss.naming.client.ejb.context", true);

        InitialContext context = new InitialContext( jndiProperties );
        // The app name is the application name of the deployed EJBs. This is typically the ear name
        // without the .ear suffix. However, the application name could be overridden in the application.xml of the
        // EJB deployment on the server.
        // Since we haven't deployed the application as a .ear, the app name for us will be an empty string
        final String appName = "XNet";
        // This is the module name of the deployed EJBs on the server. This is typically the jar name of the
        // EJB deployment, without the .jar suffix, but can be overridden via the ejb-jar.xml
        // In this example, we have deployed the EJBs in a jboss-as-ejb-remote-app.jar, so the module name is
        // jboss-as-ejb-remote-app
        final String moduleName = "api";
        // AS7 allows each deployment to have an (optional) distinct name. We haven't specified a distinct name for
        // our EJB deployment, so this is an empty string
        final String distinctName = "hq";
        // The EJB name which by default is the simple class name of the bean implementation class
        final String beanName = com.mycompany.receiving.api.ReceivingAPI.class.getSimpleName();
        // the remote view fully qualified class name
        final String viewClassName = ReceivingAPI_EJBRemote.class.getName();
        // let's do the lookup

        try {
            ReceivingAPI test1 = (ReceivingAPI)context.lookup("java:global/XNet/api/" + beanName + "_EJB!" + viewClassName);
            System.out.println("Test1 = " + test1.getClass().getName());
        } catch(Throwable t) {
          System.out.println(t);  
        }

        try {
            ReceivingAPI test = (ReceivingAPI)context.lookup("java:global/XNet/api/hq/" + beanName + "_EJB!com.mycompany.receiving.api.ReceivingAPI_EJBRemote");
            System.out.println("Test = " + test.getClass().getName());
        } catch(Throwable t) {
            System.out.println(t);
        }

        try {
            ReceivingAPI test = (ReceivingAPI)context.lookup("ejb:XNet/api/hq/" + beanName + "_EJB!com.mycompany.receiving.api.ReceivingAPI_EJBRemote");
            System.out.println("Test = " + test.getClass().getName());
        } catch(Throwable t) {
            System.out.println(t);
        }
        return (ReceivingAPI_EJBRemote) context.lookup("ejb:" + appName + "/" + moduleName + "/" + distinctName + "/" + beanName + "_EJB!" + viewClassName);
    }

}

来自上一个java类运行的输出:

代码语言:javascript
复制
Hello World!
javax.naming.NameNotFoundException: global/XNet/api/ReceivingAPI_EJB!com.mycompany.receiving.api.ReceivingAPI_EJBRemote -- service jboss.naming.context.java.jboss.exported.global.XNet.api."ReceivingAPI_EJB!com.mycompany.receiving.api.ReceivingAPI_EJBRemote"
javax.naming.NameNotFoundException: global/XNet/api/hq/ReceivingAPI_EJB!com.mycompany.receiving.api.ReceivingAPI_EJBRemote -- service jboss.naming.context.java.jboss.exported.global.XNet.api.hq."ReceivingAPI_EJB!com.mycompany.receiving.api.ReceivingAPI_EJBRemote"
javax.naming.NameNotFoundException: ejb:XNet/api/hq/ReceivingAPI_EJB!com.mycompany.receiving.api.ReceivingAPI_EJBRemote -- service jboss.naming.context.java.jboss.exported.ejb:XNet.api.hq."ReceivingAPI_EJB!com.mycompany.receiving.api.ReceivingAPI_EJBRemote"
Exception in thread "main" javax.naming.NameNotFoundException: ejb:XNet/api/hq/ReceivingAPI_EJB!com.mycompany.receiving.api.ReceivingAPI_EJBRemote -- service jboss.naming.context.java.jboss.exported.ejb:XNet.api.hq."ReceivingAPI_EJB!com.mycompany.receiving.api.ReceivingAPI_EJBRemote"
    at org.jboss.as.naming.ServiceBasedNamingStore.lookup(ServiceBasedNamingStore.java:97)
    at org.jboss.as.naming.NamingContext.lookup(NamingContext.java:178)
    at org.jboss.naming.remote.protocol.v1.Protocol$1.handleServerMessage(Protocol.java:127)
    at org.jboss.naming.remote.protocol.v1.RemoteNamingServerV1$MessageReciever$1.run(RemoteNamingServerV1.java:73)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
    at java.lang.Thread.run(Thread.java:724)

以下是JNDI命令的转储:

代码语言:javascript
复制
[jboss1@hmudev01 bin]$ ./jboss-cli.sh --connect controller=localhost:10099
[standalone@localhost:10099 /] /subsystem=naming:jndi-view
{
    "outcome" => "success",
    "result" => {
        "java: contexts" => {
            "java:global" => {
                "XNet" => {
                    "class-name" => "javax.naming.Context",
                    "children" => {
                        "api" => {
                            "class-name" => "javax.naming.Context",
                            "children" => {
                                "ReceivingAPI_EJB!com.mycompany.receiving.api.ReceivingAPI_EJBLocal" => {
                                    "class-name" => "com.mycompany.receiving.api.ReceivingAPI_EJBLocal$$$view46",
                                    "value" => "Proxy for view class: com.mycompany.receiving.api.ReceivingAPI_EJBLocal of EJB: ReceivingAPI_EJB"
                                },
                                "ReceivingAPI_EJB!com.mycompany.receiving.api.ReceivingAPI_EJBRemote" => {
                                    "class-name" => "com.sun.proxy.$Proxy272",
                                    "value" => "Proxy for remote EJB StatelessEJBLocator{appName='XNet', moduleName='api', distinctName='hq', beanName='ReceivingAPI_EJB', view='interface com.mycompany.receiving.api.ReceivingAPI_EJBRemote'}"
                                },
                            }
                        }
                    }
                }
            }
        }

        ...
    }
}
[standalone@localhost:10099 /] 

我的专家如下:

代码语言:javascript
复制
 <dependencies>
    <dependency>
        <groupId>com.mycompany.receiving</groupId>
        <artifactId>xnet-domain-receiving-client</artifactId>
        <version>2.5.0-SNAPSHOT</version>
    </dependency>
    <dependency>
        <groupId>org.jboss.as</groupId>
        <artifactId>jboss-as-naming</artifactId>
        <version>7.1.3.Final</version>
    </dependency>
    <dependency>
        <groupId>org.jboss.marshalling</groupId>
        <artifactId>jboss-marshalling-river</artifactId>
        <version>1.4.0.Final</version>
    </dependency>
    <dependency>
        <groupId>org.jboss.client</groupId>
        <artifactId>jbossall-client</artifactId>
        <version>5.0.0.GA</version>
    </dependency>
    <dependency>
        <groupId>org.jboss.spec.javax.ejb</groupId>
        <artifactId>jboss-ejb-api_3.1_spec</artifactId>
        <version>1.0.2.Final</version>
    </dependency>
</dependencies>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-29 04:05:54

在上面的评论中,里斯认为jndi字符串看起来“时髦”是对的。我试过了我想的一切。这是对我的情况起作用的东西。

JNDI需要如下所示:

代码语言:javascript
复制
XNet/api/ReceivingAPI_EJB!com.mycompany.receiving.api.ReceivingAPI_EJBRemote

我还必须在问题中所示的其他部分中添加一个依赖项:

代码语言:javascript
复制
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-api</artifactId>
        <version>7.0</version>
    </dependency>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19071912

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档