Comsteed | 航纶

        天行健,君子以自强不息;地势坤,君子以厚德载物.

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

OS环境:     windows xp sp2
server:      jboss3.2.2
ejb version: 2.0

看了一些书本和网上的例子,运行总会碰到一些问题,经过总结,发现了一些问题没有说明:

1、客户端的factory的jdni设置,在Client中代码设置,或者设置jdni.properties
        Hashtable env = new Hashtable();  
        env.put("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
       env.put("java.naming.provider.url","localhost:1099");
        env.put("java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces");
        try{
             InitialContext ctx=new InitialContext(env);
             ......

2、环境变量的设置
       参见下文第四步

一、结构
         EJB(文件夹)
          |
          |--*.class
          |
          |--META-INF
                  |
                  |-ejb-jar.xml
                  |-jboss.xml

二、打包相关的文件
   jar -cf till.jar ./*.class ./META-INF(till是我的ejb的名字)
   生成till.jar文件,这个文件将要放到jboss的deploy中去。

三、客户端
---------------------------------------------------------------------------------------------
import java.util.*;
import javax.naming.*;
import javax.rmi.*;

public class Client{
      private TillHome home;
      public static void main(String[] args){
            Client cl=new Client();
            cl.init();
            cl.pay();
      }
      public void init(){
            Hashtable env = new Hashtable();   
            env.put("java.naming.factory.initial","org.jnp.interfaces.NamingContextFactory");
           env.put("java.naming.provider.url","localhost:1099");
            env.put("java.naming.factory.url.pkgs","org.jboss.naming:org.jnp.interfaces");

           try{
                InitialContext ctx=new InitialContext(env);
                Object obj=ctx.lookup("ejb/till");
                home=(TillHome)PortableRemoteObject.narrow(obj,TillHome.class);
           }
           catch(Exception e){
                 e.printStackTrace();
                 System.exit(1);
           }
      }
      public void pay(){
            Book[] books={new Book("Java","John Hunt",29.50,"1111"),
            new Book("XML","Chris Loftus",45.00,"1112"),
            new Book("UML","Denise Cooke",19.90,"1113")};
            try{
                 System.out.println("You must pay:");
                 Till till=home.create();
                 System.out.println(till.getTotal(books));
            }
           catch(Exception e){
                  e.printStackTrace();
                  System.exit(1);
            }
      }
}
-------------------------------------------------------------------------------
四、需要的环境变量
    4.1 j2ee.jar需要加入classpath中,否则会:java.lang.NoClassDefFoundError: javax/ejb/EJBObject
    4.2 jboss-3.2.3\client\jbossall-client.jar需要加入classpath中,否则会: javax.naming.NoInitialContextException: Cannot instantiate class: org.jnp.interfaces.NamingContextFactory

    说明:或者把j2ee.jar和jbossall-client.jar复制到你的JRE安装目录下C:\Program Files\Java\j2re1.4.2\lib\ext\

五、启动服务
    把第二步生成的till.jar放置到 jboss-3.2.3\server\default\deploy\目录下,然后启动jboss服务器。

六、运行客户端
    java Client
     ---------------------
     结果。。。   

=====================================================================

      <xsd:schema xmlns="http://www.w3.org/2001/XMLSchema"

          targetNamespace="http://java.sun.com/xml/ns/j2ee"
           xmlns:j2ee="http://java.sun.com/xml/ns/j2ee"
           xmlns:xsd="http://www.w3.org/2001/XMLSchema"

        http://java.sun.com/xml/ns/j2ee
        and by indicating the version of the schema by
       using the version element as shown below:
       
          <ejb-jar xmlns="http://java.sun.com/xml/ns/j2ee"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
                http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd"
            version="2.1">
            ...
          </ejb-jar>

posted on 2008-03-27 21:09  航纶  阅读(175)  评论(0编辑  收藏  举报