EJB에서 CREATE SEQUENCE 수행
1938 단어 sequence
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에 NonTransaction Sql Service Bean을 주입하여 DDL 문장을 실행하면 문제가 없을 것입니다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
POJ 2442 SequenceSequence Time Limit: 6000MS Memory Limit: 65536K Total Submissions: 6120 Accepted: 1897 Description Given m sequences, e...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.