public void importFirmware(
      String manExtID, String modelExtID, String fromVersion, String toVersion, String filename)
      throws Exception {
    ManagementBeanFactory factory = this.getManagementBeanFactory();
    try {
      ModelBean modelBean = factory.createModelBean();
      UpdateImageBean bean = factory.createUpdateImageBean();

      Manufacturer manufacturer = modelBean.getManufacturerByExternalID(manExtID);
      Model model = modelBean.getModelByManufacturerModelID(manufacturer, modelExtID);

      Image image_1 = bean.getImageByVersionID(model, fromVersion);
      if (image_1 == null) {
        image_1 = bean.newImageInstance(model, fromVersion, true, fromVersion);
      }

      Image image_2 = bean.getImageByVersionID(model, toVersion);
      if (image_2 == null) {
        image_2 = bean.newImageInstance(model, toVersion, true, toVersion);
      }

      File file_1_to_2 = new File(filename);
      InputStream in_1_to_2 = new FileInputStream(file_1_to_2);

      // Test case #1
      Update update_1_to_2 = bean.getUpdate(model, fromVersion, toVersion);
      if (update_1_to_2 != null) {
        update_1_to_2.setBinary(in_1_to_2);
      } else {
        update_1_to_2 = bean.newUpdateInstance(image_1, image_2, in_1_to_2);
      }
      update_1_to_2.setStatus(bean.getImageUpdateStatus(Image.STATUS_RELEASED));
      factory.beginTransaction();
      bean.update(update_1_to_2);
      factory.commit();

      this.getSetup().getConsole().println("           [" + fromVersion + " -> " + toVersion + "]");

      //
      // Caution: must release the Hibernate Session, otherwise will throw the
      // floowing exception:
      // java.lang.UnsupportedOperationException: Blob may not be manipulated
      // from creating session
      //
    } catch (Exception e) {
      factory.rollback();
      throw e;
    } finally {
      factory.release();
    }
  }