分以下几个步骤:
1 建立测试web模块
2 建立idea ejb模块,编写ejb
3 编译,打包
4 写测试页面
5 发布ejb,web测试模块,测试ejb
1 建立web测试模块。
在默认的user_projects\domains\mydomain\applications目录下,新建一个名为web的文件夹。这个文件夹就是我们测试ejb的web模块。
在web文件夹下新建web-inf文件夹,在web-inf下新建lib文件夹。
在web-inf下新建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>
</web-app>
ok。web测试模块完成。
2 建立idea ejb模块,编写ejb
打开idea,选择 file-new-ejb modules,把module name 改为“ejbsamples”,如下图:
在服务器选项,选择weblogic,其余都按默认设置。最后点finish。
在src文件夹下新建包。包名如下:com.diegoyun.ejb.slb,如下图:
把鼠标放到模块名上,右键,选择:new-sessionbean。然后在弹出的属性框设置如下:
<ejb-name> :输入helloworld
package:选择/输入com.diegoyun.ejb.slb
其余信息idea会帮你自动设置,整个属性框属性如下:
点击ok结束
这时会弹出ejb的属性配置界面,如下:
在display name,输入 helloworldejb
然后切换到weblogic server页,输入jndi name如下:ejb/session/helloworldejb
界面如下:
关闭这个属性页。idea已经帮你写好了ejb的配置信息。可以打开meta-inf/下的ejb-jar.xml和weblogic-ejb-jar.xml进行查看。
这时在com.diegoyun.ejb.slb下,应该有三个文件:helloworld,helloworldbean和helloworldhome
在helloworld接口中添加一个方法如下:
public interface helloworld extends ejbobject {
public string getgreeting(string name)throws remoteexception;
}
在helloworldbean接口中添加一个方法如下:
public class helloworldbean implements sessionbean {
……………
//omit others
public string getgreeting(string name){
return "hello," + name;
}
}
ok.你的helloword ejb已经写好了。
3 编译,打包,发布ejb
本例采用web方式访问ejb。并且没有把web模块和ejb jar都打包成ear。所以必须先把ejb源码编译成jar,发布这个jar,然后复制到测试web模块的lib目录下,这样web页面才能访问到bean。
本例采用ant脚本来执行编译和打包等命令。在idea的ejbsamples模块下新建一个build.xml脚本,内容如下:
<project name="ejb-example" default = "all" basedir=".">
<!– set your personal configuration information below: –>
<property name="j2eelib" value="d:\devs\bea\weblogic81 erver\lib\weblogic.jar"/>
<property name="uploadpath" value="d:\devs\bea\user_projects\domains\mydomain\myserver\upload"/>
<property name="webpath" value="d:\devs\bea\user_projects\domains\mydomain\applications\web\web-inf\lib"/>
<!– end personal conf info –>
<property name="source" value="src"/>
<property name="meta" value="meta-inf"/>
<property name="build" value="${basedir}/build"/>
<property name="packinfo" value="${build}/meta-inf"/>
<property name="dist" value="${basedir}/dist"/>
<target name="init">
<!– create the time stamp –>
<tstamp/>
<mkdir dir="${build}"/>
<mkdir dir="${dist}"/>
<mkdir dir="${packinfo}"/>
</target>
<target name="ejb">
<javac srcdir="${source}" classpath="${j2eelib}"
destdir="${build}" includes="**/*.java"/>
</target>
<target name="copy" depends="ejb">
<copydir src="${meta}" dest="${packinfo}" includes="**/*.xml"/>
</target>
<target name="ejb-jar" depends="ejb">
<jar jarfile="${dist}/ejbsamples.jar" includes="**/*.xml,
**/*.class" basedir="${build}"/>
</target>
<!– copy jar to weblogic upload ant web diretory –>
<target name="copy-to-path" depends="ejb-jar">
<copyfile src="${dist}/ejbsamples.jar" dest="${uploadpath}/ejbsamples.jar" forceoverwrite="true"/>
<copyfile src="${dist}/ejbsamples.jar" dest="${webpath}/ejbsamples.jar" forceoverwrite="true"/>
</target>
<target name="all" depends="init,ejb,copy,ejb-jar,copy-to-path"/>
</project>
针对你本机weblogic的安装,修改脚本以下信息即可:
<!– set your personal configuration information below: –>
<property name="j2eelib" value="d:\devs\bea\weblogic81 erver\lib\weblogic.jar"/>
<property name="uploadpath" value="d:\devs\bea\user_projects\domains\mydomain\myserver\upload"/>
<property name="webpath" value="d:\devs\bea\user_projects\domains\mydomain\applications\web\web-inf\lib"/>
<!– end personal conf info –>
<property name="j2eelib"> :由于本例采用weblogic.jar进行javac编译,所以必须知道该jar的位置。通常,它位于<bea diretory>\weblogic81 erver\lib\下。例如,如果你的weblogic安装在c盘,那么你的jar应该如此设置:
<property name="j2eelib" value="c: \bea\weblogic81 erver\lib\weblogic.jar"/>
<property name=" uploadpath "> :weblogic放置上传文件的目录。通常位于<bea diretory>\user_projects\domains\<your domain>\<your server>\upload文件夹下。如果你采用的是weblogic默认安装,那么<your domain>通常是mydomain(由weblogic默认创建),<your server>通常是myserver。例如,如果你的weblogic安装在c盘,并且domain和server都采用默认,那么属性设置如下:
<property name="uploadpath" value="c:\bea\user_projects\domains\mydomain\myserver\upload"/>
<property name="webpath">:web测试模块的lib目录。按照你自己本机配置进行设置。
至此,ejb的编写,配置工作全部完成。运行刚才的脚本。
ant build.xml
然后查看 web测试模块/web-inf/lib 下是否有ejb jar,weblogic的upload目录下是否有ejb jar,如果没有,请按所列步骤仔细检查你的配置情况。
4 写测试页面进行测试
在web模块下新建hello.jsp,内容如下:
<%@ page language="java" %>
<%@ page import="com.diegoyun.ejb.slb.helloworld,
com.diegoyun.ejb.slb.helloworldhome,
javax.ejb.*,
java.math.*,
javax.naming.*,
javax.rmi.portableremoteobject,
java.rmi.remoteexception" %>
<html>
<head>
<title>hello</title>
</head>
<body bgcolor="white">
<h1><b><center>stateless bean examples</center></b></h1>
<hr>
<form name="frm" method="post" action="hello.jsp">
<input type="text" value="diego" name="myname"/>
<input type="submit" value="submit"/>
</form>
<p>
<p>see :</p>
<br>
<%
helloworld hello = null;
string name = null;
name = request.getparameter("myname");
if(name!=null && !"".equals(name)){
try {
initialcontext ic = new initialcontext();
object objref = ic.lookup("ejb/session/helloworldejb");
helloworldhome home = (helloworldhome)portableremoteobject.narrow(objref, helloworldhome.class);
hello = home.create();
} catch (remoteexception ex) {
system.out.println("couldnt create hello bean."+ ex.getmessage());
} catch (createexception ex) {
system.out.println("couldnt create hello bean."+ ex.getmessage());
} catch (namingexception ex) {
system.out.println("unable to lookup home: "+ "helloworldhome "+ ex.getmessage());
}
}
if(hello!=null && !"".equals(hello)) {
string s = hello.getgreeting(name);
out.print(s);
}
%>
</body>
</html>
5 发布ejb,web测试模块,调试ejb
发布ejb。启动weblogic server,打开控制台。
然后在ejb发布页面,选择upload文件夹下的jar进行发布,默认路径应是:<bea diretory>\user_projects\domains\mydomain\myserver\upload
发布web模块
在deploy web application modules下,定位到<bea diretory>\user_projects\domains\mydomain\applications下,可以看到我们建立的web模块。点“target module”进行发布,name取名为“web”
ok。所有工作均已完成!
打开浏览器,输入:http://localhost:7001/web/hello.jsp
点submit,就可以看到hello字样。
faq:
1 为什么在打包ejb之后,把ejb copy到weblogic的upload目录下?(这个过程是由build.xml脚本完成的)
答:一般情况下如果你修改了ejb,那么你就要在weblogic控制台重新deploy ejb的jar。经常进行这项工作是很烦人的。幸好weblogic提供了upload的特性,你把jar 上传到weblogic,然后deploy upload文件夹里的这个jar。以后每次在你修改ejb,打包成jar之后,你用新的jar覆盖upload目录下的jar,就不用重新deploy jar了。通过这种方式模拟了jboss的热部署特性。
其他模块,例如war,ear,都可以通过这种方式来deploy。
