summaryrefslogtreecommitdiff
path: root/java/demo/Database/library/LibraryI.java
diff options
context:
space:
mode:
authorMatthew Newhook <matthew@zeroc.com>2008-08-22 12:20:55 -0230
committerMatthew Newhook <matthew@zeroc.com>2008-08-22 12:20:55 -0230
commit7011d7f4ee1786b32a9014f5c8a3346b110e6529 (patch)
tree6c2978e93e2d6c4f96bae8179386889fe0c8fab8 /java/demo/Database/library/LibraryI.java
parentadd additional note to README. (diff)
downloadice-7011d7f4ee1786b32a9014f5c8a3346b110e6529.tar.bz2
ice-7011d7f4ee1786b32a9014f5c8a3346b110e6529.tar.xz
ice-7011d7f4ee1786b32a9014f5c8a3346b110e6529.zip
move the query objects to the library.
Diffstat (limited to 'java/demo/Database/library/LibraryI.java')
-rw-r--r--java/demo/Database/library/LibraryI.java101
1 files changed, 94 insertions, 7 deletions
diff --git a/java/demo/Database/library/LibraryI.java b/java/demo/Database/library/LibraryI.java
index e1c52f69487..42566ae5955 100644
--- a/java/demo/Database/library/LibraryI.java
+++ b/java/demo/Database/library/LibraryI.java
@@ -21,7 +21,7 @@ class LibraryI extends _LibraryDisp
SQLRequestContext context = SQLRequestContext.getCurrentContext();
assert context != null;
- _session.reapQueries();
+ reapQueries();
try
{
@@ -41,7 +41,7 @@ class LibraryI extends _LibraryDisp
context.obtain();
BookQueryResultI impl = new BookQueryResultI(context, rs);
result.value = BookQueryResultPrxHelper.uncheckedCast(current.adapter.addWithUUID(impl));
- _session.add(result.value, impl);
+ add(result.value, impl);
}
}
catch(java.sql.SQLException e)
@@ -59,7 +59,7 @@ class LibraryI extends _LibraryDisp
SQLRequestContext context = SQLRequestContext.getCurrentContext();
assert context != null;
- _session.reapQueries();
+ reapQueries();
try
{
@@ -104,7 +104,7 @@ class LibraryI extends _LibraryDisp
context.obtain();
BookQueryResultI impl = new BookQueryResultI(context, rs);
result.value = BookQueryResultPrxHelper.uncheckedCast(current.adapter.addWithUUID(impl));
- _session.add(result.value, impl);
+ add(result.value, impl);
}
}
catch(java.sql.SQLException e)
@@ -203,10 +203,97 @@ class LibraryI extends _LibraryDisp
}
}
- LibraryI(SessionI session)
+ LibraryI()
{
- _session = session;
}
- private SessionI _session;
+ synchronized public void
+ destroy()
+ {
+ if(_destroyed)
+ {
+ return;
+ }
+ _destroyed = true;
+ java.util.Iterator<QueryProxyPair> p = _queries.iterator();
+ while(p.hasNext())
+ {
+ try
+ {
+ p.next().proxy.destroy();
+ }
+ catch(Ice.ObjectNotExistException e)
+ {
+ // Ignore, it could have already been destroyed.
+ }
+ }
+ }
+
+ synchronized public void
+ shutdown()
+ {
+ if(_destroyed)
+ {
+ return;
+ }
+ _destroyed = true;
+
+ // Shutdown each of the associated query objects.
+ java.util.Iterator<QueryProxyPair> p = _queries.iterator();
+ while(p.hasNext())
+ {
+ p.next().impl.shutdown();
+ }
+ }
+
+ synchronized private void
+ add(BookQueryResultPrx proxy, BookQueryResultI impl)
+ {
+ // If the session has been destroyed, then destroy the book
+ // result, and raise an ObjectNotExistException.
+ if(_destroyed)
+ {
+ proxy.destroy();
+ throw new Ice.ObjectNotExistException();
+ }
+ _queries.add(new QueryProxyPair(proxy, impl));
+ }
+
+ synchronized private void
+ reapQueries()
+ {
+ if(_destroyed)
+ {
+ throw new Ice.ObjectNotExistException();
+ }
+
+ java.util.Iterator<QueryProxyPair> p = _queries.iterator();
+ while(p.hasNext())
+ {
+ QueryProxyPair pair = p.next();
+ try
+ {
+ pair.proxy.ice_ping();
+ }
+ catch(Ice.ObjectNotExistException e)
+ {
+ p.remove();
+ }
+ }
+ }
+
+ static class QueryProxyPair
+ {
+ QueryProxyPair(BookQueryResultPrx p, BookQueryResultI i)
+ {
+ proxy = p;
+ impl = i;
+ }
+
+ BookQueryResultPrx proxy;
+ BookQueryResultI impl;
+ }
+
+ private java.util.List<QueryProxyPair> _queries = new java.util.LinkedList<QueryProxyPair>();
+ private boolean _destroyed = false;
}