Question

Is it possible to use EJB 3 with JDBC. I read somewhere, that it's allowed.

However, I hear that EJB 3 implementation uses JTA, by default. What does that mean for JDBC? Is it only for the transaction support? That means JTA is used for transaction when using JDBC code? Meaning that even local transactions are implemented as global transactions?

Does it mean it's not a good idea to use JDBC with EJB 3? Many people point me to JPA, but it's an ORM. I want to use SQL.

any suggestions?

Was it helpful?

Solution

That means JTA is used for transaction when using JDBC code ?

And

Meaning that even local transactions are implemented as global transactions ?

The EJB container CAN MAKE USE of resource manager local transactions AS AN OPTIMIZATION TECHNIQUE for enterprise beans for which distributed transactions ARE NOT NEEDED.

It is a good idea do the following when using a declarative or programmatic transaction demarcation:

  • declare resources using the Resource annotation in the enterprise bean class or using the resource-ref element in the enterprise bean’s deployment descriptor

Something like (setter method or member field)

// mappedName points to a global mapping name
@Resource(mappedName="java:/DefaultDS") 
private javax.sql.DataSource ds;

And inside a business logic method

  • If you are using a declarative transaction

    Connection conn = ds.getConnection();

  • If you are using a programmatic transaction

Declare a setter or member field UserTransaction

@Resource 
private UserTransaction ut;

And

ut.beginTransaction();

Connection conn = ds.getConnection();

ut.commit();

Take care of the following

If you are using a Stateful session bean, do the following in the PrePassivate callback method

  • Close all JDBC connections in the PrePassivate method and assign the instance’s fields storing the connections to null

regards,

OTHER TIPS

You can look at this page, it does appear that you can combine EJB3 with JDBC.

http://www.java2s.com/Tutorial/Java/0415__EJB3/UseJDBCInEJB.htm

If you are using JPA2, you can use entityManager.unwrap(Connection.class) to get actual connection and use with your JDBC code.

For example:

Connection connection = entityManager.unwrap( Connection.class );
try (Statement stmt = connection.createStatement()) {
    stmt.executeUpdate( "INSERT INTO MyTable( name ) VALUES ( 'my name' ) " );
}

Does it mean it's not a good idea to use JDBC with EJB 3? Many people point me to JPA, but it's an ORM. I want to use SQL.

Sometime it's necessary, for performance or compatibility issues. I usually use this technique to execute PL/PSQL with array parameters, complex Posgis SQL, etc.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top