Today I had to create a postgres connection pool in JDeveloper's embedded oc4j container. JDeveloper being the horrible piece of software that it is, and its documentation being rather lacking, this took a lot longer than it should have. The pretty GUI wizards aren't able to pull it off either -- these measly conjurers really aren't worthy of the name.
The biggest hurdly was postgres' connection pool not being happy with just a jdbc URL. Instead it expects a hostname, port number and database name. These things are all in the jdbc url, but never mind, that would've been too simple. After reading through the XSD for data-sources.xml, I realised that there's an option to provide custom properties to the factory. Quite simple really. A connection pool definition looks something like this:
<connection-pool name="myPool" disable-server-connection-pooling="false"> <connection-factory factory-class="org.postgresql.jdbc3.Jdbc3PoolingDataSource" user="postgres" password="1234" url="jdbc:postgresql://localhost:5432/db"> <property name="serverName" value="localhost" /> <property name="portNumber" value="5432" /> <property name="databaseName" value="db" /> </connection-factory> </connection-pool> <managed-data-source name="dataSource" jndi-name="jdbc/postgresDS" connection-pool-name="myPool" />
Once this is done, all that's left to do is place the postgres driver JAR in the j2ee/home/applib folder in your JDeveloper folder. If you don't place it there, you'll get very nice class not found errors.
That's it. Not very hard at all!