The current JessDE uses regular Java reflection to learn about the classes you use, Userfunctions you load, etc. As a result, those classes get loaded into the JVM. Usually, that doesn't matter, but some classes do funky things in their static initializer blocks. This can result in all sorts of odd behavior, depending on exactly what the classes do; endless loops, out-of-memory errors, etc.

Work has already begun on a future version of the JessDE using Eclipse's own class file inspection APIs, which don't load the classes. It's unclear, though, that this will work for Userfunction classes, as it's only by calling "getName()" on a Userfunction object that you can learn the name of the implemented function.

On Apr 4, 2007, at 10:54 AM, ebm christoph wrote:

Good Day!


I am working on a Project, where I need to combine Jess with Jade and Protégé. The problem is, I am having big troubles with the JessDE eclipse Plug-in, as soon as I use some Protégé functions.


Editing regular jess code works absolutely fine, but when I edit code, that uses Protégé or JessTab functions, like the following code, eclipse starts using 99% of my CPU capacity and eventually freezes completely. This happens after about 1 min of editing and there is no error message.

This error accurse only while editing the file. Reading or executing it works absolutely fine.


I experienced the same effect on two different machines, one running Windows 2000, the other running SuSE Linux. I am using Eclipse SDK Version: 3.2.2, Jess 7.0p1, JessTab 16 and Protégé 3.2.1.


Any help is highly appreciated!


Christoph Ebm



P.S.: Code, that makes trouble:

(watch all)

(load-package se.liu.ida.JessTab.JessTabFunctions)


(defclass Message_class ; a JADE ACL message mapped to a protege instance

(is-a :STANDARD-CLASS) ; class Message will inherit the standard slots

(slot Performative) ; get integer repesenting the type of message as defined in jade.lang.acl.ACLMessage

(slot Sender (type any)) ; message sender, not a String, but a JADE AID

  (slot Content) ; message content as a String

)


(mapclass Message_class)


(defrule message_rule ; make a protege instance for every message the agent tells JESS about

?Message <- (Message ?message) ; the agent made this JESS fact for a message it received

  =>

(make-instance of Message_class ; a new protege instance of class Message

(Performative (call jade.lang.acl.ACLMessage getPerformative (? message getPerformative)))

    (Sender (call (call ?message getSender) getName))

    (Content (call ?message getContent))

  )

  (retract ?Message)

)


(defrule proposal ; example for what the agent could do with a message

  (Agent ?agent) ; the agent started with the JADE system

  ?instance <- (object) ; any protege instance would match here

(test (eq (class ?instance) Message_class)) ; if the instance is a Message

(test (eq (slot-get ?instance Performative) "CFP")) ; meaning the message is a call for proposals

  =>

(bind ?message (new jade.lang.acl.ACLMessage (get-member jade.lang.acl.ACLMessage PROPOSE)))

  (?message setSender (?agent getAID)) ; take "my" agent as the sender

(?message addReceiver (new jade.core.AID (slot-get ?instance Sender) TRUE))

(?message setContent (slot-get ?instance Content)) ; just copy the original content

  (?agent send ?message)

)




---------------------------------------------------------
Ernest Friedman-Hill
Advanced Software Research          Phone: (925) 294-2154
Sandia National Labs                FAX:   (925) 294-2234
PO Box 969, MS 9012                 [EMAIL PROTECTED]
Livermore, CA 94550                 http://www.jessrules.com

--------------------------------------------------------------------
To unsubscribe, send the words 'unsubscribe jess-users [EMAIL PROTECTED]'
in the BODY of a message to [EMAIL PROTECTED], NOT to the list
(use your own address!) List problems? Notify [EMAIL PROTECTED]
--------------------------------------------------------------------

Reply via email to