[rules-users] Type Declaration upgrade

Wolfgang Laun wolfgang.laun at gmail.com
Tue Feb 15 01:37:55 EST 2011


And what will happen to any FactType objects out there? Or the Class<?>
objects derived from them? Will it be safe to continue to use the object
returned by KnowledgeAgent.getKnowledgeBase() which is documented to return
a "cached KnowledgeBase"?

Whoa!
-W



2011/2/14 Mark Proctor <mproctor at codehaus.org>

>  On 14/02/2011 18:10, Edson Tirelli wrote:
>
>
>     The current version of Drools does not support dynamic changes in "type
> declarations" and I don't see this changing anytime soon. The reason is that
> not only the actual fact would require changes, but the actual knowledge
> base would require changes as several nodes might be referencing the old
> class.
>
>     So, to update a fact type you need to recreate the knowledge base.
> This is the same, BTW, than changing one of your fact classes in your
> application jars... you need to recompile the knowledge base or you will end
> up with class cast exceptions, sooner or later.
>
> Longer term there are two ways to achieve this
> 1) type declarations can only be modified if there is no data on them and
> the existing rules are still valid after the change, i.e. it will not effect
> the current state.
>
> 2) If ther eare existing facts a migration script must be provided that
> handles the mapping as all beans would need to be copied to the new type
> declaration.
>
> Mark
>
>
>      Edson
>
> 2011/2/14 delete <boyun.yuriy at gmail.com>
>
>>
>> Hi.
>> I have such declaration of type
>> declare Contact
>>  firstName : String
>> end
>>
>> then I want to add new property to this type. so the  next version is
>> declare Contact
>>  firstName : String
>>  newField : String
>> end
>>
>> this type declaration is in separate drl file.
>> then I add this new type to current KnowledgeBase.
>> but when I execute knowledgeBase.getFactType("test.package", "Contact");
>> I get old version of Contact.
>>
>> During debugging I found the place where is should be upgraded in the
>> KnowledgeBase.
>> org.drools.common.AbstractRuleBase.mergePackage
>> there is
>> // merge the type declarations
>>        if ( newPkg.getTypeDeclarations() != null ) {
>>            // add type declarations
>>            for ( TypeDeclaration type :
>> newPkg.getTypeDeclarations().values() ) {
>>                // @TODO should we allow overrides? only if the class is
>> not
>> in use.
>>                if ( !pkg.getTypeDeclarations().containsKey(
>> type.getTypeName() ) ) {
>>                    // add to package list of type declarations
>>                    pkg.addTypeDeclaration( type );
>>                }
>>            }
>>        }
>>
>> so according this comments it's not possible to upgrade Type on the fly.
>>
>> Am I missing something?
>> Does someone had such problems or know the workaround.
>>
>> Thanks in advance,
>> Yuriy
>>
>> --
>> View this message in context:
>> http://drools-java-rules-engine.46999.n3.nabble.com/Type-Declaration-upgrade-tp2491975p2491975.html
>> Sent from the Drools - User mailing list archive at Nabble.com.
>> _______________________________________________
>> rules-users mailing list
>> rules-users at lists.jboss.org
>> https://lists.jboss.org/mailman/listinfo/rules-users
>>
>
>
>
> --
>   Edson Tirelli
>   JBoss Drools Core Development
>   JBoss by Red Hat @ www.jboss.com
>
>
> _______________________________________________
> rules-users mailing listrules-users at lists.jboss.orghttps://lists.jboss.org/mailman/listinfo/rules-users
>
>
>
> _______________________________________________
> rules-users mailing list
> rules-users at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/rules-users
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/rules-users/attachments/20110215/1fe88299/attachment.html 


More information about the rules-users mailing list