  ...

  public void ejbStore() {
    try {
      // wczytanie danych
      getResourceDAO().update(getResourceData());

      // optymalziacja zapisu dla obiektw zalenych
      // sprawdzenie zmian i zapis
      // przeprowadzenie zmian
      if (skillSets != null) {
        // pobranie obiektu DAO uywanego przy zapisie
        SkillSetDAO skillSetDAO = getSkillSetDAO();
        Iterator skillIter = skillSet.iterator();
        while (skillIter.hasNext()) {
          SkillSetTO skill = 
            (SkillSetTO) skillIter.next();
          if (skill.isNew()) {
            // jest to nowy obiekt, wstawiamy go
            skillSetDAO.create(skill);
            skill.resetNew();
            skill.resetDirty();
          }
          else if (skill.isDeleted()) {
            // usuwaniue obiektu
            skillSetDAO.delete(skill);
            // Remove from dependents list
            skillSets.remove(skill);
          } 
          else if (skill.isDirty()) {
            // zapisanie obiektu, bo zosta zmodyfikowany
            skillSetDAO.update(skill);
            // zapisany, reset znacznikw
            skill.resetDirty();
            skill.resetNew();
          }
        }
      }

      // podobna implementacja optymalizacji dla innych obiektw

      // na przykad BlockOutTime, ...
      ...
    } catch (SkillSetException ex) {

      throw new EJBException("Powd:"+...);
    } catch (BlockOutTimeException ex) {
      throw new EJBException("Powd:"+...);
    } catch (CommitmentException ex) {
      throw new EJBException("Powd:"+...);
    }
  }

  ...