-1

Drools と Liferay を使用しており、ルールが true の場合にユーザーを BD に挿入しようとしていますが、Drools ではパッケージをインポートできません。私は .drl クラスを持っていません。文字列を渡して drools を実行します。これは私のコードです:

コードのよだれ:

import com.liferay.portal.kernel.search.BooleanClause;
import com.liferay.portal.kernel.search.BooleanClauseOccur;
import com.liferay.portal.kernel.search.BooleanClauseFactoryUtil;
import com.liferay.portal.kernel.search.BooleanQuery;
import com.liferay.portal.kernel.search.BooleanQueryFactoryUtil;
import com.liferay.portal.kernel.search.Document;
import com.liferay.portal.kernel.search.Field;
import com.liferay.portal.kernel.search.Hits;
import com.liferay.portal.kernel.search.Indexer;
import com.liferay.portal.kernel.search.IndexerRegistryUtil;
import com.liferay.portal.kernel.search.SearchContext;
import com.liferay.portal.kernel.util.GetterUtil;
import com.liferay.portal.kernel.util.KeyValuePair;
import com.liferay.portal.kernel.util.StringUtil;
import com.liferay.portal.kernel.util.Validator;
import com.liferay.portal.model.Address;
import com.liferay.portal.model.Group;
import com.liferay.portal.model.Contact;
import com.liferay.portal.model.User;
import com.liferay.portal.service.AddressLocalServiceUtil;
import com.liferay.portal.util.PortalUtil;
import com.liferay.portlet.asset.model.AssetEntry;
import com.liferay.portlet.asset.service.AssetEntryLocalServiceUtil;
import com.liferay.portal.model.User;
import com.liferay.portal.security.auth.PrincipalThreadLocal;
import com.liferay.portal.security.permission.PermissionChecker;
import com.liferay.portal.security.permission.PermissionCheckerFactoryUtil;
import com.liferay.portal.security.permission.PermissionThreadLocal;
import com.liferay.portal.kernel.util.ObjectValuePair;
import com.liferay.portlet.expando.model.ExpandoBridge;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;

import com.segmentationPortlet.controller.prova;

rule "Initialize Rules"
salience 1000
when
    user : User(); 
then
end

rule "Rule_1"
when 
    userRule_2: User(emailAddress == "test@liferay.com")
user: User();
then
    prova p;
    p.classification(user,"SegmentUser");
end

Drools を実行するコード。//rule は Drools のコードを含む文字列です。ThemeDisplay td = (ThemeDisplay) actionRequest.getAttribute(WebKeys.THEME_DISPLAY); ユーザー user = td.getUser(); fact.add(new Fact ("ユーザー", ユーザー));

RulesResourceRetriever rulesResourceRetriever = new RulesResourceRetriever(new                                          StringResourceRetriever(rule), String.valueOf(RulesLanguage.                 RulesEngineUtil.update(domainName, rulesResourceRetriever,      PortalClassLoaderUtil.getClassLoader());
RulesEngineUtil.execute(domainName, facts, Query.createStandardQuery(),      PortalClassLoaderUtil.getClassLoader());`

prova.java コード: パッケージ com.segmentationPortlet.controller;

import com.liferay.counter.service.CounterLocalServiceUtil;
import com.liferay.portal.model.User;
import com.segmentationPortlet.model.UserRule;
import com.segmentationPortlet.service.UserRuleLocalServiceUtil;
import com.segmentationPortlet.service.persistence.UserRulePK;

public class prova {
    public void classification(User user, String segmentValue)  {
        try {
            UserRule ur = null ;
            long id1 = CounterLocalServiceUtil.increment(UserRule.class.getName());
            long id2 = CounterLocalServiceUtil.increment(UserRule.class.getName());
            UserRulePK u = new UserRulePK(id1, id2); 
            ur= UserRuleLocalServiceUtil.createUserRule(u);
            Long id = (long) 1234;
            ur.setUserId(user.getUserId());
            ur.setRuleId(id);
            ur.setSegment(segmentValue);
            UserRuleLocalServiceUtil.addUserRule(ur);
        } catch (Exception ex) {
            ex.printStackTrace();
        }
    }
 }`

実行しようとすると、次のエラーが発生します。

原因: com.liferay.portal.kernel.bi.rules.RulesEngineException: インポート エラー: 'com.segmentationPortlet.controller.prova' インポート エラー: 'com.segmentationPortlet.controller.Classification.classification' インポート エラー: 'com.segmentationPortlet .controller.GetCustomAttribute.getCustomAttribute' [ function getCustomAttributegetCustomAttribute (行:53): タイプのみインポートできます。com.segmentationPortlet.controller.prova はパッケージに解決されます ] [ function classificationclassification (line:35): タイプのみインポートできます。com.segmentationPortlet.controller.prova はパッケージに解決されます] [ function getCustomAttributegetCustomAttribute (行:53): タイプのみをインポートできます。com.segmentationPortlet.controller.prova はパッケージに解決されます]

問題を解決する方法について何か考えはありますか?

どうもありがとうございました。

4

3 に答える 3