难道国内的java就停留在swing,jsp上吗?
没人知道关心ejb2.0的事吗?
没人知道关心ejb2.0的事吗?
解决方案 »
- 不知道这个问题算不算网页爬虫
- java.lang.NullPointerException
- 后台报出 java.lang.IllegalArgumentException: No SqlMapClient specified 是什么原因啊
- 请问大虾们一个javaee入门问题
- 急!急ext的问题,希望大家 给个满意的答复啊!! 谢谢了!1
- 如何在ECLIPSE中使用 STRUTS 2
- 页面跳转时,为了保存页面中的输入值,除了session和在url后面追加外,还有其他的方法么??
- 请问一下:ant工具到底是做什么的?
- ****@应用javamail创建邮件服务器,HELP****@
- 200分求助
- jb与weblogic开发ejb
- EJB组件调用问题!
以下是出错信息:
java.lang.ClassCastException: ejb20.TraderBean_pf8c35_LocalHomeImpl
以下是出错代码:
Context ic = new InitialContext();
Object home = (TraderHome)ic.lookup("TraderEJB.TraderHome"); //出错行
-------------------------------------------------------------
根据weblogic的文档,Context用默认的就可以了(否则就不必有local interface)了。
另外,你如果不能解决这个问题,也就算了吧,这个贴子和你也没什么关系。
Properties p=new Properties();
p.setProperty(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
Context ic = new InitialContext(p);
PortableRemoteObject.narrow(xx,xx);不过你解决了,那一分我还是要的。
你们提供的方法是调用remote interface ejb使用的,根据weblogic的文档,对于实现local interface的ejb,调用不是这样的(具体请参考wls6.1sp1的sample)。
谢谢大家的关注。
使用RMI/IIOP的容器强调必须对返回的对象使用PortableRemoteObject.narrow(xx,xx)进行处理,而不是直接由客户强调这个对象的类型。而且这个方法有助于确保对所有EJB容器/服务器实现具有最大的互操作性,而不是你去简单的强制返回结果对象类型。也就是说,对所有Home Interface你最好都采取下面的写法
try {
Object home = ic.lookup("TraderEJB.TraderHome");
return (TraderHome) narrow(home, TraderHome.class);
} catch (NamingException ne) {
}
另外,难得有同志,即便是完全不懂的来看看,大家也应该欢迎嘛。这么来划清界限总是不好的
首先感谢你的回答,我都以为在这个论坛没有人能/愿意回答我的这个问题了。
接下来,探讨技术:
你说的写法,在wls6.1sp1的sample中确实是有的,我特地去看了一下ejb2.0的statelessSessionBean的例子。
但是,无论从我对local interface的浅薄理解,还是wls6.1sp1的sample(以及文档)来看,对local interface的ejb的调用都不是像你说的那个样子。
再退一步说,我的程序在lookup时就出错了,还没到你说的那一步。
另外,我在bea的newsgroup找到答案了,如果你有兴趣,可以自己去看一看(http://newsgroups.bea.com)
再次感谢你的回答。
翻了一下EJB 2.0的spec,要使用local client view, 则其Home接口必须继承自javax.ejb.EJBLocalHome。你是不是这里出了问题?不过这样讨论讨论,的确不错。顺便问一下,阁下在做哪方面应用,可以再多联系。我的email是[email protected]
问题在于调用ejb的client和ejb必须在一个jar文件里,我想这很没有道理,应当会改进。
想当年wls5.1开始时都不支持把自己写的bean,home等等class放到ejb的jar外面,后来就可以了(sp8左右吧)。
等待6.1的sp2吧...
我原来做过一次wls5.1的运用,wls6.x是自己在学习的,还不知道什么时候能用上。
我的mail是[email protected],不过不是每天都去看。
有问题就到这里来探讨吧,这里虽然水平不高,可是国内都差不多,这里好在速度还比较快。
在weblogic的新闻组上有人遇到同样的问题,后来有人说了应当把client和ejb放在同一个jar里并指出了weblogic文档中的位置,后来那个提问的人回贴说就是答复者所说的原因,改过来就对了。
你说的是非local interface的ejb,当然就不必放在一个jar(几乎从不,除了session作为client调用entity)里。
连接出现corba object not exist的exception,
client 端的getInitialContext如下
..
Properties p=new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
p.put(Context.PROVIDER_URL,"t3://127.0.0.1:7001");
..
一、 安装和配置
先安装Jbuilder5 Enterprise,然后安装Jbuilder5 Person, license key 用Enterprise的。
或其他方法,只要确保Jbuilder5 Enterprise,能运行。
安装完Jbuilder5,BAS4.5和weblolgic6.0后,就可以开始配置了。
(1) 系统环境变量的修改:
把系统环境变量TMP、TEMP改为不带有空格的目录;
在JB5里菜单 Project ??> Default Project Properties ??>Paths 中把所有带空格的目录改为不带空格的目录;为什么要这样设置呢?因为整合后的 weblogic 和JB5在开发过程中JB5会调用 weblogic 的包来制作EJB,而weblogic对那些有空格的不能很好地识别,工作时会出错,即是说weblogic要接触到的目录,目录名最好不是中文名、带空格。 在使用JB5编辑时会发现光标与实际位置不对齐的问题, 其实只需要在Tools ??>Editor Opntion ??>Color中 把 Reserved Word 设置成不使用粗体和斜体就可以了。
(2) jbuilder5 的配置:
A、 Tools ??>Configure Libraries 下确定有WebLogic6.0包,其中class中应该加入如下class和路径:
C:\bea\wlserver6.0\lib\ cr_wls60f.jar(是Weblogic6.0的crack包)
C:\bea\wlserver6.0\lib\weblogic_sp.jar
C:\bea\wlserver6.0\lib\weblogic.jar
B、Tools Menu ??>Enterprise Setup ??>CORBA
?新增一个weblogic的项, 在Path for ORB tools下,加入Weblogic的目录
? 在Library for projects下,加入 Weblogic6.0 的 库,具体方法是:点“..”,然后选择 Weblogic6.0包;
?在 compiler command 填上 idlj.exe
? 在Command option for output directory 填上一个目录路径,但是要注意的是,不能是中文、带空格。
C、Tools Menu ??>Enterprise Setup ??>Application Server ??>BAS4.5。1
填上 AppServer 安装的目录。 并选上 Enable Integrate.
Tools Menu ??>Enterprise Setup ??>Application Server ??>Weblogic6.0
填上 Weblogic 安装的目录。 D、配置Default Project Properties
Project ??>Default Project Properties ??>Path ??>Required Libraries
选择Weblogic6.0; Project ??>Default Project Properties ??>Build ??>IDL
在 IDL compiler 选择Weblogic;
在weblogic 页上,什么都不选。
Project ??>Default Project Properties ??>Run ??>Application
? 选择main class 为 weblogic.Server (当你正确设定Weblogic6.0包后,可以找到该类。)
? 把Complile before running 和 Complile before debugging 的钩子去掉,否则即使你运行一次EJB客户端都好都会重新制作一次EJB包。
Project ??>Default Project Properties ??>Enterprise 点“..”这这里选择 Application Server ,当然又是选Weblogic6.0。 选中 Weblogic6.0后点 Edit:
? 在Require Libraries添加 Weblogic6.0包,把其他删除;
? 在class 中删除所有的类的路径;
? 修改VM Parameters:我机器上是
-ms64m -mx64m -Djava.library.path=C:/bea/wlserver6.0/bin -Dbea.home=C:/bea -Dweblogic.Domain=Suzhou -Dweblogic.Name=test -Djava.security.policy==C:/bea/wlserver6.0/lib/weblogic.policy -classpath C:\bea\wlserver6.0\lib\cr_wls60f.jar;C:\bea\wlserver6.0\lib\weblogic_sp.jar;C:\bea\wlserver6.0\lib\weblogic.jar;. -Dweblogic.management.password=testsystem
? OK。写了个HelloWorld session bean
成功deploy,client端如下
package com.ejb.session.stateless.hello;import javax.naming.*;
import javax.rmi.PortableRemoteObject;
import java.util.Properties;public class client
{
private HelloWorldHome helloWorldHome = null; /**Construct the EJB test client*/
public client()
{
try
{
//get naming context
Context ctx = getInitialContext();
//Context ctx = new InitialContext();
//look up jndi name
Object ref = ctx.lookup("HelloWorld"); //cast to Home interface
helloWorldHome = (HelloWorldHome) PortableRemoteObject.narrow(ref, HelloWorldHome.class);
HelloWorld h1=helloWorldHome.create();
System.out.println(h1.hello());
}
catch(Exception e)
{
e.printStackTrace();
}
} //----------------------------------------------------------------------------
// Utility Methods
//---------------------------------------------------------------------------- public HelloWorldHome getHome()
{
return helloWorldHome;
}
/**Main method*/ public static void main(String[] args)
{
client client = new client();
// Use the getHome() method of the client object to call Home interface
// methods that will return a Remote interface reference. Then
// use that Remote interface reference to access the EJB.
}
public static Context getInitialContext()
throws NamingException
{
Properties p=new Properties();
p.put(Context.INITIAL_CONTEXT_FACTORY,"weblogic.jndi.WLInitialContextFactory");
p.put(Context.PROVIDER_URL,"t3://127.0.0.1:7001");
//p.put(Context.SECURITY_PRINCIPAL,user);
return new InitialContext();
}
}启动Weblogic,run client出现以下错误
org.omg.CORBA.OBJECT_NOT_EXIST: minor code: 0 completed: No at java.lang.Class.newInstance0(Native Method) at java.lang.Class.newInstance(Class.java:237) at com.inprise.vbroker.orb.SE.read(SE.java:28) at com.inprise.vbroker.orb.DelegateImpl.handleReply(DelegateImpl.java:711) at com.inprise.vbroker.orb.DelegateImpl.invoke(DelegateImpl.java:606) at org.omg.CORBA.portable.ObjectImpl._invoke(ObjectImpl.java:297) at com.inprise.vbroker.orb.RequestImpl._invoke(RequestImpl.java:195) at com.inprise.vbroker.orb.RequestImpl.invoke(RequestImpl.java:130) at org.omg.CosNaming._NamingContextStub.resolve(_NamingContextStub.java:156) at com.sun.jndi.cosnaming.CNCtx.callResolve(CNCtx.java:324) at com.sun.jndi.cosnaming.CNCtx.lookup(CNCtx.java:373) at com.sun.jndi.cosnaming.CNCtx.lookup(CNCtx.java:351) at javax.naming.InitialContext.lookup(InitialContext.java:350) at javax.naming.InitialContext.lookup(InitialContext.java:350) at com.ejb.session.stateless.hello.client.<init>(client.java:20) at com.ejb.session.stateless.hello.client.main(client.java:45)谁能解决
我所想的和airwing()一样!
另外我在weblogic5.1和jboss上开发ejb项目已经有几个月了。应该不算新手.
“Clients of a local bean must be part of an EAR or if not an EAR at least a standalone .jar.“
我想这句话不是随便写的吧。
难道你在ejb的jar外调用成功了?
建议你先到java.sun.com去看一看有关ejb2.0的新特性,虽然是英文,但是很通俗易懂(这点非常不容易)。
A local client of a session bean or entity bean may be another EJB, such as a session bean, entity bean, or message-driven bean; it can be a servelet or remote as long as it is part of the same EAR file and as long as it is not remote.
e,你写的这句话不就说明我说的是对的吗?
算了,我自己写个例子试一下,试完了告诉你。