还有....测试客户端javabean
package bank;
import java.util.*;
import javax.naming.*;
import javax.rmi.*;public class bankbeankh {
  KeHuEJB zh=null;
  boolean login=false;
  public bankbeankh() {
    try{
       Hashtable ht = new Hashtable();
       ht.put(Context.INITIAL_CONTEXT_FACTORY,
       "weblogic.jndi.WLInitialContextFactory");
       ht.put(Context.PROVIDER_URL,"t3://127.0.0.1:7001");
       ht.put(Context.SECURITY_PRINCIPAL,"system");
       ht.put(Context.SECURITY_CREDENTIALS,"123456789");
       Context con = new InitialContext(ht);
       //查找home接口
       Object obj = con.lookup("KeHuEJB");
       KeHuEJBHome home =
              (KeHuEJBHome)PortableRemoteObject.narrow(obj,
               KeHuEJBHome.class);
      //由home接口创建远程接口
       zh = home.create();
    }catch(Exception e){System.out.println(e.toString());}
  }
  public boolean getLogin(){
    return this.login;
  }
  public String  dengLu(String account,String password){
    String message="";
    try{
    message=zh.dengLu(account,password);
    if(message.equals("")){
      login=true;
    }
    }catch(Exception e){message=e.getMessage();}
    return message;
  }
  public String quKuan(float money){
    String message="您还未登录";
    if(login==true){
    try{
      message=zh.quKuan(money);
    }catch(Exception e){message=e.getMessage();}
    }
    return message;
  }
  public String cunKuan(float money){
    String message="您还未登录";
    if(login==true){
    try{
      message=zh.cunKuan(money);
    }catch(Exception e){message=e.getMessage();}
    }
    return message;
  }
  public String chaXun(){
    String message="您还未登录";
    if(login==true){
    float balance;
    try{
      message=zh.chaXun();
    }catch(Exception e){}}
    return message;
  }
  public void Logout(){
    try{
      zh.remove();
      login=false;
    }catch(Exception e){}
  }
  public static void main(String[] args) {
    bankbeankh bankbeankh1 = new bankbeankh();
    String message="";
    message=bankbeankh1.dengLu("901","123");
   /* if(message==null){
      System.out.println("null");
    }else{
      System.out.println("成功");
    }
    System.out.println(message);
    */
    if(message.equals("")){
      System.out.println("登录成功");
    }else{
      System.out.println(message);
    }
    String kuan="";
  //  bankbeankh1.Logout();
    System.out.println(bankbeankh1.chaXun());
    kuan=bankbeankh1.quKuan(1900);
    if(kuan.equals("")){
      System.out.println("存款成功");
    }else{
      System.out.println(kuan);
    }
    System.out.println(bankbeankh1.chaXun());
    kuan=bankbeankh1.cunKuan(11121100);
    if(kuan.equals("")){
      System.out.println("取款成功");
    }else{
      System.out.println(kuan);
    }
    bankbeankh1.Logout();
    System.out.println(bankbeankh1.chaXun());
    bankbeankh1.Logout();
  }
}  
问题:
  public void ejbRemove() {
    /**@todo Complete this method*/
 //  start=false;
  try{
     con.close();//这个为什么要写啊,如果没写,只能客户端运行一次,第二次客户端运行时就提示java.lang.NullPointerException
    // stat.close();
    // context.close();
     login=false;
  }catch(Exception e){}
  }
而且weblogic服务器就不能提供服务了,其它的客户端也连不上这个EJB,这是怎么回事啊,请高手指教

解决方案 »

  1.   

    这很象SUN的DUKE的例子喔 
    CLOSE是必需的 
    感觉是第二次连上时 SESSIONBEAN仍存在系统中 且被钝化
    如果没有CLOSE掉CONNECTION会有问题
      

  2.   

    有种情况是这样的,如果客户运行中,突然死机了,客户端没有调用remove,那weblogic就不能用了,其它客户端也进不来了,那不是太不安全了吗?
      

  3.   

    con.close()方法是必须写的,每次在连接完数据库后就必须断开其连接