Apache Cayenne "Класс не сопоставляется с Cayenne" - PullRequest
0 голосов
/ 23 февраля 2019

Я использую Apache Cayenne для хранения данных и сравнения их с файлами, чтобы увидеть, был ли файл изменен.В настоящее время у меня есть метод, который вставляет данные в мою базу данных, но я получаю:

Exception in thread "main" java.lang.IllegalArgumentException: Class is not mapped with Cayenne: edu.ndsu.eci.duo_demo.persist.Integrations
    at org.apache.cayenne.access.DataContext.newObject(DataContext.java:471)
    at edu.ndsu.eci.duo_demo.util.IntegrationService.insertData(IntegrationService.java:31)
    at edu.ndsu.eci.duo_demo.main.ServiceMain.main(ServiceMain.java:55)

Мой метод:

public static void insertData(Integration i, ObjectContext context) {
    Integrations integ = context.newObject(Integrations.class);
    integ.setName(i.getName());
    integ.setEnrollPolicy(i.getEnrollPolicy());

    List<String> ipWhitelist = i.getIpWhitelist();
    String ip = "[";
    if(ipWhitelist.size() > 0)
      ip += "\"";
    for(int j = 0; j < ipWhitelist.size(); j++) {
      ip += ipWhitelist.get(j) + "\"";
      if(j < ipWhitelist.size()-1)
        ip += ",\"";
    }
    ip += "]";

    integ.setIpWhitelist(ip);
    context.commitChanges();
  }

Редактировать

Вывод моего журнала:

[main] DEBUG org.apache.cayenne.configuration.server.DataDomainProvider  - starting configuration loading: [cayenne.xml]
[main] DEBUG org.apache.cayenne.configuration.server.DataDomainProvider  - starting configuration loading: [cayenne.xml]
[main] INFO  org.apache.cayenne.configuration.XMLDataChannelDescriptorLoader  - Loading XML configuration resource from file:/home/stkarsch/git/duo-integration-verification/target/classes/cayenne.xml
[main] INFO org.apache.cayenne.configuration.XMLDataChannelDescriptorLoader  - Loading XML configuration resource from file:/home/stkarsch/git/duo-integration-verification/target/classes/cayenne.xml
[main] INFO  org.apache.cayenne.configuration.XMLDataChannelDescriptorLoader  - tag <domains> is unexpected at [36,2]. The following tags are allowed here: [domain]
[main] INFO org.apache.cayenne.configuration.XMLDataChannelDescriptorLoader  - tag <domains> is unexpected at [36,2]. The following tags are allowed here: [domain]
[main] DEBUG org.apache.cayenne.configuration.server.DataDomainProvider  - finished configuration loading in 22 ms.
[main] DEBUG org.apache.cayenne.configuration.server.DataDomainProvider  - finished configuration loading in 22 ms.
[main] DEBUG org.apache.cayenne.access.DataRowStore  - DataRowStore property cayenne.DataRowStore.snapshot.size = 10000
[main] DEBUG org.apache.cayenne.access.DataRowStore  - DataRowStore property cayenne.DataRowStore.snapshot.size = 10000

Инициализация моего ServerRuntime:

ServerRuntime run = ServerRuntime.builder().addConfig("cayenne.xml").build();
ObjectContext context = run.getContext();

1 Ответ

0 голосов
/ 25 февраля 2019

Из журнала запуска выясняется, что у вас есть старый файл "cayenne.xml", запущенный с более новой версией:

 tag <domains> is unexpected at [36,2]. The following tags are allowed here: [domain] 

IIRC <domains> - до 3.1, тогда как среда выполнения выглядит как 3.1 или4.0.Поэтому я предлагаю следующее:

  • Выясните, какая версия Cayenne используется во время выполнения.
  • Загрузите дистрибутив Cayenne для этой версии.
  • Откройте свой "Cayenne".XML-файл с помощью приложения CayenneModeler из дистрибутива.Он должен спросить, хотите ли вы обновить.
  • Продолжите обновление.
  • Скорее всего, проект будет переименован из "cayenne.xml" в "cayenne-project.xml". Так что подтвердите новое имя и используйте его при создании ServerRuntime
...