当从Tomcat连接到JBoss 7.1.1中的EJB时,JNDI查找失败

时间:2023-01-19 10:40:44

There are several ways to lookup an EJB

查找EJB有几种方法

I can connect to my ejb server by using this lookup, but only when I use a ConsoleClient.

通过使用此查找,我可以连接到ejb服务器,但只有在使用安慰符时。

 "ejb:" + appName + "/" + moduleName + "/" + distinctName + "/" + beanName + "!" + viewClassName)

When I try this lookup on a tomcat application server (spring mvc project), this lookup won't work. Jboss responds with a ClassNotFoundException.

当我在tomcat应用服务器(spring mvc项目)上尝试这种查找时,这种查找将不起作用。Jboss以ClassNotFoundException回应。

I assume there has to be another jndi lookup name? Unfortunately I couldn't find any helpful information on the web.

我认为必须有另一个jndi查找名?不幸的是,我在网上找不到任何有用的信息。

Edit:

编辑:

my controller

我的控制器

@RequestMapping(value = "login", method = RequestMethod.POST)
public LoginBeanRemote logIn(){

    final Hashtable jndiProperties = new Hashtable();
    jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");

    Context context = null;
    try {
        context = new InitialContext(jndiProperties);
    } catch (NamingException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }


    final String appName = "foo_business";
    final String moduleName = "foo_business";
    final String distinctName = "";
    final String beanName = "LoginBean";

    // gesucht ist die klasse vom jboss , nicht die im frontend
    final String viewClassName = "foo.business.login.LoginBeanRemote";
    System.out.println("Looking EJB via JNDI ");
    System.out.println("ejb:" + appName + "/" + moduleName + "/" + distinctName + "/" + beanName + "!" + viewClassName);

    try {
        return (LoginBeanRemote) context.lookup("ejb:" + appName + "/" + moduleName + "/" + distinctName + "/" + beanName + "!" + viewClassName);
    } catch (NamingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return null;


}

I put a jboss-ejb-client.properties file in my spring projects root folder

我把jboss-ejb-client。我的spring项目根文件夹中的属性文件

endpoint.name=foo_business //project name
remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false
remote.connections=default
remote.connection.default.host=127.0.0.1
remote.connection.default.port=4447
remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false

name=foo_business //项目名称remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false remote。连接=默认remote.connection.default.host = 127.0.0.1 remote.connection.default.port = 4447 remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS = false

first part of my LoginBean (which is deployed as a JAR file in my JBOSS;

LoginBean的第一部分(在JBOSS中作为JAR文件部署;

@Stateful
@Remote(LoginBeanRemote.class)
public class LoginBean implements LoginBeanRemote {

Generated EJB lookup name:

生成的EJB查找名称:

ejb:foo_business/foo_business//LoginBean!foo.business.login.LoginBeanRemote

Error:

错误:

javax.naming.NamingException: Could not load ejb proxy class recc.business.login.LoginBeanRemote [Root exception is java.lang.ClassNotFoundException: recc.business.login.LoginBeanRemote]
at org.jboss.ejb.client.naming.ejb.EjbNamingContext.createEjbProxy(EjbNamingContext.java:108)
at org.jboss.ejb.client.naming.ejb.EjbNamingContext.lookup(EjbNamingContext.java:96)
at javax.naming.InitialContext.lookup(Unknown Source)
at recc.frontend.controller.UserController.logIn(UserController.java:161)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:213)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:166)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: recc.business.login.LoginBeanRemote
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1676)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1521)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at org.jboss.ejb.client.naming.ejb.EjbNamingContext.createEjbProxy(EjbNamingContext.java:106)
    ... 36 foo

EDIT:

编辑:

I added the ejb-project.jar to my classpath. Also I added the ejb package to my spring project and I put the LoginBeanRemote there.

我添加了ejb项目。罐类路径。我还将ejb包添加到spring项目中,并将LoginBeanRemote放在那里。

So far the Project does not respond with an ClassNotFound error. When I debug the created LoginBeanRemote it contails:

到目前为止,该项目没有响应ClassNotFound错误。当我调试创建的LoginBeanRemote时,它会显示如下内容:

Proxy for remote EJB StatelessEJBLocator{appName='foo_business', moduleName='foo_business', distinctName='', beanName='LoginBean', view='interface foo.business.login.LoginBeanRemote'}

There is no exception during lookup.

查找过程中没有异常。

    LoginBeanRemote remote = (LoginBeanRemote) context.lookup("ejb:"
                + appName + "/" + moduleName + "/" + distinctName + "/"
                + beanName + "!" + viewClassName);
        return remote;

When I try to call a function of the bean, it will cause an exception

当我尝试调用bean的函数时,它会引起异常

System.out.println(remote.helloBean());

Full Message:

完整的信息:

   Aug 30, 2013 11:26:21 AM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet [appServlet] in context with path [/test] threw exception [Request processing failed; nested exception is java.lang.IllegalStateException: No EJB receiver available for handling [appName:foo_business,modulename:foo_business,distinctname:] combination for invocation context org.jboss.ejb.client.EJBClientInvocationContext@c7c0866] with root cause
java.lang.IllegalStateException: No EJB receiver available for handling [appName:foo_business,modulename:foo_business,distinctname:] combination for invocation context org.jboss.ejb.client.EJBClientInvocationContext@c7c0866
    at org.jboss.ejb.client.EJBClientContext.requireEJBReceiver(EJBClientContext.java:584)
    at org.jboss.ejb.client.ReceiverInterceptor.handleInvocation(ReceiverInterceptor.java:119)
    at org.jboss.ejb.client.EJBClientInvocationContext.sendRequest(EJBClientInvocationContext.java:181)
    at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:136)
    at org.jboss.ejb.client.EJBInvocationHandler.doInvoke(EJBInvocationHandler.java:121)
    at org.jboss.ejb.client.EJBInvocationHandler.invoke(EJBInvocationHandler.java:104)
    at com.sun.proxy.$Proxy10.helloBean(Unknown Source)
    at foo.frontend.controller.UserController.logIn(UserController.java:167)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:213)
    at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126)
    at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617)
    at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578)
    at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:304)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:240)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:164)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:462)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:562)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:395)
    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:250)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:188)
    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:166)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

EDIT: I just shut down the JBoss and the same error appeared. I don't think there is any connection with the Jboss, at all.

编辑:我刚刚关闭了JBoss,同样的错误出现了。我认为和Jboss一点关系都没有。

Edit:

编辑:

I just updated my code:

我刚刚更新了我的代码:

    InitialContext context = null;
    try {
        final Properties initialContextProperties = new Properties();

        initialContextProperties.put(Context.INITIAL_CONTEXT_FACTORY,
                "org.jboss.naming.remote.client.InitialContextFactory");

        initialContextProperties.put(Context.PROVIDER_URL,
                "remote://localhost:4447");

        initialContextProperties.put(Context.URL_PKG_PREFIXES,
                "org.jboss.ejb.client.naming");

        initialContextProperties
                .put("jboss.naming.client.connect.options.org.xnio.Options.SASL_POLICY_NOPLAINTEXT",
                        "false");

        initialContextProperties.put(Context.SECURITY_PRINCIPAL, "myapplicationrealmuser");
        initialContextProperties
                .put(Context.SECURITY_CREDENTIALS, "mypass");

        EJBClientConfiguration cc = new PropertiesBasedEJBClientConfiguration(
                initialContextProperties);
        ContextSelector<EJBClientContext> selector = new ConfigBasedEJBClientContextSelector(
                cc);
        EJBClientContext.setSelector(selector);

        context = new InitialContext(initialContextProperties);
    } catch (NamingException e1) {
        // TODO Auto-generated catch block
        e1.printStackTrace();
    }


    System.out.println("Looking EJB via JNDI ");

    try {

        LoginBeanRemote remote = (LoginBeanRemote) context
                .lookup("java:global/foo_business/LoginBean!foo.business.login.LoginBeanRemote");
        System.out.println(remote.helloBean());
    } catch (NamingException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return null;

This will return an NameNotFoundException during lookup. I've tried all kinds of lookup names but it won't work like this. Am I missing some configuration?

这将在查找期间返回NameNotFoundException。我尝试过各种查找名称,但它不会这样工作。我是否漏掉了一些配置?

error:

错误:

javax.naming.NameNotFoundException: global/foo_business/LoginBean!foo.business.login.LoginBeanRemote -- service jboss.naming.context.java.jboss.exported.global.foo_business."LoginBean!foo.business.login.LoginBeanRemote"
    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(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

JBOSS Console JNDI Informations:

JBOSS控制台JNDI信息:

当从Tomcat连接到JBoss 7.1.1中的EJB时,JNDI查找失败

Edit:

编辑:

I deployed the EJB as a EAR file, still receiving the same exception

我将EJB部署为EAR文件,仍然接收相同的异常

javax.naming.NameNotFoundException: global/foo_business_ear-ear/foo_business_ear-ejb/LoginBean!foo.business.login.LoginBeanRemote -- service jboss.naming.context.java.jboss.exported.global.foo_business_ear-ear.foo_business_ear-ejb."LoginBean!foo.business.login.LoginBeanRemote"
    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(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

ERROR: org.jboss.naming.remote.protocol.v1.RemoteNamingStoreV1 - Channel end notification received, closing channel Channel ID ef1b671f (outbound) of Remoting connection 6af39445 to localhost/127.0.0.1:4447

2 个解决方案

#1


6  

Tomcat as the client has to be considered as a client which does not run in the same application server container. So you have to package all relevant classes/interfaces into the .war file which is deployed on Tomcat.

作为客户机的Tomcat必须被视为不运行在同一个应用服务器容器中的客户机。因此,您必须将所有相关的类/接口打包到部署在Tomcat上的.war文件中。

Looking at the stack trace: The JBoss server does respond, it's the JBoss client who reports that a class is missing:

查看堆栈跟踪:JBoss服务器确实响应,是JBoss客户机报告类丢失:

at org.jboss.ejb.client.naming.ejb.EjbNamingContext.createEjbProxy

在org.jboss.ejb.client.naming.ejb.EjbNamingContext.createEjbProxy

The actual error (missing class) is packaged in a NamingException.

实际的错误(缺失类)被打包到NamingException中。

So you have to put the relevant classes into the .war file for Tomcat: It's probably your remote interface recc.business.login.LoginBeanRemote.

因此,您必须将相关类放入到.war文件中,用于Tomcat:它可能是您的远程接口recc.business.login.LoginBeanRemote。

I always have EJB classes (implementation) and their interfaces in two separate packages, and the EJB client gets a .jar file which just contains the interfaces (and possibly exceptions). So a .jar consisting of interfaces and possibly exceptions gets packaged into the .war for the client.

我总是将EJB类(实现)和它们的接口放在两个单独的包中,EJB客户机获得一个.jar文件,该文件只包含接口(可能还有异常)。因此,由接口和可能的异常组成的.jar被打包到客户端的.war中。


Generally speaking these items have to be checked, if a stand-alone client fails to work

一般来说,如果独立客户端无法工作,则必须检查这些项

  • Is jboss-client.jar in the class path?
  • jboss-client。jar在类路径中?
  • Are the remote interfaces in the class path?
  • 类路径中的远程接口吗?
  • Are the properties for the InitialContext complete?
  • InitialContext的属性是否完整?
  • Is the JNDI name correct? And is that JNDI name really visible from the client?
  • JNDI名称是否正确?JNDI名称是否真的可以从客户端看到?

Appendix: Properties for InitialContext:

附录:InitialContext属性:

    final Properties initialContextProperties = new Properties();

    initialContextProperties.put(Context.INITIAL_CONTEXT_FACTORY,
            "org.jboss.naming.remote.client.InitialContextFactory");

    initialContextProperties.put(Context.PROVIDER_URL,
            "remote://localhost:4447");

    initialContextProperties.put(Context.URL_PKG_PREFIXES,
            "org.jboss.ejb.client.naming");

    // See .../jboss-7/standalone/configuration/application-users.properties
    initialContextProperties.put(Context.SECURITY_PRINCIPAL, "user");
    initialContextProperties.put(Context.SECURITY_CREDENTIALS, "password");

I have tested these settings, and it's confirmed by JBoss AS7 JNDI & EJB 3.1 Naming changes. There is no need neither for jndi.properties nor for jboss-ejb-client.properties.

我已经对这些设置进行了测试,JBoss AS7 JNDI & EJB 3.1命名更改确认了这些设置。不需要jndi。也不是为jboss-ejb-client.properties属性。

Related: JBoss AS7 JNDI reference

相关:JBoss AS7 JNDI引用

#2


0  

I saw you have mentioned @Stateful as the Annotation to your class - LoginBeanRemote.

我看到您提到了@Stateful作为类的注释——LoginBeanRemote。

However, you are trying to do a loopkup as for Stateless class - ejb:foo_business/foo_business//LoginBean!foo.business.login.LoginBeanRemote

但是,您正在尝试对无状态类进行环卡——ejb:foo_business/foo_business//LoginBean

Could you try putting lookup as like this - ejb:foo_business/foo_business//LoginBean!foo.business.login.LoginBeanRemote**?stateful**

您能试着像这样进行查找吗——ejb:foo_business/foo_business//LoginBean

This has been explained here

这里已经解释过了。

#1


6  

Tomcat as the client has to be considered as a client which does not run in the same application server container. So you have to package all relevant classes/interfaces into the .war file which is deployed on Tomcat.

作为客户机的Tomcat必须被视为不运行在同一个应用服务器容器中的客户机。因此,您必须将所有相关的类/接口打包到部署在Tomcat上的.war文件中。

Looking at the stack trace: The JBoss server does respond, it's the JBoss client who reports that a class is missing:

查看堆栈跟踪:JBoss服务器确实响应,是JBoss客户机报告类丢失:

at org.jboss.ejb.client.naming.ejb.EjbNamingContext.createEjbProxy

在org.jboss.ejb.client.naming.ejb.EjbNamingContext.createEjbProxy

The actual error (missing class) is packaged in a NamingException.

实际的错误(缺失类)被打包到NamingException中。

So you have to put the relevant classes into the .war file for Tomcat: It's probably your remote interface recc.business.login.LoginBeanRemote.

因此,您必须将相关类放入到.war文件中,用于Tomcat:它可能是您的远程接口recc.business.login.LoginBeanRemote。

I always have EJB classes (implementation) and their interfaces in two separate packages, and the EJB client gets a .jar file which just contains the interfaces (and possibly exceptions). So a .jar consisting of interfaces and possibly exceptions gets packaged into the .war for the client.

我总是将EJB类(实现)和它们的接口放在两个单独的包中,EJB客户机获得一个.jar文件,该文件只包含接口(可能还有异常)。因此,由接口和可能的异常组成的.jar被打包到客户端的.war中。


Generally speaking these items have to be checked, if a stand-alone client fails to work

一般来说,如果独立客户端无法工作,则必须检查这些项

  • Is jboss-client.jar in the class path?
  • jboss-client。jar在类路径中?
  • Are the remote interfaces in the class path?
  • 类路径中的远程接口吗?
  • Are the properties for the InitialContext complete?
  • InitialContext的属性是否完整?
  • Is the JNDI name correct? And is that JNDI name really visible from the client?
  • JNDI名称是否正确?JNDI名称是否真的可以从客户端看到?

Appendix: Properties for InitialContext:

附录:InitialContext属性:

    final Properties initialContextProperties = new Properties();

    initialContextProperties.put(Context.INITIAL_CONTEXT_FACTORY,
            "org.jboss.naming.remote.client.InitialContextFactory");

    initialContextProperties.put(Context.PROVIDER_URL,
            "remote://localhost:4447");

    initialContextProperties.put(Context.URL_PKG_PREFIXES,
            "org.jboss.ejb.client.naming");

    // See .../jboss-7/standalone/configuration/application-users.properties
    initialContextProperties.put(Context.SECURITY_PRINCIPAL, "user");
    initialContextProperties.put(Context.SECURITY_CREDENTIALS, "password");

I have tested these settings, and it's confirmed by JBoss AS7 JNDI & EJB 3.1 Naming changes. There is no need neither for jndi.properties nor for jboss-ejb-client.properties.

我已经对这些设置进行了测试,JBoss AS7 JNDI & EJB 3.1命名更改确认了这些设置。不需要jndi。也不是为jboss-ejb-client.properties属性。

Related: JBoss AS7 JNDI reference

相关:JBoss AS7 JNDI引用

#2


0  

I saw you have mentioned @Stateful as the Annotation to your class - LoginBeanRemote.

我看到您提到了@Stateful作为类的注释——LoginBeanRemote。

However, you are trying to do a loopkup as for Stateless class - ejb:foo_business/foo_business//LoginBean!foo.business.login.LoginBeanRemote

但是,您正在尝试对无状态类进行环卡——ejb:foo_business/foo_business//LoginBean

Could you try putting lookup as like this - ejb:foo_business/foo_business//LoginBean!foo.business.login.LoginBeanRemote**?stateful**

您能试着像这样进行查找吗——ejb:foo_business/foo_business//LoginBean

This has been explained here

这里已经解释过了。