帮忙看看这个简单的bmp,
jb9+weblogic7
测试端:
import javax.naming.Context;
import java.util.Properties;
import java.rmi.RemoteException;
import javax.ejb.CreateException;
import javax.ejb.RemoveException;
import javax.naming.InitialContext;
import javax.naming.NamingException;
import javax.rmi.PortableRemoteObject;
import java.util.*;
import warehouse.*;
public class UserTableClient {
public static void main(String[] args) throws Exception{
//声明联接Weblogic服务器的属性类
Properties properties;
//声明寻找服务器对象的Context类
Context ctx;
//设置访问WebLogic服务器的参数
properties = new Properties();
properties.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
properties.put(Context.PROVIDER_URL, "t3://localhost:7001");
//创建JNDI对象的搜索器
ctx = new InitialContext(properties);
//使用lookup方法寻找UserTableRemote对象
Object UserTableJNDI = ctx.lookup("UserTableRemote");
//取得EJB的Home接口
UserTableRemoteHome home = (UserTableRemoteHome)PortableRemoteObject.narrow(
UserTableJNDI, UserTableRemoteHome.class);
//声明EJB的的Remote接口
UserTableRemote jackUser;
try{
//取得EJB的Remote接口
jackUser = home.findByPrimaryKey("wf");
}catch(Exception ex){
ex.printStackTrace();
System.out.println("出现异常");
}
}
}
服务端能正常显示查询结果,可是jb里出现:
----------------
java.lang.IllegalArgumentException: wrong number of arguments
Start server side stack trace:
java.lang.IllegalArgumentException: wrong number of arguments
at java.lang.reflect.Constructor.newInstance(Native Method)
at weblogic.rmi.internal.OIDManager.makeActivatableServerReference(OIDManager.java:203)
at weblogic.rmi.internal.OIDManager.getReplacement(OIDManager.java:129)
at weblogic.common.internal.RemoteObjectReplacer.getReplacement(RemoteObjectReplacer.java:265)
at weblogic.common.internal.RemoteObjectReplacer.replaceObject(RemoteObjectReplacer.java:107)
at weblogic.common.internal.ChunkedObjectOutputStream.replaceObject(ChunkedObjectOutputStream.java:53)
at weblogic.common.internal.ChunkedObjectOutputStream$NestedObjectOutputStream.replaceObject(ChunkedObjectOutputStream.java:239)
at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:323)
at weblogic.common.internal.ChunkedObjectOutputStream.writeObject(ChunkedObjectOutputStream.java:107)
at weblogic.rjvm.MsgAbbrevOutputStream.writeObject(MsgAbbrevOutputStream.java:82)
at warehousebeanp.UserTableBean_wg8twd_HomeImpl_WLSkel.invoke(Unknown Source)
at weblogic.rmi.internal.BasicServerRef.invoke(BasicServerRef.java:346)
at weblogic.rmi.cluster.ReplicaAwareServerRef.invoke(ReplicaAwareServerRef.java:114)
at weblogic.rmi.internal.BasicServerRef$1.run(BasicServerRef.java:300)
at weblogic.security.service.SecurityServiceManager.runAs(SecurityServiceManager.java:762)
at weblogic.rmi.internal.BasicServerRef.handleRequest(BasicServerRef.java:295)
at weblogic.rmi.internal.BasicExecuteRequest.execute(BasicExecuteRequest.java:30)
at weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:152)
at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:133)
End server side stack trace
at weblogic.rmi.internal.BasicOutboundRequest.sendReceive(BasicOutboundRequest.java:109)
at weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(ReplicaAwareRemoteRef.java:262)
at weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke(ReplicaAwareRemoteRef.java:229)
at warehousebeanp.UserTableBean_wg8twd_HomeImpl_WLStub.findByPrimaryKey(Unknown Source)
at warehousebeanp.UserTableClient.main(UserTableClient.java:43)
----------------------
也就是jackUser = home.findByPrimaryKey("wf")这句有问题,wrong number of arguments是什么意思?
findByPrimaryKey函数如下:
public String ejbFindByPrimaryKey(String name) throws FinderException {
System.out.println("ejbFinderByPrimaryKey:寻找用户(" + name + ")");
Connection con = null;
PreparedStatement ps = null;
try {
con = getConnection();
//为PreparedStatemet接口写入SQL语句
ps = con.prepareStatement("select * from userTable where name = ?");
//设置参数
ps.setString(1, name);
//返回数据集
ResultSet rs = ps.executeQuery();;
if (rs.next()) {
//设置EJB的password
password = rs.getString("password");
System.out.println("ejbFindByPrimaryKey: 用户名 (" + name + ") 找到");
return name;
} else {
String error = "ejbFindByPrimaryKey: 用户名 (" + name + ") 找不到";
System.out.println(error);
throw new ObjectNotFoundException (error);
}
} catch (SQLException sqe) {
throw new EJBException (sqe);
} finally {
//将数据库联接返回缓冲池
cleanup(con, ps);
}
}
谁帮看看,在此谢过!