是否可以将 EJB 3 与 JDBC 一起使用。我在某处读到,这是允许的。
但是,我听说 EJB 3 实现默认使用 JTA。这对 JDBC 意味着什么?只是为了交易支持吗?这意味着在使用 JDBC 代码时使用 JTA 进行事务处理?这意味着即使本地事务也被实现为全局事务?
这是否意味着将 JDBC 与 EJB 3 一起使用不是一个好主意?许多人将我指向 JPA,但它是一个 ORM。我想使用 SQL。
有什么建议么?
1º
这意味着在使用 JDBC 代码时 JTA 用于事务?
和
这意味着即使本地事务也被实现为全局事务?
EJB 容器可以利用资源管理器本地事务作为不需要分布式事务的企业 bean 的优化技术。
在使用声明性或程序化事务划分时,最好执行以下操作:
类似(setter 方法或成员字段)
// mappedName points to a global mapping name
@Resource(mappedName="java:/DefaultDS")
private javax.sql.DataSource ds;
在业务逻辑方法中
如果您使用的是声明式事务
连接连接 = ds.getConnection();
如果您使用的是程序化事务
声明一个 setter 或成员字段 UserTransaction
@Resource
private UserTransaction ut;
和
ut.beginTransaction();
Connection conn = ds.getConnection();
ut.commit();
请注意以下事项
如果您使用的是有状态会话 bean,请在 PrePassivate 回调方法中执行以下操作
问候,
您可以查看此页面,看来您可以将 EJB3 与 JDBC 结合使用。
http://www.java2s.com/Tutorial/Java/0415__EJB3/UseJDBCInEJB.htm
如果您使用的是 JPA2,则可以使用entityManager.unwrap(Connection.class)
来获取实际连接并与您的 JDBC 代码一起使用。
例如:
Connection connection = entityManager.unwrap( Connection.class );
try (Statement stmt = connection.createStatement()) {
stmt.executeUpdate( "INSERT INTO MyTable( name ) VALUES ( 'my name' ) " );
}
这是否意味着将 JDBC 与 EJB 3 一起使用不是一个好主意?许多人将我指向 JPA,但它是一个 ORM。我想使用 SQL。
有时它是必要的,用于性能或兼容性问题。我通常使用这种技术来执行带有数组参数、复杂 Posgis SQL 等的 PL/PSQL。