Skip to content

Commit

Permalink
[JBRULES-3668] remove namespaces from KBase and KSession
Browse files Browse the repository at this point in the history
  • Loading branch information
mariofusco committed Nov 21, 2012
1 parent b042ae4 commit 484800a
Show file tree
Hide file tree
Showing 29 changed files with 180 additions and 1,167 deletions.
166 changes: 20 additions & 146 deletions drools-cdi-example/src/main/resources/META-INF/kproject.xml
@@ -1,151 +1,25 @@
<org.drools.kproject.KProjectImpl>
<kproject kProjectPath="src/main/resources/" kBasesPath="src/kbases">
<groupArtifactVersion>
<groupId>org.test</groupId>
<artifactId>fol4</artifactId>
<version>0.1</version>
</groupArtifactVersion>
<kProjectPath>src/main/resources/</kProjectPath>
<kBasesPath>src/kbases</kBasesPath>
<kBases>
<entry>
<string>fol4.test1.KBase1</string>
<org.drools.kproject.KBaseImpl>
<namespace>fol4.test1</namespace>
<name>KBase1</name>
<includes/>
<files class="java.util.Arrays$ArrayList">
<a class="string-array">
<string>fol4/test1/rule1.drl</string>
<string>fol4/test1/rule2.drl</string>
</a>
</files>
<annotations class="java.util.Arrays$ArrayList">
<a class="string-array">
<string>@ApplicationScoped; @Inject</string>
</a>
</annotations>
<equalsBehavior>EQUALITY</equalsBehavior>
<eventProcessingMode>STREAM</eventProcessingMode>
<kSessions>
<entry>
<string>fol4.test1.KSession2</string>
<org.drools.kproject.KSessionImpl>
<namespace>fol4.test1</namespace>
<name>KSession2</name>
<type>stateful</type>
<clockType>
<clockType>pseudo</clockType>
</clockType>
<annotations class="java.util.Arrays$ArrayList">
<a class="string-array">
<string>@ApplicationScoped; @Inject</string>
</a>
</annotations>
<kBase reference="../../../.."/>
</org.drools.kproject.KSessionImpl>
</entry>
<entry>
<string>fol4.test1.KSession1</string>
<org.drools.kproject.KSessionImpl>
<namespace>fol4.test1</namespace>
<name>KSession1</name>
<type>stateless</type>
<clockType>
<clockType>realtime</clockType>
</clockType>
<annotations class="java.util.Arrays$ArrayList">
<a class="string-array">
<string>@ApplicationScoped; @Inject</string>
</a>
</annotations>
<kBase reference="../../../.."/>
</org.drools.kproject.KSessionImpl>
</entry>
</kSessions>
<kProject reference="../../../.."/>
</org.drools.kproject.KBaseImpl>
</entry>
<entry>
<string>fol4.test3.KBase3</string>
<org.drools.kproject.KBaseImpl>
<namespace>fol4.test3</namespace>
<name>KBase3</name>
<includes>
<string>fol4.test1.KBase1</string>
<string>fol4.test2.KBase2</string>
</includes>
<files class="java.util.Arrays$ArrayList">
<a class="string-array"/>
</files>
<annotations class="java.util.Arrays$ArrayList">
<a class="string-array">
<string>@ApplicationScoped</string>
</a>
</annotations>
<equalsBehavior>IDENTITY</equalsBehavior>
<eventProcessingMode>CLOUD</eventProcessingMode>
<kSessions>
<entry>
<string>fol4.test3.KSession4</string>
<org.drools.kproject.KSessionImpl>
<namespace>fol4.test3</namespace>
<name>KSession4</name>
<type>stateless</type>
<clockType>
<clockType>pseudo</clockType>
</clockType>
<annotations class="java.util.Arrays$ArrayList">
<a class="string-array">
<string>@ApplicationScoped</string>
</a>
</annotations>
<kBase reference="../../../.."/>
</org.drools.kproject.KSessionImpl>
</entry>
</kSessions>
<kProject reference="../../../.."/>
</org.drools.kproject.KBaseImpl>
</entry>
<entry>
<string>fol4.test2.KBase2</string>
<org.drools.kproject.KBaseImpl>
<namespace>fol4.test2</namespace>
<name>KBase2</name>
<includes/>
<files class="java.util.Arrays$ArrayList">
<a class="string-array">
<string>fol4/test2/rule1.drl</string>
<string>fol4/test2/rule2.drl</string>
</a>
</files>
<annotations class="java.util.Arrays$ArrayList">
<a class="string-array">
<string>@ApplicationScoped</string>
</a>
</annotations>
<equalsBehavior>IDENTITY</equalsBehavior>
<eventProcessingMode>CLOUD</eventProcessingMode>
<kSessions>
<entry>
<string>fol4.test2.KSession3</string>
<org.drools.kproject.KSessionImpl>
<namespace>fol4.test2</namespace>
<name>KSession3</name>
<type>stateful</type>
<clockType>
<clockType>pseudo</clockType>
</clockType>
<annotations class="java.util.Arrays$ArrayList">
<a class="string-array">
<string>@ApplicationScoped</string>
</a>
</annotations>
<kBase reference="../../../.."/>
</org.drools.kproject.KSessionImpl>
</entry>
</kSessions>
<kProject reference="../../../.."/>
</org.drools.kproject.KBaseImpl>
</entry>
</kBases>
</org.drools.kproject.KProjectImpl>
<kbases>
<kbase name="fol4.test1.KBase1" equalsBehavior="EQUALITY" eventProcessingMode="STREAM">
<ksessions>
<ksession name="fol4.test1.KSession2" type="stateful" clockType="pseudo"/>
<ksession name="fol4.test1.KSession1" type="stateless" clockType="realtime"/>
</ksessions>
</kbase>
<kbase name="fol4.test3.KBase3" equalsBehavior="IDENTITY" eventProcessingMode="CLOUD">
<ksessions>
<ksession name="fol4.test3.KSession4" type="stateless" clockType="pseudo"/>
</ksessions>
</kbase>
<kbase name="fol4.test2.KBase2" equalsBehavior="IDENTITY" eventProcessingMode="CLOUD">
<ksessions>
<ksession name="fol4.test2.KSession3" type="stateful" clockType="pseudo"/>
</ksessions>
</kbase>
</kbases>
</kproject>
Expand Up @@ -15,7 +15,7 @@ public class KBaseUnitCachingFactory {
private static final Map<String, KBaseUnitImpl> cache = new EvictionCache<String, KBaseUnitImpl>(EVICTION_TIME);

static KBaseUnitImpl getOrCreateKBaseUnit(String url, KBase kBase) {
String kBaseName = kBase.getQName();
String kBaseName = kBase.getName();
KBaseUnitImpl unit = cache.get(kBaseName);
if (unit == null) {
unit = new KBaseUnitImpl(url, kBase);
Expand Down
Expand Up @@ -79,7 +79,7 @@ boolean hasIncludes() {
}

public String getKBaseName() {
return kBase.getQName();
return kBase.getName();
}

public boolean hasErrors() {
Expand Down Expand Up @@ -140,7 +140,7 @@ private void buildKBaseFiles(CompositeKnowledgeBuilder ckbuilder, KBase kBase) {
}

try {
for ( String file : getFiles(kBase.getQName(), zipFile) ) {
for ( String file : getFiles(kBase.getName(), zipFile) ) {
ZipEntry zipEntry = zipFile.getEntry( file );
ckbuilder.add( ResourceFactory.newInputStreamResource( zipFile.getInputStream( zipEntry ) ), ResourceType.DRL );
}
Expand All @@ -154,7 +154,7 @@ private void buildKBaseFiles(CompositeKnowledgeBuilder ckbuilder, KBase kBase) {
}
} else {
try {
for ( String file : getFiles(kBase.getQName(), new File(rootPath)) ) {
for ( String file : getFiles(kBase.getName(), new File(rootPath)) ) {
ckbuilder.add( ResourceFactory.newFileResource( new File(rootPath, file) ), ResourceType.DRL );
}
} catch ( Exception e) {
Expand Down
Expand Up @@ -40,7 +40,7 @@ public class KnowledgeContainerImpl implements KnowledgeContainer {

private static final Logger log = LoggerFactory.getLogger(KnowledgeContainer.class);

public static final String KBASES_FOLDER = "kbases";
public static final String KBASES_FOLDER = "src/kbases";
public static final String KPROJECT_JAR_PATH = "META-INF/kproject.xml";
public static final String KPROJECT_RELATIVE_PATH = "src/main/resources/" + KPROJECT_JAR_PATH;

Expand Down Expand Up @@ -79,7 +79,7 @@ public File buildKJar(File rootFolder, File outputFolder, String jarName) {
public List<KBaseUnit> getKBaseUnits() {
List<KBaseUnit> units = new ArrayList<KBaseUnit>();
for (KBase kBase : kBases.values()) {
units.add(getOrCreateKBaseUnit(urls.get(kBase.getQName()), kBase));
units.add(getOrCreateKBaseUnit(urls.get(kBase.getName()), kBase));
}
return units;
}
Expand All @@ -88,7 +88,7 @@ public List<KBaseUnit> getKBaseUnits(File rootFolder, File sourceFolder) {
List<KBaseUnit> units = new ArrayList<KBaseUnit>();
KProject kProject = fromXML(new File(rootFolder, KPROJECT_RELATIVE_PATH));
for (KBase kBase : kProject.getKBases().values()) {
units.add(new KBaseUnitImpl( sourceFolder.getAbsolutePath() + "/" + kBase.getQName(), kBase, classLoader ));
units.add(new KBaseUnitImpl( sourceFolder.getAbsolutePath() + "/" + kBase.getName(), kBase, classLoader ));
}
return units;
}
Expand All @@ -99,9 +99,8 @@ public void copyKBasesToOutput(File rootFolder, File outputFolder) {
copyFile(kProjectFile, new File(outputFolder, KPROJECT_JAR_PATH));

for (KBase kBase : kProject.getKBases().values()) {
for (String kBaseFile : getFiles(kBase.getQName(), rootFolder)) {
String file = KBASES_FOLDER + "/" + kBase.getQName() + "/" + kBaseFile;
copyFile(new File(rootFolder + "/src", file), new File(outputFolder, kBaseFile));
for (String kBaseFile : getFiles(kBase.getName(), new File(rootFolder, KBASES_FOLDER))) {
copyFile(new File(rootFolder, KBASES_FOLDER + "/" + kBaseFile), new File(outputFolder, kBaseFile));
}
}
}
Expand Down Expand Up @@ -130,7 +129,11 @@ public StatefulKnowledgeSession getStatefulKnowlegeSession(String kSessionName)
}

public StatelessKnowledgeSession getStatelessKnowlegeSession(String kSessionName) {
return getKBaseUnit(kSessions.get(kSessionName)).newStatelessKnowledegSession(kSessionName);
String kBaseName = kSessions.get(kSessionName);
if (kBaseName == null) {
throw new RuntimeException("Unknown KnowledgeSession: " + kSessionName);
}
return getKBaseUnit(kBaseName).newStatelessKnowledegSession(kSessionName);
}

private void loadKProjects(ClassLoader classLoader, boolean doEvict) {
Expand All @@ -150,34 +153,34 @@ private void loadKProjects(ClassLoader classLoader, boolean doEvict) {
private void indexKSessions(KProject kProject, String url, boolean doEvict) {
for (KBase kBase : kProject.getKBases().values()) {
cleanUpExistingKBase(kBase, doEvict);
kBases.put(kBase.getQName(), kBase);
urls.put(kBase.getQName(), url);
kBases.put(kBase.getName(), kBase);
urls.put(kBase.getName(), url);
for (KSession kSession : kBase.getKSessions().values()) {
kSessions.put(kSession.getQName(), kBase.getQName());
kSessions.put(kSession.getName(), kBase.getName());
}
}
}

private void cleanUpExistingKBase(KBase kBase, boolean doEvict) {
if (doEvict) {
evictKBaseUnit(kBase.getQName());
evictKBaseUnit(kBase.getName());
}
KBase oldKbase = kBases.get(kBase.getQName());
KBase oldKbase = kBases.get(kBase.getName());
if (oldKbase != null) {
urls.remove(oldKbase.getQName());
urls.remove(oldKbase.getName());
for (KSession kSession : oldKbase.getKSessions().values()) {
kSessions.remove(kSession.getQName());
kSessions.remove(kSession.getName());
}
}
}

private File writeKJar(File rootFolder, File outputFolder, String jarName, KProject kProject) {
File kBasesFolder = new File(rootFolder, "src/" + KBASES_FOLDER);
File kBasesFolder = new File(rootFolder, KBASES_FOLDER);
Map<String, String> jarEntries = new HashMap<String, String>();
jarEntries.put(KPROJECT_RELATIVE_PATH, KPROJECT_JAR_PATH);
for (KBase kBase : kProject.getKBases().values()) {
for (String kBaseFile : getFiles(kBase.getQName(), kBasesFolder)) {
jarEntries.put("src/" + KBASES_FOLDER + "/" + kBaseFile, kBaseFile);
for (String kBaseFile : getFiles(kBase.getName(), kBasesFolder)) {
jarEntries.put(KBASES_FOLDER + "/" + kBaseFile, kBaseFile);
}
}
return writeAsJar(rootFolder, outputFolder, jarName, jarEntries);
Expand Down

0 comments on commit 484800a

Please sign in to comment.