Межсистемный кэш с использованием XEP

Я пытаюсь извлечь данные из пространства имен Samples, которое поставляется с установкой Intersystems Cache. В частности, я пытаюсь получить глобальные данные Sample.Company с помощью XEP. Для этого я создал класс Sample.Company следующим образом:

package Sample;

public class Company {

    public Long id;
    public String mission;
    public String name;
    public Long revenue;
    public String taxId;

    public Company(Long id, String mission, String name, Long revenue,
            String taxId) {
        this.id = id;
        this.mission = mission;
        this.name = name;
        this.revenue = revenue;
        this.taxId = taxId;
    }

    public Company() {
    }
}

Код, связанный с XEP, выглядит так:

import java.util.ArrayList;
import java.util.List;

import org.springframework.stereotype.Service;

import Sample.Company;

import com.intersys.xep.Event;
import com.intersys.xep.EventPersister;
import com.intersys.xep.EventQuery;
import com.intersys.xep.EventQueryIterator;
import com.intersys.xep.PersisterFactory;
import com.intersys.xep.XEPException;

@Service
public class CompanyService {

    public List<Company> fetch() {
        EventPersister myPersister = PersisterFactory.createPersister();
        myPersister.connect("SAMPLES", "user", "pwd");
        try { // delete any existing SingleStringSample events, then import
                // new ones
            Event.isEvent("Sample.Company");
            myPersister.deleteExtent("Sample.Company");
            String[] generatedClasses = myPersister.importSchema("Sample.Company");
            for (int i = 0; i < generatedClasses.length; i++) {
                System.out.println("Event class " + generatedClasses[i]
                        + " successfully imported.");
            }
        } catch (XEPException e) {
            System.out.println("import failed:\n" + e);
            throw new RuntimeException(e);
        }
        EventQuery<Company> myQuery = null;
        List<Company> list = new ArrayList<Company>();
        try {
            Event newEvent = myPersister.getEvent("Sample.Company");
            String sql = "Select * from Sample.Company";
            myQuery = newEvent.createQuery(sql);
            newEvent.close();
            myQuery.execute();
            EventQueryIterator<Company> iterator = myQuery.getIterator();
            while (iterator.hasNext()) {
                Company c = iterator.next();
                System.out.println(c);
                list.add(c);
            }
            myQuery.close();
            myPersister.close();
            return list;
        } catch (XEPException e) {
            System.out.println("createQuery failed:\n" + e);
            throw new RuntimeException(e);
        }
    }

}

Когда я пытаюсь выполнить метод fetch() вышеуказанного класса, я вижу следующее исключение:

 com.intersys.xep.XEPException: Cannot import - extent for Sample.Company not empty.
    at com.intersys.xep.internal.Generator.generate(Generator.java:52)
    at com.intersys.xep.EventPersister.importSchema(EventPersister.java:954)
    at com.intersys.xep.EventPersister.importSchema(EventPersister.java:363)

У меня работает простой пример строки. Означает ли это, что мы не можем прочитать существующие данные с помощью XEP? Если мы можем читать, не могли бы некоторые, пожалуйста, помочь мне в решении вышеуказанной проблемы? Заранее спасибо.


person user3600073    schedule 02.10.2014    source источник


Ответы (1)


Вы пытаетесь создать новый класс с именем Sample.Company в своем экземпляре:

String[] generatedClasses = myPersister.importSchema("Sample.Company");

Но у вас все еще есть данные и существующий класс.

person kazamatzuri    schedule 02.10.2014
comment
Есть ли простой способ обратного проектирования для создания классов Java для существующих данных Cache? - person user3600073; 03.10.2014