请高手指点 JBoss 实例

Jay02 2003-02-20 11:12:51
我根据一个例子改成 Hello World,希望能手工配置成功一个例子,以加深理解。
JBoss版本是3.0.0_tomcat-4.0.3。

HelloWorld.jar中,有HelloWorld.class、HelloWorldHome.class、HelloWorldBean.class,还有META-INF目录,其中有ejb-jar.xml、jboss.xml、MANIFEST.MF三个文件。源码如下:

一、Java类

//========HelloWorld.java===========

import javax.ejb.EJBObject;
import java.rmi.RemoteException;

public interface HelloWorld extends EJBObject {

public String hello() throws RemoteException;
}

//========HelloWorldBean.java========

import java.rmi.RemoteException;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;

public class HelloWorldBean implements SessionBean {

public String hello() {
return "Hello World";
}

public HelloWorldBean() {}
public void ejbCreate() {}
public void ejbRemove() {}
public void ejbActivate() {}
public void ejbPassivate() {}
public void setSessionContext(SessionContext sc) {}

}

//======HelloWorldHome.java=============

import java.io.Serializable;
import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.ejb.EJBHome;

public interface HelloWorldHome extends EJBHome {

HelloWorld create() throws RemoteException, CreateException;
}


二、EJB描述

//====== ejb-jar.xml =======

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE ejb-jar PUBLIC "-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN" "http://java.sun.com/dtd/ejb-jar_2_0.dtd">

<ejb-jar>

<description>No Description.</description>
<display-name>Generated by XDoclet</display-name>

<enterprise-beans>

<session >
<description><![CDATA[Session Bean Template ATTENTION: Some of the XDoclet tags are hidden from XDoclet by adding a "--" between @ and the namespace.]]></description>
<display-name>Bug TestSession Bean</display-name>

<ejb-name>HelloWorld</ejb-name>

<home>HelloWorldHome</home>
<remote>HelloWorld</remote>
<ejb-class>HelloWorldBean</ejb-class>
<session-type>Stateful</session-type>
<transaction-type>Container</transaction-type>

<resource-ref>
<res-ref-name>test/Mail</res-ref-name>
<res-type>javax.mail.Session</res-type>
<res-auth>Container</res-auth>
</resource-ref>

</session>
</enterprise-beans>

</ejb-jar>


// ========== jboss.xml ===========

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS//EN" "http://www.jboss.org/j2ee/dtd/jboss.dtd">

<jboss>
<enterprise-beans>
<session>
<ejb-name>HelloWorld</ejb-name>
<jndi-name>ejb/HelloWorld</jndi-name>
</session>
</enterprise-beans>
</jboss>

// ========MANIFEST.MF ==========

Manifest-Version: 1.0
Created-By: Apache Ant 1.5.1


===================================

我使用一个JSP来作为客户端测试。
web-test.war


// ========= index.jsp ========

<%@ page
session="false"
isThreadSafe="true"
isErrorPage="false"
import="javax.naming.*"
%>

<h4>Web Client</h4>
<p><%
try {
Context lContext = new InitialContext();
HelloWorldHome lHome = (HelloWorldHome) lContext.lookup(
"java:comp/env/ejb/HelloWorld"
);
HelloWorld lSession = lHome.create();
out.println( lSession.hello() );
}
catch( Exception e ) {
out.println( "Caugth exception: " + e.getMessage() );
e.printStackTrace();
}
%></p><br><br>


web-test.war中除index.jsp外,还有META-INF、WEB-INF两个目录。

META-INF中有MANIFEST.MF同上。

WEB-INF中有web.xml、jboss-web.xml和class目录。class目录是HelloWorld.jar(如上)的三个class文件。

// ========= web.xml ========

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">

<web-app>

<display-name>Web Client</display-name>

<!-- The Welcome File List -->
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
<welcome-file>index.html</welcome-file>
</welcome-file-list>

<ejb-ref>
<ejb-ref-name>ejb/HelloWorld</ejb-ref-name>
<ejb-ref-type>Session</ejb-ref-type>
<home>HelloWorldHome</home>
<remote>HelloWorld</remote>
</ejb-ref>

</web-app>

// ======== jboss-web.xml ==========

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jboss-web
PUBLIC "-//JBoss//DTD Web Application 2.3//EN"
"http://www.jboss.org/j2ee/dtd/jboss-web_3_0.dtd">

<jboss-web>

<ejb-ref>
<ejb-ref-name>ejb/HelloWorld</ejb-ref-name>
<jndi-name>ejb/HelloWorld</jndi-name>
</ejb-ref>

</jboss-web>


我的jar和war是用winrar打包的,不知道可否?

访问 http://localhost:8080/web-test/index.jsp

报错:
The requested resource (/web-test/index.jsp) is not available.



请帮我分析一下。谢谢!!!
(要不请留下email。源码大概5K)
...全文
6 点赞 收藏 18
写回复
18 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
BluePenguin 2003-04-11
up
回复
54sunboy 2003-02-28
再顶一下。
回复
Jay02 2003-02-28
非常感谢各位的帮忙,尤其是 jatom(SoftWind) 和 eyeieye(魔之眼) 的Email指导!

eyeieye(魔之眼) :
你的类还是加上package吧,在tomcat下面,classloader有点特别,最好不要用无package的类
,我的建议。

jatom(SoftWind) :
你的ejb的home,remote和bean对象要放在一个包中(如org.test.HelloWorld,不要直接用Hell
oWorld这种形式,然后将home,romte接口打包成一个jar文件放在web发布包中WEB-INF目录下的
lib目录下,然后在jsp中作相应的import。还有在web.xml中不要加context-root标记。


现在已经修改成功。问题都在如上两位所说。如果有需要源码看看的请给我发邮件。邮箱是:
liaojianzhong@tsinghua.org.cn

再次表示感谢!结贴。
回复
Jay02 2003-02-27
回:godspeedwang(wangzheng)

你说得很对!谢谢!这样可方便多了。
回复
godspeedwang 2003-02-27
其实你不用打包,将目录直接命名为.ear .war .jar就可以了
回复
jatom 2003-02-27
你没有将home,remote接口放在你的web-test.war包中,还有在jsp中没有相应的import
回复
Jay02 2003-02-26
谢谢jatom(SoftWind) 。不过还是不行。不知道我漏了什么。
回复
jatom 2003-02-24
1.在你的INDEX.JSP中
HelloWorldHome lHome = (HelloWorldHome) lContext.lookup(
"java:comp/env/ejb/HelloWorld"
);
要改为
HelloWorldHome lHome = (HelloWorldHome) PortableRemoteObject.narrow(lContext.lookup("ejb/HelloWorld"),HelloWorldHome.class);
2.虽然jboss集成了tomcat,但是web.xml中<ejb-ref>..</ejb-ref>是不可用的(所以jsp中访问ejb时是跟普通客户端程序访问ejb的方法一样的)
回复
jatom 2003-02-24
你用winrar打包时,却省是用rar格式压缩,一定要选择ZIP格式压缩!!
回复
flexinsky 2003-02-22
我也找到一篇挺不错的.看看有没有帮助.
回复
Jay02 2003-02-22
再顶一下。
回复
Jay02 2003-02-21
还有点可能要说明:例子中配置文件都用
http://www.jboss.org/j2ee/dtds/jboss-web_3_0.dtd,可是实际上
http://www.jboss.org/j2ee/dtd/jboss-web_3_0.dtd 才能访问。
因此我改了,不知道是不是不该改?
回复
Jay02 2003-02-21
回 xsxiaobao(小宝) :谢谢!
回 eyeieye(魔之眼) :谢谢!刚试过,还是不行。我看原来的例子里好像就没有。改写后的jboss-web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jboss-web
PUBLIC "-//JBoss//DTD Web Application 2.3//EN"
"http://www.jboss.org/j2ee/dtd/jboss-web_3_0.dtd">

<jboss-web>
<context-root>/web-test</context-root>
<ejb-ref>
<ejb-ref-name>ejb/HelloWorld</ejb-ref-name>
<jndi-name>ejb/HelloWorld</jndi-name>
</ejb-ref>
</jboss-web>

回 helldream2002() :JBoss是一个很好的J2EE应用服务器。

回 zxhong(红透半边天):谢谢你推荐的资料。不过我看过JBoss的Quick Start,里面有个例子,也配置成功了。可是仍然不清楚究竟怎么回事,尤其是各描述文件。所以非常想手工写好一个简单的Hello World。


有没有谁愿意留个mail,帮我调调?我想对于熟手来说,应该不用多少时间。源码大概5K。谢谢!
回复
zxhong 2003-02-21
http://expert.csdn.net/Expert/topic/1221/1221503.xml?temp=.5657923
回复
helldream2002 2003-02-21
jboss是什么啊!
回复
eyeieye 2003-02-21
jboss-web.xml中加上<context-root>/web-test</context-root>试试看
回复
xsxiaobao 2003-02-21
我们也刚要转到JBOSS下.
可是还没动工.
帮你顶!
回复
Jay02 2003-02-21
顶一下。

希望看在我写得这么认真的份上,给点帮助。也可检验你的知识。
或者,告诉我看看什么资料。

谢谢!
回复
发帖
Java EE
创建于2007-09-28

6.6w+

社区成员

J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
申请成为版主
帖子事件
创建了帖子
2003-02-20 11:12
社区公告
暂无公告