对不起,一直没有看到这个贴子。 Properties h = new Properties(); h.put(Context.INITIAL_CONTEXT_FACTORY, "com.ibm.ejs.ns.jndi.CNInitialContextFactory"); h.put(Context.PROVIDER_URL,"iiop://localhost:9019");
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
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; } }
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..
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是非常不成熟的架构,有些问题,由于水平有限,真的没办法解决。
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
而
Record duke = home.create(new RecordKey(i));
//从出错上看是NullPointerException
因此是create失败
不知道你的RecordKey(i)的自变量i是 java.lang.String 还是integer型
如果是String,应该转换i
但还是多谢各位指教...
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..
[email protected]
你的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是非常不成熟的架构,有些问题,由于水平有限,真的没办法解决。
Home 接口中 create() 不用 RecordKey 作为输入参数,在你程序里,改用 int 就行了;
bean 实现中 EntityContext context 访问属性改为 public;
Remote 接口中 getByte -> getBytev ,其它方法也照样修改,符合 javabean 命名习惯。
你发现的那个异常我细细看了一下,我也有..
看来是我的EJB根本就没有发布成功..
你们讲的几个方法我已经试过了,还是没有成功..是啊,我也很讨厌EJB1.0,但没有办法呀,公司的产品必须要支持Webspher3.5这个看似流行的application server..我一定不会放弃的..
多谢两位了...
成功后请两位吃饭..:),:)..有空多联系讨论讨论java(不好意思,我只会Java..:),:)..)
这是Webshpere的一个bug..
原因是websphere3.5当中用jdk1.2.2.
如果我用jdk1.3作为客户端运行Client端的应用程序,它就会抛出我上面讲的那个错误,
我直接用jdk1.2.2运行我的client端的程序,成功了...
感谢hicharlie(黑查理),luodi(无知者无畏),Brain(天黑了)
看错了一行...希望不要见怪..