📄 ejb开发概述.htm
字号:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<!-- saved from url=(0056)http://eps.www85.cn4e.com/java/article/devshow.asp?id=50 -->
<HTML><HEAD><title>csdn_EJB开发概述</TITLE>
<META content="text/html; charset=gb2312" http-equiv=Content-Type>
<STYLE type=text/css>TD {
FONT-FAMILY: "Verdana", "Arial", "宋体"; FONT-SIZE: 9pt
}
A {
COLOR: #660000; TEXT-DECORATION: underline
}
A:hover {
COLOR: #660000; TEXT-DECORATION: none
}
.line {
LINE-HEIGHT: 14pt
}
</STYLE>
<META content="MSHTML 5.00.2920.0" name=GENERATOR></HEAD>
<BODY bgColor=#ffffff text=#000000>
<table>
<table><tbody>
<TR>
<TD height=21>
<DIV align=center><B><FONT size=3>EJB开发概述 <BR><FONT
size=2> </FONT></FONT></FONT>
<HR align=center color=#cccccc noShade SIZE=1>
</DIV></TD></TR>
<TR>
<TD class=line><FONT
color=#333300>1、EJB的开发<BR><BR><BR>先泛泛而论,讲一讲EJB的开发步骤。<BR><BR>1.1 SessionBean的开发<BR>第一步, 写远程接口(remote interface),<BR>继承EJBObject接口,把需要调用的public方法写在里面(这些方法将在SessionBean中实现),注意要声明throws java.rmi.RemoteException。 <BR>例如:<BR><BR>package jsper.ejb;<BR><BR>import java.rmi.*;<BR>import javax.ejb.*;<BR><BR>public interface MyEJB extends EJBObject <BR>{<BR><BR>public String sayHello() throws java.rmi.RemoteException;<BR><BR>}<BR><BR>第二步, 写Home接口(生成EJBObject引用的factory) <BR>至少生成一个create方法, 注意要声明throws java.rmi.RemoteException和javax.ejb.CreateException。<BR>比如:<BR><BR><BR><BR>package jsper.ejb;<BR><BR>import java.rmi.*;<BR>import javax.ejb.*;<BR><BR><BR>public interface MyEJBHome extends EJBHome <BR>{<BR><BR><BR><BR>MyEJB create() throws java.rmi.RemoteException, javax.ejb.CreateException;<BR><BR>}<BR><BR>第三步, 写真正的Session Bean的实现(实现定义在远程接口中的方法), 需要实现javax.ejb.SessionBean接口<BR>注意:不能用implents MyEJB的方式直接实现远程接口,此处不用抛出RemoteException<BR>package jsper.ejb;<BR><BR>import java.rmi.RemoteException;<BR>import javax.ejb.*;<BR>public class MyEJBClass implements SessionBean {<BR><BR> <BR> public MyEJBClass() {<BR> }<BR> //定义在SessionBean 中的方法 <BR> public void ejbCreate() throws RemoteException, CreateException {<BR> }<BR><BR> public void ejbActivate() throws RemoteException {<BR> }<BR><BR> public void ejbPassivate() throws RemoteException {<BR> }<BR><BR> public void ejbRemove() throws RemoteException {<BR> }<BR><BR>public void setSessionContext(SessionContext ctx) <BR>throws RemoteException {<BR><BR> }<BR><BR> //此处是具体的实现<BR><BR> public String sayHello()<BR><BR> {<BR><BR> System.out.println("Hello");<BR> }<BR>} <BR>第四步,写一个发布用的配置文件ejb-jar.xml<BR>需要提供的信息:<BR>Bean Home name -- The nickname that clients use to lookup your bean's home object.<BR>Enterprise bean class name -- The fully qualified name of the enterprise bean class.<BR> Home interface class name<BR> Remote interface class name<BR>Re-entrant -- Whether the enterprise bean allow re-entrant calls. This setting must be false for session beans(it applies to entity beans only)<BR> stateful or stateless <BR> Session timeout -- The length of time (in seconds) before a client should time out when calling methods on your bean.<BR>最后你还可以提供属于自己的配置信息供自己控制EJB的工作方式。<BR><BR>例子:<BR> <BR>helloEjb<BR>com.jsper.ejb.MyEJBHome<BR>com.jsper.ejb.MyEJB<BR>com.jsper.ejb.MyEJBClass<BR>Stateless<BR>Container<BR> <BR> <BR><BR>第五步,将你的所有文件用jar工具生成jar文件<BR><BR>ejb-jar.xml须在顶级的META-INF子目录<BR>这句话比较咬嘴, 举个例子<BR><BR>mylib----META-INF--*.XML<BR>| <BR>|com--coucouniu--ejb---EJBClass<BR> |-EJBHome<BR> |-EJB<BR> <BR>在生成.jar文件时<BR><BR>sh>cd mylib //注意此处所在目录<BR>sh>jar cv0f myejb.jar *<BR><BR>请注意: 到这一步我们做出的东西都是和和特定的EJB Server是无关的, 只是和遵循EJB的标准有关<BR><BR>第六步,使用特定平台的发布工具生成发布使用的jar文件。<BR>不同的中间件产品此步骤非常不同, 产生的结果都是生成只有自己的EJB Server能理解的远程接口和Home接口实现等等东西,打包在一个jar文件中<BR>一般是很简单的<BR>第七步,把.jar文件发布到EJB Server<BR><BR>根据不同的中间件产品此步骤非常不同, 可以分为启动时发布和运行时发布两种,一般是很简单的, 以weblogic为例:<BR>1、在weblogic.properties 文件中配置使weblogic 启动时自动装载。<BR>添加一个条目比如:<BR>weblogic.ejb.deploy=C:/weblogic510/myserver/ejb_basic_beanManaged.jar,\<BR> C:/weblogic510/myserver/ejb_basic_test.jar<BR> <BR>2、使用deploy或DeployerTool动态装载/卸载/更新<BR><BR>第八步,写客户端的程序(我迄今为止的理解) <BR>在我们使用发布工具把EJB发布到EJB Container的过程中,会绑定一个名字到Container的目录服务中,现在我们要调用时从这个目录服务中把EJBHome对象取出, 这里分为从本地和外部两种情况:<BR>一种是客户端本地调用EJB。 比如和EJB引擎和Servlet引擎是整合在同一个Application Server中, 这时当一个Servlet要调用EJB时无须验证,即可得到EJBHome接口的实现<BR> Context ic = new InitialContext();<BR> System.out.println("Looking for the EJB published as 'hello'");<BR> com.jsper.ejb.MyEJBHome homeInterface = (com.jsper.ejb.MyEJBHome) ic.lookup(“hello”); //发布时绑定的名字是hello<BR> 这样就可从目录服务中得到Home接口的实现, 也是我们最常用的方式, 可移植性很好<BR><BR>外部调用的话首先要经过身份验证,<BR>比如Oracle8i :<BR><BR>String ejbUrl = "sess_iiop://localhost:2481:ORCL/test/MyEJB";<BR> String username = "scott";<BR> String password = "tiger";<BR><BR> // Setup the environment<BR> Hashtable environment = new Hashtable();<BR> // Tell JNDI to speak sess_iiop<BR> environment.put(javax.naming.Context.URL_PKG_PREFIXES, "oracle.aurora.jndi");<BR> // Tell sess_iiop who the user is<BR> environment.put(Context.SECURITY_PRINCIPAL, username);<BR> // Tell sess_iiop what the password is<BR> environment.put(Context.SECURITY_CREDENTIALS, password);<BR> // Tell sess_iiop to use credential authentication<BR>environment.put(Context.SECURITY_AUTHENTICATION, ServiceCtx.NON_SSL_LOGIN);<BR>// Lookup the URL<BR> com.jsper.ejb.MyEJBHome homeInterface = null;<BR> try {<BR> System.out.println("Creating an initial context");<BR> Context ic = new InitialContext(environment);<BR> System.out.println("Looking for the EJB published as 'test/MyEJB'");<BR> homeInterface = (com.jsper.ejb.MyEJBHome) ic.lookup(ejbUrl);<BR> }<BR> catch (ActivationException e) {<BR> System.out.println("Unable to activate : " + e.getMessage());<BR> e.printStackTrace();<BR> System.exit(1);<BR> }<BR>再比如weblogic的调用方式:<BR>try<BR>{<BR> // Get an InitialContext<BR> String url="t3://localhost:7001";<BR> Properties h = new Properties();<BR> h.put(Context.INITIAL_CONTEXT_FACTORY,<BR>"weblogic.jndi.WLInitialContextFactory");<BR> h.put(Context.PROVIDER_URL, url);<BR><BR>Context ctx = new InitialContext(h);<BR><BR> System.out.println("Getting the EJBHome object…");<BR> com.jsper.ejb.EJBHome tmp= (com.jsper.ejb.EJBHome)ctx.lookup("hello");<BR><BR>//create three element array of COUNT object<BR> EJB ejb =tmp.create();<BR> System.out.println(ejb.sayHello());<BR>}<BR>catch(Exception e)<BR>{<BR>e.printStackTrace();<BR>}<BR>由于和具体的目录服务、协议相关,为了达到可移植的目的,只好多做一些工作,幸好一般不需要做这些工作。<BR><BR></FONT></TD></TR>
<TR>
<TD height=5>
<HR align=center color=#cccccc noShade SIZE=1>
</TD></TR></TBODY></BODY></HTML>
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -