【问题标题】:execute JDBC query in EJB3 stateless bean在 EJB3 无状态 bean 中执行 JDBC 查询
【发布时间】:2012-11-05 15:17:17
【问题描述】:

我正在为我的服务 EJB3 无状态 bean 使用以下模式。基本上,每个数据库表都通过 DAO / facade 类型的类(本身也是一个无状态的 EJB3 bean)公开。

我假设的 AService bean 然后被注入它需要使用的各种数据库表的外观。但是,外观中没有提供某些更复杂的逻辑或逻辑(它们专门用于一个表上的 CRUD 类型的操作)。出于这个原因,我还直接注入了 DataSource,这样我就可以使用 JDBC 进行更复杂的查询。

在我的方法中是否有任何明显或微妙的反模式/警告?

 @Stateless
 @Local (IAService.ILocal.class)
 @Remote(IAService.IRemote.class)
 public class AService implements IAService.ILocal, IAService.IRemote{

     @PersistenceContext(unitName = "cashflowPU")
     private EntityManager em;

    // inject CRUD facades for straightforward operations
    @EJB
    private ITableAFacade.ILocal tgAFacade;
    ...

    // inject the data source for non-straightforward operations that require JDBC
    @Resource(mappedName="java:/cashflow") DataSource dataSource;


    public BigDecimal methodThatNeedsComplexQuery (...params) throws SQLException {
        Connection conn = null;
        BigDecimal retValue = null;
        try {
             conn = dataSource.getConnection();
             PreparedStatement pstm = ...
             ResultSet rs = pstm.executeQuery(); ...
             while (rs.next()) ...
        } finally {
             conn.close();
             return retValue;
        }
    }                                                      
}                                                          

【问题讨论】:

    标签: jdbc ejb-3.0 facade


    【解决方案1】:

    您也可以使用 EntityMangaer.createNativeQuery(String sqlString) 而不是注入数据源。

    【讨论】:

      猜你喜欢
      • 2012-02-09
      • 1970-01-01
      • 1970-01-01
      • 2012-06-08
      • 1970-01-01
      • 1970-01-01
      • 2010-10-17
      • 2015-01-04
      • 1970-01-01
      相关资源
      最近更新 更多