用JBOSS 32发布EJB程序Word下载.docx
《用JBOSS 32发布EJB程序Word下载.docx》由会员分享,可在线阅读,更多相关《用JBOSS 32发布EJB程序Word下载.docx(16页珍藏版)》请在冰豆网上搜索。
如果运行程序shutdown.bat可以结束JBOSS服务。
关闭JBOSS服务只需要输入shutdown–S命令即可(注意:
S是大写)。
1.4
检验JBOSS是否成功启动
打开http:
//localhost:
8080/jmx-console/地址,可以看到JMXAgentView(如图1),里面各种参数啊列表啊什么的;
8083/是空白页面,说明你已经安装和并且启动成功了。
2
发布JSP程序
2.1
编写jsp程序
先写一个简单的index.jsp程序,代码如下:
2.2
制作成.war文件
大家可能不太了解jar、war、ear等文件的关系,icech只给出他们的全称,其余的就自己到网上寻找吧
∙
JAR:
JavaArchive
WAR:
WebArchive
EAR:
EnterpriseArchive
JDK提供了jar的工具,就在java所在目录的bin目录下有一个jar.exe的应用程序。
使用方法如下:
用法:
jar{ctxu}[vfm0M][jar-文件][manifest-文件][-C目录]文件名...
选项:
-c创建新的存档
-t列出存档内容的列表
-x展开存档中的命名的(或所有的〕文件
-u更新已存在的存档
-v生成详细输出到标准输出上
-f指定存档文件名
-m包含来自标明文件的标明信息
-0只存储方式;
未用ZIP压缩格式
-M不产生所有项的清单(manifest〕文件
-i为指定的jar文件产生索引信息
-C改变到指定的目录,并且包含下列文件:
如果一个文件名是一个目录,它将被递归处理。
清单(manifest〕文件名和存档文件名都需要被指定,按"
m"
和"
f"
标志指定的相同顺序。
示例1:
将两个class文件存档到一个名为"
classes.jar"
的存档文件中:
jarcvfclasses.jarFoo.classBar.class
示例2:
用一个存在的清单(manifest)文件"
mymanifest"
将foo/目录下的所有
文件存档到一个名为"
jarcvfmclasses.jarmymanifest-Cfoo/.
我的index.jsp文件临时存放在D:
\ejb里面,所以打包的命令如下:
D:
\ejb>
jarcvfhello.warindex.jsp
这里我生成了hello.war文件(小技巧:
war或者jar文件可以用winzip或winrar文件解压)。
2.3
发布war
一般配置好路径就不会有什么问题了,发布war十分简单,只要将hello.war文件拷贝到%jboss_home%\server\default\deploy\目录就可以了(如图02)。
2.4
测试发布的war
打开浏览器,输入网址:
http:
8080/hello/,就可以看到(如图03):
3
发布Servlet程序
3.1
编写Servlet程序
一个简单的Servlet程序,代码如下:
HelloWorld.java
packagehello;
importjava.io.*;
importjavax.servlet.*;
importjavax.servlet.http.*;
publicclassHelloWorldextendsHttpServlet{
publicvoiddoGet(HttpServletRequestrequest,HttpServletResponseresponse)
throwsIOException,ServletException
{
response.setContentType("
text/html"
);
PrintWriterout=response.getWriter();
out.println("
"
HelloWorld!
out.println("
}
}
3.2
编写一个web.xml
web.xml代码如下:
HelloWorld
hello2.HelloWorld
/HelloWorld
3.3
编译Servlet
编译Servlet以前我在“Servlet的编译安装和运行”中已经讲到。
使用JBOSS有所不同,但一样简单。
就是在CLASSPATH中加入:
%jboss_home%\server\default\lib\javax.servlet.jar
3.4
相关文件的路径
首先要建立一个hello目录,在这个目录里面建立WEB-INF目录(注意字母要大写),将web.xml保存在WEB-INF目录中;
然后建立WEB-INF\classes\hello目录,将HelloWorld.java和编译好的Helloworld.class文件保存在里面。
(见图4)
(图4)
3.5
如上面的方法,我在执行以下命令:
\ejb\hello>
jarcvfhello.war*.*
生成的hello.war文件拷贝到%jboss_home%\server\default\deploy\目录就行了。
3.6
下一步我们要测试发布Servlet是否成功,在浏览器中输入地址:
8080/hello/HelloWorld,如果我们看到图5样,就说明发布成功了!
4
发布EJB程序
我们来编写一段最简单的“HelloWorld”无状态会话Bean,我们创建的无状态会话Bean运行在分布式对象架构里,执行着重要的任务:
向客户端返回一字符串——“Hello,World!
”
4.1
创建Remote接口
我们以编写Remote接口开始,Remote接口复制了Bean“暴露”的每一个商务方法,由EJB容器实现Remote接口,实现的结果就是EJB对象。
EJB对象将所有的客户端请求委托给实际的Bean。
源代码如下:
Hello.java
packagehello.ejb;
/**
*RemoteinterfaceforEnterpriseBean:
Hello
*/
publicinterfaceHelloextendsjavax.ejb.EJBObject{
*唯一的方法hello,向客户端返回问候。
publicStringhello()throwsjava.rmi.RemoteException;
4.2
实现“Hello,world!
”的Bean
接下来,创建Bean本身。
我们将实现一个商务方法——hello()方法,我们还增加了所需的EJB容器回调方法。
程序源代码如下“:
HelloBean.java
*BeanimplementationclassforEnterpriseBean:
publicclassHelloBeanimplementsjavax.ejb.SessionBean{
privatejavax.ejb.SessionContextmySessionCtx;
/**
*getSessionContext
publicjavax.ejb.SessionContextgetSessionContext(){
returnmySessionCtx;
*setSessionContext
publicvoidsetSessionContext(javax.ejb.SessionContextctx){
mySessionCtx=ctx;
*ejbActivate
publicvoidejbActivate(){
*ejbCreate
publicvoidejbCreate()throwsjavax.ejb.CreateException{
*ejbPassivate
publicvoidejbPassivate(){
*ejbRemove
publicvoidejbRemove(){
//
//商务方法
publicStringhello(){
return"
Hello,World!
;
4.3
创建“Hello,World!
”Home接口
这里编写的Home接口详细说明了生成和清除EJB对象方法。
程序源代码如下:
HelloHome.java
*HomeinterfaceforEnterpriseBean:
publicinterfaceHelloHomeextendsjavax.ejb.EJBHome{
*CreatesadefaultinstanceofSessionBean:
publicHellocreate()throwsjavax.ejb.CreateException,java.rmi.RemoteException;
4.4
EJB部署描述
ejb-jar.xml
helloEJB
Hello
hello.ejb.HelloHome
hello.ejb.Hello
hello.ejb.HelloBean
Stateless
Container
下面icech来简单介绍一下XML部署描述的内容。
4.5
客户端代码
客户端代码执行以下几个任务:
查找Home对象;
使用Home对象生成EJB对象;
对EJB对象调用hello()方法;
从内存中清除EJB对象。
HelloClient.java
importjava.util.*;
importjavax.naming.InitialContext;
importjavax.rmi.PortableRemoteObject;
publicclassHelloClient
{
publicstaticvoidmain(String[]args)
{
try
//jndi配置,硬编码到java中,应实现为外部属性文件
Propertiesp=newProperties();
p.setProperty("
java.naming.factory.initial"
"
org.jnp.interfaces.NamingContextFactory"
java.naming.provider.url"
localhost:
1099"
//outprintjndi配置
p.list(System.out);
//Getanamingcontext
InitialContextjndiContext=newInitialContext(p);
System.out.println("
Gotcontext"
//GetareferencetotheInterestBean
//jboss默认jndi名为ejb-jar.xml中的:
ejb-name
Objectref=jndiContext.lookup("
Hello"
Gotreference"
//GetareferencefromthistotheBean"
sHomeinterface
HelloHomehome=(HelloHome)
PortableRemoteObject.narrow(ref,HelloHome.class);
//CreateanHelloobjectfromtheHomeinterface
Hellohello=home.create();
//callthehello()method
System.out.println(hello.hello());
catch(Exceptione)
System.out.println(e.toString());
4.6
EJB的发布
首先看一下各文件存在的位置。
4.6.1
编译EJB
编译EJB首先要配置环境变量。
要将:
%jboss_home%\client\jboss-j2ee.jar
加入到CLASSPATH中才能进行编译。
编译的方法就很简单了,执行以下语句即可完成编译。
javachello\ejb\*.java
4.6.2
发布Server端
将hello\ejb\目录的Hello.java程序、HelloBean.java程序、HelloHome.java程序编译,同META-INF\目录下ejb-jar.xml文件打包成hello.jar文件,拷贝到%jboss_home%\server\default\deploy\目录(如图6)。
>
jarcvfhello.jar*.*META-INF/*.xml
4.6.3
发布Client端
直接将client目录拷贝到%jboss_home%\server\default\deploy\目录。
4.7
运行EJB
要运行先配置运行EJB的环境变量。
运行EJB要在CLASSPATH里面增加如下几条语句。
%jboss_home%\client\jbossall-client.jar;
%jboss_home%\client\jnet.jar;
%jboss_home%\client\log4j.jar;
然后进入client目录,输入命令:
javahello.ejb.HelloClient
看到客户端如下显示,说明部署和发布EJB成功(如图7)。
5
小结
文中很多地方可能没有说得很详尽,还需要配合一些其他文档来学习,因为icech对JBOSS也了解的比较粗,希望有什么意见大家提出来,共同探讨。
参考资料:
《JBOSS3.0.4配置及使用初步》,作者:
acute
《jsp,servlet,ejb3种j2ee应用的实施》,作者:
陈鹏
《精通EJB》,作者:
EdRoman
笔记整理:
姓名:
icech
主页:
西部电子
Email:
icech@