We start with the creation of the datasource. We need a ConnectionPool.
java -jar $OC4J_ADMIN/j2ee/home/admin_client.jar deployer:oc4j:localhost oc4jadmin welcome -CreateJDBCConnectionPool -applicationName default -name HrConnectionPool -factoryClass oracle.jdbc.pool.OracleDataSource -user hr -password hr -url jdbc:oracle:thin:@localhost:1521:orcl
Test the connectionpool:
java -jar $OC4J_ADMIN/j2ee/home/admin_client.jar deployer:oc4j:localhost oc4jadmin welcome
-testConnectionPool -connectionPoolName HrConnectionPool -sqlStatement "select
* from dual" And the datasource:
java -jar $OC4J_ADMIN/j2ee/home/admin_client.jar deployer:oc4j:localhost oc4jadmin welcome -createManagedDataSource -applicationName default -dataSourceName HrDataSource -jndiLocation jdbc/HrDataSource -connectionPoolName HrConnectionPool
After this we create the entities:
/home/broersa/work/CountryApp/CountryJPAEJB/src/com/bekijkhet/entity/Country.java:
[sourcecode language="java"]
package com.bekijkhet.entity;
import java.io.Serializable;
import javax.persistence.*;
@Entity
@Table(name="COUNTRIES")
public class Country implements Serializable {
private String id;
private String name;
private Region region;
@Id
@Column(name="COUNTRY_ID")
public String getId() {
return id;
}
public void setId(String id) {
this.id = id;
}
@Column(name="COUNTRY_NAME")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@ManyToOne(cascade={CascadeType.ALL})
@JoinColumn(name="REGION_ID",nullable=false)
public Region getRegion() {
return region;
}
public void setRegion(Region region) {
this.region = region;
}
}
[/sourcecode]
/home/broersa/work/CountryApp/CountryJPAEJB/src/com/bekijkhet/entity/Region.java
[sourcecode language="java"]
package com.bekijkhet.entity;
import java.io.Serializable;
import javax.persistence.*;
import static javax.persistence.CascadeType.*;
import static javax.persistence.FetchType.*;
import java.util.List;
import java.util.ArrayList;
@Entity
@Table(name="REGIONS")
public class Region implements Serializable {
private int id;
private String name;
private List
@Id
@Column(name="REGION_ID")
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
@Column(name="REGION_NAME")
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@OneToMany(fetch=FetchType.EAGER, cascade={CascadeType.ALL}, mappedBy="region")
public List
return countries;
}
public void setCountries(List
this.countries = newValue;
}
}[/sourcecode]
The EJB:/home/broersa/work/CountryApp/CountryJPAEJB/src/com/bekijkhet/country/CountryEJBLocal.java:
[sourcecode language="java"]
package com.bekijkhet.country;
import com.bekijkhet.entity.*;
import java.util.List;
public interface CountryEJBLocal {
public List
public Region getRegionByCountry(String country);
}[/sourcecode]
/home/broersa/work/CountryApp/CountryJPAEJB/src/com/bekijkhet/country/CountryEJB.java:
[sourcecode language="java"]
package com.bekijkhet.country;
import java.util.List;
import com.bekijkhet.entity.*;
public interface CountryEJB {
public List
public Region getRegionByCountry(String country);
public void addorchangeCountry(Country country) ;
public void addorchangeRegion(Region region) ;
public void removeCountry(Country country) ;
public void removeRegion(Region region) ;
public List
public List
}[/sourcecode]
/home/broersa/work/CountryApp/CountryJPAEJB/src/com/bekijkhet/country/CountryEJBBean.java
[sourcecode language="java"]
package com.bekijkhet.country;
import javax.ejb.Stateless;
import javax.ejb.Remote;
import javax.ejb.Local;
import java.util.List;
import com.bekijkhet.entity.*;
import javax.persistence.*;
@Stateless
@Remote(CountryEJB.class)
@Local(CountryEJBLocal.class)
public class CountryEJBBean implements CountryEJB,CountryEJBLocal {
@PersistenceContext
EntityManager em;
public List
Query q = em.createQuery("select r from Region r where r.name = :name");
q.setParameter("name",region);
Region r = (Region) q.getSingleResult();
// r.getCountries().size(); // get the LAZY relation
return r.getCountries();
}
public Region getRegionByCountry(String country) {
Query q = em.createQuery("select c from Country c where c.name = :name");
q.setParameter("name",country);
Country c = (Country) q.getSingleResult();
return c.getRegion();
}
public void addorchangeCountry(Country country) {
em.persist(country);
}
public void addorchangeRegion(Region region) {
em.persist(region);
}
public void removeCountry(Country country) {
Country c = em.merge(country);
em.remove(c);
}
public void removeRegion(Region region) {
Region r = em.merge(region);
em.remove(r);
}
public List
Query q = em.createQuery("select r from Region r");
List
return l;
}
public List
Query q = em.createQuery("select c from Country c");
List
return l;
}
}
[/sourcecode]
We need a persistence descriptor : /home/broersa/work/CountryApp/CountryJPAEJB/src/META-INF/persistence.xml:
[sourcecode language="XML"]
We need the build file:/home/broersa/work/CountryApp/CountryJPAEJB/build.xml:
[sourcecode language="XML"]
simple example build file
[/sourcecode]
We can build and deploy the EJB:type "ant" to build the EJB.use the next command to deploy the ejb:
java -jar $OC4J_ADMIN/j2ee/home/admin_client.jar deployer:oc4j:localhost oc4jadmin welcome -deploy -file $HOME/work/CountryApp/CountryJPAEJB/dist/CountryBean.jar -deploymentName CountryBean
Now this is done we can create the client:
/home/broersa/work/CountryApp/CountryClient/com/bekijkhet/CountryClient.java:
[sourcecode language="java"]
package com.bekijkhet;
import javax.naming.*;
import com.bekijkhet.country.CountryEJB;
import com.bekijkhet.entity.*;
import java.util.Properties;
import java.util.List;
public class CountryClient {
public static void main(String[] args) {
try {
Properties props = new Properties();
props.put("java.naming.factory.initial","com.evermind.server.ApplicationClientInitialContextFactory");
props.put("java.naming.provider.url","ormi://localhost/CountryBean");
props.put("java.naming.security.principal","oc4jadmin");
props.put("java.naming.security.credentials","welcome");
InitialContext ctx = new InitialContext(props);
CountryEJB h = (CountryEJB)ctx.lookup("CountryEJBBean");
System.out.println("The Netherlands has region: " + h.getRegionByCountry("Netherlands").getName());
List
System.out.println("Europe has the following countries:");
for (Country c : l1) {
System.out.println(" " + c.getName());
}
System.out.println("All regions:");
List
for (Region r : l2) {
System.out.println(" " + r.getName());
}
System.out.println("All countries:");
List
for (Country c2 : l3) {
System.out.println(" " + c2.getName() + " - " + c2.getRegion().getName());
}
Region r3 = new Region();
r3.setName("MyRegion1");
r3.setId(1001);
Country c3 = new Country();
c3.setName("MyCountry1");
c3.setId("31");
c3.setRegion(r3);
r3.getCountries().add(c3);
h.addorchangeCountry(c3);
Region r4 = new Region();
r4.setName("MyRegion2");
r4.setId(1002);
Country c4 = new Country();
c4.setName("MyCountry2");
c4.setId("32");
c4.setRegion(r4);
r4.getCountries().add(c4);
h.addorchangeRegion(r4);
System.out.println("All regions:");
List
for (Region r5 : l5) {
System.out.println(" " + r5.getName());
}
System.out.println("All countries:");
List
for (Country c6 : l6) {
System.out.println(" " + c6.getName() + " - " + c6.getRegion().getName());
}
}
catch (Exception e) {
System.out.println(e);
e.printStackTrace();
}
}
}
[/sourcecode]
/home/broersa/work/CountryApp/CountryClient/com/bekijkhet/META-INF/application-client.xml:
[sourcecode language="XML"]
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/application-client_1_4.xsd">
[/sourcecode]
Compile the client:javac -cp $OC4J_HOME/j2ee/home/oc4jclient.jar:/home/broersa/work/CountryApp/CountryJPAEJB/dist/CountryBean.jar:. -d . CountryClient.javaAnd test the client:java -cp $OC4J_HOME/j2ee/home/oc4jclient.jar:/home/broersa/work/CountryApp/CountryJPAEJB/dist/CountryBean.jar:. com.bekijkhet.CountryClient
The Netherlands has region: Europe
Europe has the following countries:
Belgium
Switzerland
Germany
Denmark
France
Italy
Netherlands
United Kingdom
All regions:
Europe
Americas
Asia
Middle East and Africa
All countries:
Argentina - Americas
Australia - Asia
Belgium - Europe
Brazil - Americas
Canada - Americas
Switzerland - Europe
China - Asia
Germany - Europe
Denmark - Europe
Egypt - Middle East and Africa
France - Europe
HongKong - Asia
Israel - Middle East and Africa
India - Asia
Italy - Europe
Japan - Asia
Kuwait - Middle East and Africa
Mexico - Americas
Nigeria - Middle East and Africa
Netherlands - Europe
Singapore - Asia
United Kingdom - Europe
United States of America - Americas
Zambia - Middle East and Africa
Zimbabwe - Middle East and Africa
All regions:
Europe
Americas
Asia
Middle East and Africa
MyRegion1
MyRegion2
All countries:
MyCountry1 - MyRegion1
MyCountry2 - MyRegion2
Argentina - Americas
Australia - Asia
Belgium - Europe
Brazil - Americas
Canada - Americas
Switzerland - Europe
China - Asia
Germany - Europe
Denmark - Europe
Egypt - Middle East and Africa
France - Europe
HongKong - Asia
Israel - Middle East and Africa
India - Asia
Italy - Europe
Japan - Asia
Kuwait - Middle East and Africa
Mexico - Americas
Nigeria - Middle East and Africa
Netherlands - Europe
Singapore - Asia
United Kingdom - Europe
United States of America - Americas
Zambia - Middle East and Africa
Zimbabwe - Middle East and Africa