EJB3.0异常总结---javax.ejb.EJBException: Local and Remote Interfaces cannot have duplicate interface for...

本文详细介绍了在使用EJB技术开发应用时遇到的本地和远程接口冲突问题,并提供了解决方法,通过明确指定接口类型避免了错误发生。
javax.ejb.EJBException: Local and Remote Interfaces cannot have duplicate interface for bean UserManagerBean
at org.jboss.ejb3.SessionContainer.checkForDuplicateLocalAndRemoteInterfaces(SessionContainer.java:134)
at org.jboss.ejb3.SessionContainer.instantiated(SessionContainer.java:119)
at org.jboss.ejb3.Ejb3Deployment.deployElement(Ejb3Deployment.java:492)
at org.jboss.ejb3.Ejb3Deployment.deployElement(Ejb3Deployment.java:442)

UserManagerBean中的@Local,@Remote必须明确写上接口的类型,才可以。修改代码如下:

package cn.study.ejb;

import javax.ejb.Local;
import javax.ejb.Remote;
import javax.ejb.Stateless;

@Stateless
@Remote(UserManager.class)
@Local(UserManager.class)
public class UserManagerBean implements UserManager{

public void addUser(User user){
System.out.println(user.getUsername() + "已经被成功保存!");
user.setId(13);


Files contained in javax.ejb.jar: META-INF/MANIFEST.MF javax.ejb.AccessLocalException.class javax.ejb.AccessTimeout.class javax.ejb.ActivationConfigProperty.class javax.ejb.AfterBegin.class javax.ejb.AfterCompletion.class javax.ejb.ApplicationException.class javax.ejb.Asynchronous.class javax.ejb.AsyncResult.class javax.ejb.BeforeCompletion.class javax.ejb.ConcurrencyManagement.class javax.ejb.ConcurrencyManagementType.class javax.ejb.ConcurrentAccessException.class javax.ejb.ConcurrentAccessTimeoutException.class javax.ejb.CreateException.class javax.ejb.DependsOn.class javax.ejb.DuplicateKeyException.class javax.ejb.EJB.class javax.ejb.EJBAccessException.class javax.ejb.EJBContext.class javax.ejb.EJBException.class javax.ejb.EJBHome.class javax.ejb.EJBLocalHome.class javax.ejb.EJBLocalObject.class javax.ejb.EJBMetaData.class javax.ejb.EJBObject.class javax.ejb.EJBs.class javax.ejb.EJBTransactionRequiredException.class javax.ejb.EJBTransactionRolledbackException.class javax.ejb.embeddable.EJBContainer.class javax.ejb.EnterpriseBean.class javax.ejb.EntityBean.class javax.ejb.EntityContext.class javax.ejb.FinderException.class javax.ejb.Handle.class javax.ejb.HomeHandle.class javax.ejb.IllegalLoopbackException.class javax.ejb.Init.class javax.ejb.Local.class javax.ejb.LocalBean.class javax.ejb.LocalHome.class javax.ejb.Lock.class javax.ejb.LockType.class javax.ejb.MessageDriven.class javax.ejb.MessageDrivenBean.class javax.ejb.MessageDrivenContext.class javax.ejb.NoMoreTimeoutsException.class javax.ejb.NoSuchEJBException.class javax.ejb.NoSuchEntityException.class javax.ejb.NoSuchObjectLocalException.class javax.ejb.ObjectNotFoundException.class javax.ejb.PostActivate.class javax.ejb.PrePassivate.class javax.ejb.Remote.class javax.ejb.RemoteHome.class javax.ejb.Remove.class javax.ejb.RemoveException.class javax.ejb.Schedule.class javax.ejb.ScheduleExpression.class javax.ejb.Schedules.class javax.ejb.SessionBean.class javax.ejb.SessionContext.class javax.ejb.Session
`javax.ejb.EJBException: Transaction Rolledback.` 中 `weblogic.transaction.internal.TimedOutException: Transaction timed out after 301 seconds` 异常表明事务在 301 秒后超时回滚。以下是一些解决该异常的方法: #### 增加事务超时时间 可以通过配置 WebLogic 服务器或 EJB 容器来增加事务的超时时间。在 WebLogic 中,可以通过以下方式进行配置: - 在 `weblogic-ejb-jar.xml` 文件中设置事务超时时间: ```xml <weblogic-ejb-jar> <weblogic-enterprise-bean> <ejb-name>YourEJBName</ejb-name> <transaction-descriptor> <trans-timeout-seconds>600</trans-timeout-seconds> </transaction-descriptor> </weblogic-enterprise-bean> </weblogic-ejb-jar> ``` 上述代码将事务超时时间设置为 600 秒。 #### 优化业务逻辑 检查业务逻辑中是否存在耗时过长的操作,例如复杂的数据库查询、大量数据的处理或远程调用等。可以对这些操作进行优化,例如: - 优化数据库查询,添加合适的索引,避免全表扫描。 ```sql -- 为表添加索引 CREATE INDEX idx_column ON your_table (column_name); ``` - 分批次处理大量数据,避免一次性处理过多数据。 ```java // 分批次处理数据示例 int batchSize = 100; for (int i = 0; i < largeList.size(); i += batchSize) { List<YourData> batch = largeList.subList(i, Math.min(i + batchSize, largeList.size())); // 处理批次数据 processBatch(batch); } ``` #### 异步处理 对于一些耗时的操作,可以考虑将其改为异步处理。在 EJB 中,可以使用 `@Asynchronous` 注解来实现异步方法调用。 ```java import javax.ejb.Asynchronous; import javax.ejb.Stateless; @Stateless public class YourEJB { @Asynchronous public void longRunningTask() { // 耗时操作 } } ``` #### 检查资源竞争 确保没有资源竞争导致事务长时间持有锁。例如,检查数据库连接池是否配置合理,是否存在死锁等问题。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值