[jboss-user] [J2EE Design Patterns] - EJB3.0-Relations one-to-many

dasariprasad do-not-reply at jboss.com
Sat Sep 2 23:07:43 EDT 2006


Dear colleague,

      I had developed one one to many relation(bi-directional) as a part of learning  having two entity beans and one Stateful session facade for them. i could able to create entity beans and add a mny bean to the collection of one-side bean.but later when i search for individual beans ,it is showing errors and returning a null.In the server log file ,it is getting the information but not able to return to the client.The code is 

one side Entity

package  cmp3rels;

import javax.persistence.*;
import javax.ejb.*;
import java.util.Set;
import java.util.HashSet;

@Entity()
@Table(name="AREA")
@NamedQuery(name="plain.areas ", query="select a from Area a ")

public class   Area    implements    java.io.Serializable 
{
 Integer                  id;
 String                   areaName;
 int                          population;
 Set        bazars = new HashSet();
 

 @Id
  public  Integer getId() 
  { 
    return id; 
  }
 
  public void setId(Integer id) 
  { 
    this.id = id;
  }
 
 @Column(name="AREA_NAME" ,nullable=false)
  public String getAreaName()
  {
    return areaName;
  }

  public void setAreaName(String newAreaName)
  {
   areaName = newAreaName;
  }
 
 @Column
  public int getPopulation()
  {
    return population;
  }

  public void setPopulation(int newPopulation)
  {
    population = newPopulation;
  }
 
 @OneToMany(cascade={CascadeType.ALL}, fetch=FetchType.EAGER, mappedBy="area")
  @JoinColumn(name = "AREA_ID")  
  public Set getBazars()
 {
     return bazars;
 }
 
 public void setBazars(Set newBazars)
 {
   bazars = newBazars;
 }
 
 public String toString()
 {
   StringBuffer sb = new StringBuffer();
   sb.append("Id:"+id);
   sb.append("\nArea-Name:"+areaName);
   sb.append("\nPopulation:"+population);
   sb.append("\nbazars:"+bazars+"\n");
   return sb.toString();
 }

}
............................................................................................................
many-side entity
package  cmp3rels;

import javax.persistence.*;
import javax.ejb.*;

@Entity()
@Table(name="BAZAR")
@NamedQuery(name="plain.bazars", query="select b from Bazar b ")


public class Bazar   implements   java.io.Serializable 
{
 Integer     id;
 String      bazarName;
 double     turnover;
 Area         area;
 
 @Id 
  public Integer getId() 
  { 
    return id; 
  }
 
  public void setId(Integer id) 
  { 
    this.id = id;
  }
 
 @Column(name="BAZAR_NAME" ,nullable=false)
  public String getBazarName()
  {
    return bazarName;
  }

  public void setBazarName(String newBazarName)
  {
   bazarName = newBazarName;
  }
 
 @Column
  public double getTurnover()
  {
    return turnover;
  }

  public void setTurnover(double newTurnover)
  {
    turnover = newTurnover;
  }
 
 
  @ManyToOne(cascade={CascadeType.ALL}, fetch=FetchType.EAGER) 
   @JoinColumn(name="AREA_ID" )
  public Area getArea()
  {
       return area;
  }
 
   public void setArea(Area newArea)
  {
     area = newArea;
  } 
 
 public String toString()
 {
   StringBuffer sb = new StringBuffer();
   sb.append("Id: "+id);
   sb.append("\nArea-Name: "+bazarName);
   sb.append("\nTurnover: "+turnover); 
    sb.append("\nArea: "+area+"\n");
   return sb.toString();
 }

}
........................................................................................................
stateful facade is
interface

package cmp3rels;

import java.util.*;
import javax.ejb.Remote;

@Remote
public interface AreaSess 
{

  public  boolean   createArea(int id, String areaName, int population);

   public boolean addBazarToArea(int areaCode, int bazarCode);

   public boolean   assignBazars(int areaCode , Set  bazars);

   public String getAreaInfo(Integer areaCode);

   public boolean   createBazar(int id, String bazarName, double turnover);

   public    Bazar    getCodeBazar(Integer bazarCode);

   public    Area      getCodeArea(Integer  areaCode);

   public    Area      getBazarArea(Bazar bazar);

   public    Area    newArea(int id, String areaName, int population);

   public    Bazar    newBazar(int id, String bazarName, double tover);


 
}

package cmp3rels;

import javax.ejb.Stateful;
import javax.persistence.PersistenceContext;
import javax.persistence.PersistenceContextType;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.EntityTransaction;
import javax.persistence.Query;
import org.jboss.ejb3.entity.*;
import java.util.Set;
import java.util.HashSet;
import java.util.List;

@Stateful
public  class  AreaSessBean    implements   AreaSess,java.io.Serializable
{
  @PersistenceContext(unitName="mydb", type=PersistenceContextType.EXTENDED)
    private EntityManager   em;
    
    EntityTransaction  trans;

    private    Area    area;

    private    Bazar    bazar;



   public boolean   createArea(int id, String areaName, int population)
   {
      boolean ret = false;
    
      try
      {
          Area area = new Area();
          area.setId(new Integer(id));
          area.setAreaName(areaName);
          area.setPopulation(population);
          em.persist(area);
          ret = true;
         
       }     
       catch(Exception e)
       {
        
        e.printStackTrace(System.out);
        }
        return  ret;
      }

    public boolean addBazarToArea(int areaCode, int  bazarCode)
    {
       boolean ret = false;
       Area  area = null;
       Bazar  bazar = null;
       Set  bazars = null ;     
       

       try
       {
          area =(Area)em.find(Area.class,new Integer(areaCode));
          System.out.println(area);
          bazar =(Bazar)em.find(Bazar.class,new Integer(bazarCode));
        
             if(area != null )
             {      
                 bazar.setArea(area);      
                 bazars = area.getBazars();
                 bazars.add(bazar);
                 em.merge(area);
                 em.merge(bazar);
                
                 ret = true;          
              }
          }   
          catch(Exception e)
          {           
             e.printStackTrace(System.out);
           }
        return  ret;
      }

     public   Area   getCodeArea(Integer areaCode)
    {   
       Area ret = null;
       try
       {
          System.out.println("param is:"+areaCode);
          ret = (Area)em.getReference(Area.class, areaCode);
          em.flush();
       }
       catch(Exception e)
       {    

         StackTraceElement[] stck = e.getStackTrace();
         System.out.println("1....:"+stck.length);
          for(StackTraceElement elem : stck)
          {
            System.out.println(elem);
          }
       }
       
         System.out.println("area is:"+ret);
        return ret;
     }         

      public   Bazar   getCodeBazar(Integer  bazarCode)
      {             
          Bazar   ret = null;
          try
          {
             System.out.println("param is :"+bazarCode);
             ret = (Bazar)em.getReference(Bazar.class,bazarCode);
          }
          catch(Exception e)
           {
        
        
            StackTraceElement[] stck = e.getStackTrace();
            System.out.println("1....:"+stck.length);
       
              for(StackTraceElement elem : stck)
             {
                 System.out.println(elem);
             }
          }
           System.out.println("1....:"+ret);
           return ret;
       }

     public   boolean   assignBazars(int areaCode , Set  bazs)
     {
        boolean ret = false;
        Area area = null;
        Set  bazars = null ;     
        try
       {
          area = (Area)em.find(cmp3rels.Area.class,new Integer(areaCode));
          if(area != null )
          {
            bazars = area.getBazars();
            bazars.clear();
            bazars.addAll(bazs);
             
                for(Bazar bz : bazs)
               {
                 bz.setArea(area);
               }

              ret = true;    
             }
          }   
          catch(Exception e)
          {

             e.printStackTrace(System.out);
          }
        return  ret;
      }

/*    public String getAreaInfo(Integer areaCode)
    {
         String  ret = "Not Available";
         Area area = null;
         String qryStr = "select Object(ar)  from Area  ar where ar.id=:d";   
         System.out.println("...."+areaCode);

         try
        {
             Query qry = em.createQuery(qryStr);
             qry.setParameter("d",areaCode);  
             System.out.println(qry);
             List li = qry.getResultList();
             if(li.size()>0 )
             {
               area = (Area)li.get(0);
                ret = area.toString();
             }

          }   
          catch(Exception e)
          {

             StackTraceElement[] stck = e.getStackTrace();
            System.out.println("1....:"+stck.length);
            for(StackTraceElement elem : stck)
            {
            System.out.println(elem);
           }

            }
          return  ret;
      }*/


   public String getAreaInfo(Integer areaCode)
    {
         String  ret = "Not Available";
         Area area = null;
       
        try
         {
             area =(Area)em.getReference(Area.class,areaCode);
             if(area != null )
             {
                ret = area.toString();
             }

          }   
          catch(Exception e)
          {

            StackTraceElement[] stck = e.getStackTrace();
            System.out.println("1....:"+stck.length);
            for(StackTraceElement elem : stck)
            {
            System.out.println(elem);
           }

            }
        return  ret;
      }


    public boolean   createBazar(int id, String bazarName, double turnover)
    {
      boolean ret = false;

        try
       {
           Bazar  bazar = new Bazar();
           bazar.setId(new Integer(id));
           bazar.setBazarName(bazarName);
           bazar.setTurnover(turnover);
           em.persist(bazar);

           ret = true;          
        }     
       catch(Exception e)
       {

           e.printStackTrace(System.out);
       }
        return  ret;
      }

    public     Area   getBazarArea(Bazar bazar1)
    {
      System.out.println("...."+em.isOpen());
      String qryStr = " select   ar    from  Area   ar  ,in (ar.bazars)  brs " +
                                      " where  :b1  member  of   brs ";
      Area area = null;
      Bazar bazar = null;
      try
      {      
            Query  qry = em.createQuery(qryStr);   
            qry.setParameter("b1",bazar1);
            List  li  = qry.getResultList();
            area  =  (Area)li.get(0);
            
          }
          catch(Exception e)
          {
           
           e.printStackTrace(System.out);
          }
          return area;
       }
        
     public    Area    newArea(int id, String areaName, int population)
     {
        Area  ret = null;
       
      try
      {
          Area area = new Area();
          area.setId(new Integer(id));
          area.setAreaName(areaName);
          area.setPopulation(population);
          em.persist(area);
          ret = area;          
       }     
       catch(Exception e)
       {
         
           e.printStackTrace(System.out);
       }
        return  ret;
      }


       public    Bazar    newBazar(int id, String bazarName, double tover)
       {
         Bazar  ret = null;

         try
        {
           Bazar  bazar = new Bazar();
           bazar.setId(new Integer(id));
           bazar.setBazarName(bazarName);
           bazar.setTurnover(tover);
           em.persist(bazar);
           ret = bazar;          
        }     
       catch(Exception e)
       {
         
          e.printStackTrace(System.out);
       }
        return  ret;
      }

 
}

...................................................................................................

working client class is 
package  cmp3rels;

import javax.ejb.*;
import javax.naming.*;
import javax.rmi.*;
import java.util.*;
import org.apache.log4j.*;

public class NewRel3Client 
{
 static Logger logger;

 public static InitialContext getInitialContext()
 {
   Properties props=new Properties();
   InitialContext jndiCtx=null;
   try
    {
     props.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
props.put(Context.PROVIDER_URL,"jnp://localhost");
props.put(Context.STATE_FACTORIES,"org.jboss.naming:org.jnp.interfaces");  
  jndiCtx=new InitialContext(props);  
   }
 catch(Exception ex)
  {}
 return jndiCtx;
  }
    
 public static void main(String args[])throws java.io.IOException
 {
   int[]  areaIds  = {1000,1005,1010};
   String[]  areas = {"Guindy","Tambaram","Mudichur"};
   int[]  pops = {490000,260000,95000};

   int[]  bazarIds  = {100,105,110};
   String bazars[] = {"Super-Special","Variety-Mart","Needs-Market"};
   double tovers[] = {239879.30,199234.30,61439.30};

   boolean  created = false;
   logger = Logger.getRootLogger();
   logger.addAppender(new FileAppender(new HTMLLayout(),
                                       "mylog1.log",true));   
   System.out.println("\nBegin New-EJB3-Rels-Client...\n");
   try
   {
   
    InitialContext ctx=getInitialContext();

    AreaSess  sess = 
        (AreaSess)ctx.lookup("AreaSessBean/remote");

    System.out.println("\nGot jndi named object..\n");
       for(int i=0;i<3;i++)
      {
          created = sess.createArea(areaIds,areas,pops);  
      
        System.out.println("\nStatement Area Created is...:"+created);
    
        created = sess.createBazar(bazarIds,bazars,tovers);  
      
         System.out.println("\nStatement Bazar Created is...:"+created);
       }
         Area area = null;
        Bazar  bazar = null;
       
         for(int i=0;i<15;i+=5)
        {         
          created = sess.addBazarToArea(1000+i,100+i);
           System.out.println("bazar is added "+created);
        }
         
      
    }   
    catch(Exception e)
    {
        e.printStackTrace();
     } 

   }

}

............................................................................................................

not working class is

package  cmp3rels;

import javax.ejb.*;
import javax.naming.*;
import javax.rmi.*;
import java.util.*;
import org.apache.log4j.*;

public class Rel3Client 
{
 static Logger logger;

 public static InitialContext getInitialContext()
 {
   Properties props=new Properties();
   InitialContext jndiCtx=null;
   try
    {
     props.put(Context.INITIAL_CONTEXT_FACTORY,"org.jnp.interfaces.NamingContextFactory");
props.put(Context.PROVIDER_URL,"jnp://localhost:1099");
props.put(Context.URL_PKG_PREFIXES,"org.jboss.naming:org.jnp.interfaces");  
  jndiCtx=new InitialContext(props);  
   }
 catch(Exception ex)
  {}
 return jndiCtx;
  }
    
 public static void main(String args[])throws java.io.IOException
 {
   
   boolean  created = false;
   logger = Logger.getRootLogger();
   logger.addAppender(new FileAppender(new HTMLLayout(),
                                       "mylog1.log",true));   
   System.out.println("\nBegin Rels3-Client...\n");
   try
   {
   
    InitialContext ctx=getInitialContext();

     Object obj = ctx.lookup("AreaSessBean/remote");
    AreaSess  sess =  (AreaSess)PortableRemoteObject.narrow(obj,AreaSess.class);

       
        System.out.println("\nGot jndi named object..\n");

          Area area2 = sess.getCodeArea(new Integer(1000));
          System.out.println("area...."+area2);

          System.out.println("......::"+sess.getAreaInfo(new Integer(1000)));
       
          Bazar  bazar = sess.getCodeBazar(new Integer(105));

         System.out.println("....:"+bazar);

                   Area area = sess.getBazarArea(bazar);
                   System.out.println("Area for bazar id-105 is: "+area); 
       
        
    }   
    catch(Exception e)
    {
        System.out.println(e.getMessage());
     } 

   }

}


  i made one ant build file as 


<?xml  version="1.0" ?>

 
  
  
  
  
  
  
  
   
  

     
 
      
                        
      
    

    
     
     
     
    

  
     
   
  

 
    
     
       
        
    


  
  
   
    
    
    
  
    
   
   
    
   
     
 
       
        
       
    
 
       
        
       
    
 

  
the oracle sql is
drop  table    bazar;

drop  table   area; 

drop  sequence  area_seq;


drop   sequence   bazar_seq;


create  sequence   bazar_seq;
 
create sequence  area_seq;


create  table  area(id  number Constraint area_PK primary key,
area_name varchar2(20) not null,
population number);

create  table   bazar(id   number  Constraint bazar_PK primary key,
bazar_name  varchar2(20) not null,
turnover number,
AREA_ID  number references area(id));



    please look into this and help me to fish out the problem


View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=3969078#3969078

Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3969078



More information about the jboss-user mailing list