<
arjan.vanbentem@bidnetwork.org> wrote:
> Hi all,
>
>> Does the BaseX GUI open a Database via embedded mode, locking the
>> Database it in the process?
>
> It surely locks it, but I don't know how.
>
> Note that I know I should not use the GUI to open the same database when the
> database server is running too, but I don't know if it's the only error that
> is not propagated? (I do get other errors, such as "XQJFOS021 -
> FORWARD_ONLY_SEQUENCE: Cursor is not positioned on an XQItem" in my Java
> code. Good. Also, if I try a non-existing database, I get "[FODC0002]:
> Resource "[...]/basex/bin/xxxx-factbook" not found." in my Java code. Good
> too.)
>
> I know of two ways to mess up: the GUI, and the standalone command line
> utility. It took me some time to realize that "bin/basex" is not some TCP/IP
> client that connects to a running database server (as started with
> "bin/basexserver"), but rather opens the database files itself. The GUI does
> the same. So, I know I should use "bin/basexclient" instead, to connect to
> the server, to ensure the server can still correctly handle requests from my
> Java code.
>
> In the unit test I attached earlier, I described some steps I forgot in the
> message itself:
>
> When the database is somehow in use, the Java code fails
> silently. Like:
>
> - Start the server, using:
> $ basexserver -S
> Server was started.
>
> - Import Factbook, using:
> $ basex
> BaseX 7.3 [Standalone]
> Try help to get more information.
>
> > create db factbook ../mondial-3.0.xml
> Database 'factbook' created in 592.53 ms.
>
> > show databases
> 1 opened database(s):
> - factbook (1x)
>
> - Leave the standalone tool open, hence make the database
> unavailable for updates by the server.
>
> - Run this very unit test; though the log in data/.logs does show
> the BXDB0007 error, the Java code just silently ignores that.
>
> (As an aside: in the GUI, menu Database, Server Administration warns:
> "Warning: The client/server architecture and the GUI are not synchronized.
> The same database should not be opened from clients and the GUI.")
>
> Regards,
> Arjan.
>
>
> On Thu, Aug 23, 2012 at 10:30 AM, Charles Foster <
charles@cfoster.net>
> wrote:
>>
>> Does the BaseX GUI open a Database via embedded mode, locking the
>> Database it in the process?
>>
>> Please could you give me a couple more steps to go on Arjan? If there
>> is a problem with the XQJ Driver I would like to fix it.
>>
>> Regards,
>>
>> Charles
>>
>> On 23 August 2012 03:53, Christian Grün <
christian.gruen@gmail.com> wrote:
>> > Hi Arjan,
>> >
>> > thanks for your report. I managed to reproduce the issue. I assume
>> > that this behavior is due to XQJ, which is why I’m forwarding your
>> > mail to Charles.
>> >
>> > Hope this helps,
>> > Christian
>> >
>> > @Charles: if you have more questions, or if you believe that the bug
>> > is on our side.. Your feedback is welcome!
>> > ___________________________
>> >
>> > On Wed, Aug 22, 2012 at 5:44 PM, Arjan van Bentem
>> > <
arjan.vanbentem@bidnetwork.org> wrote:
>> >> Hi all,
>> >>
>> >> Maybe this is related to
http://xqj.net/basex/ instead of BaseX itself,
>> >> but
>> >> as I don't know allow me to ask here first.
>> >>
>> >> Whenever I have somehow locked a BaseX database, like by using the
>> >> standalone command line utility or the GUI, then I get something like
>> >> the
>> >> following in the BaseX log files:
>> >>
>> >> QUERY(1) for $c in
>> >> collection('factbook')//country[name='Albania']return(
>> >> replace value of node $c/@population with xs:integer($c/@population +
>> >> 1)) OK
>> >> 39.92 ms
>> >> QUERY(1) OK 0.62 ms
>> >> FULL(1) Error: [BXDB0007] Database 'factbook' is opened by another
>> >> process.
>> >> CLOSE(1) OK 39.68 ms
>> >>
>> >> Good.
>> >>
>> >> However, I don't see that error in my Java code. The Java code just
>> >> continues like all was fine.
>> >>
>> >> Can I somehow make the Java code fail when this happens?
>> >>
>> >> See example below, and the same thing in the attachment.
>> >>
>> >> Thanks,
>> >> Arjan.
>> >>
>> >>
>> >>
>> >> private static final String DRIVER = "net.xqj.basex.BaseXXQDataSource";
>> >>
>> >> private static final String SELECT =
>> >>
>> >> "xs:long(collection('factbook')//country[name='Albania']/@population[1]/data(.))";
>> >>
>> >> private static final String UPDATE = "for $c in
>> >> collection('factbook')//country[name='Albania']"
>> >> + "return("
>> >> + " replace value of node $c/@population with
>> >> xs:integer($c/@population +
>> >> 1)"
>> >> + ")";
>> >>
>> >> @Test
>> >> public void testUpdate() {
>> >> try {
>> >>
>> >> XQDataSource xqd = (XQDataSource) Class.forName(DRIVER)
>> >> .newInstance();
>> >> XQConnection xqc = xqd.getConnection("admin", "admin");
>> >> XQExpression xqe = xqc.createExpression();
>> >>
>> >> XQSequence xqs = xqe.executeQuery(SELECT);
>> >> xqs.next();
>> >> long before = xqs.getLong();
>> >> System.out.println("Initial value: " + before);
>> >>
>> >> System.out.println("Updating...");
>> >> xqs = xqe.executeQuery(UPDATE);
>> >>
>> >> xqs = xqe.executeQuery(SELECT);
>> >> xqs.next();
>> >> long after = xqs.getLong();
>> >> System.out.println("Resulting value: " + after);
>> >>
>> >> xqc.close();
>> >>
>> >> Assert.assertEquals("Update should have succeeded or failed",
>> >> before + 1, after);
>> >>
>> >> } catch (Exception e) {
>> >> e.printStackTrace();
>> >> }
>> >>
>> >> }
>> >>
>> >>
>> >> _______________________________________________
>> >> BaseX-Talk mailing list
>> >>
BaseX-Talk@mailman.uni-konstanz.de
>> >>
https://mailman.uni-konstanz.de/mailman/listinfo/basex-talk
>> >>
>> >
>
>