Re: [ApacheDS] how can a partition return more than one result ?

2012-06-11 Thread Garbage


Von meinem iPad gesendet


 But I am only able to return ONE entry, I didn't find or understand the 
 concept how MULTIPLE entries can be returned. Can someone show me the right 
 direction ?
 The idea is to use a Cursor that maps around the partition and fetch the 
 entries one by one.
 
 The way the server works is that based on your filter, you select the right 
 index to use to fetch the entries. There are may possibilities here :
 - first, you may have to do a full scan (the filter is not selective enough, 
 for instance). In this case, you don't use any index, you just use the 
 MasterTable to get the entries. Now, for each entry you fetch, you'll have to 
 filter them to see if it's a valid entry - or not.
 - or you can select an index. You will fetch the index elements, and for each 
 of them, fetch the associated entry.  Once done, you can check against the 
 filter if the entry is valid - or not
 
 In any case, the cursor is your friend here : it maps the next() operation on 
 top of your index.
 
 Now, if your Partition is a Btree, it's easier, as the AbstractBTreePartition 
 class already handles everyting for you. If you don't inherit from this 
 Abstract class, then it's way more complicated. I'll suggest you have a look 
 at the AbstractBTreePartition to get a clue about how we process a search 
 over a BTree based partition.
If I got you right I am to create my own cursor object which retrieves and 
stores the array with the items I want to deliver. The cursor then implements 
the next and get method in order to send the array one by one. But where is the 
cursor being called ? 
I tried to base my own partition on the abstract btree partition but what am I 
supposed to return from getRootId and getDefaultId and even worse from 
convertAndInit ?

Sorry for the beginner level questions but ApacheDS is quite complex and new to 
me.

[ApacheDS] how can a partition return more than one result ?

2012-06-08 Thread Garbage
I learned a lot about the implementation of custom partitions and see the 
changes in the API from search and lookup returning an Entry in 1.5.x and an 
EntryFilteringCursor later on.
I even was able to change an existing partition (shame on me: based on the 
1.5.5 example, but I will switch to 2.0 soon) in a way that lets it return a 
fake group object that was created in my custom POJO.

But I am only able to return ONE entry, I didn't find or understand the concept 
how MULTIPLE entries can be returned. Can someone show me the right direction ?

Re: [ApacheDS] how can a partition return more than one result ?

2012-06-08 Thread Emmanuel Lécharny

Le 6/8/12 1:49 PM, Garbage a écrit :

I learned a lot about the implementation of custom partitions and see the 
changes in the API from search and lookup returning an Entry in 1.5.x and an 
EntryFilteringCursor later on.
I even was able to change an existing partition (shame on me: based on the 
1.5.5 example, but I will switch to 2.0 soon) in a way that lets it return a 
fake group object that was created in my custom POJO.

But I am only able to return ONE entry, I didn't find or understand the concept 
how MULTIPLE entries can be returned. Can someone show me the right direction ?
The idea is to use a Cursor that maps around the partition and fetch the 
entries one by one.


The way the server works is that based on your filter, you select the 
right index to use to fetch the entries. There are may possibilities here :
- first, you may have to do a full scan (the filter is not selective 
enough, for instance). In this case, you don't use any index, you just 
use the MasterTable to get the entries. Now, for each entry you fetch, 
you'll have to filter them to see if it's a valid entry - or not.
- or you can select an index. You will fetch the index elements, and for 
each of them, fetch the associated entry.  Once done, you can check 
against the filter if the entry is valid - or not


In any case, the cursor is your friend here : it maps the next() 
operation on top of your index.


Now, if your Partition is a Btree, it's easier, as the 
AbstractBTreePartition class already handles everyting for you. If you 
don't inherit from this Abstract class, then it's way more complicated. 
I'll suggest you have a look at the AbstractBTreePartition to get a clue 
about how we process a search over a BTree based partition.


--
Regards,
Cordialement,
Emmanuel Lécharny
www.iktek.com



Re: [ApacheDS] how can a partition return more than one result ?

2012-06-08 Thread Garbage


Am 08.06.2012 um 13:58 schrieb Emmanuel Lécharny elecha...@gmail.com:

 Le 6/8/12 1:49 PM, Garbage a écrit :
 I learned a lot about the implementation of custom partitions and see the 
 changes in the API from search and lookup returning an Entry in 1.5.x and an 
 EntryFilteringCursor later on.
 I even was able to change an existing partition (shame on me: based on the 
 1.5.5 example, but I will switch to 2.0 soon) in a way that lets it return a 
 fake group object that was created in my custom POJO.
 
 But I am only able to return ONE entry, I didn't find or understand the 
 concept how MULTIPLE entries can be returned. Can someone show me the right 
 direction ?
 The idea is to use a Cursor that maps around the partition and fetch the 
 entries one by one.
 
 The way the server works is that based on your filter, you select the right 
 index to use to fetch the entries. There are may possibilities here :
 - first, you may have to do a full scan (the filter is not selective enough, 
 for instance). In this case, you don't use any index, you just use the 
 MasterTable to get the entries. Now, for each entry you fetch, you'll have to 
 filter them to see if it's a valid entry - or not.
 - or you can select an index. You will fetch the index elements, and for each 
 of them, fetch the associated entry.  Once done, you can check against the 
 filter if the entry is valid - or not
 
 In any case, the cursor is your friend here : it maps the next() operation on 
 top of your index.
 
 Now, if your Partition is a Btree, it's easier, as the AbstractBTreePartition 
 class already handles everyting for you. If you don't inherit from this 
 Abstract class, then it's way more complicated. I'll suggest you have a look 
 at the AbstractBTreePartition to get a clue about how we process a search 
 over a BTree based partition.
 
 -- 
 Regards,
 Cordialement,
 Emmanuel Lécharny
 www.iktek.com
 

Thanks, I will investigate this. What a pity, I am able to map searches to 
string arrays containing the name of groups I want to return. But I understand 
why you don't support arrays directly, I will somehow manage to map to the Bree 
example. And if not I will show up here again ;-)



Re: [ApacheDS] how can a partition return more than one result ?

2012-06-08 Thread Emmanuel Lécharny

Le 6/8/12 2:05 PM, Garbage a écrit :


Am 08.06.2012 um 13:58 schrieb Emmanuel Lécharnyelecha...@gmail.com:


Le 6/8/12 1:49 PM, Garbage a écrit :

I learned a lot about the implementation of custom partitions and see the 
changes in the API from search and lookup returning an Entry in 1.5.x and an 
EntryFilteringCursor later on.
I even was able to change an existing partition (shame on me: based on the 
1.5.5 example, but I will switch to 2.0 soon) in a way that lets it return a 
fake group object that was created in my custom POJO.

But I am only able to return ONE entry, I didn't find or understand the concept 
how MULTIPLE entries can be returned. Can someone show me the right direction ?

The idea is to use a Cursor that maps around the partition and fetch the 
entries one by one.

The way the server works is that based on your filter, you select the right 
index to use to fetch the entries. There are may possibilities here :
- first, you may have to do a full scan (the filter is not selective enough, 
for instance). In this case, you don't use any index, you just use the 
MasterTable to get the entries. Now, for each entry you fetch, you'll have to 
filter them to see if it's a valid entry - or not.
- or you can select an index. You will fetch the index elements, and for each 
of them, fetch the associated entry.  Once done, you can check against the 
filter if the entry is valid - or not

In any case, the cursor is your friend here : it maps the next() operation on 
top of your index.

Now, if your Partition is a Btree, it's easier, as the AbstractBTreePartition 
class already handles everyting for you. If you don't inherit from this 
Abstract class, then it's way more complicated. I'll suggest you have a look at 
the AbstractBTreePartition to get a clue about how we process a search over a 
BTree based partition.

--
Regards,
Cordialement,
Emmanuel Lécharny
www.iktek.com


Thanks, I will investigate this. What a pity, I am able to map searches to 
string arrays containing the name of groups I want to return. But I understand 
why you don't support arrays directly, I will somehow manage to map to the Bree 
example. And if not I will show up here again ;-)
If you already have an array, you just have to create your own cursor 
wraping it, maintaining the current index, and the next() call will 
simply fetch the next entry in the arry, incrementing the pointer. This 
is pretty simple to implement, I think.







--
Regards,
Cordialement,
Emmanuel Lécharny
www.iktek.com