Hi,
I'm considering to write a web layer for BaseX based in Clojure. It may be a somewhat longer term project but I would like to bring XML and BaseX closer to Clojure programming. Clojure web apps usually are able to run under various servers/containers (Jetty/Netty etc.) and I would like to be able to use Clojure libraries to handle things like request routing, security and authentication outside of BaseX/XQuery.
Some questions that I have while I'm orienting myself. Some of it touches on integration areas that are quite new to me so I am happy to get some general pointers that I can use to dig further.
For Clojure I found only one BaseX client library [1] which wraps the standard Java TCP client and it seems to work fine.
But I have some broader questions such as
- Choosing between using the client or much more intimately embedding BaseX as a library. The latter is probably much more complex but I'm figuring this is the only way to get a good integration as the TCP client is rather limited in functionality. But where to start? What layers of the existing servlet integration to peel off, which ones to keep. Is BaseXServer.java a good starting point?
- Is the TCP client generally slower than via the Java API? A couple of queries via clj-basex didn't impress me much qua speed (compared to same query via the GUI).
Any starting points or general considerations that could help me prune the (re)search tree are very much appreciated.
--Marc
Hello Marc,
I have no idea how Clojure works (but would be very interested, but time is a scarce resource...), but according to https://clojuredocs.org/clojure.core/import you should be able to simply import Java classes/libraries. If this is possible it should be a simple process: Put the BaseX.jar into the library path and import the necessary classes (you can take a look at our Java examples in the wiki, should work the same).
Well, if your pirgamm is not client/server oriented I would definitely try to embed BaseX. The main benefit of the BaseX Client/Server version is that you can access it with multiple processes at the same time. Of course, the client version is theoretically slower (it has to send stuff over sockets, It has to create/parse TCP packets and it might be a significant overhead to use TCP if you have a rather small query or result set. But this overhead could also be insignificant, if you don't have this and your client/server have a fast connection (i.e. on the same server or the same network).
Cheers Dirk
On 01/18/2016 11:49 PM, Marc van Grootel wrote:
Hi,
I'm considering to write a web layer for BaseX based in Clojure. It may be a somewhat longer term project but I would like to bring XML and BaseX closer to Clojure programming. Clojure web apps usually are able to run under various servers/containers (Jetty/Netty etc.) and I would like to be able to use Clojure libraries to handle things like request routing, security and authentication outside of BaseX/XQuery.
Some questions that I have while I'm orienting myself. Some of it touches on integration areas that are quite new to me so I am happy to get some general pointers that I can use to dig further.
For Clojure I found only one BaseX client library [1] which wraps the standard Java TCP client and it seems to work fine.
But I have some broader questions such as
- Choosing between using the client or much more intimately embedding
BaseX as a library. The latter is probably much more complex but I'm figuring this is the only way to get a good integration as the TCP client is rather limited in functionality. But where to start? What layers of the existing servlet integration to peel off, which ones to keep. Is BaseXServer.java a good starting point?
- Is the TCP client generally slower than via the Java API? A couple
of queries via clj-basex didn't impress me much qua speed (compared to same query via the GUI).
Any starting points or general considerations that could help me prune the (re)search tree are very much appreciated.
--Marc
Yes, Clojure has very good Java interop. I lean towards embedding too as it gives much more control over BaseX and I want it to become an integral part of the webapp.
On Tue, Jan 19, 2016 at 10:49 AM, Dirk Kirsten dk@basex.org wrote:
Hello Marc,
I have no idea how Clojure works (but would be very interested, but time is a scarce resource...), but according to https://clojuredocs.org/clojure.core/import you should be able to simply import Java classes/libraries. If this is possible it should be a simple process: Put the BaseX.jar into the library path and import the necessary classes (you can take a look at our Java examples in the wiki, should work the same).
Well, if your pirgamm is not client/server oriented I would definitely try to embed BaseX. The main benefit of the BaseX Client/Server version is that you can access it with multiple processes at the same time. Of course, the client version is theoretically slower (it has to send stuff over sockets, It has to create/parse TCP packets and it might be a significant overhead to use TCP if you have a rather small query or result set. But this overhead could also be insignificant, if you don't have this and your client/server have a fast connection (i.e. on the same server or the same network).
Cheers Dirk
On 01/18/2016 11:49 PM, Marc van Grootel wrote:
Hi,
I'm considering to write a web layer for BaseX based in Clojure. It may be a somewhat longer term project but I would like to bring XML and BaseX closer to Clojure programming. Clojure web apps usually are able to run under various servers/containers (Jetty/Netty etc.) and I would like to be able to use Clojure libraries to handle things like request routing, security and authentication outside of BaseX/XQuery.
Some questions that I have while I'm orienting myself. Some of it touches on integration areas that are quite new to me so I am happy to get some general pointers that I can use to dig further.
For Clojure I found only one BaseX client library [1] which wraps the standard Java TCP client and it seems to work fine.
But I have some broader questions such as
- Choosing between using the client or much more intimately embedding
BaseX as a library. The latter is probably much more complex but I'm figuring this is the only way to get a good integration as the TCP client is rather limited in functionality. But where to start? What layers of the existing servlet integration to peel off, which ones to keep. Is BaseXServer.java a good starting point?
- Is the TCP client generally slower than via the Java API? A couple
of queries via clj-basex didn't impress me much qua speed (compared to same query via the GUI).
Any starting points or general considerations that could help me prune the (re)search tree are very much appreciated.
--Marc
-- Dirk Kirsten, BaseX GmbH, http://basexgmbh.de |-- Firmensitz: Blarerstrasse 56, 78462 Konstanz |-- Registergericht Freiburg, HRB: 708285, Geschäftsführer: | Dr. Christian Grün, Dr. Alexander Holupirek, Michael Seiferle `-- Phone: 0049 7531 91 68 276, Fax: 0049 7531 20 05 22
basex-talk@mailman.uni-konstanz.de