前天,偶然发现在远程调用EJB的时候抛出的异常比较怪异。之前知道调用SessionBean时候,如果接口抛出了异常,EJB会对异常有一次封装,都变成了EJBException。所以在捕获的时候都是捕获这个异常。可这次却抛出了一个自己定义的异常,导致了无法捕获。查了下EJB的一些说明,建议是不要在SessionBean抛出继承RuntimeException的异常,因为EJBexception继承RuntimeException的。我这边自定义的异常用于业务流程控制,恰好也继承了RuntimeException(为什么继承这个。。。因为不抛出RuntimeException或其子类,EJB的事务就不会因异常而回滚)。
这里抛出异常的地方有两处,在SessionBean里面都是同一个自定义的异常,但是到调用该SessionBean后,一处抛出的是EJBException,一处抛出的自定义的异常,EJB没有在这里给这个异常加一层EJBException。百思不得其解啊,网上也找不到个说法。由于赶时间,没有多研究,先记下来,以后补上。
临时的解决方法是给在代码里面给自定义的异常放到EJBException里面。
分享到:
相关推荐
- 对于 SessionBean 和 EntityBean,无论是 Remote Home 还是 Local Home 都必须定义 `create` 方法,该方法都会抛出 `CreateException` 异常,Remote Home 中的 `create` 方法还会抛出 `RemoteException` 异常。...
- 在编写Message-Driven Bean时,为了防止有毒消息,通常采用Container管理事务,不抛出异常,或者只抛出RuntimeException。 9. **资源引用**: - DataSource的引用属于资源注入,通常用于连接数据库,同样适用于...
此外,Remote接口中的方法需要遵循RMI(Remote Method Invocation,远程方法调用)的规则,确保参数和返回类型都能在分布式环境中传输,并且所有的商业方法都必须抛出RemoteException异常,这是EJB规范强制要求的。...
- **Mandatory**:必须在已有事务中执行,如果没有事务,则抛出异常。 - **Never**:必须不在事务中执行,如果有事务,则抛出异常。 #### 六、Local Interface的引入目的 **6.1 Local Interface的目的** - **性能...
通常,EJB方法会抛出系统异常(如`EJBException`)或应用异常(自定义的、继承自`java.lang.Exception`的类),并在部署描述符中声明这些异常。 7. **事务管理**:EJB支持容器管理的事务(Container-Managed ...
8. **错误处理**:在处理数据库连接时,务必处理可能抛出的SQLException和其他异常,确保程序的健壮性。 9. **安全性**:确保数据库连接的用户名和密码被安全地存储和传递,避免硬编码在代码中。还可以使用角色基础...
Home接口通常有create()方法,用于创建Session对象,这些方法需要抛出RemoteException和特定的异常,如CreateException。以下是一个简单的Session Bean Home接口示例: ```java public interface CartHome extends ...
- Session Bean的Bean类需要实现SessionBean接口,Entity Bean的Bean类需要实现EntityBean接口。 9. 异常处理: - 在创建EJB实例时,create方法可能会抛出CreateException,远程home的create方法还可能抛出...
Java 编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 Servlet 的生命周期 Servlet 被服务器实例化后,容器运行其 init 方法,请求到达时运行其 service 方法...
EJB 3.0引入了声明式异常处理,通过`@throws`注解在方法上声明可能抛出的异常,容器会自动处理异常并返回合适的错误信息。 **9. 容器提供的服务** EJB 3.0为Bean提供了多种服务,包括安全性、性能监控、集群、调度...
4. **错误处理与异常捕获**:JSF和EJB都提供了错误处理机制,例如JSF的`FacesMessage`和EJB的`抛出异常`,可以有效地处理和报告错误。 5. **安全性**:通过EJB的角色管理和JSF的安全控制,可以实现基于角色的访问...
4. **异常处理**:良好的EJB设计会包含适当的异常处理机制,通过抛出和捕获特定的EJB异常,来维护服务的稳定性和健壮性。 5. **生命周期方法**:如`@PostConstruct`和`@PreDestroy`注解标记的方法会在Bean实例创建...
3. **异常处理** - 学习如何正确地处理和抛出EJB相关的异常。 4. **事务管理** - 了解EJB的自动事务管理机制,以及何时需要手动控制事务。 5. **安全性** - 掌握EJB的角色基安全(Role-Based Security),保护应用...
Java 编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 在 Servlet 方面,Servlet 的生命周期包括 init 方法、service 方法和 destroy 方法。与 CGI 相比,...
- 通常是由容器抛出的,表示EJB环境的问题。 - 如:`EJBException`。 2. **应用异常 (Application Exception):** - 由应用程序抛出,表示业务逻辑层面的问题。 - 应该通过自定义异常类来实现。 3. **未检查...
- `ejbCreate`方法不应该抛出受检查的异常,因为这些异常会被容器捕获并转换为EJB异常,可能会影响客户端调用。 - 如果Bean的实例是由容器管理的持久性(CMP),那么`ejbCreate`方法通常用于设置Bean的初始状态,...
Java 编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。 四、Servlet 的生命周期 Servlet 的生命周期包括 init、service 和 destroy三个阶段。init 方法是在...
3. **异常处理**:EJB方法应适当地抛出和处理异常。业务逻辑错误通常通过自定义的运行时异常传达,而系统级错误则通过标准的Java异常,如`NullPointerException`或`SQLException`。每个方法都应包含适当的异常注解,...
由于这是EJB2.0,所以业务方法需要抛出`RemoteException`,这是EJB2.0的规定。`sayHello()`方法在接口中声明,允许客户端通过该方法与bean通信。 3. **Home接口**: Home接口是客户端获取bean实例的入口。`...