예제 #1
0
  protected synchronized void remove(BookDescription description) throws DatabaseException {
    try {
      String[] isbnSeq = _authors.get(description.authors);

      assert isbnSeq != null;

      int i;
      for (i = 0; i < isbnSeq.length; ++i) {
        if (isbnSeq[i].equals(description.isbn)) {
          break;
        }
      }

      assert i < isbnSeq.length;

      if (isbnSeq.length == 1) {
        //
        // If there are no further associated isbn numbers then remove
        // the record.
        //
        _authors.fastRemove(description.authors);
      } else {
        //
        // Remove the isbn number from the sequence and write
        // back the new record.
        //
        String[] newIsbnSeq = new String[isbnSeq.length - 1];
        System.arraycopy(isbnSeq, 0, newIsbnSeq, 0, i);
        if (i < isbnSeq.length - 1) {
          System.arraycopy(isbnSeq, i + 1, newIsbnSeq, i, isbnSeq.length - i - 1);
        }

        _authors.fastPut(description.authors, newIsbnSeq);
      }

      //
      // This can throw EvictorDeactivatedException (which
      // indicates an internal error). The exception is
      // currently ignored.
      //
      _evictor.remove(createBookIdentity(description.isbn));
    } catch (Freeze.DatabaseException ex) {
      DatabaseException e = new DatabaseException();
      e.message = ex.message;
      throw e;
    }
  }
예제 #2
0
  public synchronized BookPrx createBook(BookDescription description, Ice.Current current)
      throws DatabaseException, BookExistsException {
    BookPrx book = isbnToBook(description.isbn, current.adapter);

    try {
      book.ice_ping();

      //
      // The book already exists.
      //
      throw new BookExistsException();
    } catch (Ice.ObjectNotExistException e) {
      //
      // Book doesn't exist, ignore the exception.
      //
    }

    //
    // Create a new book Servant.
    //
    BookI bookI = new BookI(this);
    bookI.description = description;

    Ice.Identity ident = createBookIdentity(description.isbn);

    //
    // Create a new Ice Object in the evictor, using the new
    // identity and the new Servant.
    //
    // This can throw EvictorDeactivatedException (which indicates
    // an internal error). The exception is currently ignored.
    //
    _evictor.add(bookI, ident);

    try {
      //
      // Add the isbn number to the authors map.
      //
      String[] isbnSeq = _authors.get(description.authors);
      int length = (isbnSeq == null) ? 0 : isbnSeq.length;
      String[] newIsbnSeq = new String[length + 1];

      if (isbnSeq != null) {
        System.arraycopy(isbnSeq, 0, newIsbnSeq, 0, length);
      }
      newIsbnSeq[length] = description.isbn;

      _authors.fastPut(description.authors, newIsbnSeq);

      return book;
    } catch (Freeze.DatabaseException ex) {
      DatabaseException e = new DatabaseException();
      e.message = ex.message;
      throw e;
    }
  }