Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

Code Block
JAVA
JAVA
borderStylesolid
titleAccountClient.java
package sample.jpa.appclient;

import java.util.ArrayList;
import java.util.List;

import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;



public class AccountClient {

 //@PersistenceContext(unitName="JPA-App-Client")
 private EntityManager em;

 public AccountClient(){

  EntityManagerFactory emf = 
   Persistence.createEntityManagerFactory("JPA-App-Client");

  if(emf == null) 
     System.out.println("emf is null!!!");

  em = emf.createEntityManager();
  if(em == null) 
     System.out.println("em is null!!!");

 }

 public static void main(String[] args) {

  AccountClient client = new AccountClient();

  String opt = args[0];

  if(opt.equals("create")){

   if (args.length != 6){

   System.out.println("Enter values for accountNo, 
    name, address, branchCode and balance;");

   System.exit(0);
  }
  else{

   int accNo = Integer.parseInt(args[1]);
   String name = args[2];
   String address = args[3];
   int branchCode = Integer.parseInt(args[4]);
   double balance = Double.parseDouble(args[5]);
   client.createAccount(accNo,name,address,branchCode,balance);

  }

 }else if (opt.equals("list")){

   List accList = client.listAccounts();
   for(int i = 0; i < accList.size(); i++){
    System.out.println("_________________________________");
    Account acc = (Account)accList.get(i);
    System.out.println(acc.getAccountNo());
    System.out.println(acc.getName());
    System.out.println(acc.getAddress());
    System.out.println(acc.getBranchCode());
    System.out.println(acc.getBalance());
    System.out.println("____________________________________________");
    System.out.println("");
   }

 }else if (opt.equals("update")){

  if (args.length != 3){
   System.out.println("Enter values for accountNo and new balace value ;");
   System.exit(0);
  }

  else{
   int accNo = Integer.parseInt(args[1]);
   double newbalance = Double.parseDouble(args[2]); 
   client.updateAccountBalance(accNo,newbalance);
  }
			
 }else if (opt.equals("delete")){

  if (args.length != 2){
   System.out.println("Enter values for accountNo for delete");
   System.exit(0);
  }
  else {
   int accNo = Integer.parseInt(args[1]);
   client.deleteAccount(accNo);
  } 
 
 else {
   System.out.println("Unknown option selected...!!");
  }

 }
	
 public Account createAccount
        (int accNo, String name, 
	 String address, int branchCode,
	 double balance){
		
  Account acc1 = em.find(Account.class, accNo);
  if(acc1 != null) throw new 
   IllegalArgumentException
   ("Account already exists: Account Number ("+accNo+")");

  Account acc = new Account();
  acc.setAccountNo(accNo);
  acc.setAddress(address);
  acc.setBalance(balance);
  acc.setBranchCode(branchCode);
  acc.setName(name);
  System.out.println("Persisting account entity (accNo = "+accNo+")");
  em.persist(acc);
  System.out.println("Persisted successfully account entity (accNo = "+accNo+")");
  return acc;

 }
	
 public List listAccounts(){
  if(em == null) System.out.println("em is null!!!");
  Query q = em.createQuery("SELECT a FROM Account a");
  List currList = q.getResultList();
  return currList;
 }

	
 public Account updateAccountBalance
       (int accNo, double newBalance){

  Account acc = em.find(Account.class, accNo);

  if(acc == null) throw new 
   IllegalArgumentException
  ("Account not found : Account Number ("+accNo+")");

  acc.setBalance(newBalance);
		em.merge(acc);
  return acc;
		 
 }
	
 public void deleteAccount(int accNo){
  Account acc = em.find(Account.class, accNo);
  if(acc == null) throw new IllegalArgumentException
   ("Account not found : Account Number ("+accNo+")");
  em.remove(acc);
 }
}

Preparing Deployment Descriptors and Deployment Plans

1. Create persistence.xml file in the META-INF folder as follows.
Right click on the META-INF folder and click on New => File.

Image Added

Provide persistence.xml as the file name and click on Finish.

Image Added

Copy the below contents to the persistence.xml.

Code Block
XML
XML
borderStylesolid
titlepersistence.xml


<?xml version="1.0" encoding="UTF-8"?>
<persistence	
 xmlns="http://java.sun.com/xml/ns/persistence"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
 version="1.0"
 xsi:schemaLocation="http://java.sun.com/xml/ns/persistence 
 http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">

 <persistence-unit name="JPA-App-Client">
  <description>JPA Application Client</description>
  <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
  <class>sample.jpa.appclient.Account</class>
  <properties>
   <property name="openjpa.ConnectionURL" value="jdbc:derby://localhost/AccountDB" />
   <property name="openjpa.ConnectionDriverName" value="org.apache.derby.jdbc.ClientDriver" />
   <property name="ConnectionUserName" value="app" />
   <property name="openjpa.jdbc.SynchronizeMappings" value="false" />
  </properties>
  </persistence-unit>
</persistence>

2. Similarly, create application-client.xml file in the META-INF folder as given the previous step and copy the below contents into the file.

Code Block
XML
XML
borderStylesolid
titleapplication-client.xml

<?xml version="1.0" encoding="UTF-8"?>

<application-client xmlns="http://java.sun.com/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application-client_5.xsd"
version="5">
  
</application-client>

Since we are using JPA annotations to declare the resources, we do not require any entries in the file.

3. Similarly, create geronimo-application-client.xml file under META-INF file and copy the below contents.

Code Block
XML
XML
borderStylesolid
titlegeronimo-application-client.xml

<?xml version="1.0" encoding="UTF-8"?>

<application-client 
 xmlns="http://geronimo.apache.org/xml/ns/j2ee/application-client-2.0"
 xmlns:sys="http://geronimo.apache.org/xml/ns/deployment-1.2"
 xmlns:naming="http://geronimo.apache.org/xml/ns/naming-1.2"
 xmlns:security="http://geronimo.apache.org/xml/ns/security-2.0"
 xmlns:connector="http://geronimo.apache.org/xml/ns/j2ee/connector-1.2">
 
 <sys:client-environment>
  
  <sys:moduleId>
   <sys:groupId>AccountJPA</sys:groupId>
   <sys:artifactId>AccountJPA-app-client</sys:artifactId>
   <sys:version>3.0</sys:version>
   <sys:type>jar</sys:type>
  </sys:moduleId>
 		
  <sys:dependencies>
   <sys:dependency>
    <sys:groupId>org.apache.geronimo.configs</sys:groupId>
    <sys:artifactId>transaction</sys:artifactId>
    <sys:version>2.1</sys:version>
    <sys:type>car</sys:type>
   </sys:dependency>
  </sys:dependencies>	  

 </sys:client-environment>
  
 <sys:server-environment> 
 
  <sys:moduleId>
   <sys:groupId>AccountJPA</sys:groupId>
   <sys:artifactId>AccountJPA-app-client-server</sys:artifactId>
   <sys:version>3.0</sys:version>
   <sys:type>jar</sys:type>
  </sys:moduleId>  

 </sys:server-environment> 
</application-client>

Deploying the application client

1. Export the Java Project to a jar file by name ApplicationClientJPA.jar as follows.
Right click on the java project and export it as jar file.

Image Added

Select Java => jar

Image Added

Click on Next and provide the jar file name and destination folder as below and click on Next.

Image Added

In the next screen click Next. In the Jar Manifest Specification wizard, select sample.jpa.appclient.AccountClient using Browse button. This is the class that has public static void main(String[] args) method which is the application entry point.

Image Added

2. Deploy the application client as follows.

Change the directory to <geronimo_home>\bin.
Submit the below command
deploy.bat -user system -password manager deploy <location_of_the_exported_jar_file>

Running the application client

1. Run the application client as follows.

The application performs the following operations.

  • List : This option lists the accounts curently in the database. The command to list is as follows.
    No Format
    bgColor#000000
    borderStylesolid
    
    <geronimo_home>/bin>java -Djava.endorsed.dirs="<geronimo_home>/lib/endorsed" -jar <geronimo_home>/bin/client.jar 
    AccountJPA/AccountJPA-app-client/3.0/jar list
    
  • Create : This option creates an account in the database. The command to create is as follows.
    No Format
    bgColor#000000
    borderStylesolid
    
    <geronimo_home>/bin>java -Djava.endorsed.dirs="<geronimo_home>/lib/endorsed" -jar <geronimo_home>/bin/client.jar 
    AccountJPA/AccountJPA-app-client/3.0/jar create 2222 Joe NewYork BranchX 20000.0
    
  • Update : This option updates an account with a new balance in the database.
    The command to update is as follows.
    No Format
    bgColor#000000
    borderStylesolid
    
    <geronimo_home>/bin>java -Djava.endorsed.dirs="<geronimo_home>/lib/endorsed" -jar <geronimo_home>/bin/client.jar 
    AccountJPA/AccountJPA-app-client/3.0/jar update 2222 30000.00
    
  • Delete : This option deletes an account in the database. The command to delete is as follows.
    No Format
    bgColor#000000
    borderStylesolid
    
    <geronimo_home>/bin>java -Djava.endorsed.dirs="<geronimo_home>/lib/endorsed" -jar <geronimo_home>/bin/client.jar 
    AccountJPA/AccountJPA-app-client/3.0/jar delete 2222.