Monthly Archives: August 2012

LogSql flag in OpenEJB and TomEE


Getting SQL queries is particularly important to identify potential bottlenecks and understand what is doing an application.

We often use external tools like jamon, slf4j-jdbc and so on to get this information.

There are two main drawbacks:

  • it often breaks a bit the configuration since you replace your driver by the library one and your jdbc url by another one (or at least your original one with some additional information)
  • You need another library (find it, learn it etc…)

That’s why in OpenEJB and TomEE we added a property LogSql which simply logs all queries, no need of hard configuration, that’s just a boolean.

Continue reading

JPA and table prefix


JPA is great but it doesn’t manage a standard way to add a prefix to database tables out of the box.

All (known) vendors have some hooks to do so but that’s not obvious or specified. For hibernate you have to play with NamingStrategy, with OpenJPA you either define a custom DBDictionary or a NamingDefaults and with EclipseLink you have to implement a SessionCustomizer and play with eclipselink model.

That’s why in OpenEJB and TomEE we started to work on it.

Continue reading

Switching Datasource connection pooling in TomEE/OpenEJB


DataSource Pooling

Pooling its datasource connection in a real application is very important to respect its SLA.

OpenEJB (and by the way TomEE) uses commons-dbcp since many years. It works well if well configured, but suffers from an old design. What’s more, some other libraries are today interesting and are good alternatives.

Two famous of them are tomcat-jdbc (a fork from commons-dbcp) and BoneCP. Both promises great performances (particulary in high load).

Many refactoring has been done in OpenEJB to allow switching pool library keeping the JTA management (supported by commons-dbcp but no others). The result is mainly a “magic” abstract class called org.apache.openejb.resource.jdbc.pool.PoolDataSourceCreator. Its API obliges you to implement a way to pool a provided datasource, to create a pooled datasource and to destroy what you created.

But in a user life, you don’t need it, and you can simply use what is already done through configuration :).

Continue reading