#副標=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------------------------