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; } }
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; } }