You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tapestry.apache.org by hl...@apache.org on 2005/10/14 19:54:51 UTC

svn commit: r321162 - in /jakarta/tapestry/trunk/examples/Vlib/src: context/WEB-INF/ java/org/apache/tapestry/vlib/ java/org/apache/tapestry/vlib/pages/ java/org/apache/tapestry/vlib/pages/admin/ java/org/apache/tapestry/vlib/services/

Author: hlship
Date: Fri Oct 14 10:54:43 2005
New Revision: 321162

URL: http://svn.apache.org/viewcvs?rev=321162&view=rev
Log:
Continue revving Virtual Library for Tapestry 4.0

Added:
    jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/services/BookQuerySource.java
    jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/services/BookQuerySourceImpl.java
Modified:
    jakarta/tapestry/trunk/examples/Vlib/src/context/WEB-INF/hivemodule.xml
    jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/Global.java
    jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/OperationsUser.java
    jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/VirtualLibraryEngine.java
    jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/BookMatches.java
    jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/BorrowedBooks.java
    jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/GiveAwayBooks.java
    jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/MyLibrary.java
    jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/NewBook.java
    jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/ViewPerson.java
    jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/admin/TransferBooksTransfer.java

Modified: jakarta/tapestry/trunk/examples/Vlib/src/context/WEB-INF/hivemodule.xml
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Vlib/src/context/WEB-INF/hivemodule.xml?rev=321162&r1=321161&r2=321162&view=diff
==============================================================================
--- jakarta/tapestry/trunk/examples/Vlib/src/context/WEB-INF/hivemodule.xml (original)
+++ jakarta/tapestry/trunk/examples/Vlib/src/context/WEB-INF/hivemodule.xml Fri Oct 14 10:54:43 2005
@@ -54,5 +54,26 @@
         <create-instance class="ErrorPresenterImpl"/>
         
     </service-point>
+    
+    <service-point id="BookQuerySource">
+        
+        Handles JNDI lookup and retry logic for obtaining
+        an IBookQuery EJB.
+        
+        <invoke-factory>
+            <construct class="BookQuerySourceImpl">
+                <set-object property="nameLookup" value="service:hivemind.lib.NameLookup"/>
+                <set-object property="remoteTemplate" value="service:RemoteTemplate"/>
+            </construct>
+        </invoke-factory>
+                
+    </service-point>
+    
+    <contribution configuration-id="hivemind.ApplicationDefaults">
+        <!-- Talk to the local JBoss JNDI -->
+        <default symbol="java.naming.factory.initial" value="org.jnp.interfaces.NamingContextFactory"/>
+        <default symbol="java.naming.factory.url.pkgs" value="org.jboss.naming:org.jnp.interfaces"/>
+        <default symbol="java.naming.provider.url" value="localhost:1099"/>
+    </contribution>
      
 </module>

Modified: jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/Global.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/Global.java?rev=321162&r1=321161&r2=321162&view=diff
==============================================================================
--- jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/Global.java (original)
+++ jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/Global.java Fri Oct 14 10:54:43 2005
@@ -22,7 +22,6 @@
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 import org.apache.hivemind.ApplicationRuntimeException;
-import org.apache.tapestry.vlib.ejb.IBookQueryHome;
 import org.apache.tapestry.vlib.ejb.IOperationsHome;
 
 /**
@@ -40,22 +39,10 @@
     // Home interfaces are static, such that they are only
     // looked up once (JNDI lookup is very expensive).
 
-    private IBookQueryHome _bookQueryHome;
-
     private IOperationsHome _operationsHome;
 
     private Context _rootNamingContext;
 
-    public synchronized IBookQueryHome getBookQueryHome()
-    {
-        if (_bookQueryHome == null)
-            _bookQueryHome = (IBookQueryHome) findNamedObject(
-                    "vlib/BookQuery",
-                    IBookQueryHome.class);
-
-        return _bookQueryHome;
-    }
-
     public synchronized IOperationsHome getOperationsHome()
     {
         if (_operationsHome == null)
@@ -159,7 +146,6 @@
     public synchronized void clear()
     {
         _rootNamingContext = null;
-        _bookQueryHome = null;
         _operationsHome = null;
     }
 }

Modified: jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/OperationsUser.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/OperationsUser.java?rev=321162&r1=321161&r2=321162&view=diff
==============================================================================
--- jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/OperationsUser.java (original)
+++ jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/OperationsUser.java Fri Oct 14 10:54:43 2005
@@ -16,6 +16,7 @@
 
 import org.apache.tapestry.annotations.InjectObject;
 import org.apache.tapestry.vlib.ejb.IOperations;
+import org.apache.tapestry.vlib.services.BookQuerySource;
 import org.apache.tapestry.vlib.services.ErrorPresenter;
 import org.apache.tapestry.vlib.services.RemoteTemplate;
 
@@ -37,4 +38,7 @@
 
     @InjectObject("service:vlib.ErrorPresenter")
     public abstract ErrorPresenter getErrorPresenter();
+
+    @InjectObject("service:vlib.BookQuerySource")
+    public abstract BookQuerySource getBookQuerySource();
 }

Modified: jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/VirtualLibraryEngine.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/VirtualLibraryEngine.java?rev=321162&r1=321161&r2=321162&view=diff
==============================================================================
--- jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/VirtualLibraryEngine.java (original)
+++ jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/VirtualLibraryEngine.java Fri Oct 14 10:54:43 2005
@@ -18,7 +18,6 @@
 import java.rmi.RemoteException;
 
 import javax.ejb.CreateException;
-import javax.ejb.FinderException;
 import javax.servlet.http.HttpSession;
 
 import org.apache.commons.logging.Log;
@@ -28,8 +27,6 @@
 import org.apache.tapestry.StaleSessionException;
 import org.apache.tapestry.engine.BaseEngine;
 import org.apache.tapestry.form.IPropertySelectionModel;
-import org.apache.tapestry.vlib.ejb.IBookQuery;
-import org.apache.tapestry.vlib.ejb.IBookQueryHome;
 import org.apache.tapestry.vlib.ejb.IOperations;
 import org.apache.tapestry.vlib.ejb.IOperationsHome;
 import org.apache.tapestry.vlib.ejb.Person;
@@ -258,40 +255,6 @@
     }
 
     /**
-     * Creates a new {@link IBookQuery} EJB instance.
-     */
-
-    public IBookQuery createNewQuery()
-    {
-        Global global = (Global) getGlobal();
-
-        IBookQuery result = null;
-
-        int i = 0;
-        while (true)
-        {
-            IBookQueryHome home = global.getBookQueryHome();
-
-            try
-            {
-                result = home.create();
-
-                break;
-            }
-            catch (CreateException ex)
-            {
-                throw new ApplicationRuntimeException("Could not create BookQuery bean.", ex);
-            }
-            catch (RemoteException ex)
-            {
-                rmiFailure("Remote exception creating BookQuery bean.", ex, i++);
-            }
-        }
-
-        return result;
-    }
-
-    /**
      * Invoked in various places to present an error message to the user. This sets the error
      * property of either the {@link org.apache.tapestry.vlib.pages.Home} or
      * {@link org.apache.tapestry.vlib.pages.MyLibrary} page (the latter only if the user is logged
@@ -353,8 +316,6 @@
 
         _operations = null;
     }
-
- 
 
     protected void handleStaleSessionException(IRequestCycle cycle, StaleSessionException exception)
     {

Modified: jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/BookMatches.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/BookMatches.java?rev=321162&r1=321161&r2=321162&view=diff
==============================================================================
--- jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/BookMatches.java (original)
+++ jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/BookMatches.java Fri Oct 14 10:54:43 2005
@@ -23,12 +23,14 @@
 import org.apache.tapestry.annotations.Meta;
 import org.apache.tapestry.annotations.Persist;
 import org.apache.tapestry.html.BasePage;
+import org.apache.tapestry.vlib.OperationsUser;
 import org.apache.tapestry.vlib.VirtualLibraryEngine;
 import org.apache.tapestry.vlib.components.Browser;
 import org.apache.tapestry.vlib.ejb.IBookQuery;
 import org.apache.tapestry.vlib.ejb.MasterQueryParameters;
 import org.apache.tapestry.vlib.ejb.SortColumn;
 import org.apache.tapestry.vlib.ejb.SortOrdering;
+import org.apache.tapestry.vlib.services.RemoteCallback;
 
 /**
  * Runs queries and displays matches.
@@ -37,7 +39,7 @@
  */
 
 @Meta("page-type=Search")
-public abstract class BookMatches extends BasePage
+public abstract class BookMatches extends BasePage implements OperationsUser
 {
     @InjectComponent("browser")
     public abstract Browser getBrowser();
@@ -104,34 +106,35 @@
 
     private int executeQuery()
     {
-        VirtualLibraryEngine vengine = (VirtualLibraryEngine) getEngine();
+        final MasterQueryParameters parameters = getQueryParameters();
 
-        MasterQueryParameters parameters = getQueryParameters();
+        final SortOrdering ordering = new SortOrdering(getSortColumn(), isDescending());
 
-        SortOrdering ordering = new SortOrdering(getSortColumn(), isDescending());
-
-        int i = 0;
-        while (true)
+        RemoteCallback<Integer> callback = new RemoteCallback()
         {
-            try
+            public Integer doRemote() throws RemoteException
             {
                 IBookQuery query = getBookQuery();
 
                 if (query == null)
                 {
-                    query = vengine.createNewQuery();
+                    query = getBookQuerySource().newQuery();
                     setBookQuery(query);
                 }
 
-                return query.masterQuery(parameters, ordering);
+                try
+                {
+                    return query.masterQuery(parameters, ordering);
+                }
+                catch (RemoteException ex)
+                {
+                    setBookQuery(null);
+                    throw ex;
+                }
             }
-            catch (RemoteException ex)
-            {
-                vengine.rmiFailure("Remote exception processing query.", ex, i++);
+        };
 
-                setBookQuery(null);
-            }
-        }
+        return getRemoteTemplate().execute(callback, "Error processing query.");
     }
 
 }

Modified: jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/BorrowedBooks.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/BorrowedBooks.java?rev=321162&r1=321161&r2=321162&view=diff
==============================================================================
--- jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/BorrowedBooks.java (original)
+++ jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/BorrowedBooks.java Fri Oct 14 10:54:43 2005
@@ -34,6 +34,7 @@
 import org.apache.tapestry.vlib.ejb.IOperations;
 import org.apache.tapestry.vlib.ejb.SortColumn;
 import org.apache.tapestry.vlib.ejb.SortOrdering;
+import org.apache.tapestry.vlib.services.RemoteCallback;
 
 /**
  * Shows a list of books the user has borrowed.
@@ -95,40 +96,41 @@
     private void runQuery()
     {
         Visit visit = getVisitState();
-        Integer userPK = visit.getUserId();
+        final Integer userPK = visit.getUserId();
+        final SortOrdering ordering = new SortOrdering(getSortColumn(), isDescending());
 
-        VirtualLibraryEngine vengine = (VirtualLibraryEngine) getEngine();
-
-        SortOrdering ordering = new SortOrdering(getSortColumn(), isDescending());
-
-        int i = 0;
-        while (true)
+        RemoteCallback<Integer> callback = new RemoteCallback()
         {
-            try
+            public Integer doRemote() throws RemoteException
             {
                 IBookQuery query = getBorrowedQuery();
 
                 if (query == null)
                 {
-                    query = vengine.createNewQuery();
+                    query = getBookQuerySource().newQuery();
                     setBorrowedQuery(query);
                 }
 
-                int count = query.borrowerQuery(userPK, ordering);
-                Browser browser = getBrowser();
+                try
+                {
+                    return query.borrowerQuery(userPK, ordering);
+                }
+                catch (RemoteException ex)
+                {
+                    setBorrowedQuery(null);
+                    throw ex;
+                }
+            }
+        };
 
-                if (count != browser.getResultCount())
-                    browser.initializeForResultCount(count);
+        int count = getRemoteTemplate().execute(
+                callback,
+                "Remote exception finding borrowed books.");
 
-                break;
-            }
-            catch (RemoteException ex)
-            {
-                vengine.rmiFailure("Remote exception finding borrowed books.", ex, i++);
+        Browser browser = getBrowser();
 
-                setBorrowedQuery(null);
-            }
-        }
+        if (count != browser.getResultCount())
+            browser.initializeForResultCount(count);
     }
 
     /**
@@ -137,12 +139,9 @@
 
     public void returnBook(Integer bookPK)
     {
-        VirtualLibraryEngine vengine = (VirtualLibraryEngine) getEngine();
-        IOperations operations = vengine.getOperations();
-
         try
         {
-            Book book = operations.returnBook(bookPK);
+            Book book = getOperations().returnBook(bookPK);
 
             setMessage(returnedBook(book.getTitle()));
 

Modified: jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/GiveAwayBooks.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/GiveAwayBooks.java?rev=321162&r1=321161&r2=321162&view=diff
==============================================================================
--- jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/GiveAwayBooks.java (original)
+++ jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/GiveAwayBooks.java Fri Oct 14 10:54:43 2005
@@ -29,7 +29,6 @@
 import org.apache.tapestry.form.IPropertySelectionModel;
 import org.apache.tapestry.vlib.EntitySelectionModel;
 import org.apache.tapestry.vlib.Protected;
-import org.apache.tapestry.vlib.VirtualLibraryEngine;
 import org.apache.tapestry.vlib.Visit;
 import org.apache.tapestry.vlib.ejb.Book;
 import org.apache.tapestry.vlib.ejb.IBookQuery;
@@ -161,37 +160,27 @@
 
     private IPropertySelectionModel buildBooksModel()
     {
-        VirtualLibraryEngine vengine = (VirtualLibraryEngine) getEngine();
-        Visit visit = (Visit) vengine.getVisit();
-        Integer userPK = visit.getUserId();
-        Book[] books = null;
+        Visit visit = getVisitState();
+        final Integer userPK = visit.getUserId();
 
-        int i = 0;
-        while (true)
+        RemoteCallback<Book[]> callback = new RemoteCallback()
         {
-            books = null;
-
-            try
+            public Book[] doRemote() throws RemoteException
             {
-                IBookQuery query = vengine.createNewQuery();
+                IBookQuery query = getBookQuerySource().newQuery();
 
                 int count = query.ownerQuery(userPK, null);
 
-                if (count > 0)
-                    books = query.get(0, count);
-
-                break;
+                return count == 0 ? null : query.get(0, count);
             }
-            catch (RemoteException ex)
-            {
-                vengine.rmiFailure(readBooksFailure(), ex, i++);
-            }
-        }
+        };
+
+        Book[] books = getRemoteTemplate().execute(callback, readBooksFailure());
 
         EntitySelectionModel result = new EntitySelectionModel();
 
         if (books != null)
-            for (i = 0; i < books.length; i++)
+            for (int i = 0; i < books.length; i++)
                 result.add(books[i].getId(), books[i].getTitle());
 
         return result;

Modified: jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/MyLibrary.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/MyLibrary.java?rev=321162&r1=321161&r2=321162&view=diff
==============================================================================
--- jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/MyLibrary.java (original)
+++ jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/MyLibrary.java Fri Oct 14 10:54:43 2005
@@ -28,6 +28,7 @@
 import org.apache.tapestry.vlib.ejb.IBookQuery;
 import org.apache.tapestry.vlib.ejb.SortColumn;
 import org.apache.tapestry.vlib.ejb.SortOrdering;
+import org.apache.tapestry.vlib.services.RemoteCallback;
 
 /**
  * Shows a list of the user's books, allowing books to be editted or even deleted.
@@ -82,40 +83,39 @@
 
     private void runQuery()
     {
-        Visit visit = (Visit) getVisit();
-        Integer userId = visit.getUserId();
+        final Integer userId = getVisitState().getUserId();
+        final SortOrdering ordering = new SortOrdering(getSortColumn(), isDescending());
 
-        VirtualLibraryEngine vengine = (VirtualLibraryEngine) getEngine();
-
-        SortOrdering ordering = new SortOrdering(getSortColumn(), isDescending());
-
-        int i = 0;
-        while (true)
+        RemoteCallback<Integer> callback = new RemoteCallback()
         {
-            try
+            public Integer doRemote() throws RemoteException
             {
                 IBookQuery query = getOwnedQuery();
 
                 if (query == null)
                 {
-                    query = vengine.createNewQuery();
+                    query = getBookQuerySource().newQuery();
                     setOwnedQuery(query);
                 }
 
-                int count = query.ownerQuery(userId, ordering);
+                try
+                {
+                    return query.ownerQuery(userId, ordering);
+                }
+                catch (RemoteException ex)
+                {
+                    setOwnedQuery(null);
+                    throw ex;
+                }
+            }
+        };
 
-                if (count != getBrowser().getResultCount())
-                    getBrowser().initializeForResultCount(count);
+        int count = getRemoteTemplate().execute(callback, "Error accessing owned books.");
 
-                break;
-            }
-            catch (RemoteException ex)
-            {
-                vengine.rmiFailure("Remote exception accessing owned books.", ex, i++);
+        Browser browser = getBrowser();
 
-                setOwnedQuery(null);
-            }
-        }
+        if (count != browser.getResultCount())
+            browser.initializeForResultCount(count);
     }
 
     /**

Modified: jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/NewBook.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/NewBook.java?rev=321162&r1=321161&r2=321162&view=diff
==============================================================================
--- jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/NewBook.java (original)
+++ jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/NewBook.java Fri Oct 14 10:54:43 2005
@@ -20,6 +20,7 @@
 
 import javax.ejb.CreateException;
 
+import org.apache.hivemind.ApplicationRuntimeException;
 import org.apache.hivemind.HiveMind;
 import org.apache.tapestry.annotations.InjectComponent;
 import org.apache.tapestry.annotations.InjectPage;
@@ -32,6 +33,7 @@
 import org.apache.tapestry.vlib.VirtualLibraryEngine;
 import org.apache.tapestry.vlib.Visit;
 import org.apache.tapestry.vlib.ejb.IOperations;
+import org.apache.tapestry.vlib.services.RemoteCallback;
 
 /**
  * Collects information for a new book.
@@ -66,10 +68,10 @@
     {
         IValidationDelegate delegate = getValidationDelegate();
 
-        Map attributes = getAttributes();
+        final Map attributes = getAttributes();
 
-        Integer publisherId = (Integer) attributes.get("publisherId");
-        String publisherName = getPublisherName();
+        final Integer publisherId = (Integer) attributes.get("publisherId");
+        final String publisherName = getPublisherName();
 
         if (publisherId == null && HiveMind.isBlank(publisherName))
         {
@@ -89,41 +91,43 @@
         Visit visit = getVisitState();
 
         Integer userId = visit.getUserId();
-        VirtualLibraryEngine vengine = (VirtualLibraryEngine) getEngine();
 
         attributes.put("ownerId", userId);
         attributes.put("holderId", userId);
 
-        int i = 0;
-        while (true)
+        RemoteCallback<Boolean> callback = new RemoteCallback()
         {
-            try
+            public Boolean doRemote() throws RemoteException
             {
+                IOperations operations = getOperations();
 
-                IOperations operations = vengine.getOperations();
-
-                if (publisherId != null)
-                    operations.addBook(attributes);
-                else
+                try
                 {
-                    operations.addBook(attributes, publisherName);
+                    if (publisherId != null)
+                    {
+                        operations.addBook(attributes);
 
-                    // Clear the app's cache of info; in this case, known publishers.
+                        return false;
+                    }
 
-                    vengine.clearCache();
-                }
+                    operations.addBook(attributes, publisherName);
 
-                break;
-            }
-            catch (CreateException ex)
-            {
-                setError("Error adding book: " + ex.getMessage());
-                return;
-            }
-            catch (RemoteException ex)
-            {
-                vengine.rmiFailure("Remote exception adding new book.", ex, i++);
+                    return true;
+                }
+                catch (CreateException ex)
+                {
+                    throw new ApplicationRuntimeException(ex);
+                }
             }
+        };
+
+        boolean clearCache = getRemoteTemplate().execute(callback, "Error adding new book.");
+
+        if (clearCache)
+        {
+            VirtualLibraryEngine vengine = (VirtualLibraryEngine) getEngine();
+
+            vengine.clearCache();
         }
 
         // Success. First, update the message property of the return page.
@@ -143,7 +147,7 @@
 
             // Setup defaults for the new book.
 
-            attributes.put("lendable", Boolean.TRUE);
+            attributes.put("lendable", true);
 
             setAttributes(attributes);
         }

Modified: jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/ViewPerson.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/ViewPerson.java?rev=321162&r1=321161&r2=321162&view=diff
==============================================================================
--- jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/ViewPerson.java (original)
+++ jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/ViewPerson.java Fri Oct 14 10:54:43 2005
@@ -31,6 +31,7 @@
 import org.apache.tapestry.vlib.ejb.Person;
 import org.apache.tapestry.vlib.ejb.SortColumn;
 import org.apache.tapestry.vlib.ejb.SortOrdering;
+import org.apache.tapestry.vlib.services.RemoteCallback;
 
 /**
  * Displays the book inventory list for a single {@link org.apache.tapestry.vlib.ejb.IPerson},
@@ -100,35 +101,34 @@
 
     private int runQuery()
     {
-        VirtualLibraryEngine vengine = (VirtualLibraryEngine) getEngine();
-        Integer personId = getPersonId();
+        final Integer personId = getPersonId();
+        final SortOrdering ordering = new SortOrdering(getSortColumn(), isDescending());
 
-        SortOrdering ordering = new SortOrdering(getSortColumn(), isDescending());
-
-        int i = 0;
-        while (true)
+        RemoteCallback<Integer> callback = new RemoteCallback()
         {
-            IBookQuery query = getQuery();
-
-            if (query == null)
-            {
-                query = vengine.createNewQuery();
-
-                setQuery(query);
-            }
-
-            try
-            {
-                return query.ownerQuery(personId, ordering);
-            }
-            catch (RemoteException ex)
+            public Integer doRemote() throws RemoteException
             {
-                vengine.rmiFailure("Remote exception for owner query.", ex, i++);
+                IBookQuery query = getQuery();
 
-                setQuery(null);
+                if (query == null)
+                {
+                    query = getBookQuerySource().newQuery();
+                    setQuery(query);
+                }
+
+                try
+                {
+                    return query.ownerQuery(personId, ordering);
+                }
+                catch (RemoteException ex)
+                {
+                    setQuery(null);
+                    throw ex;
+                }
             }
-        }
+        };
 
+        return getRemoteTemplate().execute(callback, "Error executing owner query.");
     }
 
     public void pageBeginRender(PageEvent event)

Modified: jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/admin/TransferBooksTransfer.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/admin/TransferBooksTransfer.java?rev=321162&r1=321161&r2=321162&view=diff
==============================================================================
--- jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/admin/TransferBooksTransfer.java (original)
+++ jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/pages/admin/TransferBooksTransfer.java Fri Oct 14 10:54:43 2005
@@ -34,10 +34,8 @@
 import org.apache.tapestry.vlib.EntitySelectionModel;
 import org.apache.tapestry.vlib.IErrorProperty;
 import org.apache.tapestry.vlib.VirtualLibraryDelegate;
-import org.apache.tapestry.vlib.VirtualLibraryEngine;
 import org.apache.tapestry.vlib.ejb.Book;
 import org.apache.tapestry.vlib.ejb.IBookQuery;
-import org.apache.tapestry.vlib.ejb.IOperations;
 import org.apache.tapestry.vlib.ejb.Person;
 import org.apache.tapestry.vlib.services.RemoteCallback;
 
@@ -173,38 +171,28 @@
         return selectPage;
     }
 
-    private IPropertySelectionModel buildUserBookModel(Person user)
+    private IPropertySelectionModel buildUserBookModel(final Person user)
     {
-        VirtualLibraryEngine vengine = (VirtualLibraryEngine) getEngine();
-        Book[] books = null;
-
-        int i = 0;
-        while (true)
+        RemoteCallback<Book[]> callback = new RemoteCallback()
         {
-            books = null;
-
-            try
+            public Book[] doRemote() throws RemoteException
             {
-                IBookQuery query = vengine.createNewQuery();
+                IBookQuery query = getBookQuerySource().newQuery();
 
                 int count = query.ownerQuery(user.getId(), null);
 
-                if (count > 0)
-                    books = query.get(0, count);
-
-                break;
-            }
-            catch (RemoteException ex)
-            {
-                vengine.rmiFailure("Unable to retrieve books owned by " + user.getNaturalName()
-                        + ".", ex, i++);
+                return count > 0 ? query.get(0, count) : null;
             }
-        }
+        };
+
+        Book[] books = getRemoteTemplate().execute(
+                callback,
+                "Unable to retrieve books owned by " + user.getNaturalName() + ".");
 
         EntitySelectionModel model = new EntitySelectionModel();
 
         if (books != null)
-            for (i = 0; i < books.length; i++)
+            for (int i = 0; i < books.length; i++)
                 model.add(books[i].getId(), books[i].getTitle());
 
         return model;

Added: jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/services/BookQuerySource.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/services/BookQuerySource.java?rev=321162&view=auto
==============================================================================
--- jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/services/BookQuerySource.java (added)
+++ jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/services/BookQuerySource.java Fri Oct 14 10:54:43 2005
@@ -0,0 +1,35 @@
+// Copyright 2005 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry.vlib.services;
+
+import org.apache.tapestry.vlib.ejb.IBookQuery;
+
+/**
+ * Handles remote lookup to obtain a new instance of the
+ * {@link org.apache.tapestry.vlib.ejb.IBookQuery} stateful session EJB.
+ * 
+ * @author Howard M. Lewis Ship
+ * @since 4.0
+ * @see org.apache.tapestry.vlib.ejb.IBookQueryHome
+ */
+public interface BookQuerySource
+{
+    /**
+     * Returns a new instance of a book query, ready to perform various query operations.
+     * 
+     * @return book query instance
+     */
+    IBookQuery newQuery();
+}

Added: jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/services/BookQuerySourceImpl.java
URL: http://svn.apache.org/viewcvs/jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/services/BookQuerySourceImpl.java?rev=321162&view=auto
==============================================================================
--- jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/services/BookQuerySourceImpl.java (added)
+++ jakarta/tapestry/trunk/examples/Vlib/src/java/org/apache/tapestry/vlib/services/BookQuerySourceImpl.java Fri Oct 14 10:54:43 2005
@@ -0,0 +1,79 @@
+// Copyright 2005 The Apache Software Foundation
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+//     http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package org.apache.tapestry.vlib.services;
+
+import java.rmi.RemoteException;
+
+import javax.ejb.CreateException;
+
+import org.apache.hivemind.lib.NameLookup;
+import org.apache.hivemind.lib.RemoteExceptionEvent;
+import org.apache.hivemind.lib.RemoteExceptionListener;
+import org.apache.tapestry.vlib.ejb.IBookQuery;
+import org.apache.tapestry.vlib.ejb.IBookQueryHome;
+
+public class BookQuerySourceImpl implements BookQuerySource, RemoteExceptionListener
+{
+    private NameLookup _nameLookup;
+
+    private IBookQueryHome _home;
+
+    private RemoteTemplate _remoteTemplate;
+
+    public synchronized IBookQuery newQuery()
+    {
+        RemoteCallback<IBookQuery> callback = new RemoteCallback()
+        {
+            public IBookQuery doRemote() throws RemoteException
+            {
+                try
+                {
+                    return getHome().create();
+                }
+                catch (CreateException ex)
+                {
+                    throw new RemoteException(ex.getMessage(), ex);
+                }
+            }
+
+        };
+
+        return _remoteTemplate.execute(callback, "Creating new book query.");
+    }
+
+    private IBookQueryHome getHome()
+    {
+        if (_home == null)
+            _home = (IBookQueryHome) _nameLookup.lookup("vlib/BookQuery", IBookQueryHome.class);
+
+        return _home;
+    }
+
+    public void remoteExceptionDidOccur(RemoteExceptionEvent event)
+    {
+        _home = null;
+    }
+
+    public void setNameLookup(NameLookup nameLookup)
+    {
+        _nameLookup = nameLookup;
+    }
+
+    public void setRemoteTemplate(RemoteTemplate remoteTemplate)
+    {
+        _remoteTemplate = remoteTemplate;
+    }
+
+}



---------------------------------------------------------------------
To unsubscribe, e-mail: tapestry-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tapestry-dev-help@jakarta.apache.org