Jump to: navigation, search

Difference between revisions of "EclipseLink/Examples/JPA/WLS AppScoped DataSource"

(How to use Application Scoped Data Sources in WebLogic with EclipseLink JPA)
m (How to use Application Scoped Data Sources in WebLogic with EclipseLink JPA)
Line 15: Line 15:
 
<?xml version = '1.0' encoding = 'windows-1252'?>
 
<?xml version = '1.0' encoding = 'windows-1252'?>
 
<jdbc-data-source xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 
<jdbc-data-source xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.bea.com/ns/weblogic/weblogic-jdbc.xsd"
+
  xsi:schemaLocation="http://www.bea.com/ns/weblogic/weblogic-jdbc.xsd"
xmlns="http://www.bea.com/ns/weblogic/jdbc-data-source">
+
  xmlns="http://www.bea.com/ns/weblogic/jdbc-data-source">
<name>SimpleDS</name>
+
  <name>SimpleDS</name>
<jdbc-driver-params>
+
  <jdbc-driver-params>
<url>jdbc:oracle:thin:@localhost:1521:ORCL</url>
+
    <url>jdbc:oracle:thin:@localhost:1521:ORCL</url>
<driver-name>oracle.jdbc.OracleDriver</driver-name>
+
      <driver-name>oracle.jdbc.OracleDriver</driver-name>
<properties>
+
      <properties>
<property>
+
        <property>
<name>user</name>
+
          <name>user</name>
<value>scott</value>
+
          <value>scott</value>
</property>
+
        </property>
<property>
+
        <property>
<name>servername</name>
+
          <name>servername</name>
<value>localhost</value>
+
          <value>localhost</value>
</property>
+
        </property>
<property>
+
        <property>
<name>portnumber</name>
+
          <name>portnumber</name>
<value>1521</value>
+
          <value>1521</value>
</property>
+
        </property>
<property>
+
        <property>
<name>sid</name>
+
          <name>sid</name>
<value>ORCL</value>
+
          <value>ORCL</value>
</property>
+
        </property>
</properties>
+
      </properties>
<password-encrypted>tiger</password-encrypted>
+
      <password-encrypted>pw</password-encrypted>
</jdbc-driver-params>
+
    </jdbc-driver-params>
+
    <jdbc-connection-pool-params>
+
      <initial-capacity>2</initial-capacity>
<jdbc-connection-pool-params>
+
      <max-capacity>10</max-capacity>
<initial-capacity>2</initial-capacity>
+
      <test-connections-on-reserve>true</test-connections-on-reserve>
<max-capacity>10</max-capacity>
+
      <test-table-name>SQL SELECT 1 FROM DUAL</test-table-name>
<test-connections-on-reserve>true</test-connections-on-reserve>
+
    </jdbc-connection-pool-params>
<test-table-name>SQL SELECT 1 FROM DUAL</test-table-name>
+
 
</jdbc-connection-pool-params>
+
    <jdbc-data-source-params>
+
      <jndi-name>SimpleDS</jndi-name>
+
      <scope>Application</scope>
<jdbc-data-source-params>
+
      <global-transactions-protocol>TwoPhaseCommit</global-transactions-protocol>
<jndi-name>SimpleDS</jndi-name>
+
    </jdbc-data-source-params>
<scope>Application</scope>
+
<global-transactions-protocol>TwoPhaseCommit</global-transactions-protocol>
+
</jdbc-data-source-params>
+
 
</jdbc-data-source>
 
</jdbc-data-source>
 
</source>
 
</source>
Line 65: Line 62:
 
<source lang="xml">
 
<source lang="xml">
 
<wls:module>
 
<wls:module>
    <wls:name>SimpleDS</wls:name>
+
  <wls:name>SimpleDS</wls:name>
    <wls:type>JDBC</wls:type>
+
  <wls:type>JDBC</wls:type>
    <wls:path>META-INF/simple-jdbc.xml</wls:path>
+
  <wls:path>META-INF/simple-jdbc.xml</wls:path>
 
</wls:module>
 
</wls:module>
 
</source>
 
</source>

Revision as of 10:29, 9 September 2008

How to use Application Scoped Data Sources in WebLogic with EclipseLink JPA

This how-to describes the use of application scoped data-sources within a WebLogic Application Server (version 10.3). These steps are necessary as the WebLogic container does not initialize application scoped data sources before the JPA bootstrapping is performed. Without these steps EclipseLink will be provided a null data-source and will throw an exception during its initialization.

The configuration involves a few simple configuration steps:

  1. Define the new data-source in a *-jdbc.xml configuration file. (EAR)
  2. Add the JDBC module to the WebLogic Application Configuration (EAR)
  3. Configure the JPA persistence unit to use the application scoped data source

1. DataSource Definition

An application scoped data source can be specified by providing a <name>-jdbc.xml file within the META-INF folder of your application's EAR. The following illustrates how the file might be defined. The important part of this configuration is the <scope>Application</scope> within the jdbc-data-source-params section.

<?xml version = '1.0' encoding = 'windows-1252'?>
<jdbc-data-source xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://www.bea.com/ns/weblogic/weblogic-jdbc.xsd"
  xmlns="http://www.bea.com/ns/weblogic/jdbc-data-source">
  <name>SimpleDS</name>
  <jdbc-driver-params>
    <url>jdbc:oracle:thin:@localhost:1521:ORCL</url>
      <driver-name>oracle.jdbc.OracleDriver</driver-name>
      <properties>
        <property>
          <name>user</name>
          <value>scott</value>
        </property>
        <property>
          <name>servername</name>
          <value>localhost</value>
        </property>
        <property>
          <name>portnumber</name>
          <value>1521</value>
        </property>
        <property>
          <name>sid</name>
          <value>ORCL</value>
        </property>
      </properties>
      <password-encrypted>pw</password-encrypted>
    </jdbc-driver-params>
    <jdbc-connection-pool-params>
      <initial-capacity>2</initial-capacity>
      <max-capacity>10</max-capacity>
      <test-connections-on-reserve>true</test-connections-on-reserve>
      <test-table-name>SQL SELECT 1 FROM DUAL</test-table-name>
    </jdbc-connection-pool-params>
 
    <jdbc-data-source-params>
      <jndi-name>SimpleDS</jndi-name>
      <scope>Application</scope>
      <global-transactions-protocol>TwoPhaseCommit</global-transactions-protocol>
    </jdbc-data-source-params>
</jdbc-data-source>

WebLogic Application Configuration

In the EAR you will have /META-INF/weblogic-application.xml where the JDBC module needs to be defined. This simply registers the data source defined in step 1 for use in your application.

<wls:module>
  <wls:name>SimpleDS</wls:name>
  <wls:type>JDBC</wls:type>
  <wls:path>META-INF/simple-jdbc.xml</wls:path>
</wls:module>

JPA: persistence.xml

In the persistence.xml's definition of the persistence-unit you will need to specify an additional property so EclipseLink can lazily look up the application scoped data source.

<?xml version="1.0" encoding="windows-1252" ?>
<persistence xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
	version="1.0" xmlns="http://java.sun.com/xml/ns/persistence">
	<persistence-unit name="employee" transaction-type="JTA">
		<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
		<jta-data-source>SimpleDS</jta-data-source>
 
		<properties>
			<property name="eclipselink.target-server" value="WebLogic_10" />
			<property name="javax.persistence.jtaDataSource" value="java:/app/jdbc/SimpleDS" />
		</properties>
	</persistence-unit>
</persistence>

In this example a JTA data source is being used so the property required is javax.persistence.jtaDataSource. If however you are using a non-jta-data-source then you should use the javax.persistence.nonJtaDataSource property to specify the JNDI name to use.