社区应用 最新帖子 精华区 社区服务 会员列表 统计排行 社区论坛任务 迷你宠物
  • 8374阅读
  • 1回复

[原创],MyEclipse+JBOSS开发EJB初学者常遇到的问题——Session Bean篇

级别: 终身会员
发帖
3743
铜板
8
人品值
493
贡献值
9
交易币
0
好评度
3746
信誉值
0
金币
0
所在楼道
使用MyEclipse+JBOSS开发EJB问题: M}"r#Plq  
1.要在Eclipse中JRE类库中加入%JBOSS_HOME%/client/jbossall-client.jar 否则会抛出异常: UU}7U]9u  
  1. Exception in thread "main" javax.naming.NoInitialContextException: Cannot instantiate class: org.jnp.interfaces.NamingContextFactory [Root exception is java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory]
  2. at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:657)
  3. at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
  4. at javax.naming.InitialContext.init(InitialContext.java:223)
  5. at javax.naming.InitialContext.<init>(InitialContext.java:175)
  6. at org.wind.unit.TestCalculator.main(TestCalculator.java:18)
  7. Caused by: java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory
  8. at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
  9. at java.security.AccessController.doPrivileged(Native Method)
  10. at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
  11. at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
  12. at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:276)
  13. at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
  14. at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
  15. at java.lang.Class.forName0(Native Method)
  16. at java.lang.Class.forName(Class.java:247)
  17. at com.sun.naming.internal.VersionHelper12.loadClass(VersionHelper12.java:46)
  18. at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:654)
  19. ... 4 more
'!Kf#@';u  
2.在MyEclipse创建EJB客户端项目时,需要手动创建jndi.properties也可以在将%JBOSS_HOME%\server\all\conf\jndi.properties复制到项目中,也可以在CODE中使用Properties类或者Hashtable类创建一个jndi,否则找不到JNDI而抛出异常: 2o[IHO]  
  1. Exception in thread "main" javax.naming.NoInitialContextException: Need to specify class name in environment or system property, or as an applet parameter, or in an application resource file:&nbsp;&nbsp;java.naming.factory.initial
  2. at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:645)
  3. at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
  4. at javax.naming.InitialContext.getURLOrDefaultInitCtx(InitialContext.java:325)
  5. at javax.naming.InitialContext.lookup(InitialContext.java:392)
  6. at org.wind.unit.TestCalculator.main(TestCalculator.java:30)
z&$/EP-  
3.将jndi.properties复制到项目中之后,要在jndi.properties中加入java.naming.provider.url=localhost:1099 (不一定是localhost:1099根据开发需要可能会更改)否则会抛出异常: @gBE{)Fj  
  1. Exception in thread "main" javax.naming.CommunicationException: Receive timed out [Root exception is java.net.SocketTimeoutException: Receive timed out]
  2. at org.jnp.interfaces.NamingContext.discoverServer(NamingContext.java:1465)
  3. at org.jnp.interfaces.NamingContext.checkRef(NamingContext.java:1594)
  4. at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:634)
  5. at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:627)
  6. at javax.naming.InitialContext.lookup(InitialContext.java:392)
  7. at org.wind.unit.TestCalculator.main(TestCalculator.java:30)
  8. Caused by: java.net.SocketTimeoutException: Receive timed out
  9. at java.net.PlainDatagramSocketImpl.receive0(Native Method)
  10. at java.net.PlainDatagramSocketImpl.receive(PlainDatagramSocketImpl.java:136)
  11. at java.net.DatagramSocket.receive(DatagramSocket.java:712)
  12. at org.jnp.interfaces.NamingContext.discoverServer(NamingContext.java:1435)
  13. ... 5 more
=S]a&*M  
>1irSUj"~  
使用Propertie类: A~{f/%8D  
  1. Properties props = new Properties();
  2. props.setProperty("java.naming.factory.initial",    "org.jnp.interfaces.NamingContextFactory");
  3. props.setProperty("java.naming.provider.url", "localhost:1099");
  4. InitialContext ict=new InitialContext(props);
y9;#1:ic  
使用Hashtable: qJT0Y/l:(  
  1. Hashtable<String, String> prop=new Hashtable<String, String>();
  2. prop.put(Context.INITIAL_CONTEXT_FACTORY, "org.jnp.interfaces.NamingContextFactory");
  3. prop.put(Context.PROVIDER_URL, "localhost:1099");
  4. InitialContext ict=new InitialContext(prop);
Q\J,}1<`6  
4.JNDI命名规则是 EAR包名/Bean名称/remote(local) 若没有EAR包则直接是Bean名称/remote(local)。 }yEoEI`  
w.+Eyu_I\  
5.当使用local时 要注意测试的时候一定要保证都在一个JVM中。 7yiJ1K<bIt  
/=#~  
6.创建Session Bean时要注意自己使用的是有状态(@Stateful)还是无状态(@Stateless)
[ 此贴被ヾ1.嗰rёn在2008-07-13 17:13重新编辑 ]
评价一下你浏览此帖子的感受

精彩

感动

搞笑

开心

愤怒

无聊

灌水
发帖
27
铜板
29
人品值
21
贡献值
0
交易币
0
好评度
27
信誉值
0
金币
0
所在楼道
学一楼
只看该作者 1 发表于: 2010-10-27
极限编程的有效实践
极限编程的有效实践: \w )?SVp  
    完整团队 XP项目的所有参与者(开发人员、客户、测试人员等)一起工作在一个开放的场所中,他们是同一个团队的成员。这个场所的墙壁上随意悬挂着大幅的、显著的图表以及其他一些显示他们进度的东西。  i j&p4  
    计划游戏计划是持续的、循序渐进的。每2周,开发人员就为下2周估算候选特性的成本,而客户则根据成本和商务价值来选择要实现的特性。 tnW;E\cR  
    客户测试作为选择每个所期望的特性的一部分,客户可以根据脚本语言来定义出自动验收测试来表明该特性可以工作。 H=zN[MU  
    简单设计团队保持设计恰好和当前的系统功能相匹配。它通过了所有的测试,不包含任何重复,表达出了编写者想表达的所有东西,并且包含尽可能少的代码。 .)8   
    结对编程所有的产品软件都是由两个程序员、并排坐在一起在同一台机器上构建的。 ]~a_d)  
    测试驱动开发编写单元测试是一个验证行为,更是一个设计行为。同样,它更是一种编写文档的行为。编写单元测试避免了相当数量的反馈循环,尤其是功功能能验证方面的反馈循环。程序员以非常短的循环周期工作,他们先增加一个失败的测试,然后使之通过。 Inuc(_I  
    改进设计随时利用重构方法改进已经腐化的代码,保持代码尽可能的干净、具有表达力。 ?Nl"sVCo  
    持续集成团队总是使系统完整地被集成。一个人拆入(Check in)后,其它所有人责任代码集成。 >e8JK*Blz  
    集体代码所有权任何结对的程序员都可以在任何时候改进任何代码。没有程序员对任何一个特定的模块或技术单独负责,每个人都可以参与任何其它方面的开发。 bv\ A,+  
    编码标准 系统中所有的代码看起来就好像是被单独一人编写的。 Zy wK/D  
    隐喻 将整个系统联系在一起的全局视图;它是系统的未来影像,是它使得所有单独模块的位置和外观变得明显直观。如果模块的外观与整个隐喻不符,那么你就知道该模块是错误的。 ZZ A.a  
    可持续的速度 团队只有持久才有获胜的希望。他们以能够长期维持的速度努力工作,他们保存精力,他们把项目看作是马拉松长跑,而不是全速短跑。 i@<~"~>]7  
/?zW<QUI  
更多免费技术文章和技术讲座视频请参考www.ascenttech.cn j+748QAhh  
bGh0<r7R  
描述
快速回复

您目前还是游客,请 登录注册
如果您在写长篇帖子又不马上发表,建议存为草稿
认证码:
验证问题:
10+5=?,请输入中文答案:十五