geronimo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Phani Madgula" <phanibalaji.madg...@gmail.com>
Subject Re: JPA problem in performing DML operations
Date Thu, 29 May 2008 03:55:51 GMT
Hi Jay,

Yes..Understood the missing part. I incorporated transactions using
EntityTransaction. Now the app is working fine.

Thanks for help
Phani


On Thu, May 29, 2008 at 1:20 AM, Jay D. McHugh <jaydmchugh@gmail.com> wrote:

> Phani,
>
> I believe that since you are managing the entity manager, you also need to
> begin and commit your own transactions.
>
> Jay
>
> Phani Madgula 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
>>
>>

Mime
View raw message