你确认你的文件是Hello.java,没错写成hello.java ??
解决方案 »
- 初学手机游戏编程
- 用JBulier布置好控件后为什么怎么也看不到?
- struts1.2 spring 2.5 hibetnate3.1 oracle数据库反向生成,运行报错
- Struts+Hibernate+Spring整合问题
- JSTL和struts标签那一个使用得更广,频率更高
- tomcat问题
- 谁知道怎么把easy struts加到jbuilder里,谢谢!!!!!!!!!!!!
- 编译Session Bean出现问题,请帮忙解答!
- 是因为VAJ烂还是JAVA 本身的问题,请进来看看用VAJ 自动生成的代码
- 你们一般怎么debug EJB的组件?如果在jb7里运行一个ejb的容器好象太慢了.有什么好方法吗?
- 为什么有这样的错误,请高手指点迷津
- 请教个问题 WTC
原因有几点:
1. EJB布时出错
2. EJB没有定义为远程接口,只定义了本地接口
3. InitialContext();参数有错
4. 应用服务器还没起动(JBoss)
就是 Lookup 时没有找到 Hello 对象,好象跟 JNDI 有关。
是不是我少了什么重要的步骤?我的步骤时这样的:
1 建立目录:
..\hello\ejb
Hello.java //定义 Remote 接口
HelloHome.java //定义 Home 接口
HelloBean.java //实现 ejb
..\Meta_Inf
ejb-jar.xml
其中每个文件的内容是这样:
//Hello.java// Remote interface for Enterprise Bean: Hellopackage hello.ejb;public interface Hello extends javax.ejb.EJBObject
{
public String hello() throws java.rmi.RemoteException;
}//HelloHome.java //Home interface for Enterprise Bean: Hellopackage hello.ejb;public interface HelloHome extends javax.ejb.EJBHome
{
//Creates a default instance of Session Bean: Hello
public Hello create() throws
javax.ejb.CreateException,
java.rmi.RemoteException;
}//HelloBean.java
//Bean implementation class for Enterprise Bean: Hellopackage hello.ejb;public class HelloBean implements javax.ejb.SessionBean
{
private javax.ejb.SessionContext mySessionCtx; //getSessionContext
public javax.ejb.SessionContext getSessionContext()
{
return mySessionCtx;
} //setSessionContext
public void setSessionContext(javax.ejb.SessionContext ctx)
{
mySessionCtx = ctx;
} //ejbActivate
public void ejbActivate() { } //ejbCreate
public void ejbCreate() throws javax.ejb.CreateException { } //ejbPassivate
public void ejbPassivate() { } //ejbRemove
public void ejbRemove() { } // Remote interface
public String hello()
{
return "Hello, I am a ejb Bean ! Time " + new java.util.Date();
}
}//ejb-jar.xml<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 1.1//EN" "http://java.sun.com/j2ee/dtds/ejb-jar_1_1.dtd">
<ejb-jar id="ejb-jar_ID">
<display-name>helloEJB</display-name>
<enterprise-beans>
<session id="Hello">
<ejb-name>Hello</ejb-name>
<home>hello.ejb.HelloHome</home>
<remote>hello.ejb.Hello</remote>
<ejb-class>hello.ejb.HelloBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>
</enterprise-beans>
</ejb-jar>2 我将 3 个 .java 文件成功编译了。3 将上面2个目录打包成 Hello.jar 放到 JBoss 的 Deploy 目录下面。4 在客户端:
将 上面服务器端的 2个文件(Hello.java, HelloHome.java)复制过来
再建立文件 HelloClient.java5 编译 HelloClient.java
编译成功
运行,
出错:javax.naming.NameNotFoundException: Hello not bound 不知道我是哪里少了什么步骤?
我看你的错误有以下几个方面的原因:
1、EJB没部署成功!
2、应用服务器没启动!
3、你访问EJB的名字是不是写错拉!
..\server\all\deploy\jbossha-httpsession.sar\ClusteredHttpSessionEB.jar\META-INF有 jboss.xml 文件,里面有这么一段:
<ejb-name>ClusteredHTTPSession</ejb-name>
<jndi-name>clustering/HTTPSession</jndi-name>
<local-jndi-name>clustering/LocalHTTPSession</local-jndi-name>
<configuration-name>Clustered in-memory CMP EntityBean</configuration-name>这里有几个 jndi -name ,应该怎么改啊?
我刚开始学,我是照着例子作的。
<?xml version="1.0" encoding="UTF-8"?>
<jboss>
<enterprise-beans>
<session>
<ejb-name>Interest</ejb-name>
<jndi-name>interest/Interest</jndi-name>
</session>
</enterprise-beans>
</jboss>他有一个 jndi - name,但是,他是放在 session 里面,
但是,我的 ejb 是一个无状态 (Stateles) ejb,
我的 .xml 文件:
<session id="Hello">
<ejb-name>Hello</ejb-name>
<home>hello.ejb.HelloHome</home>
<remote>hello.ejb.Hello</remote>
<ejb-class>hello.ejb.HelloBean</ejb-class>
<session-type>Stateless</session-type>
<transaction-type>Container</transaction-type>
</session>
这里面少了什么?为什么我在调用 ejb 时,会找不到 接口呢?应该怎么修改啊?
我在 ..\server\all\deploy\jbossha-httpsession.sar\ClusteredHttpSessionEB.jar\META-INF 这个目录下发现有 Jboss.xml
这个文件,
你说需要 JBOSS.xml ,是要修改这个文件,还是自己创建这个文件呢?我说我的 ejb 部署成功,我是这样作的:
1 我先启动 Jboss.
2 我将我的已经编译好的 ejb 和 ejb-jar.xml 文件打包成 hello.jar 文件,
放到 ..\server\all\deploy\ 目录下面。
3 在 Jboss 的命令行显示:09:17:46,524 INFO [MainDeployer] Deployed package: file:/C:/JbossAndTomcat/serv
er/default/deploy/hello.jar
我看见这个信息,应该就是说 hello.jar 已经 Deployed 了。
<?xml version="1.0" encoding="ISO-8859-1"?>
<jboss>
<enterprise-beans>
<session>
<ejb-name>Hello</ejb-name>
<jndi-name>Hello</jndi-name>
</session>
<secure>true</secure>
</enterprise-beans>
<resource-managers/>
</jboss>
保证jboss.xml和你的ejb-jar.xml在同一个目录下。
ejb-jar.xml 是我自己建立的文件,我把 ejb-jar.xml 和ejb组件打包到 hello.jar 中,
并且放到 Jboss 的 ..\server\all\deploy\ 目录下面。
而 jboss.xml 是 Jboss 的目录,他们怎么放到同一个目录呢?我是照着一个例子作的,例子在:http://www.huihoo.com/java/hello-jsp-servlet-ejb/我看了客户端的代码,就是在不到 Hello。
代码我都贴出来了,我刚刚开始学习 java ,不太会弄,你可以说详细点吗?
我已经将他一起打包了。我是对着例子作的:http://www.huihoo.com/java/hello-jsp-servlet-ejb/
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jboss PUBLIC '-//JBoss//DTD JBOSS 3.0//EN' 'http://www.jboss.org/j2ee/dtd/jboss_3_0.dtd'>
<jboss>
<enterprise-beans>
<session id="Hello">
<ejb-name>Hello</ejb-name>
<jndi-name>ejb/com/HelloHome</jndi-name>
</session>
</enterprise-beans>
</jboss>你也可以参照JBOSS服务器下的jmx-ejb-adaptor.jar文件。里面有jboss.xml和ejb-jar.xml两个文件。这两个都是需要的,第一个是JBOSS服务器自己的JNDI绑定的规则文件,第二个是EJB的汇编描述符。我们几百个EJB的大项目都用JBOSS跑通过了
一起打包进你的jar 文件中.现在觉得我们的书上或多或少有这样那样的问题.不过网上的资料也是大部分抄来抄去的.建议直接看国外网站的英文资料,这样可以少走很多弯路.
我自己搞定了,你说得对,谢谢!