Srs estou recebendo esta exception quando executo um Ebj Stateless que abre um arquivo deuns 30000 linhas e e faz um looping em cada linha do arquivo fazendo insert em uma base mysql com alguns dados da
linha do arquivo lido.
java.lang.IllegalStateException: [com.arjuna.ats.internal.jta.transaction.arjunacore.inactive] [com.arjuna.ats.internal.jta.transaction.arjunacore.inactive] The transaction is not active!
at com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.commitAndDisassociate(TransactionImple.java:1379)
at com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction.commit(BaseTransaction.java:135)
at com.arjuna.ats.jbossatx.BaseTransactionManagerDelegate.commit(BaseTransactionManagerDelegate.java:87)
O EJB é um codigo pequeno que recebe por injeção o mysql
@Stateful(name="Cotacao")
@Remote(value=ICotacaoRemote.class)
@RemoteBinding(jndiBinding="br.com.foxtec.bovespa.ICotacaoRemote")
public class Cotacao implements ICotacaoRemote {
@Resource(name="jdbc/MySQLDB" , mappedName = "java:/MySQLDB")
private DataSource dataSource;
private Connection con;
@PostConstruct
public void initialized() {
try {
con = dataSource.getConnection();
e tem um método que faz insert em loop.
while (in.ready()) { // Loop para cada linha do arquivo texto aberto
PreparedStatement pstmt = con.prepareStatement("INSERT INTO papeisnegociados (codigo, nomeEmpresa, valorNegociado, qtdNegociado, dataNegociacao) values (?,?,?,?,?)");
str = in.readLine();
if (str.substring(0,2).equals("02") && str.substring(111,116).equals("VISTA") && (str.substring(133,135).equals("ON") || str.substring(133,135).equals("PN"))) {
String codigo = str.substring(2,12).trim();
this.obterDadosNegociacao(codigo);
PapelEntity papel = this.obterDadosNegociacao(codigo);
try {
pstmt.setString(1, papel.getCodigo());
if (papel.getNomeEmpresa() != null) {
pstmt.setString(2, papel.getNomeEmpresa());
} else {
pstmt.setNull(2, Types.VARCHAR);
}
if (papel.getValorNegociado() != null) {
pstmt.setDouble(3, papel.getValorNegociado());
} else {
pstmt.setNull(3, Types.DOUBLE);
}
if (papel.getQtdNegociado() != null) {
pstmt.setInt(4, papel.getQtdNegociado());
} else {
pstmt.setNull(4, Types.INTEGER);
}
pstmt.setTimestamp(5, new Timestamp(new Date().getTime()));
pstmt.executeUpdate();
} catch (Exception e) {
e.printStackTrace();
break;
}
}
pstmt.close();
}
Geralmente quando ele chega na linha 160, as vezes 140 ou 150 ele retorna a exception.
Alguem tem uma dica do que eu possa verificar para solucionar o erro ?
Não coloquei nenhuma anotação de transação pois imagino que o defaul é o conteiner controlar
Estou usando o jboss 4.2.3
