隨筆-17  評論-64  文章-79  trackbacks-1

          前期準備:弄清楚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來測試了。

          posted on 2007-03-28 20:36 飛鳥 閱讀(285) 評論(0)  編輯  收藏 所屬分類: Struts
          主站蜘蛛池模板: 奈曼旗| 图片| 富川| 宜黄县| 南靖县| 喀什市| 信宜市| 泽库县| 苏尼特左旗| 罗定市| 绍兴县| 衡东县| 冀州市| 栾川县| 夏河县| 彭水| 时尚| 乌兰浩特市| 永年县| 大安市| 常州市| 盖州市| 石柱| 台东市| 洛川县| 罗田县| 宣城市| 通化市| 改则县| 健康| 福泉市| 商南县| 古浪县| 伊宁县| 铁力市| 柏乡县| 阿克| 察隅县| 东莞市| 池州市| 乌拉特后旗|