一个业务需求,需要在EJB服务中执行DDL语句创建序列号:
CREATE SEQUENCE sequence_t_TestCategory INCREMENT BY 2 START WITH 10 MAXVALUE 999999999
我在一个EJB服务方法中获取数据源,通用JDBC执行如下:
StringBuilder sb = new StringBuilder();
sb.append("CREATE SEQUENCE ");
sb.append("sequence_t_").append(this.runningNumber.getCategory());
sb.append(" INCREMENT BY ").append(this.step);
sb.append(" START WITH ").append(this.initValue);
sb.append(" MAXVALUE ").append(maxVlue);
LogUtils.getSingleton().info("流水号生成sequence : " + sb.toString());
sqlService.updateBySql(sb.toString(), sessionId);
但执行总是报原生SQL语句执行异常.
java.sql.SQLSyntaxErrorException: ORA-02089: COMMIT 不允许在附属会话中
后面查资料,查出问题的原因是,执行DDL创建语句的时候,会默认添加COMMIT做提交。
而EJB中默认是有事务控制的,在有事务控制的EJB服务中是不允许做手动事务提交的,所以的办法就是将注入的SQL执行的服务方法申明为不参加事务控制,具体代码如下:
@Local(NonTransactionSqlServiceLocal.class)
@Remote(NonTransactionSqlServiceRemote.class)
@Stateless(mappedName="NonTransactionSqlService", name="NonTransactionSqlServiceBean")
@TransactionAttribute(TransactionAttributeType.NEVER)
public class NonTransactionSqlServiceBean extends AbstractSqlService {
@Resource(mappedName = "jdbc/going")
private DataSource dataSource;
@Override
public DataSource getDataSource() {
return dataSource;
}
public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}
}
这个在执行DDL的EJB中,注入NonTransactionSqlServiceBean来执行DDL语句就不会有问题了。
分享到:
相关推荐
平时的开发过程积累下来的 EJB的简单执行流程,
分布式对象; 远程方法调用; CORBA; RMI-IIOP; 企业JavaBeans RMI技术研究及其在EJB中的应用
j2ee without ejb 中文 part2j2ee without ejb 中文 part2j2ee without ejb 中文 part2j2ee without ejb 中文 part2j2ee without ejb 中文 part2j2ee without ejb 中文 part2j2ee without ejb 中文 part2j2ee ...
EJB中ejb-jar——xml文件说明.pdf
实战EJB 实战EJB 实战EJB 电子书 pdf
EJB3.0中文文档,实例教程.EJB3.0中文文档,实例教程.EJB3.0中文文档,实例教程.EJB3.0中文文档,实例教程.
在jbuilder中开发ejb讲解
EJB方面EJB方面EJB方面EJB方面EJB方面
针对EJB中不能使用线程这一缺陷,文中给出了在EJB中如何用JMS来模拟多线程机制并提供了一个具体的实现方案,将该方案用于网管系统中并发的获取各网络设备的 MIB信息以计算某一网络性能指标时取得了令人满意的成绩,...
EJB中JNDI的使用源码例子
精通EJB [中文], EJB早期文档资料
本教程适合具有Java 语言基础的EJB 初学者。有读者来邮件问需不需要先学EJB2.0,作者明确地告诉你不用 学了。随着EJB3 的发展,EJB2 将会逐步成为历史。
ejb3中文教程ejb3中文教程ejb3中文教程
EJB集群资料EJB集群资料EJB集群资料EJB集群资料
软件架构: EJB3.0 + Struts1.3 + Spring2.0 + JPA 应用服务器: Jboss5.1 数据库用: Oracle9i 部署前将 demo-service.xml和oracle-ds.xml copy到jboss deploy目录下,配置到你的环境下即可 -- Create sequence ...
在用Ejb导出Excel,详细的操作步骤
LoadRunner在EJB自动化测试中的应用
在PowerBuilder中呼叫EJB元件-以mail EJB為例
Java中的EJB编程实例代码,内容有:简单的EJB、无状态SessionBean、有状态SessionBean、BMP位图实例、cmp实例、Message-Driven Bean、JNDI的使用、112各种EJB之间的调用、B-S结构EJB、 C-S结构EJB、UML建模与J2EE...
基于java的开发源码-EJB中JNDI的使用源码例子.zip 基于java的开发源码-EJB中JNDI的使用源码例子.zip 基于java的开发源码-EJB中JNDI的使用源码例子.zip 基于java的开发源码-EJB中JNDI的使用源码例子.zip 基于java的...