论坛首页 Java企业应用论坛

Applet调用EJB3的例子

浏览 3746 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-01-31  

EJB3已经出来了一段时间,这两天对它的功能进行了测试.发现与以前版本比较已经有了很大的改变..

测试环境:JBoss4.0.5.GA,Eclipse3.2.1.由于只是测试并没有与数据库进行连接..

1、定义需要在客户端进行调用的接口

java 代码
  1. package com.service.ejb3;   
  2.   
  3. /**  
  4.  * 提供给客户端的接口  
  5.  * @author xzgf <a href='mailto:javac_oracle@163.com'>javac_oracle@163.com</a>  
  6.  * @create 2007-1-31  
  7.  *  
  8.  */  
  9. public interface HelloWorld {   
  10.     public String SayHello(String name);   
  11. }  

定义了一个SayHello的方法.参数为一个String

2、服务器端需要实现这个接口:

java 代码
  1. package com.service.ejb3.impl;   
  2.   
  3. import java.util.Date;   
  4.   
  5. import javax.ejb.Remote;   
  6. import javax.ejb.Stateless;   
  7.   
  8. import org.apache.commons.lang.time.StopWatch;   
  9. import org.apache.commons.logging.Log;   
  10. import org.apache.commons.logging.LogFactory;   
  11.   
  12. import com.service.ejb3.HelloWorld;   
  13. import com.service.pub.DateUtil;   
  14.   
  15. /**  
  16.  * 客户端接口的实现类...服务器端   
  17.  * @author xzgf <a href='mailto:javac_oracle@163.com'>javac_oracle@163.com</a>  
  18.  * @create 2007-1-31  
  19.  *  
  20.  */  
  21.   
  22. @Stateless  
  23. @Remote ({HelloWorld.class})   
  24. public class HelloWorldBean implements HelloWorld {   
  25.   
  26.     private static Log log = LogFactory.getLog(HelloWorldBean.class);   
  27.        
  28.     public String SayHello(String name) {    
  29.         StopWatch sw = new StopWatch();   
  30.         sw.start();   
  31.         log.debug("Begin execute in service:" + name + " Time:"  + DateUtil.CN_DATETIME.format(new Date()));   
  32.            
  33.         String str = name + ": Hello,World." ;   
  34.         sw.stop();   
  35.         str += DateUtil.CN_DATETIME.format(new Date());   
  36.            
  37.         log.debug("Over execute in service:" + str + " Time:" + DateUtil.CN_DATETIME.format(new Date()));   
  38.         return str;   
  39.     }   
  40. }  

实现很简单,根据客户端传入的String,加上Hello,World和当前服务器时间后返回.

3、实现客户端调用.采用applet.优点:比较容易实现一些在Web下不好实现的界面功能.缺点:需要在客户端安装jre并有一定量的代码下载量.

java 代码
  1. package com.client.ejb3;   
  2.   
  3. import java.awt.BorderLayout;   
  4. import java.awt.Dimension;   
  5. import java.awt.event.ActionEvent;   
  6. import java.awt.event.ActionListener;   
  7. import java.util.Properties;   
  8.   
  9. import javax.naming.InitialContext;   
  10. import javax.swing.JApplet;   
  11. import javax.swing.JButton;   
  12. import javax.swing.JOptionPane;   
  13.   
  14. import com.service.ejb3.HelloWorld;   
  15.   
  16. /**  
  17.  * 客户端  
  18.  *   
  19.  * @author xzgf <a href='mailto:javac_oracle@163.com'>javac_oracle@163.com</a>  
  20.  * @create 2007-1-31  
  21.  *   
  22.  */  
  23. public class MyApplet extends JApplet {   
  24.   
  25.     private HelloWorld hw = null;   
  26.   
  27.     private void initSelf() {   
  28.   
  29.         Properties props = new Properties();   
  30.   
  31.         props.setProperty("java.naming.factory.initial""org.jnp.interfaces.NamingContextFactory");   
  32.         props.setProperty("java.naming.provider.url""localhost:1099");   
  33.         props.setProperty("java.naming.factory.url.pkgs""org.jboss.naming:org.jnp.interfaces");   
  34.   
  35.         InitialContext ctx = null;   
  36.         try {   
  37.             if (props == null) {   
  38.                 props = System.getProperties();   
  39.             }   
  40.             ctx = new InitialContext(props);   
  41.             if (ctx == null) {   
  42.                 System.out.println("InitialContext is null");   
  43.             }   
  44.             hw = (HelloWorld) ctx.lookup("HelloWorldBean/remote");   
  45.             if (hw == null) {   
  46.                 System.out.println("HelloWorld is null.");   
  47.             }   
  48.         } catch (Exception e) {   
  49.             e.printStackTrace();   
  50.         }   
  51.   
  52.         JButton button = new JButton();   
  53.         button.setText("Test Button");   
  54.         button.addActionListener(new ActionListener() {   
  55.   
  56.             public void actionPerformed(ActionEvent e) {   
  57.                 onClick();   
  58.             }   
  59.   
  60.         });   
  61.   
  62.         getContentPane().setLayout(new BorderLayout());   
  63.         getContentPane().add(button, BorderLayout.NORTH);   
  64.     }   
  65.   
  66.     private void onClick() {   
  67.         JOptionPane.showMessageDialog(this, hw.SayHello("xzgf"));   
  68.     }   
  69.   
  70.     @Override  
  71.     public void init() {   
  72.         // TODO Auto-generated method stub   
  73.         this.setSize(new Dimension(800900));   
  74.         super.init();   
  75.         initSelf();   
  76.     }   
  77. }   

 

4、用JSP实现applet的加载:

java 代码
  1. <jsp:plugin code="com.client.ejb3.MyApplet" archive="client.jar" codebase="./applet" type="applet">   
  2. </jsp:plugin>  

5、部署时需要注意的是:由于在jsp中指定了codebase和archive,所以客户端会在此目录下的client.jar进行类查找.所以需要把JBoss中自带的jbossall-client.jar、jboss-aop-jdk50-client.jar、jboss-aspect-jdk50-client.jar、jboss-ejb3-client.jar解压后和applet主类即MyApplet一起打成一个client.jar.否则会报类找不到异常.下一步会解决这个问题...

6、部署后访问上面的jsp页面即可

 

   发表时间:2007-02-02  
不能直接调用,可以在applet用URL类调用一个链接,来读取数据
0 请登录后投票
   发表时间:2007-02-03  
我已经测试成功...
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics