Только тип может быть импортирован.models.XYZ разрешает пакет - PullRequest
1 голос
/ 06 декабря 2011

Я пытался решить проблему в течение последнего 1 дня, но не смог решить.

Iam вызывает слюни (правила) из игровых моделей. Он отлично работает в моей локальной среде.

Но когда я развертываю то же приложение на производстве на Solaris Box, я получаю следующую ошибку

Error = Unable to resolve ObjectType 'Tracker' : [Rule name='PM APPROVAL']
Unable to resolve ObjectType 'User' : [Rule name='SEND MAILS']
Unable to resolve ObjectType 'Tracker' : [Rule name='SEND MAILS']
Error importing : 'models.Tracker'Error importing : 'notifications.TrackerMails'Error importing : 'models.User'Rule Compilation error : [Rule name='SEND MAILS']
    drools/Rule_SEND_MAILS_0.java (2:23) : Only a type can be imported. notifications.TrackerMails resolves to a package
    drools/Rule_SEND_MAILS_0.java (2:57) : Only a type can be imported. models.Tracker resolves to a package
    drools/Rule_SEND_MAILS_0.java (2:95) : Only a type can be imported. models.User resolves to a package
    drools/Rule_SEND_MAILS_0.java (8:422) : TrackerMails cannot be resolved
    drools/Rule_SEND_MAILS_0.java (8:455) : $user cannot be resolved to a variable
    drools/Rule_SEND_MAILS_0.java (8:461) : $tracker cannot be resolved to a variable

Пример кода, который получает drooolssession. Я добавил переменную classLoader, просматривая некоторые форумы, но все же я не устранил проблему.

StatefulKnowledgeSession dsession = null;           
            ClassLoader classLoader = TrackerUtil.class.getClassLoader();

            KnowledgeBuilderConfiguration kBuilderConfiguration = KnowledgeBuilderFactory.newKnowledgeBuilderConfiguration(null, classLoader);
            KnowledgeBuilder builder = KnowledgeBuilderFactory.newKnowledgeBuilder(kBuilderConfiguration);
            KnowledgeBaseConfiguration kbaseConfig = KnowledgeBaseFactory.newKnowledgeBaseConfiguration(null, classLoader);
            '''''

            builder.add(ResourceFactory.newFileResource(new File(uri)),ResourceType.DRL);

            ''''
            builder.add(ResourceFactory.newFileResource(new File(uri)),ResourceType.DRF);
            .......             

            KnowledgeBase knowledgeBase = KnowledgeBaseFactory.newKnowledgeBase(kbaseConfig);
            knowledgeBase.addKnowledgePackages(builder.getKnowledgePackages());

            dsession = knowledgeBase.newStatefulKnowledgeSession();
            return dsession;

Кто-нибудь может помочь, пожалуйста, как я могу решить эту проблему?

1 Ответ

1 голос
/ 08 декабря 2011

Наконец, я решил проблему после двухдневного усилия !!

Проблема возникает из-за того, что Drools не может разрешить игровые модели. В eclipse он работает нормально, так как добавляет eclipse / classes к classpath.Но всякий раз, когда вы запускаете «Play run», drools не может найти play.models. Чтобы преодолеть это, нам нужно добавить «tmp / classes» в путь к классам.

Вот как мы можем добавить

  1. Перейти в директорию установки play, перейти в папку >> framework >> pym >> play
  2. Открыть application.py
  3. Перейдите в метод def getClasspath (self):
  4. В методе найдите строку classpath.append (os.path.normpath (os.path.join (self.path, 'conf'))) ниже линии добавьте следующую строку

    classpath.append(os.path.normpath(os.path.join(os.path.join(self.path, 'tmp'),'classes')))

  5. Теперь слюни смогут найти модели игры.Все выглядит хорошо.

Решение 2 -

Вы можете запустить игровой сервер, как показано ниже

java -Xdebug -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n -Dplay.debug=yes -Dplay.id= -Dapplication.path=/home/przemek/pn -Djava.endorsed.dirs=/opt/play/framework/endorsed -javaagent:/opt/play/framework/play-1.2.4.jar -Dfile.encoding=UTF-8 -classpath "Play computed classpath" and path to tmp classes  Play.server.Server

Даже вышеработает нормально. Вы можете получить вычисленный путь к классу play, запустив команду play classpath. Для classpath разделителем в linux является ":", тогда как в Windows это ";"

Приведенные выше решения работают, но янеужели не понял, почему часть? Как игра может разрешить модели, в то время как слюни не могут разрешить те же модели?

Пожалуйста, дайте мне знать, если вы знаете ответ на вопрос выше.

...