openxava / documentation / Configuration for Oracle

If you're using an OpenXava version older than 7.0 look at the old instructions
Configuring your OpenXava application to go against Oracle is very simple, basically you have to add a dependency to the JDBC driver for Oracle in your project and define correctly the datasource. You don't need to touch any code of your application.
We assume you have already installed and running Oracle.

Add JDBC driver for Oracle to your project

Edit the pom.xml file in the root of your project, there add the next dependency inside the <dependencies> part:

<dependency>
    <groupId>com.oracle.database.jdbc</groupId>
    <artifactId>ojdbc8</artifactId>
    <version>21.8.0.0</version>
</dependency>
Maybe the above code is already in your pom.xml but commented, in that case just uncomment it.
If the error java.sql.SQLException: Non supported character set appears, you can resolve it by adding the following dependency in the same file:
<dependency>
  <groupId>com.oracle.ojdbc</groupId>
  <artifactId>orai18n</artifactId>
  <version>19.3.0.0</version>
</dependency>

Adjust your datasource definition

Edit src/main/webapp/META-INF/context.xml of your project to adjust the datasource to point to Oracle, something like this:
<Resource name="jdbc/MyAppDS" auth="Container"
    type="javax.sql.DataSource"
    maxTotal="100" maxIdle="20" maxWaitMillis="10000"
    username="root" password="ao49fmsk"
    driverClassName="oracle.jdbc.OracleDriver"
    url="jdbc:oracle:thin:@localhost:1521:mysid"/>
The differences are the driverClassName and the url. The final part of the url, mysid in this example, is the sid of your Oracle database. Obviously, instead of localhost you should put the address of the server that hosts Oracle. Also put the correct username and password. Maybe the above code is already in your context.xml but commented, in that case just uncomment it. Don't forget to comment or remove the datasource for HSQLDB (the default one when you create a new OpenXava project), only one datasource (with the same name) should be active.

Update persistence.xml

You need to touch the default persistence unit of persistence.xml (in src/main/resources/META-INF), to add the hibernate.dialect property with the correct value for your Oracle version:
<!-- Default Persistence Unit for Oracle -->
<persistence-unit name="default">
	...
	<properties>
		...
		<!-- ADD THE NEXT PROPERTY -->
		<property name="hibernate.dialect" value="org.hibernate.dialect.Oracle12cDialect"/>
	</properties>
</persistence-unit>
You should use Oracle12cDialect for Oracle 12 or better, that is for Oracle 19 you should use Oracle12cDialect too, as shown above. For older versions of Oracle you can use Oracle10gDialect or Oracle8iDialect.

Rebuild your project

After the changes you have to rebuild your project. In OpenXava Studio click with right mouse button on your project an choose Run As > Maven install, thus:

Or if you have Maven installed in your computer and you prefer to use command line:

$ cd myapp
$ mvn install

Optimization note: Instead of a mvn install, that do a complete Maven build, you can use mvn war:exploded, enough to apply the above changes for development. You can run mvn war:exploded from OpenXava Studio with Run As > Maven build... and typing war:exploded for goal.

Run your application

Run your application, it should work nicely against your Oracle database. If it fails, verify that your database server is up, that the user and password in context.xml are correct, that the server IP is correct. Also verify that the user has rights to create databases and tables (if you want to use the automatic schema generation of OpenXava, not needed if the tables already exist).

If it still fails ask us in the OpenXava Help forum. Include the content of your persistence.xml, context.xml (remove the passwords) and specially the stacktrace produced, you can find the trace in the Console tab of OpenXava Studio.