0 Replies Latest reply on Feb 24, 2005 1:18 PM by Fiona Healy

    Many-Many CMR relationships

    Fiona Healy Newbie

      ReportEJB and FieldsEJB
      I want to store a set of fields as an attribute in the reportEJB but i am having problems setting values and consequently i am getting a nullpointerexception

      Stack trade:

      13:58:02,804 ERROR [LogInterceptor] EJBException in method: public abstract void
       com.rgs.ejb.reportdefinitionmanager.ReportDefinitionManagerRemote.createReportD
      efinition(com.rgs.ejb.reportdefinition.ReportDefinitionPOJO) throws java.rmi.Rem
      oteException, causedBy:
      javax.transaction.TransactionRolledbackException: null; CausedByException is:
       null; nested exception is:
       javax.ejb.EJBException: null; CausedByException is:
       null
       at org.jboss.ejb.plugins.AbstractTxInterceptor.invokeNext(AbstractTxInte
      rceptor.java:244)
       at org.jboss.ejb.plugins.TxInterceptorCMT.runWithTransactions(TxIntercep
      torCMT.java:316)
       at org.jboss.ejb.plugins.TxInterceptorCMT.invokeHome(TxInterceptorCMT.ja
      va:129)
       at org.jboss.ejb.plugins.SecurityInterceptor.invokeHome(SecurityIntercep
      
      
      [/ode]
      
      here is the flow of the code including ejb-jar and jbosscmpjdbc config files as i think this may be where the problem lies?
      
      
       </ejb-relation>
       <ejb-relation>
       <ejb-relation-name>ReportMasterFields-ReportDefinition</ejb-relation-name>
       <ejb-relationship-role>
       <ejb-relationship-role-name>
       ReportMasterFields-has-Many-ReportDefinitions
       </ejb-relationship-role-name>
       <multiplicity>Many</multiplicity>
       <relationship-role-source>
       <ejb-name>ReportMasterFieldsEJB</ejb-name>
       </relationship-role-source>
       </ejb-relationship-role>
      
       <ejb-relationship-role>
       <ejb-relationship-role-name>
       ReportDefinition-has-many-ReportMasterFields
       </ejb-relationship-role-name>
       <multiplicity>Many</multiplicity>
       <relationship-role-source>
       <ejb-name>ReportDefinitionEJB</ejb-name>
       </relationship-role-source>
       <cmr-field>
       <cmr-field-name>reportFields</cmr-field-name>
       <cmr-field-type>java.util.Set</cmr-field-type>
       </cmr-field>
       </ejb-relationship-role>
       </ejb-relation>
      
      
      
      jbosscmp-jdbc
      
      
       <ejb-relation>
       <ejb-relation-name>ReportMasterFields-ReportDefinition</ejb-relation-name>
      
       <relation-table-mapping>
       <table-name>report_fields</table-name>
       <create-table>true</create-table>
       <remove-table>true</remove-table>
       </relation-table-mapping>
      
       <ejb-relationship-role>
       <ejb-relationship-role-name>
       ReportDefinition-has-many-ReportMasterFields
       </ejb-relationship-role-name>
       <key-fields>
       <key-field>
       <field-name>id</field-name>
       <column-name>report_definition_id</column-name>
       </key-field>
       </key-fields>
       </ejb-relationship-role>
      
       <ejb-relationship-role>
       <ejb-relationship-role-name>
       ReportMasterFields-has-Many-ReportDefinitions
       </ejb-relationship-role-name>
       <key-fields>
       <key-field>
       <field-name>id</field-name>
       <column-name>masterfield_id</column-name>
       </key-field>
       </key-fields>
       </ejb-relationship-role>
       </ejb-relation>
      
      
      
      
      Client code
      
      
      Set masterfields = new HashSet();
       ....
       //create a new ReportDefinition and add set of reportMasterFields to it
       ReportDefinitionPOJO r = new ReportDefinitionPOJO();
       r.setName("Report1");
       r.setFilterCriteria("Filter");
       r.setGroupCriteria("group");
       r.setSortCriteria("sort");
       r.setDescription("description");
       r.setDestination("destination");
       r.setRequester("Fiona");
       r.setFormat("Text");
      
       //System.out.println(r.getReportFields());//.add(masterfields);
       r.setReportFields(masterfields);
      
       _managerRemote.createReportDefinition(r);
      
       ReportDefinitionPOJO po = _managerRemote.listReportByName("Fiona");
       Set fields = po.getReportFields(); //null pointer occurs here
       Iterator it = fields.iterator();
       while(it.hasNext())
       {
       ReportMasterFieldsPOJO p = (ReportMasterFieldsPOJO)it.next();
       System.out.println(p.getName());
       }
       }
       catch(Exception e){e.printStackTrace();}
      
      
      
      
      Session bean
      
      
       public void createReportDefinition(ReportDefinitionPOJO pojo)
       {
      
       try{
       home.create(pojo);
       }
       catch(Exception e)
       {
       throw new EJBException(e);
       }
      
       }
      
      
      Bean...btw im using POJOs
      
      
       public Integer ejbCreate(ReportDefinitionPOJO report) throws CreateException
       {
       setId(generatePrimaryKey());
       System.out.println("ejbcreate");
       return report.getId();
       }
       public void ejbPostCreate(ReportDefinitionPOJO report)
       {
      
       setName(report.getName());
       System.out.println("fields" +report.getReportFields());//this is printing to the console
       setReportFields(report.getReportFields());
       setFilterCriteria(report.getFilterCriteria());
       setGroupCriteria(report.getGroupCriteria());
       setSortCriteria(report.getSortCriteria());
       setDescription(report.getDescription());
       setDestination(report.getDestination());
       setUserId(report.getUserId());
       setFormat(report.getFormat());
       setRequester(report.getRequester());
       System.out.println("postcreate");
      
       }
      
       public void setValueObject(Object obj)
       {
       ReportDefinitionPOJO report = (ReportDefinitionPOJO)obj;
       //we don't set the ID as its already set
       setName(report.getName());
       setReportFields(report.getReportFields());
       setFilterCriteria(report.getFilterCriteria());
       setGroupCriteria(report.getGroupCriteria());
       setSortCriteria(report.getSortCriteria());
       setDescription(report.getDescription());
       setDestination(report.getDestination());
       setUserId(report.getUserId());
       setFormat(report.getFormat());
       setRequester(report.getRequester());
      
       }
      
       public Object getValueObject(){
      
       ReportDefinitionPOJO report = new ReportDefinitionPOJO();
       report.setId(getId());
       report.setName(getName());
       //report.setReportFields(getReportFields());
       report.setFilterCriteria(getFilterCriteria());
       report.setGroupCriteria(getGroupCriteria());
       report.setSortCriteria(getSortCriteria());
       report.setDescription(getDescription());
       report.setDestination(getDestination());
       report.setUserId(getUserId());
       report.setFormat(getFormat());
       report.setRequester(getRequester());
       return report;
       }
      
       public abstract void setReportFields(Set fields);
       public abstract Set getReportFields();
      
      
      
      
      
      
      Please help i have tried everything in solving this problem