`

Applet调用EJB3的例子

阅读更多

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页面即可

 

分享到:
评论
2 楼 jvincent 2007-02-03  
我已经测试成功...
1 楼 wzw9258 2007-02-02  
不能直接调用,可以在applet用URL类调用一个链接,来读取数据

相关推荐

    java源码包---java 源码 大量 实例

    6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用...

    JAVA上百实例源码以及开源项目源代码

    1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()...

    JAVA上百实例源码以及开源项目源代码 java开源包2

    6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用...

    java源码包3

    6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用...

    JAVA编程百例(照着例子更容易!)

    实例3 数组数据操作 实例30 三围立方框 实例31 三围立方体 实例32 标准输入输出 实例33 读写文件(字节) 实例34 读写文件(字符操作) 实例35 获取文件信息 实例36 目录操作 实例37 读取随机文件 实例38 操作EXECL...

    成百上千个Java 源码DEMO 3(1-4是独立压缩包)

    1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()...

    J2EE中文版指南 CHM格式 带全文检索

    包含Java小程序(applet) 185 扩展JSP语言 187 第12章 JSP页面中的JavaBean组件 189 JavaBean组件设计约定 189 为什么要使用JavaBean组件 190 创建并使用JavaBean组件 190 设置JavaBean组件属性 190 返回JavaBean组件...

    java源码包2

    6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用...

    java源码包4

    6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用...

    成百上千个Java 源码DEMO 4(1-4是独立压缩包)

    1个目标文件 EJB 模拟银行ATM流程及操作源代码 6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()...

    h_JAVA 2应用编程150例.rar

    实例85 通过JSP调用Applet程序 285 实例86 JSP与XML的结合 288 第8章 Java安全控制编程 291 实例87 控制访问权限 292 实例88 产生密钥 296 实例89 单钥加解密 299 实例90 双钥加解密 301 实例91 数字签名 303 实例92...

    JAVA上百实例源码以及开源项目

    6个目标文件,EJB来模拟银行ATM机的流程及操作:获取系统属性,初始化JNDI,取得Home对象的引用,创建EJB对象,并将当前的计数器初始化,调用每一个EJB对象的count()方法,保证Bean正常被激活和钝化,EJB对象是用...

Global site tag (gtag.js) - Google Analytics