我想是没有太多人懂吧,我也不懂。我是一名做了三年的 PowerBuilder 的程序员,最近想进入 Java 领域,能做个朋友吗?

解决方案 »

  1.   

    对不起,一直没有看到这个贴子。  
             Properties h = new Properties();
              h.put(Context.INITIAL_CONTEXT_FACTORY,
                  "com.ibm.ejs.ns.jndi.CNInitialContextFactory");
              h.put(Context.PROVIDER_URL,"iiop://localhost:9019");
                        
         Context initial = new InitialContext(h);
         Object objref = initial.lookup("Record");
    应该是lookup出错,缺省安装的端口地址是900,但可以通过配置文件来改。
    在D:\WebSphere\AppServer\properties\iiopredirector.xml有这个端口的值。
    建议打开WebSphere的控制台,找到你发布的EJB,看它的JNDI到底是什么!建议到这里看看,有JBuilder的一些资料
    hicharlie.at.china.com
      

  2.   

    抱歉没有看见这个贴子。 :)对Websphere 我不太熟悉,原因可能象 hicharlie 讲的一样,问题出在你 Deploy 的时候的有关 JNDI 的设置上,你的 Deployment Descriptor 里的设置是怎么样的,再仔细检查一下。
      

  3.   

    for(int i = 0; i < 20; i++) {
              Record duke = home.create(new RecordKey(i));
            //从出错上看是NullPointerException
    因此是create失败
    不知道你的RecordKey(i)的自变量i是 java.lang.String 还是integer型
    如果是String,应该转换i
      

  4.   

    although i still do not solve 问题..
    但还是多谢各位指教...
    to :hicharlie(黑查理).. 我已经试过了端口900.and 我也已经看了JNDI,没有问题..
    我是大汉族人...:),:)..多谢..
    to: luodi(无知者无畏).. 我的Deployment Descriptor应该是没有什么问题,我已经完全deploy成功了, 多谢了,看得出来你工作很辛苦..
    to: Brain(天黑了).. 我的RecordKey(int id)..是接受int的,不是String or Integer..
    我看了webshphere当中的那个example--account. 它的primary key class的构造函数的参数是的long, 就是说参数是不一定需要用class来封装的..
    这里是source code of RecordKey..
    package record;import java.io.*;
    public class RecordKey implements Serializable {
         public int intv;
          
         public RecordKey() { 
         }
         
         public RecordKey(int intv) { 
              this.intv = intv; 
         }
         
         // EJB server (AE)-specific method
         public boolean equals(Object o) {
              if (o instanceof RecordKey) {
                   RecordKey otherKey = (RecordKey) o;
                   return (intv==otherKey.intv);
              }
              else {
                   return false;
              }
         }
         
         // EJB server (AE)-specific method
         public int hashCode() { 
              return ((new Integer(intv)).hashCode());
         }
    }-----------------
    但我的问题依然没有解决,水平有限,请大家多帮忙...
    我的分析..
    1. 我没有用Visual Age, 我用的是jetace tool来处理这几个class.,我在用这个tool的时候没有做什么特别的设置,有没有可能用这个tool需要特别的注意的地方..
    2. 我现在手头有我配置websphere3.5+db2的详细过程的文档...
    我把它放在  http://xueaihua.at.china.com/websphere.doc 供大家下载。下面是我的home interface source code..
    package record;import java.sql.*;
    import java.util.Enumeration;
    import java.rmi.RemoteException;
    import javax.ejb.*;public interface RecordHome extends EJBHome {
       public abstract Record create(RecordKey recordKey) throws RemoteException, CreateException;
        
       public abstract Record findByPrimaryKey(RecordKey recordKey) 
            throws FinderException, RemoteException;
    /*    
       public abstract Enumeration findByIndex(int idx)
            throws FinderException, RemoteException;   public abstract Enumeration findInRange(Date low, Date high)
            throws FinderException, RemoteException;

       public abstract Enumeration findAll()
            throws FinderException, RemoteException;
    */        
    }这里是remote interface sourcecode:
    package record;import java.util.*;
    import javax.ejb.EJBObject;
    import java.rmi.RemoteException;public interface Record extends EJBObject {
       public abstract int getInt() throws RemoteException;   
       public abstract byte getByte() throws RemoteException;   
       public abstract short getShort() throws RemoteException;
       public abstract long getLong() throws RemoteException;
       public abstract float getFloat() throws RemoteException;
       
       public abstract double getDouble() throws RemoteException;
       public abstract String getString() throws RemoteException;
    //   public char getChar() throws RemoteException;
       public abstract java.sql.Date getDate() throws RemoteException;
    }这里是bean..
    package record;import java.sql.*;
    import java.rmi.*;
    import javax.ejb.*;public class RecordBean implements EntityBean {
       public int getInt() throws RemoteException {
          return intv;
       }
       
       public byte getByte() throws RemoteException {
          return bytev;
       }
       
       public short getShort() throws RemoteException {
          return shortv;
       }
       
       public long getLong() throws RemoteException {
          return longv;
       }
       
       public float getFloat() throws RemoteException {
          return floatv;
       }
       
       public double getDouble() throws RemoteException {
          return doublev;
       }
       
       public String getString() throws RemoteException {
          return stringv;
       }
    /*   
       public char getChar() throws RemoteException {
          return charv;
       }
    */   
       public java.sql.Date getDate() throws RemoteException {
          return datev;
       }   public void ejbCreate(RecordKey recordKey) throws CreateException {
          intv = recordKey.intv;
          
          bytev = (byte) (intv + 1);
          shortv = (short) (intv * 2);
          longv = intv * 3;
          floatv = intv / 2.0f;
          doublev = intv / 3.0;
          stringv = "record " + intv;
    //      charv = (char) ('a' + intv);
          datev = new Date(956789355701L + intv*1000*60*60*24);
       }   public void setEntityContext(EntityContext context) throws RemoteException {
          this.context = context;
       }   public void unsetEntityContext() throws RemoteException {
          context = null;
        }
        
       public void ejbActivate() throws RemoteException { }
       public void ejbPassivate() throws RemoteException { }
       public void ejbRemove() throws RemoteException { }
       public void ejbLoad() throws RemoteException { }
       public void ejbStore()throws RemoteException { }
       public void ejbPostCreate(RecordKey recordKey) throws RemoteException {}   private EntityContext context;
       
       public int intv;
       
       public byte bytev;
       public short shortv;
       public long longv;
       public float floatv;   
       public double doublev;   
       public String stringv;
    //   public char charv;
       public Date datev;
    } // ProductEJB 我的mail是 [email protected]..
    最近主要在配置weblogic5.1+oracle8i,和websphere3.5+db2中的EJB..
    我现在有详细的weblogic5.1+oracle8i中配置EJB的全过程的细节文档..
    想用来感谢大家对 我配webshphere的帮助..
    需要给个EMail..
      

  5.   

    请将Jar文件,与源代码发给我,
    [email protected]
      

  6.   

    to javaservlet(java&c#),
    你的jar在我这里不能成功的发布,异常为“
    异常:
    Data source requiredjavax.ejb.CreateException: Data source required
    --------
    com.ibm.ejs.sm.client.command.ExecutionException: 创建时出错。 at com.ibm.ejs.sm.client.RepositoryOpException.<init>(RepositoryOpException.java:51) at com.ibm.ejs.sm.client.command.ExecutionException.<init>(ExecutionException.java:63) at com.ibm.ejs.sm.client.command.CreateCommand.execute(CreateCommand.java:105) at com.ibm.ejs.sm.client.command.CommandManager$ExecutionThread.run(CommandManager.java:264) at com.ibm.ejs.sm.client.command.ThreadPool$PooledThread.run(ThreadPool.java(Compiled Code))ejb1.0的entitybean是非常不成熟的架构,有些问题,由于水平有限,真的没办法解决。
      

  7.   

    建议作几个改进再试一下:
     
    Home 接口中 create() 不用 RecordKey 作为输入参数,在你程序里,改用 int 就行了;
    bean 实现中 EntityContext context 访问属性改为 public;
    Remote 接口中 getByte -> getBytev ,其它方法也照样修改,符合 javabean 命名习惯。
      

  8.   

    luodi(无知者无畏)说的很有道理,我用Ebj1.1的话,用bas平台把getByte改为getBytev,其他类似,很成功。
      

  9.   

    To: hicharlie(黑查理)
    你发现的那个异常我细细看了一下,我也有..
    看来是我的EJB根本就没有发布成功..
    你们讲的几个方法我已经试过了,还是没有成功..是啊,我也很讨厌EJB1.0,但没有办法呀,公司的产品必须要支持Webspher3.5这个看似流行的application server..我一定不会放弃的..
    多谢两位了...
    成功后请两位吃饭..:),:)..有空多联系讨论讨论java(不好意思,我只会Java..:),:)..)
      

  10.   

    多谢各位,本问题已经搞定了..
    这是Webshpere的一个bug..
     原因是websphere3.5当中用jdk1.2.2.
    如果我用jdk1.3作为客户端运行Client端的应用程序,它就会抛出我上面讲的那个错误,
    我直接用jdk1.2.2运行我的client端的程序,成功了...
    感谢hicharlie(黑查理),luodi(无知者无畏),Brain(天黑了)
      

  11.   

    不好意思,luodi(无知者无畏),我把35分给错人了,给了tarcyshu(tarcyshu)。。:),:)...
    看错了一行...希望不要见怪..