前期准备:弄清楚weblogic(或jboss)、tomcat、JBluder(或eclipse+MyEclipse)的使用方法,能写一个简单的基于struts框架的web工程,然后准备两台联网的电脑(局域网也可以),如果没有条件,也可以在同一台电脑上分别安装两个web服务器(例如:weblogic和tomcat)来代替,本文将采用后一种方法,采用weblogic作EJB容器,tomcat作web容器,用struts工程来调用EJB
准备好了吗?让我们开始下一步
第一步:写一个简单的EJB。写EJB最好用的还是JBuilder,毕竟够傻瓜化。当然作为专业人士,eclipse搭配MyEclipse是最佳选择,不过作为初学者,建议采用JBuilder。以下是本文测试所用到的EJB。
remote接口:
package testhello;
import javax.ejb.EJBObject;
public interface SayHello extends EJBObject {
public String sayHello(String name) throws java.rmi.RemoteException;
}
home接口:
package testhello;
import javax.ejb.EJBHome;
import javax.ejb.CreateException;
import java.rmi.RemoteException;
public interface SayHelloHome extends EJBHome {
public SayHello create() throws CreateException, RemoteException;
}
bean类:
package testhello;
import javax.ejb.SessionBean;
import javax.ejb.SessionContext;
import javax.ejb.CreateException;
public class SayHelloBean implements SessionBean {
SessionContext sessionContext;
public void ejbCreate() throws CreateException {
}
public void ejbRemove() {
}
public void ejbActivate() {
}
public void ejbPassivate() {
}
public void setSessionContext(SessionContext sessionContext) {
this.sessionContext = sessionContext;
}
public String sayHello(String name) {
return "Hello "+name;
}
}
如果你是采用上面两种工具来写的话,配置文件就不必考虑了
第二步:利用JBuilder或eclipse将这个EJB工程编译并打包,会得到一个jar(如果你的工程名叫testhello,那么这个jar文件就是testhello.jar)文件。如果你的EJB容器(weblogic或JBoss)是在本机上,那么在JBuilder或eclipse中就可以直接鼠标右击EJB工程,来部署EJB。如果需要部署到远程服务器上,只需要通过EJB容器的控制台将testhello.jar上传到远程端,然后在EJB Modler里面按提示部署好EJB。最后,别忘了在JNDI Tree里面察看你的EJB工程的JNDI名,本例的JNDI名叫SayHello
第三步:将remote接口和home接口打包成jar文件,copy到你要远程调用EJB的struts工程下的lib目录(例如:helloapp ->WEB-INF ->lib)
第四步:将weblogic的weblogic.jar(在weblogic的安装目录->weblogic81->server->lib文件夹中)copy到tomcat安装目录下的->shared->lib文件夹中,其实这里我们需要用到的只是weblogic.jar里的几个class文件而已,不过对于初学者而言,先不必去深究到底只需要那几个class。
第五步:编写一个简单的struts工程(其实这些都可以用工具生成),一下是调用EJB的HelloAction的源代码(特别要注意的是,记得要将之前第三步生成的jar包导入编辑器中,否则下面的代码编译通不过。如果你不知道导入jar包,就把那个jar包多copy一份到你的jdk安装目录 -> jre-> lib-> ext文件夹下)
package logging.actions;
import logging.Constants;
import java.util.*;
import javax.servlet.ServletException;
import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.rmi.PortableRemoteObject;
import org.apache.struts.action.Action;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.action.ActionMessage;
import org.apache.struts.action.ActionMessages;
import org.apache.struts.util.MessageResources;
import org.apache.struts.validator.DynaValidatorForm;
public final class HelloAction extends Action{
public ActionForward execute(ActionMapping mapping,
ActionForm form,
HttpServletRequest request,
HttpServletResponse response)
throws Exception{
InitialContext ctx=this.getInitialContext();
//查找JNDI名为SayHello的EJB组件
Object obj=ctx.lookup("SayHello");
//获得远程EJB组件的home接口的引用
testhello.SayHelloHome home=(testhello.SayHelloHome)PortableRemoteObject.narrow(obj,testhello.SayHelloHome.class);
//获得远程EJB组件的remote接口的引用
testhello.SayHello hello=home.create();
String name="飘然随风";
String sayString=hello.sayHello(name);
request.setAttribute("userName",name);
request.setAttribute("passWord",sayString);
request.removeAttribute(mapping.getAttribute());
return mapping.findForward("loginSuccess");
}
/*以下方法是作用是:通过传递环境属性选择JNDI驱动和服务器的网络位置,
并连接到连接到JNDI树。
这是采用weblogic做EJB容器时,远程调用EJB的固定初始化模式,初学者可以死记下来
*/
private InitialContext getInitialContext() throws Exception {
//EJB容器的地址
String url = "t3://image:7001";
String user = null;
String password = null;
Properties properties;
properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
properties.put(Context.PROVIDER_URL, url);
if (user != null) {
properties.put(Context.SECURITY_PRINCIPAL, user);
properties.put(Context.SECURITY_CREDENTIALS,
password == null ? "" : password);
}
return new javax.naming.InitialContext(properties);
}
}
第六步:如果你严格按照上面的步骤做了,那么剩下的就是同时启动weblogic和tomcat来测试了。
分享到:
相关推荐
这是在采用WebLogic作为EJB容器时,远程调用EJB的一种常见模式。初学者可以通过这种方式熟悉基本的远程调用流程。 6. **注意事项** - 在实际部署过程中,需要注意EJB的版本兼容性问题,以及安全认证机制。例如,...
每个会话Bean都需要一个远程接口,用于定义客户端可以通过网络调用的方法。示例代码中定义了一个名为`CompanyRemote`的接口: ```java package com.earth; import javax.ejb.Remote; @Remote public interface ...
### EJB3图文教程之开发Session Bean:...通过以上步骤,你已经掌握了如何在JBuilder2007中开发、部署和测试EJB3.0的Session Bean。这是一个从理论到实践的完整过程,希望能帮助你在实际项目中更高效地应用EJB技术。
远程调用 在客户端,通过JNDI查找服务,获取Bean的代理实例,然后调用其业务方法。JNDI(Java Naming and Directory Interface)是Java中用于查找和绑定对象的接口。 通过以上步骤,你就成功地创建了一个EJB2工程...
`HelloWorldBean`使用`@Stateless`和`@Remote`注解,分别表示这是一个无状态会话Bean,并且提供了远程调用的方法。 #### 发布与部署 发布EJB应用有两种常见方式: 1. **通过Eclipse发布**:可以直接在Eclipse中...
在EJB应用中,经常需要一个EJB组件调用另一个EJB组件的方法。资源注入(Resource Injection)是Java EE中一种强大的机制,用于简化EJB之间的通信。 - **16.5.7 拦截器** 拦截器是一种可以拦截方法调用并在方法...
在ejbModule目录下创建一个SessionBean,定义一个无状态(Stateless)的Session Bean,同时选择Remote接口,这意味着客户端将通过远程接口与Session Bean进行通信。 4. 为HelloWorldBean编写实现代码。我们需要在...
本章介绍了JSF应用的一些高级特性,包括国际化、页面布局、Facelets、Ajax和远程调用等内容。 #### 九、JSF与EJB Hibernate Spring整合 ##### 9.1 JSF + EJB Enterprise JavaBeans (EJB) 是Java EE的一个规范,...
部署成功后,我们就可以通过客户端程序调用远程接口来使用无状态会话Bean提供的服务了。 #### 五、总结 通过上述步骤,我们成功地开发了一个无状态会话Bean,并了解了其实现的基本流程。无状态会话Bean因其简单性和...
4. **生成存根和骨架**:使用`rmic`工具编译`CalculatorImpl`类,该工具会生成两个辅助类`Calculator_stub`和`Calculator_Skel`,分别用于客户端和服务端的远程调用支持。 5. **注册远程对象**:在服务器端,通过`...
9. 远程访问:EJB支持远程接口调用,使得客户端可以跨网络调用服务器端的业务逻辑。 10. Web服务:可以将EJB组件暴露为Web服务,以便跨平台调用。 11. 持久化:EJB支持实体bean,可以与数据库进行交互。 12. 缓存:...
Endpoint的实现是将Java应用转换成计算按需远程执行的模型的最后一步。通过Endpoint的实现,Java应用可以被转换成计算按需远程执行的模型。 本文对基于Java应用转换的计算按需远程执行开发与实现进行了详细的介绍,...
阿里巴巴在远程调用方面的实践也经历了从EJB到RPC,再到定制框架的过程。 - **EJB时代**:利用容器提供的事务管理、连接池等服务,实现了透明的分布式调用。 - **RPC**:引入了RMI/Hessian、XML-RPC/WS等技术,...
- **实现类中的代码**:要使一个类能够被远程调用,需要确保该类实现了 `java.rmi.Remote` 接口,并且在某处调用了 `UnicastRemoteObject.exportObject()` 方法来导出远程对象。 - **选项解析**: 1. 在实现类的...
在 Java RMI 的实现中,反射是实现方法远程调用的关键技术。而像 JNDI、EJB、Web Service 等 JavaEE 技术,虽然它们是基于 RMI 的,但其背后也离不开反射技术的支持。 在使用反射技术时,Java 程序可以执行以下操作...
- 减少远程调用,远程调用通常比本地调用消耗更多的资源。 - 使用高效的集合类,如ArrayList比Vector更高效。 - 优化业务逻辑,避免冗余计算和循环中的重复操作。 #### 3. 结论 构建高性能的J2EE分布式Web应用...
通过这种方式,JBoss不仅使J2EE应用程序能够被远程调用,还提供了与Web服务相关的开发经验。 Java消息服务(JMS)是企业级消息传递的Java API,JBoss也提供了对JMS的支持,包括消息驱动Bean等。这些技术使得应用...
例如,JSF可以利用EJB进行远程服务调用,利用JPA进行持久化操作,利用CDI进行依赖注入。 7. JSF与MVC模式:JSF遵循Model-View-Controller模式,其中Facelets作为视图,模型通常由JavaBeans实现,而控制器则由JSF...