名称 [HelloBeanName] 未绑定在此上下文中。找不到 [HelloBeanName]
Name [HelloBeanName] is not bound in this Context. Unable to find [HelloBeanName]
我是 ejb 的新手,我正在尝试 运行 简单的 ejb 应用程序。我的应用程序包含 classes Hello(远程接口)、HelloBean(class实现 Hello 接口)和 HelloClient(我 运行)。程序应该写入控制台 "Hello world",但我总是得到错误“Name [HelloBeanName] is not bound in this Context. Unable to find [HelloBeanName]
”...这是 3 classes
你好接口:
package vezba2;
public interface Hello {
public String hello();
}
你好豆:
package vezba2;
import javax.ejb.Remote;
import javax.ejb.Stateless;
@Stateless(name="HelloBeanName")
@Remote(Hello.class)
public class HelloBean implements Hello{
@Override
public String hello() {
// TODO Auto-generated method stub
System.out.println("hello()");
return "Hello,World!";
}
}
你好客户:
package vezba2;
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class HelloClient {
public static void main(String[] args) throws NamingException {
// TODO Auto-generated method stub
System.setProperty(Context.INITIAL_CONTEXT_FACTORY,
"org.apache.naming.java.javaURLContextFactory");
//i first didn't have system.setProperty and i was getting error:Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial//
Context ctx = new InitialContext();
Hello hello=(Hello) ctx.lookup("HelloBeanName");
System.out.println(hello.hello());
}
}
我正在使用 java8,也使用 ApacheTomee plus 1.7.0 作为服务器,在服务器文件夹中我有文件 server.xml,context.xml 文件,tomcat-users.xml,web.xml 文件,在我的项目中我有 ejb-jar.xml,其中 none 我没有编辑和更改..我也 运行 这个在 Eclipse 中绿色箭头上带有 "Run HelloClient" 的应用程序。(当我启动服务器时,它不会在服务器上提供 运行 这个...)
是否有人知道这个问题我怎样才能让我的程序工作?
我应该编辑 xml 文件吗?我应该尝试 运行 在服务器上我的应用程序吗?(不知何故)...
是否还有一些很好的详细文献说明如何到 运行,并使用 ejb?提前致谢。`
(P.S。当我把它放在 HelloClient 中时:
System.setProperty(Context.INITIAL_CONTEXT_FACTORY,"org.apache.openejb.client.RemoteInitialContextFactory"); System.setProperty(Context.PROVIDER_URL,"http://localhost:8080/tomee/ejb");
Context ctx = new InitialContext();
Hello hello=(Hello) ctx.lookup("HelloBeanName");
System.out.println(hello.hello());
我收到以下错误:
RequestFailed{server=http://localhost:8080/tomee/ejb} JNDI_LOOKUPnull:/HelloBeanName {error=Cannot open input stream to server: }
Exception in thread "main" org.apache.openejb.client.ClientRuntimeException: Invalid response from server: -1
at org.apache.openejb.client.JNDIContext.lookup(JNDIContext.java:297)
at javax.naming.InitialContext.lookup(InitialContext.java:417)
at vezba2.HelloClient.main(HelloClient.java:18)
现在我想我连接了 Apache 服务器和 运行s HelloClient 的程序 ..)
如果您的主程序不在您需要指定如何连接到服务器的容器中。对于 tomee,那里解释了远程上下文工厂 http://tomee.apache.org/advanced/client/jndi.html
旁注:自版本 1.7.4 和 7.x 起,远程处理需要更多配置以避免 0-day 漏洞。参见 http://tomee.apache.org/security/tomee.html
我是 ejb 的新手,我正在尝试 运行 简单的 ejb 应用程序。我的应用程序包含 classes Hello(远程接口)、HelloBean(class实现 Hello 接口)和 HelloClient(我 运行)。程序应该写入控制台 "Hello world",但我总是得到错误“Name [HelloBeanName] is not bound in this Context. Unable to find [HelloBeanName]
”...这是 3 classes
你好接口:
package vezba2;
public interface Hello {
public String hello();
}
你好豆:
package vezba2;
import javax.ejb.Remote;
import javax.ejb.Stateless;
@Stateless(name="HelloBeanName")
@Remote(Hello.class)
public class HelloBean implements Hello{
@Override
public String hello() {
// TODO Auto-generated method stub
System.out.println("hello()");
return "Hello,World!";
}
}
你好客户:
package vezba2;
import java.util.Properties;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
public class HelloClient {
public static void main(String[] args) throws NamingException {
// TODO Auto-generated method stub
System.setProperty(Context.INITIAL_CONTEXT_FACTORY,
"org.apache.naming.java.javaURLContextFactory");
//i first didn't have system.setProperty and i was getting error:Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file: java.naming.factory.initial//
Context ctx = new InitialContext();
Hello hello=(Hello) ctx.lookup("HelloBeanName");
System.out.println(hello.hello());
}
}
我正在使用 java8,也使用 ApacheTomee plus 1.7.0 作为服务器,在服务器文件夹中我有文件 server.xml,context.xml 文件,tomcat-users.xml,web.xml 文件,在我的项目中我有 ejb-jar.xml,其中 none 我没有编辑和更改..我也 运行 这个在 Eclipse 中绿色箭头上带有 "Run HelloClient" 的应用程序。(当我启动服务器时,它不会在服务器上提供 运行 这个...)
是否有人知道这个问题我怎样才能让我的程序工作?
我应该编辑 xml 文件吗?我应该尝试 运行 在服务器上我的应用程序吗?(不知何故)...
是否还有一些很好的详细文献说明如何到 运行,并使用 ejb?提前致谢。`
(P.S。当我把它放在 HelloClient 中时:
System.setProperty(Context.INITIAL_CONTEXT_FACTORY,"org.apache.openejb.client.RemoteInitialContextFactory"); System.setProperty(Context.PROVIDER_URL,"http://localhost:8080/tomee/ejb");
Context ctx = new InitialContext();
Hello hello=(Hello) ctx.lookup("HelloBeanName");
System.out.println(hello.hello());
我收到以下错误:
RequestFailed{server=http://localhost:8080/tomee/ejb} JNDI_LOOKUPnull:/HelloBeanName {error=Cannot open input stream to server: }
Exception in thread "main" org.apache.openejb.client.ClientRuntimeException: Invalid response from server: -1
at org.apache.openejb.client.JNDIContext.lookup(JNDIContext.java:297)
at javax.naming.InitialContext.lookup(InitialContext.java:417)
at vezba2.HelloClient.main(HelloClient.java:18)
现在我想我连接了 Apache 服务器和 运行s HelloClient 的程序 ..)
如果您的主程序不在您需要指定如何连接到服务器的容器中。对于 tomee,那里解释了远程上下文工厂 http://tomee.apache.org/advanced/client/jndi.html
旁注:自版本 1.7.4 和 7.x 起,远程处理需要更多配置以避免 0-day 漏洞。参见 http://tomee.apache.org/security/tomee.html