HelloWorldHome home = (HelloWorld)ctx.lookup("HelloEJB.HelloWorldHome");//这里lookup的是你的Home JNDI name 也就是你写的HelloWorldEJB不是HelloEJB.HelloWorldHome你先把helloworld。jar部署到weblogic然后运行client 还有因为client和你的jar包不在同一个jvm 所以要用远程调用HelloWorldHome home = (HelloWorldHome)javax.rmi.PortableRemoteObject.narrow(ctx.lookup("HelloWorldEJB"),HelloWorldHome.class);
解决方案 »
- 关于session 和servletConntext
- java搭建文件服务器
- PreparedStatement 使用方法的问题
- <html:select property="books" multiple="true" size="5">
- struts 2的dtd声明问题(菜鸟问题)
- spring+struts+ejb+jpa,实体映射上配有懒加载的,在web端调用会导致no sesssion or session has closed错误
- 在jsp中用jdbc-odbc连接sql srver的问题!
- j2ee典型例子的那些文件怎知编译啊?
- 请问j2sdkee怎么用?(j2ee1。3)
- 加载数据库始终找不到,为嘛?jdbc包也加了的。
- weblogic6.0过期
- jbuilder连MS-SQL出现问题
Properties properties = new Properties(); properties.put(Context.INITIAL_CONTEXT_FACTORY, "weblogic.jndi.WLInitialContextFactory");
properties.put(Context.PROVIDER_URL, "t3://localhost:80");
properties.put(Context.SECURITY_PRINCIPAL, "system");
properties.put(Context.SECURITY_CREDENTIALS, "weblogic"); InitialContext initialcontext = null;
try {
initialcontext = new InitialContext(properties);
} catch (NamingException namingexception){ }
return initialcontext;
} public static Object narrow(Class class1, Class class2)
{
Context context = getInitialContext();
Object obj = null;
try {
Object obj1 = context.lookup(class1.getName());
EJBHome ejbhome = (EJBHome)PortableRemoteObject.narrow(obj1, class1);
Method method = class1.getMethod("create", new Class[0]);
obj = PortableRemoteObject.narrow(method.invoke(ejbhome, null), class2);
context.close();
} catch(Exception e) { }
return obj;
}}
使用方法:
TTAllDetailEjb lEjb = (TTAllDetailEjb)RzEjbTools.narrow( TTAllDetailEjbHome.class, TTAllDetailEjb.class);
mTotalCount = lEjb.getCount(getCmEjbProperty(), mTTAllDetailTSData);
经初步改动,我的client代码如下
import javax.ejb.*;
import javax.naming.*;
import java.rmi.*;
import java.util.Properties;public class TestHelloEJB
{
public static void main(String[] args)
{
try
{
Context ctx = getInitialContext();
HelloWorldHome home = (HelloWorldHome)javax.rmi.PortableRemoteObject.narrow
(ctx.lookup("HelloWorldEJB"),HelloWorldHome.class);
System.out.println("Creating Demo\n");
HelloWorld hw = home.create();
System.out.println("The result is " + hw.HelloWorld());
}
catch (Exception e)
{
System.out.println(" => Error <=");
}
}
static String user = "system";
static String password = "88888888";
static String url = "t3://172.16.5.70:7001";
static public Context getInitialContext() throws Exception
{
Properties p = new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.T3InitialContextFactory");
p.put(Context.PROVIDER_URL, url);
p.put(Context.SECURITY_PRINCIPAL, user);
p.put(Context.SECURITY_CREDENTIALS, password);
InitialContext intialcontext = null;
try
{
initialcontext = new InitialContext(p);
} catch (NamingException namingexception){}
return intialcontext;
}
}我的HelloWorld.jar也已经部署好了
现在我启动WebLogic6.1,再编译,仍然出错:--------------------Configuration: TestHelloEJB - j2sdk1.4.1_02 <Default>--------------------
D:\work\EJB\TestHelloEJB\TestHelloEJB.java:28: cannot resolve symbol
symbol : class HelloWorldHome
location: class TestHelloEJB
HelloWorldHome home = (HelloWorldHome)javax.rmi.PortableRemoteObject.narrow
^
D:\work\EJB\TestHelloEJB\TestHelloEJB.java:28: cannot resolve symbol
symbol : class HelloWorldHome
location: class TestHelloEJB
HelloWorldHome home = (HelloWorldHome)javax.rmi.PortableRemoteObject.narrow
^
D:\work\EJB\TestHelloEJB\TestHelloEJB.java:29: cannot resolve symbol
symbol : class HelloWorldHome
location: class TestHelloEJB
(ctx.lookup("HelloWorldEJB"),HelloWorldHome.class);
^
D:\work\EJB\TestHelloEJB\TestHelloEJB.java:35: cannot resolve symbol
symbol : class HelloWorld
location: class TestHelloEJB
HelloWorld hw = home.create();
^
D:\work\EJB\TestHelloEJB\TestHelloEJB.java:64: cannot resolve symbol
symbol : variable initialcontext
location: class TestHelloEJB
initialcontext = new InitialContext(p);
^
5 errorsProcess completed.
请问会不会是WebLogic6.1的问题?
我把它装好后就没配置过。
学起来比较方便点一方面,JBuilder生成EJB比较方便
还有厂商特性,比如weblogic有很多weblogic-ejb-jar.xml 之类的所以用JBuilder,可以自动生成这些,
然后再去学会方便很多
你的testHelloWorld没有加package debug 当然找不到。。或者 import debug.*; 不过要把HelloWorldHome 和 HelloWorld放进classpath
是指要除了用WebLogic的Console install一个ejb外,还要在有WebLogic的那台机器上设置classpath对吗?
2,import debug.*;
是要在client的源代码里加上吗?
也就是说编译的时候必须把client的程序和ejb的程序放在一起编译?
你能详细的说一下吗?万分感谢
你的客户端我想肯定放在你jb项目的debug 目录下面而你的jb classpath 自动指向你的项目目录debug 所以你的TestHelloEJB 应该在开始的地方写上package debug;
就可以了 这个和你的ejb没有任何关系
只是你的这个类文件没有通过编译 在开始的地方放上上面那句 或者干脆把代码拷出来 删掉
用jb new 一个出来 第一行package 。。不要动 其他全部覆盖