有关PortableRemoteObject.narrow()和InitialContext的问题

ttotti 2003-09-11 01:20:36
本人刚学EJB不久,在学习中碰到一些问题向高手们请教。

1、为什么有时候要用
Properties p = new Properties ();
p.put(Context.INITIAL_CONTEXT_FACTORY,
"weblogic.jndi.WLInitialContextFactory");
p.put (Context.PROVIDER_URL, "t3://localhost:7001");
Context ctx = new InitialContext (p);

来初始化,而有时候只要
Context ctx = new InitialContext ();就可以了

2、还有为什么有时候要用
Object ref = context.lookup("SbLocalHome");
SbLocalHome testHome = (SbLocalHome)
PortableRemoteObject.narrow( ref , SbLocalHome.class );

而有时候只要
SbLocalHome sbh=(SbLocalHome)ctx.lookup("java:/SbLocalHome");
就可以了呢?

还请高手们指点迷津。
...全文
121 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
ttotti 2003-09-14
  • 打赏
  • 举报
回复
现在对于第一个问题,我看到有个例子中是客户端调用CMP,它直接用
Context ctx = new InitialContext ();
客户端调用应该算是远程吧, 请问这是怎么回事?是例子错了吗?
franne 2003-09-11
  • 打赏
  • 举报
回复
第一个问题是因为当你使用JNDI定位时,需要给出初始化上下文,给出相关参数,你应该还要给出用户名和密码这样才好的,对于一个Bean调用另一个bean时只要求获得默认的初始化上下文就可以了,第二个问题也很简单,你都理解对了
yantuodi 2003-09-11
  • 打赏
  • 举报
回复
还有没有人补充的啊?
RobertDeNiro 2003-09-11
  • 打赏
  • 举报
回复
很正确,这就是jndi的精髓,如果从原理上看,更容易理解,本地的话不走socket(已经做优化了)所以不需要地址端口和server初始化context的信息,ejb也是这样的道理
ttotti 2003-09-11
  • 打赏
  • 举报
回复
对于第二个问题是否可以这样来理解,在和server在同一个jvm中的同一个应用中调用ejb可以直接用lookup(java:comp/...),而调用同一个虚拟机中的其它资源就直接用
lookup(java:)比如调用数据库连接源,而远程调用(不在同一个虚拟机中)则用lookup()直接调用其jndi名称,再用PortableRemoteObject.narrow()。
RobertDeNiro 2003-09-11
  • 打赏
  • 举报
回复
初始化context不会出问题,其实这很容易理解,好好揣摩揣摩其中的含义.
ttotti 2003-09-11
  • 打赏
  • 举报
回复
那我如果不管什么情况,都用前一种写法会不会出问题
ttotti 2003-09-11
  • 打赏
  • 举报
回复
to:RobertDeNiro()

你有没有相关的资料,如果有能给我一份吗?
email:yantuodi@sina.com
zez 2003-09-11
  • 打赏
  • 举报
回复
补充一点:PortableRemoteObject.narrow
远程要,本地就不需要了

------------------------------------------------------
我们还年轻牛奶会有的奶牛也会有的
可天天在 csdn 混这些会有吗 ??
RobertDeNiro 2003-09-11
  • 打赏
  • 举报
回复
第一个问题的答案是,Context ctx = new InitialContext ();是在server的jvm中调用上下文,当然不用地址和端口还有初始化的一些参数,而在远程调用的时候(同一台机器的不同jvm)这一切都不知道就必须指定了,第二个问题和第一个类似,在和server在同一个jvm中的同一个应用中调用ejb可以用java:comp/...,而调用同一个虚拟机中的其它资源就要用java:比如调用数据库连接源,而远程调用(不在同一个虚拟机中)则直接调用其jndi名称,不知这样说你是否明白.

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧