> So by creating such an XQuery wrapper module, we would ensure that there is > only a single import of the Java class (which represents module m1) - > regardless of how many times the XQuery wrapper module is imported? If so, > then indeed that sounds like an option.
Exactly: The XQuery specification ensures that XQuery modules that are referenced multiple times are only parsed once. As a consequence, the Java object that will be created in that module won’t be created multiple times. Just run the example code that I provided in my earlier mail, it should make clear how this works. > -----Ursprüngliche Nachricht----- > Von: Christian Grün [mailto:christian.gr...@gmail.com] > Gesendet: Mittwoch, 18. Dezember 2019 17:48 > An: Johannes Echterhoff <echterh...@interactive-instruments.de> > Cc: BaseX <basex-talk@mailman.uni-konstanz.de> > Betreff: Re: [basex-talk] How many QueryModule instances can be created? > > Hi Johannes, > > > m1 is a Java module, with de.interactive_instruments.module.MyQueryModule > > being the Java class that extends QueryModule. > > … > > We end up having multiple instances, i.e. Java objects, of class > > MyQueryModule, … > > So the solution which I would recommend (and which I would generally > recommend when importing Java classes) is to write an XQuery wrapper module > for m1, and place the Java imports in that module (see [1] for an example). > This module will only exist once in your query context. > This approach has various other advantages: For example, you can work with > XQuery data types in all other modules, and only the wrapper needs to ensure > that the XQuery parameters will be correctly converted into and back from > Java types. > > Does that sound like an option? > Christian > > [1] http://docs.basex.org/wiki/Repository#Combined > > > > > -----Ursprüngliche Nachricht----- > > Von: Christian Grün [mailto:christian.gr...@gmail.com] > > Gesendet: Mittwoch, 18. Dezember 2019 15:59 > > An: Johannes Echterhoff <echterh...@interactive-instruments.de> > > Cc: BaseX <basex-talk@mailman.uni-konstanz.de> > > Betreff: Re: [basex-talk] How many QueryModule instances can be created? > > > > > It may also answer my second question, where I was referring to expath > > > packaging and if that would make any difference - when compared to having > > > a pure JAR with the Java classes (and required libraries). It sounds like > > > expath packaging does not make a difference. Please correct me if I got > > > this wrong. > > > > Right: EXPath is just another way of packaging the code. The XQuery parser > > will handle all modules equally, no matter if they have initially been > > packaged as XAR or via our own packaging mechanisms. > > > > After having read your initial mail for a second time, I noticed I may have > > got your setup a little wrong. I think it will be easier to find a solution > > if we manage to construct a little example that shows the behavior you > > reported. Otherwise, there may be too many open questions to solve (how do > > you import and initialize your Java Code? is initialization identical to > > creating a class instance? is the initialization code embedded in global > > variables? etc). > > > > I have attached a basic set of files that (I believe) simulates your setup. > > Could you extend it for me, or comment back what I may have wrongly > > understood?