You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@openjpa.apache.org by Phani Madgula <ph...@gmail.com> on 2008/05/26 13:57:02 UTC

JPA in JEE application client

Hi,

I have simple JEE application client that uses JPA to perform DB
operations on a database running in the embedded Derby. I tried to attached
the app to the mail but failed.
The JEE client does not look up anyEJBs. It has Account.java entity and
AccountClient.java that performs
DB operations on the Entity.

The following steps explain how to deploy and run the APP.
1. Create AccountDB database using DBManager portlet on the admin console

2. Create Account table in the AccountDB as follows
  *create table ACCOUNT (ACCOUNTNO integer, NAME varchar (50),
ADDRESS varchar (225), BRANCHCODE integer, BALANCE decimal (15,2));*

3. Deploy the app.jar

4. run the client using following options

LISTING ACCOUNTS:

j*ava -Djava.endorsed.dirs="C:**\Geronimo-2.1\lib\endorsed" -jar
C:\Geronimo-2.1\bin\client.jar
AccountJPA/AccountJPA-app**-client/3.0/jar list
*
CREATING AN ACCOUNT:

* java -Djava.endorsed.dirs="C:**\Geronimo-2.1\lib\endorsed" -jar
C:\Geronimo-2.1\bin\client.jar
AccountJPA/AccountJPA-app**-client/3.0/jar create 2222 Joe NC 10 4000
*
UPDATING AN ACCOUNT:

* java -Djava.endorsed.dirs="C:**\Geronimo-2.1\lib\endorsed" -jar
C:\Geronimo-2.1\bin\client.jar
AccountJPA/AccountJPA-app**-client/3.0/jar update 2222 8000*

DELETING AN ACCOUNT

j*ava -Djava.endorsed.dirs="C:**\Geronimo-2.1\lib\endorsed" -jar
C:\Geronimo-2.1\bin\client.jar
AccountJPA/AccountJPA-app**-client/3.0/jar delete 2222
*
The AccountClient.java has all the info.

I am able to successfully deploy the APP and perform "list" operation.
The list operation lists all the accounts currently in the database.

Where as if I tried to perform "create", or "update" or "delete"
operations, the JPA is not inserting or updating or deleting
corresponding rows in the table. Neither it's throwing any error on
the console.

What could be the error?? Thanks in advance for your help.

persistence.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>

      <!--
      <jta-data-source>PhoneBookPool</jta-data-source>
      <non-jta-data-source>PhoneBookPool</non-jta-data-source>
      -->
</persistence>
_______________________________________________________________________


ACCOUNT.java
________________________________________________________________________

package sample.jpa.appclient;

import java.io.Serializable;

import javax.persistence.Entity;
import javax.persistence.Id <http://javax.persistence.id/>;
import javax.persistence.Table;

@Entity
@Table(name="Account1")
public class Account implements Serializable{

      @Id
      private int accountNo;
      private String name;
      private String address;
      private int branchCode;
      private double balance;

      public Account(){
              this.accountNo = 0;
              this.name = "DUMMY";
              this.address = "DUMMY";
              this.branchCode = 0;
      }

      public int getAccountNo() {
              return accountNo;
      }
      public void setAccountNo(int accountNo) {
              this.accountNo = accountNo;
      }
      public String getName() {
              return name;
      }
      public void setName(String name) {
              this.name = name;
      }
      public String getAddress() {
              return address;
      }
      public void setAddress(String address) {
              this.address = address;
      }
      public int getBranchCode() {
              return branchCode;
      }
      public void setBranchCode(int branchCode) {
              this.branchCode = branchCode;
      }

      public double getBalance() {
              return balance;
      }

      public void setBalance(double balance) {
              this.balance = balance;
      }

}
_______________________________________________________________________

AccountClient.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 {

      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);
      }


}
____________________________________________________________________________

geronimo-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>
__________________________________________________________________________

Thanks
Phani

Re: JPA in JEE application client

Posted by Phani Madgula <ph...@gmail.com>.
Hi Kevan,

Thank you very much!!
I understood the missing part. Now the app is working fine.

Thanks
Phani

On Tue, May 27, 2008 at 5:53 PM, Kevin Sutter <kw...@gmail.com> wrote:

> Phani,
> My first guess is that you are not completing these "persistable"
> operations
> via a transactional commit.  Since you are not using EJBs, the demarcation
> for a transaction is left up to the application.  You could use the
> EntityTransaction interface to begin and commit/rollback your transactions.
> You can either start the transaction before performing your "persistable"
> operations, or you will have to call joinTransaction() if the transaction
> is
> started after you perform your "persistable" operations.
>
> Kevin
>
> On Mon, May 26, 2008 at 6:57 AM, Phani Madgula <
> phanibalaji.madgula@gmail.com> wrote:
>
> > Hi,
> >
> > I have simple JEE application client that uses JPA to perform DB
> > operations on a database running in the embedded Derby. I tried to
> attached
> > the app to the mail but failed.
> > The JEE client does not look up anyEJBs. It has Account.java entity and
> > AccountClient.java that performs
> > DB operations on the Entity.
> >
> > The following steps explain how to deploy and run the APP.
> > 1. Create AccountDB database using DBManager portlet on the admin console
> >
> > 2. Create Account table in the AccountDB as follows
> >  *create table ACCOUNT (ACCOUNTNO integer, NAME varchar (50),
> > ADDRESS varchar (225), BRANCHCODE integer, BALANCE decimal (15,2));*
> >
> > 3. Deploy the app.jar
> >
> > 4. run the client using following options
> >
> > LISTING ACCOUNTS:
> >
> > j*ava -Djava.endorsed.dirs="C:**\Geronimo-2.1\lib\endorsed" -jar
> > C:\Geronimo-2.1\bin\client.jar
> > AccountJPA/AccountJPA-app**-client/3.0/jar list
> > *
> > CREATING AN ACCOUNT:
> >
> > * java -Djava.endorsed.dirs="C:**\Geronimo-2.1\lib\endorsed" -jar
> > C:\Geronimo-2.1\bin\client.jar
> > AccountJPA/AccountJPA-app**-client/3.0/jar create 2222 Joe NC 10 4000
> > *
> > UPDATING AN ACCOUNT:
> >
> > * java -Djava.endorsed.dirs="C:**\Geronimo-2.1\lib\endorsed" -jar
> > C:\Geronimo-2.1\bin\client.jar
> > AccountJPA/AccountJPA-app**-client/3.0/jar update 2222 8000*
> >
> > DELETING AN ACCOUNT
> >
> > j*ava -Djava.endorsed.dirs="C:**\Geronimo-2.1\lib\endorsed" -jar
> > C:\Geronimo-2.1\bin\client.jar
> > AccountJPA/AccountJPA-app**-client/3.0/jar delete 2222
> > *
> > The AccountClient.java has all the info.
> >
> > I am able to successfully deploy the APP and perform "list" operation.
> > The list operation lists all the accounts currently in the database.
> >
> > Where as if I tried to perform "create", or "update" or "delete"
> > operations, the JPA is not inserting or updating or deleting
> > corresponding rows in the table. Neither it's throwing any error on
> > the console.
> >
> > What could be the error?? Thanks in advance for your help.
> >
> > persistence.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>
> >
> >      <!--
> >      <jta-data-source>PhoneBookPool</jta-data-source>
> >      <non-jta-data-source>PhoneBookPool</non-jta-data-source>
> >      -->
> > </persistence>
> > _______________________________________________________________________
> >
> >
> > ACCOUNT.java
> > ________________________________________________________________________
> >
> > package sample.jpa.appclient;
> >
> > import java.io.Serializable;
> >
> > import javax.persistence.Entity;
> > import javax.persistence.Id <http://javax.persistence.id/>;
> > import javax.persistence.Table;
> >
> > @Entity
> > @Table(name="Account1")
> > public class Account implements Serializable{
> >
> >      @Id
> >      private int accountNo;
> >      private String name;
> >      private String address;
> >      private int branchCode;
> >      private double balance;
> >
> >      public Account(){
> >              this.accountNo = 0;
> >              this.name = "DUMMY";
> >              this.address = "DUMMY";
> >              this.branchCode = 0;
> >      }
> >
> >      public int getAccountNo() {
> >              return accountNo;
> >      }
> >      public void setAccountNo(int accountNo) {
> >              this.accountNo = accountNo;
> >      }
> >      public String getName() {
> >              return name;
> >      }
> >      public void setName(String name) {
> >              this.name = name;
> >      }
> >      public String getAddress() {
> >              return address;
> >      }
> >      public void setAddress(String address) {
> >              this.address = address;
> >      }
> >      public int getBranchCode() {
> >              return branchCode;
> >      }
> >      public void setBranchCode(int branchCode) {
> >              this.branchCode = branchCode;
> >      }
> >
> >      public double getBalance() {
> >              return balance;
> >      }
> >
> >      public void setBalance(double balance) {
> >              this.balance = balance;
> >      }
> >
> > }
> > _______________________________________________________________________
> >
> > AccountClient.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 {
> >
> >      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);
> >      }
> >
> >
> > }
> >
> >
> ____________________________________________________________________________
> >
> > geronimo-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>
> >
> __________________________________________________________________________
> >
> > Thanks
> > Phani
> >
>

Re: JPA in JEE application client

Posted by Kevin Sutter <kw...@gmail.com>.
Phani,
My first guess is that you are not completing these "persistable" operations
via a transactional commit.  Since you are not using EJBs, the demarcation
for a transaction is left up to the application.  You could use the
EntityTransaction interface to begin and commit/rollback your transactions.
You can either start the transaction before performing your "persistable"
operations, or you will have to call joinTransaction() if the transaction is
started after you perform your "persistable" operations.

Kevin

On Mon, May 26, 2008 at 6:57 AM, Phani Madgula <
phanibalaji.madgula@gmail.com> wrote:

> Hi,
>
> I have simple JEE application client that uses JPA to perform DB
> operations on a database running in the embedded Derby. I tried to attached
> the app to the mail but failed.
> The JEE client does not look up anyEJBs. It has Account.java entity and
> AccountClient.java that performs
> DB operations on the Entity.
>
> The following steps explain how to deploy and run the APP.
> 1. Create AccountDB database using DBManager portlet on the admin console
>
> 2. Create Account table in the AccountDB as follows
>  *create table ACCOUNT (ACCOUNTNO integer, NAME varchar (50),
> ADDRESS varchar (225), BRANCHCODE integer, BALANCE decimal (15,2));*
>
> 3. Deploy the app.jar
>
> 4. run the client using following options
>
> LISTING ACCOUNTS:
>
> j*ava -Djava.endorsed.dirs="C:**\Geronimo-2.1\lib\endorsed" -jar
> C:\Geronimo-2.1\bin\client.jar
> AccountJPA/AccountJPA-app**-client/3.0/jar list
> *
> CREATING AN ACCOUNT:
>
> * java -Djava.endorsed.dirs="C:**\Geronimo-2.1\lib\endorsed" -jar
> C:\Geronimo-2.1\bin\client.jar
> AccountJPA/AccountJPA-app**-client/3.0/jar create 2222 Joe NC 10 4000
> *
> UPDATING AN ACCOUNT:
>
> * java -Djava.endorsed.dirs="C:**\Geronimo-2.1\lib\endorsed" -jar
> C:\Geronimo-2.1\bin\client.jar
> AccountJPA/AccountJPA-app**-client/3.0/jar update 2222 8000*
>
> DELETING AN ACCOUNT
>
> j*ava -Djava.endorsed.dirs="C:**\Geronimo-2.1\lib\endorsed" -jar
> C:\Geronimo-2.1\bin\client.jar
> AccountJPA/AccountJPA-app**-client/3.0/jar delete 2222
> *
> The AccountClient.java has all the info.
>
> I am able to successfully deploy the APP and perform "list" operation.
> The list operation lists all the accounts currently in the database.
>
> Where as if I tried to perform "create", or "update" or "delete"
> operations, the JPA is not inserting or updating or deleting
> corresponding rows in the table. Neither it's throwing any error on
> the console.
>
> What could be the error?? Thanks in advance for your help.
>
> persistence.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>
>
>      <!--
>      <jta-data-source>PhoneBookPool</jta-data-source>
>      <non-jta-data-source>PhoneBookPool</non-jta-data-source>
>      -->
> </persistence>
> _______________________________________________________________________
>
>
> ACCOUNT.java
> ________________________________________________________________________
>
> package sample.jpa.appclient;
>
> import java.io.Serializable;
>
> import javax.persistence.Entity;
> import javax.persistence.Id <http://javax.persistence.id/>;
> import javax.persistence.Table;
>
> @Entity
> @Table(name="Account1")
> public class Account implements Serializable{
>
>      @Id
>      private int accountNo;
>      private String name;
>      private String address;
>      private int branchCode;
>      private double balance;
>
>      public Account(){
>              this.accountNo = 0;
>              this.name = "DUMMY";
>              this.address = "DUMMY";
>              this.branchCode = 0;
>      }
>
>      public int getAccountNo() {
>              return accountNo;
>      }
>      public void setAccountNo(int accountNo) {
>              this.accountNo = accountNo;
>      }
>      public String getName() {
>              return name;
>      }
>      public void setName(String name) {
>              this.name = name;
>      }
>      public String getAddress() {
>              return address;
>      }
>      public void setAddress(String address) {
>              this.address = address;
>      }
>      public int getBranchCode() {
>              return branchCode;
>      }
>      public void setBranchCode(int branchCode) {
>              this.branchCode = branchCode;
>      }
>
>      public double getBalance() {
>              return balance;
>      }
>
>      public void setBalance(double balance) {
>              this.balance = balance;
>      }
>
> }
> _______________________________________________________________________
>
> AccountClient.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 {
>
>      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);
>      }
>
>
> }
>
> ____________________________________________________________________________
>
> geronimo-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>
> __________________________________________________________________________
>
> Thanks
> Phani
>