#副標=Java 動態編譯、載入與執行Part (2) #大標=EJB Tier上的應用 #眉標=Java #作者=歐宣修 ----------------------box 程式1------------------- FacadeBean.java /** * Process單一窗口
* Last Modified Date:2005/01/02
* @author Senshaw * @ejb.bean * name="ejb/Facade" * type="Stateless" * view-type="remote" * transaction-type="Container" //…(1) */ public class FacadeBean implements SessionBean { 略… /** * @ejb.interface-method */ public String getResult(String process_name, String arg) { //…(2) ProcessFactory processFactory = ProcessFactoryImpl.getInstance();//…(3) Process process = processFactory.getProcess( process_name); log.debug("get Process"); return process.doProcess(arg); } -------------------------end-------------------------------- --------------------------box 程式2----------------------- ShowServlet2.java /** * 透過EJB取得Process處理結果
* Last Modified Date:2005/01/02
* @author Senshaw * @web.servlet name="ShowServlet2" //…(1) * @web.servlet-mapping url-pattern="/Show2.srv" */ public class ShowServlet2 extends HttpServlet { public void init() throws ServletException { Hashtable environment = new Hashtable(); //…(2) environment.put( Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory"); environment.put(Context. URL_PKG_PREFIXES, "org.jboss.naming:org.jnp.interfaces"); environment.put(Context.PROVIDER_URL, "jnp://localhost:1099"); try { context = new InitialContext(environment); } catch (NamingException ex) { log.error(ex); } try { //look up jndi name Object ref = context.lookup("ejb/Facade"); //…(3) //look up jndi name and cast to Home interface home = (FacadeHome) PortableRemoteObject. narrow(ref, FacadeHome.class); } catch (Exception ex) { log.error(ex); } log.debug("init ok"); } private void show(HttpServletRequest request, HttpServletResponse response) { String process_name = request.getParameter( "process"); //…(4) if (process_name == null) { process_name = "AProcess"; } log.debug("process_name=" + process_name); String arg = request.getParameter("arg"); if (arg == null) { arg = "nana"; } log.debug("arg=" + arg); try { Facade facade = home.create();//…(5) String result = facade.getResult(process_name, arg); facade.remove(); 以下略… } catch (Exception e) { e.printStackTrace(); } } } ---------------------------end----------------- ------------------box 程式3-------------------- TestJWS.java private JButton getBtRun() { //…(1) if (btRun == null) { btRun = new JButton(); btRun.setText("執行"); btRun.setFont(new java.awt.Font("Dialog", java.awt.Font.BOLD, 14)); btRun.setPreferredSize(new java.awt.Dimension( 70, 40)); btRun.addActionListener(new java.awt.event. ActionListener() { public void actionPerformed(java.awt.event.ActionEvent e) { ProcessFactory pf = ProcessFactoryImpl. getInstance(); //…(2) Process process=pf.getProcess("AProcess"); String result = process.doProcess( tfArg.getText()); lbResult.setText(result); } }); } return btRun; } private JButton getBtReload() { //…(3)  if (btReload == null) {   btReload = new JButton();   btReload.setPreferredSize(new   java.awt.Dimension(70,40));   btReload.setText("重載");   btReload.setFont(new java.awt.Font("Dialog",   java.awt.Font.BOLD, 14));   btReload.addActionListener(new   java.awt.event.ActionListener() {    public void actionPerformed(    java.awt.event.ActionEvent e) {     ProcessFactory pf = ProcessFactoryImpl.     getInstance(); //…(4)     pf.newClassLoader();    }   });  }  return btReload; } ------------------------end--------------------- --------------------box 程式4--------------------- testJWS.jnlp //…(1) 測試重載 Senshaw 測試重載 測試重載 //…(2) //…(3) ---------------------end------------------------