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