本人遇到的问题是域间调用JMS队列。
前言
本人所在项目中,由于我们的系统将业务逻辑单独部署,以下称之为EJB层,和普通的WEB层相对独立。从 WEB 层调用 EJB 层,通过 Command 架构,其包含的 EJB 调用就是事务性质的,所以我们 EJB 层再调用其它第三方提供的 EJB 接口时,就经常会出现一些莫名其妙的错误,以下略作收集。
1 、错误现象(在被调用的 EJB 服务器屏幕上出现):
<2005-1-20 下午 04 时 14 分 46 秒 CST> <Error> <Security> <BEA-090513> <ServerIdentity failed validation, downgrading to anonymous.>
<2005-1-20 下午 04 时 14 分 46 秒 CST> <Error> <JTA> <BEA-110200> <User [<anonymous>] is not authorized to invoke startCommit on a transaction branch.>
分析:
这种异常是跨域传播事务造成的 . 一定要传播事务的话 , 必须设置域信任 , 没有其他办法 . 但是域信任有相关的安全隐患 , 当然对于大部分非关键业务应用来说也无所谓了 .
具体设置方法为, domain node --> View Domain-wide Security Settings --> Configuration --> Advanced --> Enable Generated Credential --> 在 Credential 中输入密码,两个 domain 的这个密码要完全一致,然后重新启动 server 就可以了。
2 、错误现象(在调用方的 EJB 屏幕上出现):
<2005-11-4 下午 01 时 41 分 36 秒 CST> <Error> <EJB> <BEA-010026> <Exception occurredduring commit of transaction Name=[EJB cn.com.jdls.foundation.architectures.comm
and.ejb.TaxCommandBean.executeCommand(cn.com.jdls.foundation.architectures.command.commands.BaseCommand)],Xid=BEA1-0021A70EC385C5407B0E(31591114),Status=Committing,numRepliesOwedMe=0,numRepliesOwedOthers=0,seconds since begin=121,seconds left=0,XAServerResourceInfo[weblogic.jdbc.wrapper.JTSXAResourceImpl]=(ServerResourceInfo[weblogic.jdbc.wrapper.JTSXAResourceImpl]=(state=committed,assigned=ejbserver),xar=weblogic.jdbc.wrapper.JTSXAResourceImpl@1326f69,re-Registered = false),SCInfo[mydomain+ejbserver]=(state=committed),SCInfo[dmctais+app1]=(state=committing),properties=({weblogic.transaction.name=[EJB cn.com.jdls.foundation.architectures.command.ejb.TaxCommandBean.executeCommand(cn.com.jdls.foundation.architectures.command.commands.BaseCommand)], weblogic.jdbc=t3://92.16.16.43:6517}),local properties=({modifiedListeners=[]}),OwnerTransactionManager=ServerTM[ServerCoordinatorDescriptor=(CoordinatorURL=ejbserver+92.16.16.43:6517+mydomain+t3+, XAResources={},NonXAResources={})],CoordinatorURL=ejbserver+92.16.16.43:6517+mydomain+t3+): javax.transaction.SystemException: Timeout during commit processing
分析:
这种异常是由于 EJB 被调用方,通常具有记忆功能,对于调用它接口的远程 EJB 服务和相应的 IP 以及 Port 都会记录在内存,如果下次相同的 EJB 服务来调用它的时候,它就会检测内存中该 EJB 服务对应的 IP/Port 是否和当前的实际情况相符,如果不符的话,就会出现这种错误。
这种情况目前在我们系统中,碰到的两种典型的案例就是:一,我们的 EJB 服务器上有双网卡,本来调用 某第三方 的 EJB 接口很正常,但是有次禁用了其中一个没插网线的网卡后,就出现这种错误,因为被调用方 EJB 服务已经记住了我们的 EJB 服务对应的 IP 和 Port ;二、本来我们的 EJB 服务器,调用另一个 第三方 EJB 接口也很正常,但是有次为了测试的需要,又在另外一台服务器上,复制了一份完全一样的系统环境,也连接到同一个第三方EJB 测试服务器进行测试,结果后一台调用的时候就出现了这种错误,因为被调用方 EJB 服务已经记住了我们的 EJB 服务,其对应的 IP/Port 应该是前一台服务器。
对于这种情况,简单的处理办法就是,将被调用方的 EJB 服务重启一下,则它内存中的记录就会清除,下次就会记住最新的 EJB 服务和相应的 IP/Port 。
但是针对我们 系统来说,通常我们系统调用的第三方的 EJB 接口, 往往不能随便重启 第三方服务,所以变通的办法,就是将要使用的我们系统中,将涉及到的 每个 WEBLOGIC 域服务器对应的 server 名字都改掉,这样被调用方就不会在内存中找到相应的记录,因此也就不会出现这种莫名的调用出错问题。同时将域根目录下的临时目录全部删除,再重新启动服务应该即可生效。
总结
以上所述都是本人所在项目碰到的问题,可能并不一定具有共性,也不全面,所以大家碰到的莫名其妙的错误,也希望贴出来,共享看看
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/ivan0702/archive/2007/08/02/1722867.aspx
分享到:
相关推荐
7. 测试EJB:部署完成后,可以编写客户端代码或者使用WebLogic的JNDI查找来调用EJB。确保EJB能够正确执行预期的业务逻辑。 三、WebLogic EJB特性与优势 WebLogic Server提供了一些高级特性,如集群、负载均衡、故障...
- `ejb-jar.xml` 和 `weblogic-ejb-jar.xml` 文件定义Bean的元数据,包括安全、事务和部署信息。 5. **EJBDemo.jar 和 EJBDemoClient**: - `EJBDemo.jar` 可能包含了EJB3的实现,包括Bean类和接口,以及必要的...
在WebLogic 10.x中,EJB 3.0的性能和稳定性已经得到了显著提升,支持了诸如依赖注入、事务管理、安全性和持久化等功能。然而,开发过程中需要注意的一些常见问题包括:内存泄漏、线程安全问题、性能优化(如缓存策略...
总结起来,WebLogic EJB的学习不仅包括EJB的基本概念和原理,还包括在WebLogic Server环境下如何部署、配置和优化EJB应用,以及如何利用EJB实现分布式、事务性、安全的企业级服务。这是一门涵盖广泛的技术,对于Java...
6. **测试EJB**:部署完成后,可以通过JNDI查找和调用EJB方法进行测试,确保EJB功能正常工作。 在标签"源码"和"工具"的提示下,我们可以理解这个教程可能包含实际的EJB源代码示例和使用WebLogic进行部署的工具性...
4. **客户端调用EJB**:客户端通过JNDI(Java Naming and Directory Interface)查找EJB的引用,然后通过这个引用与服务端的EJB通信。对于远程客户端,还需要处理RMI(Remote Method Invocation)和IIOP(Internet ...
通过以上步骤,开发者可以在WebLogic 11g上发布和管理EJB3.0应用,同时也能轻松地从客户端项目中调用这些EJB服务。EJB3.0的简洁性和易用性使得开发人员能更专注于业务逻辑,而不是底层基础设施。
WebLogic是Oracle公司的一款企业级应用服务器,它支持多种Java EE规范,包括EJB(Enterprise JavaBeans)。在本文中,我们将深入探讨如何在WebLogic环境中部署EJB 2.0,特别是实现本地接口的Session Bean。 EJB 2.0...
【标题】"ejb.rar_weblogic8 ejb2" 提供的是一个关于WebLogic 8.1服务器上部署和运行EJB 2(Enterprise JavaBeans第二版)的实例教程。EJB是Java企业级应用的核心组件模型,主要用于构建分布式、可伸缩且具有事务...
本文将深入探讨如何在WebSphere环境中远程调用EJB组件,同时介绍ejb3.0版本的一些关键特性,以及 ejb 开发实例和相关框架。 **一、EJB 3.0简介** EJB 3.0是EJB规范的一个重大改革,引入了更加轻量级和简化的设计,...
Weblogic EJB 学习笔记主要涵盖了EJB(Enterprise JavaBeans)的基础知识,包括无状态会话bean、有状态会话bean和实体bean这三种主要的EJB类型,以及EJB在Weblogic服务器中的配置和事务管理。 1. **无状态会话bean*...
- **JNDI(Java Naming and Directory Interface)** - EJB通过JNDI查找和绑定,客户端通过查找JNDI名来调用EJB。 ### 进阶主题 - **EJB与JMS集成** - 消息驱动bean允许EJB以异步方式处理消息,提高系统性能。 - **...
总的来说,WebLogic调用Tuxedo示例涉及到分布式系统中的服务集成、事务处理、连接管理等多个方面,对于理解跨平台、跨语言的系统集成有重要价值。开发者需要熟悉Java EE、WebLogic的管理以及Tuxedo的应用开发,才能...
WebLogic以其高可用性、可扩展性和性能而闻名,是部署EJB应用的常见选择。 **WebLogic的EJB部署** 在WebLogic中部署EJB通常涉及以下步骤: 1. 创建新的WebLogic域并配置服务器。 2. 将EJB项目的JAR文件添加到...
【标题】"Weblogic7开发.rar"所涉及的知识点主要集中在使用WebLogic Server 7进行企业级Java Bean(EJB)的开发与部署上。WebLogic Server是Oracle公司早期的一款应用服务器,它提供了运行和管理Java EE应用程序的...
EJB(Enterprise JavaBeans)是Java EE平台中的核心组件,用于构建可复用、安全且事务处理能力强大的服务器端业务逻辑。EJB 3.0是EJB规范的一个重大改革,它极大地简化了EJB的开发,使得企业级应用的编写更加直观和...
本文将深入探讨如何通过Tuxedo调用Weblogic的EJB(Enterprise JavaBeans)服务,这一过程称为“WTC暴露ejb服务”。WebLogic Transaction Coordinator (WTC) 是Oracle WebLogic Server中的一个关键组件,它允许应用...
### 基于Weblogic的EJB学习笔记详解 #### EJB基础知识概览 ##### 1. 无状态会话Bean (Stateless Session Bean) 无状态会话Bean是一种不保存客户端会话状态的EJB组件。这意味着每个客户端的请求都不依赖于前一个...
- **JOLT**:JOLT库主要用于WebLogic调用TUXEDO服务,适用于与其他应用服务器(如WebSphere)的集成,但不支持TUXEDO调用WebLogic。 - **CORBA**:通过遵循CORBA标准,两个系统可以实现跨平台的互操作性,但需要对...
客户端通过JNDI(Java Naming and Directory Interface)查找并调用EJB。而`EJB_Romte.zip`可能包含了远程接口和实现,这是EJB允许远程访问的关键。EJB组件通常被打包成JAR文件,并在应用服务器(如JBOSS、WebLogic...