javax.ejb.DuplicateKeyException翻译

Java EJB的DuplicateKeyException异常
博客介绍了Java中javax.ejb包下的DuplicateKeyException异常。当实体EJB对象因要创建的对象与现有对象key相同而无法创建时,会抛出该异常,此异常由实体Bean home接口定义的create方法抛出。
<!-- ========= START OF TOP NAVBAR ======= --> <!-- -->
JavaTM 2 Platform
Ent. Ed. v1.4
<!-- ========= END OF TOP NAVBAR ========= --> <!-- ======== START OF CLASS DATA ======== -->

javax.ejb
Class DuplicateKeyException





All Implemented Interfaces:
Serializable
public class DuplicateKeyException extends CreateException

The DuplicateKeyException exception is thrown if an entity EJB object cannot be created because an object with the same key already exists. This exception is thrown by the create methods defined in an entity Bean's home interface. 如果实体EJB对象因为要创建的EJB对象与现有的对象key相同而失败,则抛出DuplicateKeyException 异常。该异常由实体Bean home接口定义的create方法抛出。

See Also:
Serialized Form

<!-- ======== NESTED CLASS SUMMARY ======== --><!-- =========== FIELD SUMMARY =========== --><!-- ======== CONSTRUCTOR SUMMARY ======== --><!-- -->

Constructor Summary
DuplicateKeyException()
Constructs a DuplicateKeyException with no detail message. 构建一个不含详细信息的DuplicateKeyException。
DuplicateKeyException(Stringmessage)
Constructs a DuplicateKeyException with the specified detail message. 构建一个指定详细信息的DuplicateKeyException。
<!-- ========== METHOD SUMMARY =========== --> <!-- -->
Methods inherited from class java.lang.Throwable
fillInStackTrace, getCause, getLocalizedMessage, getMessage, getStackTrace, initCause, printStackTrace, printStackTrace, printStackTrace, setStackTrace, toString
<!-- -->
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait

<!-- ============ FIELD DETAIL =========== --><!-- ========= CONSTRUCTOR DETAIL ======== --><!-- -->

Constructor Detail
<!-- -->

DuplicateKeyException

 
Constructs a DuplicateKeyException with no detail message. 构建一个不含详细信息的DuplicateKeyException。

<!-- -->

DuplicateKeyException

Constructs a DuplicateKeyException with the specified detail message. 构建一个指定详细信息的DuplicateKeyException。

<!-- ============ METHOD DETAIL ========== --><!-- ========= END OF CLASS DATA ========= --> <!-- ======= START OF BOTTOM NAVBAR ====== --> <!-- -->
JavaTM 2 Platform
Ent. Ed. v1.4
<!-- ======== END OF BOTTOM NAVBAR ======= --> Submit a bug or feature

Copyright 2003 Sun Microsystems, Inc. All rights reserved.

这个错误是一个典型的 **EJB 远程调用异常**,核心问题是 **`cn为空白`**(即 `cn` 参数为空)。以下是详细分析和解决方案: --- ### **错误分析** 1. **异常链**: - 最外层:`javax.ejb.EJBException`(WebLogic EJB容器抛出的通用异常) - 中间层:`java.rmi.RemoteException`(远程方法调用异常) - 根本原因:`javax.ejb.EJBException: cn为空白`(业务逻辑校验失败) 2. **触发位置**: ```java at com.sun.proxy.$Proxy3.getKuangNcV3ByPlate(Unknown Source) // 远程EJB方法调用 at lkm.order.OrderEjb.getNC(OrderEjb.java:72) // 你的代码调用位置 at lkm.order.OrderEjb.main(OrderEjb.java:51) // 程序入口 ``` --- ### **解决方案** #### 1. **检查输入参数** - **问题**:调用 `getKuangNcV3ByPlate()` 方法时,`cn` 参数为空。 - **修复**: ```java // 调用前确保cn参数非空 if (StringUtils.isBlank(cn)) { throw new IllegalArgumentException("参数'cn'不能为空"); } Object result = ejbProxy.getKuangNcV3ByPlate(cn); // 确保cn有效 ``` #### 2. **验证EJB远程接口** - 检查目标EJB的远程接口定义,确认 `cn` 参数的合法性: ```java @Remote public interface YourEjbRemote { SomeResult getKuangNcV3ByPlate(@NotNull String cn) throws RemoteException; // 使用@NotNull注解 } ``` #### 3. **服务器端日志** - 查看 **WebLogic Server日志**(`DOMAIN_HOME/servers/AdminServer/logs/AdminServer.log`),定位服务端具体报错位置。 #### 4. **调试建议** - **客户端**:在 `OrderEjb.java:72` 处打印 `cn` 的值: ```java System.out.println("DEBUG - cn value: " + cn); // 或使用日志框架 ``` - **服务端**:在EJB实现类中添加参数校验: ```java @Override public SomeResult getKuangNcV3ByPlate(String cn) { if (cn == null || cn.trim().isEmpty()) { throw new EJBException("cn为空白"); // 明确抛出业务异常 } // ...业务逻辑 } ``` --- ### **预防措施** 1. **参数校验**: - 使用 Bean Validation(如 `@NotNull`、`@NotEmpty`): ```java public SomeResult getKuangNcV3ByPlate(@NotNull String cn) { ... } ``` 2. **异常处理**: ```java try { ejbProxy.getKuangNcV3ByPlate(cn); } catch (EJBException e) { if (e.getMessage().contains("cn为空白")) { // 处理空参数场景 } } ``` --- ### **常见问题** - **Q:为什么异常显示 `Unknown Source`?** A:因为远程EJB接口是通过动态代理生成的,调试时需要确保客户端有接口的源码或调试符号。 - **Q:如何避免RMI序列化问题?** A:确保所有通过EJB传递的参数实现 `Serializable` 接口。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值