Modeshape запрашивает mixinTypes

Я использую Modeshape и modeshape-connector-jdbc-metadata. Я хочу получить все узлы, представляющие таблицы в хранилище. Эти узлы имеют тип миксина [mj:catalog].

Я запрашиваю хранилище, используя следующий код:

    public List getDatabases() throws RepositoryException {
        // Obtain the query manager for the session ...
        QueryManager queryManager = dbSession.getWorkspace().getQueryManager();

        // Create a query object ...
        Query query = queryManager.createQuery("SELECT * FROM [mj:table]"
                , Query.JCR_SQL2);
        // Execute the query and get the results ...
        QueryResult result = query.execute();

        // Iterate over the nodes in the results ...
        NodeIterator nodeIter = result.getNodes();

        List stringResult = new ArrayList();
        while (nodeIter.hasNext()) {
            stringResult.add(nodeIter.nextNode().getName());
        }

        return stringResult;
    }

Но он всегда возвращает пустой список.

Я также попытался запросить, используя следующие запросы:

SELECT unst.*, tbl.* FROM [nt:unstructured] AS unst 
    JOIN [mj:table] AS tbl ON ISSAMENODE(unst,tbl)
SELECT * FROM [nt:unstructured] WHERE [jcr:mixinTypes] = [mj:table]

Но результат остается прежним. Что я делаю неправильно?

Спасибо за любую помощь.


person Gregory Kalabin    schedule 30.08.2012    source источник


Ответы (1)


Существует известная проблема, связанная с тем, что узлы метаданных базы данных не индексируются автоматически. Простой обходной путь — преобразовать экземпляр getWorkspace() сеанса JCR в org.modeshape.jcr.api.Workspace (общедоступный API для рабочей области ModeShape), вызвать метод reindex(String path) и передать путь к узлу каталога базы данных (или предку, если необходимо).

person Randall Hauch    schedule 30.08.2012