0
CDI를 사용하여 DAO 클래스에 Connection을 삽입하고 있습니다.j2ee 삽입 된 연결이 트랜잭션이 처리되지 않음
연결 생산자는 다음과 같이이다 : 예를 들어 내 DAO 클래스의 다음
public class ConnectionManager {
private static final Logger LOGGER = Logger.getLogger(ConnectionManager.class.getName());
@Resource(mappedName = "java:/PostgresXADS")
private DataSource flamingoDs;
@Named("flamingoConnection")
@Produces
@RequestScoped
public Connection createFlamingoConnection() {
LOGGER.info("createFlamingoConnection called");
try {
return flamingoDs.getConnection();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
public void closeConnection(@Disposes Connection c) {
LOGGER.info("closeConnection called");
try {
c.close();
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}
나는이 :
public class GraphDao {
@Inject
@Named("flamingoConnection")
Connection con;
public String createObjNode(String tipoCod, String nome, Object flmNodeData)
throws JsonProcessingException, SQLException, IllegalArgumentException {
if (tipoCod == null || flmNodeData == null || nome == null) {
throw new IllegalArgumentException("Empty parameters");
}
LOGGER.info("createObjNode start");
String generatedUuid;
String sql = "INSERT INTO graphdb.nodo_oggetto (tipo_cod, nome, dati) VALUES(?, ? ,?) RETURNING uuid";
PGobject jsonObject = getJsonPgObj(flmNodeData);
try (PreparedStatement stmt = this.con.prepareStatement(sql);) {
stmt.setObject(1, tipoCod);
stmt.setString(2, nome);
stmt.setObject(3, jsonObject);
try (ResultSet rs = stmt.executeQuery()) {
rs.next();
generatedUuid = rs.getString(1);
}
}
LOGGER.info("createObjNode end");
return generatedUuid;
}
내가 컨테이너 관리 트랜잭션이있는 EJB 메소드 내부의 DAO 메소드를 호출하고 있습니다 .
연결이 현재 스레드의 범위에서 올바르게 삽입되고 닫히지 만 쿼리가 실행 된 후 즉시 DB에 커밋됩니다.
내가 사용하고 데이터 소스가 그것의 정의는 타입 XA의이다 :
<xa-datasource jndi-name="java:/PostgresXADS" pool-name="PostgresXADS" enabled="true" use-ccm="true">
<xa-datasource-property name="url">
jdbc:postgresql://localhost:5433/infostud?ApplicationName=NewSegr
</xa-datasource-property>
<driver>postgres</driver>
<xa-pool>
<prefill>true</prefill>
<is-same-rm-override>false</is-same-rm-override>
<no-tx-separate-pools>true</no-tx-separate-pools>
<wrap-xa-resource>true</wrap-xa-resource>
</xa-pool>
<security>
<user-name>XXX</user-name>
<password>XXX</password>
</security>
<validation>
<valid-connection-checker class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLValidConnectionChecker"/>
<background-validation>true</background-validation>
<exception-sorter class-name="org.jboss.jca.adapters.jdbc.extensions.postgres.PostgreSQLExceptionSorter"/>
</validation>
</xa-datasource>
<drivers>
<driver name="postgres" module="org.postgresql">
<xa-datasource-class>org.postgresql.xa.PGXADataSource</xa-datasource-class>
<datasource-class>org.postgresql.ds.PGPoolingDataSource</datasource-class>
</driver>
내가 왜 무슨 일이 일어나고 10
누군가가 설명해 주시겠습니까 unsing PostgreSQL의 및 제이보스 해요? 죄송합니다
내 나쁜 영어
당신이'createObjNode를 호출하는 예를 제공 할 수 있습니다()'하고 즉시 데이터베이스에 커밋을 수행합니까? – ytg