From: Dennis Schafroth Date: Wed, 7 Mar 2012 11:20:14 +0000 (+0100) Subject: Merge branch 'block-error-warning' X-Git-Tag: v1.6.11~1^2 X-Git-Url: http://lists.indexdata.dk/cgi-bin?a=commitdiff_plain;h=3587a6299ce95c9cad15a14bc3c2d109a026d74c;hp=e6f087568c5d1188b208514169e13e0bcfc310e5;p=pazpar2-moved-to-github.git Merge branch 'block-error-warning' --- diff --git a/src/http_command.c b/src/http_command.c index 854de13..e3c0c69 100644 --- a/src/http_command.c +++ b/src/http_command.c @@ -510,7 +510,7 @@ static void cmd_settings(struct http_channel *c) release_session(c, s); } -static void termlist_response(struct http_channel *c, struct http_session *s) +static void termlist_response(struct http_channel *c, struct http_session *s, const char *cmd_status) { struct http_request *rq = c->request; const char *name = http_argbyname(rq, "name"); @@ -524,6 +524,10 @@ static void termlist_response(struct http_channel *c, struct http_session *s) status = session_active_clients(s->psession); response_open_no_status(c, "termlist"); + /* new protocol add a status to response. Triggered by a status parameter */ + if (cmd_status != 0) { + wrbuf_printf(c->wrbuf, "%s\n", cmd_status); + } wrbuf_printf(c->wrbuf, "%d\n", status); perform_termlist(c, s->psession, name, num); @@ -534,10 +538,15 @@ static void termlist_response(struct http_channel *c, struct http_session *s) static void termlist_result_ready(void *data) { struct http_channel *c = (struct http_channel *) data; + struct http_request *rq = c->request; + const char *report = http_argbyname(rq, "report"); + const char *status = 0; struct http_session *s = locate_session(c); + if (report && !strcmp("status", report)) + status = "OK"; if (s) { yaz_log(c->http_sessions->log_level, "Session %u termlist watch released", s->session_id); - termlist_response(c, s); + termlist_response(c, s, status); release_session(c,s); } } @@ -548,12 +557,23 @@ static void cmd_termlist(struct http_channel *c) struct http_response *rs = c->response; struct http_session *s = locate_session(c); const char *block = http_argbyname(rq, "block"); + const char *report = http_argbyname(rq, "report"); + int report_status = 0; + int report_error = 0; + const char *status_message = 0; int active_clients; + if (report && !strcmp("error", report)) { + report_error = 1; + status_message = "OK"; + } + if (report && !strcmp("status", report)) { + report_status = 1; + status_message = "OK"; + } if (!s) return; active_clients = session_active_clients(s->psession); - if (block && !strcmp("1", block) && active_clients) { // if there is already a watch/block. we do not block this one @@ -561,17 +581,27 @@ static void cmd_termlist(struct http_channel *c) termlist_result_ready, c, c) != 0) { yaz_log(YLOG_WARN, "Session %u: Attempt to block multiple times on termlist block. Not supported!", s->session_id); - error(rs, PAZPAR2_ALREADY_BLOCKED, "termlist"); + if (report_error) { + error(rs, PAZPAR2_ALREADY_BLOCKED, "termlist"); + release_session(c, s); + return; + } + else if (report_status) { + status_message = "WARNING (Already blocked on termlist)"; + } + else { + yaz_log(YLOG_WARN, "Session %u: Ignoring termlist block. Return current result", s->session_id); + } } else { yaz_log(c->http_sessions->log_level, "Session %u: Blocking on command termlist", s->session_id); + release_session(c, s); + return; } - release_session(c, s); - return; } - termlist_response(c, s); + termlist_response(c, s, status_message); release_session(c, s); } @@ -641,14 +671,22 @@ static void cmd_server_status(struct http_channel *c) xmalloc_trav(0); } -static void bytarget_response(struct http_channel *c, struct http_session *s) { +static void bytarget_response(struct http_channel *c, struct http_session *s, const char *cmd_status) { int count, i; struct hitsbytarget *ht; struct http_request *rq = c->request; const char *settings = http_argbyname(rq, "settings"); ht = get_hitsbytarget(s->psession, &count, c->nmem); - response_open(c, "bytarget"); + if (!cmd_status) + /* Old protocol, always ok */ + response_open(c, "bytarget"); + else { + /* New protocol, OK or WARNING (...)*/ + response_open_no_status(c, "bytarget"); + wrbuf_printf(c->wrbuf, "%s", cmd_status); + } + if (count == 0) yaz_log(YLOG_WARN, "Empty bytarget Response. No targets found!"); for (i = 0; i < count; i++) @@ -701,9 +739,10 @@ static void bytarget_result_ready(void *data) { struct http_channel *c = (struct http_channel *) data; struct http_session *s = locate_session(c); + const char *status_message = "OK"; if (s) { yaz_log(c->http_sessions->log_level, "Session %u: bytarget watch released", s->session_id); - bytarget_response(c, s); + bytarget_response(c, s, status_message); release_session(c, s); } else { @@ -718,13 +757,23 @@ static void cmd_bytarget(struct http_channel *c) struct http_response *rs = c->response; struct http_session *s = locate_session(c); const char *block = http_argbyname(rq, "block"); + const char *report = http_argbyname(rq, "report"); + int report_error = 0; + int report_status = 0; + const char *status_message = "OK"; int no_active; + if (report && !strcmp("error", report)) { + report_error = 1; + } + if (report && !strcmp("status", report)) { + report_status = 1; + } + if (!s) return; no_active = session_active_clients(s->psession); - if (block && !strcmp("1",block) && no_active) { // if there is already a watch/block. we do not block this one @@ -732,16 +781,26 @@ static void cmd_bytarget(struct http_channel *c) bytarget_result_ready, c, c) != 0) { yaz_log(YLOG_WARN, "Session %u: Attempt to block multiple times on bytarget block. Not supported!", s->session_id); - error(rs, PAZPAR2_ALREADY_BLOCKED, "bytarget"); + if (report_error) { + error(rs, PAZPAR2_ALREADY_BLOCKED, "bytarget"); + release_session(c, s); + return; + } + else if (report_status) { + status_message = "WARNING (Already blocked on bytarget)"; + } + else { + yaz_log(YLOG_WARN, "Session %u: Ignoring bytarget block. Return current result.", s->session_id); + } } else { yaz_log(c->http_sessions->log_level, "Session %u: Blocking on command bytarget", s->session_id); + release_session(c, s); + return; } - release_session(c, s); - return; } - bytarget_response(c, s); + bytarget_response(c, s, status_message); release_session(c, s); } @@ -1067,9 +1126,13 @@ static void cmd_show(struct http_channel *c) struct http_session *s = locate_session(c); const char *block = http_argbyname(rq, "block"); const char *sort = http_argbyname(rq, "sort"); + const char *block_error = http_argbyname(rq, "report"); struct reclist_sortparms *sp; int status; - + int report_error = 0; + if (block_error && !strcmp("1", block_error)) { + report_error = 1; + } if (!s) return; @@ -1096,32 +1159,46 @@ static void cmd_show(struct http_channel *c) { yaz_log(c->http_sessions->log_level, "Session %u: Blocking on command show (preferred targets)", s->session_id); + release_session(c, s); + return; } else { - yaz_log(YLOG_WARN, "Attempt to block multiple times on show (preferred targets) block. Not supported!"); - error(rs, PAZPAR2_ALREADY_BLOCKED, "show (preferred targets)"); + yaz_log(YLOG_WARN, "Session %u: Attempt to block multiple times on show (preferred targets) block. Not supported!", + s->session_id); + if (report_error) { + error(rs, PAZPAR2_ALREADY_BLOCKED, "show (preferred targets)"); + release_session(c, s); + return; + } + else { + yaz_log(YLOG_WARN, "Session %u: Ignoring show(preferred) block. Returning current result.", s->session_id); + } } - release_session(c, s); - return; } else if (status) { // if there is already a watch/block. we do not block this one if (session_set_watch(s->psession, SESSION_WATCH_SHOW, - show_records_ready, c, c) != 0 - ) + show_records_ready, c, c) != 0) { - yaz_log(YLOG_WARN, "Attempt to block multiple times on show block. Not supported!"); - error(rs, PAZPAR2_ALREADY_BLOCKED, "show"); + yaz_log(YLOG_WARN, "Session %u: Attempt to block multiple times on show block. Not supported!", s->session_id); + if (report_error) { + error(rs, PAZPAR2_ALREADY_BLOCKED, "show"); + release_session(c, s); + return; + } + else { + yaz_log(YLOG_WARN, "Session %u: Ignoring show block. Returning current result.", s->session_id); + } } else { yaz_log(c->http_sessions->log_level, "Session %u: Blocking on command show", s->session_id); + release_session(c, s); + return; } - release_session(c, s); - return; } } show_records(c, s, status); diff --git a/test/Makefile.am b/test/Makefile.am index a40eabb..89c17dd 100644 --- a/test/Makefile.am +++ b/test/Makefile.am @@ -1,7 +1,7 @@ # This file is part of Pazpar2. check_SCRIPTS = test_http.sh test_icu.sh test_post.sh \ test_settings.sh test_turbomarcxml.sh test_facets.sh \ - test_solr.sh test_url.sh test_filter.sh + test_solr.sh test_url.sh test_filter.sh test_termlist_block.sh EXTRA_DIST = run_pazpar2.sh marc21_test.xsl tmarc.xsl solr-pz2.xsl \ z3950_indexdata_com_marc.xml \ @@ -15,6 +15,7 @@ EXTRA_DIST = run_pazpar2.sh marc21_test.xsl tmarc.xsl solr-pz2.xsl \ test_turbomarcxml.cfg test_turbomarcxml.urls \ test_url.cfg test_url.urls \ test_filter.cfg test_filter.urls \ + test_termlist_block.cfg test_termlist_block.urls \ $(check_SCRIPTS) TESTS = $(check_SCRIPTS) diff --git a/test/test_termlist_block.res b/test/test_termlist_block.res deleted file mode 100644 index e69de29..0000000 diff --git a/test/test_termlist_block.urls b/test/test_termlist_block.urls index 07fd600..5bee1cd 100644 --- a/test/test_termlist_block.urls +++ b/test/test_termlist_block.urls @@ -1,11 +1,13 @@ http://localhost:9763/search.pz2?command=init&clear=1 -http://localhost:9763/search.pz2?session=1&command=settings&full_text_target%5Bid_ocw%5D=NO&use_url_proxy%5Bid_ocw%5D=0&pz:preferred%5Bid_ocw%5D=1&pz:piggyback%5Bid_ocw%5D=1&pz:authentication%5Bid_ocw%5D=idtest%2Fidtest36&pz:cclmap%3Asu%5Bid_ocw%5D=u%3D21+s%3Dal&use_thumbnails%5Bid_ocw%5D=1&pz:requestsyntax%5Bid_ocw%5D=xml&pz:name%5Bid_ocw%5D=MIT+OpenCourseWare&pz:cclmap%3Aissn%5Bid_ocw%5D=u%3D8&pz:cclmap%3Ati%5Bid_ocw%5D=u%3D4+s%3Dal&pz:cclmap%3Aau%5Bid_ocw%5D=u%3D1003+s%3Dal&pz:xslt%5Bid_ocw%5D=cf.xsl&pz:cclmap%3Aterm%5Bid_ocw%5D=u%3D1016+t%3Dl%2Cr+s%3Dal+2%3D102&pz:cclmap%3Aisbn%5Bid_ocw%5D=u%3D7&pz:queryencoding%5Bid_ocw%5D=UTF-8&pz:url%5Bid_ocw%5D=connect.indexdata.com%3A9000%2Fmit_opencourseware -http://localhost:9763/search.pz2?session=1&command=search&query=su%3D%22computer%22 +http://localhost:9763/search.pz2?session=1&command=settings&pz:name%5Blocalhost:9999%2Fdb1%5D=db1&pz:requestsyntax%5Blocalhost:9999%2Fdb1%5D=usmarc&pz:nativesyntax%5Blocalhost:9999%2Fdb1%5D=txml&pz:xslt%5Blocalhost:9999%2Fdb1%5D=tmarc.xsl +http://localhost:9763/search.pz2?session=1&command=search&query=computer 4 http://localhost:9763/search.pz2?session=1&command=show&block=1 http://localhost:9763/search.pz2?session=1&command=bytarget http://localhost:9763/search.pz2?session=1&command=termlist&block=1&name=xtargets%2Cauthor%2Csubject%2Cdate http://localhost:9763/search.pz2?session=1&command=settings&full_text_target%5Bid_solr%5D=NO&pz:termlist_term_count%5Bid_solr%5D=10&use_url_proxy%5Bid_solr%5D=0&pz:piggyback%5Bid_solr%5D=1&pz:preferred%5Bid_solr%5D=0&pz:block_timeout%5Bid_solr%5D=2&pz:cclmap%3Asu%5Bid_solr%5D=1%3Dsubject&pz:sru%5Bid_solr%5D=solr&use_thumbnails%5Bid_solr%5D=0&pz:name%5Bid_solr%5D=LOC+%28SOLR%29&pz:cclmap%3Aissn%5Bid_solr%5D=u%3D8&pz:cclmap%3Ati%5Bid_solr%5D=1%3Dtitle&pz:cclmap%3Aau%5Bid_solr%5D=1%3Dauthor&pz:xslt%5Bid_solr%5D=solr-pz2.xsl&pz:cclmap%3Aterm%5Bid_solr%5D=1%3Dtext+s%3Dal&pz:cclmap%3Aisbn%5Bid_solr%5D=1%3Disbn&pz:queryencoding%5Bid_solr%5D=UTF-8&pz:url%5Bid_solr%5D=ocs-test.indexdata.com%2Fsolr%2Fselect -http://localhost:9763/search.pz2?session=1&command=search&query=su%3D%22computer%22 +http://localhost:9763/search.pz2?session=1&command=search&query=computer 4 http://localhost:9763/search.pz2?session=1&command=show&block=1 http://localhost:9763/search.pz2?session=1&command=bytarget http://localhost:9763/search.pz2?session=1&command=termlist&block=1&name=xtargets%2Cauthor%2Csubject%2Cdate +http://localhost:9763/search.pz2?session=1&command=termlist&block=1&report=status&name=xtargets%2Cauthor%2Csubject%2Cdate +http://localhost:9763/search.pz2?session=1&command=bytarget&report=status diff --git a/test/test_termlist_block_10.res b/test/test_termlist_block_10.res index 26b31c0..ba3ef40 100644 --- a/test/test_termlist_block_10.res +++ b/test/test_termlist_block_10.res @@ -1,16 +1,16 @@ OK -id_ocw -MIT OpenCourseWare +localhost:9999/db1 +db1 0 -114 - (backend=localhost:9003) +10000 +localhost:9999/db1 0 Client_Error id_solr LOC (SOLR) -1043 +2015 0 100 Client_Idle diff --git a/test/test_termlist_block_11.res b/test/test_termlist_block_11.res index 9076038..4a1f0a0 100644 --- a/test/test_termlist_block_11.res +++ b/test/test_termlist_block_11.res @@ -4,51 +4,55 @@ id_solr LOC (SOLR) -1043 +2015 Client_Idle 0 +Davis, Phyllis2 +Langer, Maria2 Norton, Peter2 +Watt, Alan H2 +Abass, Olayide1 Aldrich, Richard W1 -Anderson, Robert H1 -Arnold, Ken1 -Burgess, Mark1 -Carasik, Anne H1 -Davis, Phyllis1 +Appleman, Daniel1 +Bainbridge, David I1 +Caplin, Steve1 +Cole, Eric1 +De Jong, Kenneth A1 Dowd, Kevin1 -Farley, Marc1 -Gennick, Jonathan1 -Hawke, Constance S1 -Hopgood, Adrian A1 +Hodges, M. Susan1 Kaasgaard, Klaus1 -Knittel, John1 -Loudon, Kyle1 +Lasser, Jon1 -Computer file35 -Computers30 -Computer networks22 -Computer science16 -Computer graphics15 -Computer security15 -Operating systems14 -Computer program language13 -Microsoft Windows13 -Computer software8 -Computer systems8 -Computer architecture7 -Computer programs6 -Internet6 -Computer animation5 +Computers21 +Computer file20 +Computer networks15 +Computer science11 +Computer graphics10 +Computer program language10 +Computer security10 +Computer crimes7 +Computer software7 +Microsoft Windows7 +Computer6 +Operating systems6 +Computer programs5 +Computer systems5 +UNIX5 -200053 -200123 -199917 -19985 -20022 -19971 +200048 +199920 +200114 +199811 +19972 +19921 +19941 +19951 +19961 +20021 \ No newline at end of file diff --git a/test/test_termlist_block_12.res b/test/test_termlist_block_12.res new file mode 100644 index 0000000..525f73d --- /dev/null +++ b/test/test_termlist_block_12.res @@ -0,0 +1,59 @@ + +OK +0 + + +id_solr +LOC (SOLR) +2015 +Client_Idle +0 + + + +Davis, Phyllis2 +Langer, Maria2 +Norton, Peter2 +Watt, Alan H2 +Abass, Olayide1 +Aldrich, Richard W1 +Appleman, Daniel1 +Bainbridge, David I1 +Caplin, Steve1 +Cole, Eric1 +De Jong, Kenneth A1 +Dowd, Kevin1 +Hodges, M. Susan1 +Kaasgaard, Klaus1 +Lasser, Jon1 + + +Computers21 +Computer file20 +Computer networks15 +Computer science11 +Computer graphics10 +Computer program language10 +Computer security10 +Computer crimes7 +Computer software7 +Microsoft Windows7 +Computer6 +Operating systems6 +Computer programs5 +Computer systems5 +UNIX5 + + +200048 +199920 +200114 +199811 +19972 +19921 +19941 +19951 +19961 +20021 + + \ No newline at end of file diff --git a/test/test_termlist_block_13.res b/test/test_termlist_block_13.res new file mode 100644 index 0000000..ba3ef40 --- /dev/null +++ b/test/test_termlist_block_13.res @@ -0,0 +1,17 @@ + +OK +localhost:9999/db1 +db1 +0 +10000 +localhost:9999/db1 +0 +Client_Error + +id_solr +LOC (SOLR) +2015 +0 +100 +Client_Idle + \ No newline at end of file diff --git a/test/test_termlist_block_5.res b/test/test_termlist_block_5.res index 21c06dc..0595f75 100644 --- a/test/test_termlist_block_5.res +++ b/test/test_termlist_block_5.res @@ -1,10 +1,10 @@ OK -id_ocw -MIT OpenCourseWare +localhost:9999/db1 +db1 0 -114 - (backend=localhost:9003) +10000 +localhost:9999/db1 0 Client_Error \ No newline at end of file diff --git a/test/test_termlist_block_9.res b/test/test_termlist_block_9.res index 53e98fc..944b938 100644 --- a/test/test_termlist_block_9.res +++ b/test/test_termlist_block_9.res @@ -2,7 +2,7 @@ OK 0 100 -1043 +2015 0 20 @@ -15,7 +15,7 @@ fast & easy 2001 Woodward, C. Michael -600000 +37125 content: title adobe illustrator for the mac author woodward c michael @@ -24,27 +24,11 @@ 1998 Advanced computer performance modeling and simulation 1998 -600000 +37125 content: title advanced computer performance modeling and simulation -Computer security -FAA needs to improve controls over use of foreign nationals to remediate and review software : report to the Chairman, Committee on Science, House of Representatives -1999 -"GAO/AIMD-00-55." -Computer security -FAA needs to improve controls over use of foreign nationals to remediate and review software : report to the Chairman, Committee on Science, House of Representatives -1999 -Cover title -"December 1999." -"GAO/AIMD-00-55." -"B-284308"--P. 1 -600000 -content: title computer security - - - Cyberterrorism and computer crimes issues surrounding the establishment of an international regime 2000 @@ -55,11 +39,22 @@ 2000 Aldrich, Richard W "April 2000." -600000 +37125 content: title cyberterrorism and computer crimes author aldrich richard w +Computer interfacing +2000 +Smith, George A +Computer interfacing +2000 +Smith, George A +34031 +content: title computer interfacing author smith george a + + + Software design and usability talks with Bonnie Nardi, Jakob Nielsen, David Smith, Austin Henderson & Jed Harris, Terry Winograd, Stephanie Rosenbaum 2000 @@ -68,7 +63,7 @@ talks with Bonnie Nardi, Jakob Nielsen, David Smith, Austin Henderson & Jed Harris, Terry Winograd, Stephanie Rosenbaum 2000 Kaasgaard, Klaus -550000 +34031 content: title software design and usability author kaasgaard klaus @@ -81,24 +76,68 @@ 2000 Knittel, John Explains what computer hacking is, who does it, and how dangerous it can be -525974 +32544 content: title everything you need to know about the dangers of computer hacking author knittel john -Computer and Internet liability -strategies, claims, and defenses -2000 -Williams, Richard D -Rev. ed. of: Law of the year 2000 problem. c1999- -Computer and Internet liability -strategies, claims, and defenses -2000 -Williams, Richard D -Rev. ed. of: Law of the year 2000 problem. c1999- -Includes index -450000 -content: title computer and internet liability author williams richard d +Computer peripherals +1995 +Cook, Barry M +Computer peripherals +1995 +Cook, Barry M +32484 +content: title computer peripherals author cook barry m + + + +Kids' computer book +1994 +Discusses a variety of educational and game software for children with suggestions for setting up a computer system. Includes a 3 1/2 in. disk with 6 shareware programs for children +Kids' computer book +1994 +"For kids and their parents"--Cover +Discusses a variety of educational and game software for children with suggestions for setting up a computer system. Includes a 3 1/2 in. disk with 6 shareware programs for children +28531 +content: title kids computer book + + + +Computer friendly +1999 +Steinbacher, Raymond +Computer friendly +1999 +Steinbacher, Raymond +27843 +content: title computer friendly author steinbacher raymond + + + +Computer misuse +1999 +"Also published as Parliamentary Paper E 31AO"--T.p. verso +Computer misuse +1999 +"May 1999." +"NZLC R54"--T.p. verso +"Also published as Parliamentary Paper E 31AO"--T.p. verso +27843 +content: title computer misuse + + + +Computer networking +a top-down approach featuring the Internet +2001 +Ross, Keith W +Computer networking +a top-down approach featuring the Internet +2001 +Ross, Keith W +27843 +content: title computer networking author ross keith w @@ -110,20 +149,23 @@ 1998 Davis, Phyllis Includes index -450000 +27843 content: title coreldraw for windows author davis phyllis -Inside 3ds max 4 -2002 -The accompanying CD-ROM contains all the files needed to complete the exercises contained in the book and links to third-party programs -Inside 3ds max 4 -2002 -Includes index -The accompanying CD-ROM contains all the files needed to complete the exercises contained in the book and links to third-party programs -450000 -content: title inside ds max +Quicken 2001 Deluxe for Macintosh +the official guide +2001 +Langer, Maria +Includes index +Quicken 2001 Deluxe for Macintosh +the official guide +2001 +Langer, Maria +Includes index +27843 +content: title quicken deluxe for macintosh author langer maria @@ -138,7 +180,7 @@ Langer, Maria Includes index "Covers Quicken deluxe 2000 for the Mac"--Cover -450000 +27843 content: title quicken for the mac author langer maria @@ -147,7 +189,7 @@ 1998 Sicherheit und Schutz im Netz 1998 -450000 +27843 content: title sicherheit und schutz im netz @@ -160,7 +202,7 @@ 1999 Carasik, Anne H Includes index -450000 +27843 content: title unix secure shell author carasik anne h @@ -173,7 +215,7 @@ protecting your identity on the Web 1999 Marcella, Albert J -450000 +27843 content: title www stopthief net author marcella albert j @@ -186,7 +228,7 @@ proceedings, 11-13 October 1999, Boston, Massachusetts 1999 "IEEE catalog number 99EX370"--T.p. verso -425000 +26297 content: title eight international conference on computer communications and networks @@ -199,75 +241,22 @@ 2000 Farley, Marc Includes index -400000 +24750 content: title building storage networks author farley marc -3D games -real-time rendering and software technology -2001 -Watt, Alan H -3D games -real-time rendering and software technology -2001 -Watt, Alan H -400000 -content: title d games author watt alan h - - - -Mastering algorithms with C +Complete CL +the definitive control language programming guide 1999 -Loudon, Kyle -"Useful techniques from sorting to encryption"--Cover -Mastering algorithms with C +Malaga, Ernie +Includes index +Complete CL +the definitive control language programming guide 1999 -Loudon, Kyle -"Useful techniques from sorting to encryption"--Cover +Malaga, Ernie Includes index -400000 -content: title mastering algorithms with c author loudon kyle - - - -Oracle8i Java component programming with EJB, CORBA, and JSP -2000 -Morisseau-Leroy, Nirva -CD-ROM includes resources mentioned in the book, electronic versions of the appendices, plus sample JSP & servlet programs -Oracle8i Java component programming with EJB, CORBA, and JSP -2000 -Morisseau-Leroy, Nirva -"Covers Oracle database releases 8.1.5, 8.1.6, and 8.1.7." -CD-ROM includes resources mentioned in the book, electronic versions of the appendices, plus sample JSP & servlet programs -400000 -content: title oracle i java component programming with ejb corba and jsp author morisseau leroy nirva - - - -Oracle SQL*Plus -pocket reference -2000 -Gennick, Jonathan -"Guide to SQL*Plus syntax"--cover -Oracle SQL*Plus -pocket reference -2000 -Gennick, Jonathan -"Covers Oracle8i"--cover -"Guide to SQL*Plus syntax"--cover -400000 -content: title oracle sql plus author gennick jonathan - - - -Programming Web graphics with PERL and GNU software -1999 -Wallace, Shawn P -Programming Web graphics with PERL and GNU software -1999 -Wallace, Shawn P -400000 -content: title programming web graphics with perl and gnu software author wallace shawn p +24750 +content: title complete cl author malaga ernie \ No newline at end of file