Category Archives: java

C3P0 Production Settings

I have given below the configuration having in mind minimum resource. You need to tailor it according to your application need.

Generally in production release, we need to ensure the removal of unwanted configs which may cause some other problem after release in Live. The configuration should be accurate and don’t use counts blindly maximum.

C3P0 has many configurations, upon that here given the essential ones,

hibernate.connection.provider_class – org.hibernate.connection.C3P0ConnectionProvider

  • The above statement is used to specify the C3P0 connection provider. Here we use C3P0ConnnectionProvider class

hibernate.c3p0.max_size – 200

  •  This one tells the connection pool that it can hold 200 connections at the maximum

hibernate.c3p0.min_size  – 10

  •  This one tells the connection pool that it can hold 10 connections at the minimum. Generally this will vary from (3-20) based on the need.

hibernate.c3p0.acquire_increment – 100

  •  This determines how many connections the connection pool can acquire when the pool is exhausted.

hibernate.c3p0.idle_test_period – 120

  •  This will lets the C3P0 to test all the idle and uncheckedout connection in every this specified seconds. If the value is 0, then it won’t test.

hibernate.c3p0.max_statements – 2000

hibernate.c3p0.timeout – 60

  •  Its Default value is 0. Zero means, idle connections never expire. If the value given is greater than 0, then for the specified seconds the Connection can remain idle in pool but unused before discarded.

hibernate.c3p0.validate – true

  •  Default value is false. If we specify true, before every transaction gonna happen, it will validate the connection is valid or not. And we need to specify efficient preferredTestQuery.





When and why JPA entities should implement Serializable interface?

Answers from Stackoverflow:

This usually happens if you mix HQL and native SQL queries. In HQL, Hibernate maps the types you pass in to whatever the DB understands. When you run native SQL, then you must do the mapping yourself. If you don’t, then the default mapping is to serialize the parameter and send it to the database

According to JPA Spec:

If an entity instance is to be passed by value as a detached object (e.g., through a remote interface), the entity class must implement the Serializable interface.