Hi.
I've some question about JESS.
1. Is it possible that Rules can used result from other rules ? I design
some rules that filter data from facts and I want to use the result to do
some other stuff, so any possible to do this ??
this is my JEES code
=========================================================================
; Define Template And Facts
(deftemplate Flight-Reservation-Info (slot FRServiceName) (slot ServiceType)
(slot From) (slot To) (slot FRPrice))
(deftemplate Hotel-Reservation-Info (slot HRServiceName) (slot ServiceType)
(slot RoomType) (slot HotelType) (slot HRPrice))
(deftemplate Car-Rental-Info (slot CRServiceName) (slot ServiceType) (slot
CarType) (slot CarBrand) (slot CRPrice))
(deffacts Travel-Data ; Service Info
(Flight-Reservation-Info (FRServiceName "Airline1") (ServiceType
"Flight-Reservation") (From "Bangkok") (To "California") (FRPrice "1000"))
(Flight-Reservation-Info (FRServiceName "Airline1") (ServiceType
"Flight-Reservation") (From "Bangkok") (To "New York") (FRPrice "1300"))
(Flight-Reservation-Info (FRServiceName "Airline2") (ServiceType
"Flight-Reservation") (From "Bangkok") (To "California") (FRPrice "1100"))
(Flight-Reservation-Info (FRServiceName "Airline2") (ServiceType
"Flight-Reservation") (From "Bangkok") (To "New York") (FRPrice "1400"))
(Hotel-Reservation-Info (HRServiceName "Hotel1") (ServiceType
"Hotel-Reservation") (RoomType "Normal") (HotelType "5 Stars") (HRPrice
"150"))
(Hotel-Reservation-Info (HRServiceName "Hotel1") (ServiceType
"Hotel-Reservation") (RoomType "Special") (HotelType "5 Stars") (HRPrice
"250"))
(Hotel-Reservation-Info (HRServiceName "Hotel2") (ServiceType
"Hotel-Reservation") (RoomType "Normal") (HotelType "3 Stars") (HRPrice
"100"))
(Hotel-Reservation-Info (HRServiceName "Hotel2") (ServiceType
"Hotel-Reservation") (RoomType "Special") (HotelType "3 Stars") (HRPrice
"125"))
(Car-Rental-Info (CRServiceName "CarRental1") (ServiceType "Car-Rental")
(CarType "Japanese Car") (CarBrand "Toyota") (CRPrice "70"))
(Car-Rental-Info (CRServiceName "CarRental1") (ServiceType "Car-Rental")
(CarType "Japanese Car") (CarBrand "Honda") (CRPrice "70"))
(Car-Rental-Info (CRServiceName "CarRental2") (ServiceType "Car-Rental")
(CarType "Europe Car") (CarBrand "Mercedes") (CRPrice "150"))
(Car-Rental-Info (CRServiceName "CarRental2") (ServiceType "Car-Rental")
(CarType "Europe Car") (CarBrand "BMW") (CRPrice "120"))
)
(deftemplate RelationalRules (slot ServiceTypeA) (slot ServiceTypeB) (slot
Relations))
(deffacts Service-Relation-Data
(RelationalRules (ServiceTypeA "Flight-Reservation") (ServiceTypeB
"Hotel-Reservation") (Relations "+"))
(RelationalRules (ServiceTypeA "Hotel-Reservation") (ServiceTypeB
"Car-Rental") (Relations "-->"))
(RelationalRules (ServiceTypeA "*") (ServiceTypeB "payment") (Relations
"-->"))
)
; Define Rules
(defrule ServiceSelectionCheck ; Check Customer Services Requirement
(Flight-Reservation-Info (FRServiceName ?FRServiceName) (ServiceType
?FRServiceType)
{From == "Bangkok" && To ==
"California" && ServiceType ==
"Flight-Reservation"})
(Hotel-Reservation-Info (HRServiceName ?HRServiceName) (ServiceType
?HRServiceType)
{HotelType == "5 Stars" && RoomType ==
"Normal"})
(Car-Rental-Info (CRServiceName ?CRServiceName) (ServiceType
?CRServiceType)
{CarType == "Japanese Car" && CarBrand
== "Honda"})
=>
(bind ?WSlist (create$ ?FRServiceName ?HRServiceName ?CRServiceName))
(printout t ?WSlist crlf)
)
(reset)
(run)
=========================================================================
when defrule "ServiceSelectionCheck" is fired I got some result like
("Airline2" "Hotel1" "CarRental1") and("Airline1" "Hotel1" "CarRental1"),
now I want to check relation between pair of service (check by ServiceType
for each of service), so final result should be like ("Airline2" "+"
"Hotel1" "-->" "CarRental1") and ("Airline1" "+" "Hotel1" "-->"
"CarRental1")
I had no idea how to map this (if it could done in JESS) :(
2. I try to implement this with Java servlet and Tomcat web server (sure I
used Eclipse). The ploblem is I can't get result from JESS and show it in
browser. I 've search in JESS archive findout something but it still got
some error, maybe because I suck at Java :(
This is error.
================================================================
HTTP Status 500 -
--------------------------------------------------------------------------------
type Exception report
message
description The server encountered an internal error () that prevented it
from fulfilling this request.
exception
javax.servlet.ServletException: Error instantiating servlet class
Recieveinfo
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
java.lang.Thread.run(Unknown Source)
root cause
java.lang.NoClassDefFoundError: jess/JessException
java.lang.Class.getDeclaredConstructors0(Native Method)
java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
java.lang.Class.getConstructor0(Unknown Source)
java.lang.Class.newInstance0(Unknown Source)
java.lang.Class.newInstance(Unknown Source)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
java.lang.Thread.run(Unknown Source)
root cause
java.lang.ClassNotFoundException: jess.JessException
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1363)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1209)
java.lang.ClassLoader.loadClassInternal(Unknown Source)
java.lang.Class.getDeclaredConstructors0(Native Method)
java.lang.Class.privateGetDeclaredConstructors(Unknown Source)
java.lang.Class.getConstructor0(Unknown Source)
java.lang.Class.newInstance0(Unknown Source)
java.lang.Class.newInstance(Unknown Source)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:874)
org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
java.lang.Thread.run(Unknown Source)
note The full stack trace of the root cause is available in the Apache
Tomcat/5.5.26 logs.
--------------------------------------------------------------------------------
Apache Tomcat/5.5.26
================================================================
This is my servlet code
*****************************************************************
import java.io.*;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import jess.*;
/**
* Servlet implementation class for Servlet: Recieveinfo
*
*/
public class Recieveinfo extends javax.servlet.http.HttpServlet implements
javax.servlet.Servlet {
static final long serialVersionUID = 1L;
public Recieveinfo() {
super();
}
protected void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
// TODO Auto-generated method stub
response.setContentType("text/html");
response.setCharacterEncoding("tis-620");
String Constraint1 = "Bangkok";
String Constraint2 = "California";
String Constraint3 = "5 Stars";
String Constraint4 = "Japanese Car";
try {
Rete r = new Rete();
r.eval("(deftemplate Flight-Reservation-Info (slot
FRServiceName)
(slot ServiceType) (slot From) (slot To))");
r.eval("(deftemplate Hotel-Reservation-Info (slot HRServiceName)
(slot ServiceType) (slot HotelType))");
r.eval("(deftemplate Car-Rental-Info (slot CRServiceName) (slot
ServiceType) (slot CarType))");
Fact f = new Fact("Flight-Reservation-Info", r);
f.setSlotValue("FRServiceName", new Value("Airline1",
RU.STRING));
f.setSlotValue("ServiceType", new Value("Flight-Reservation",
RU.STRING));
f.setSlotValue("From", new Value("Bangkok", RU.STRING));
f.setSlotValue("To", new Value("California", RU.STRING));
r.assertFact(f);
r.eval("(facts)");
Fact f1 = new Fact("Flight-Reservation-Info", r);
f1.setSlotValue("FRServiceName", new Value("Airline2",
RU.STRING));
f1.setSlotValue("ServiceType", new Value("Flight-Reservation",
RU.STRING));
f1.setSlotValue("From", new Value("Bangkok", RU.STRING));
f1.setSlotValue("To", new Value("New York", RU.STRING));
r.assertFact(f1);
r.eval("(facts)");
Fact f2 = new Fact("Hotel-Reservation-Info", r);
f2.setSlotValue("HRServiceName", new Value("Hotel1",
RU.STRING));
f2.setSlotValue("ServiceType", new Value("Hotel-Reservation",
RU.STRING));
f2.setSlotValue("HotelType", new Value("5 Stars", RU.STRING));
r.assertFact(f2);
r.eval("(facts)");
Fact f3 = new Fact("Hotel-Reservation-Info", r);
f3.setSlotValue("HRServiceName", new Value("Hotel2",
RU.STRING));
f3.setSlotValue("ServiceType", new Value("Hotel-Reservation",
RU.STRING));
f3.setSlotValue("HotelType", new Value("3 Stars", RU.STRING));
r.assertFact(f3);
r.eval("(facts)");
Fact f4 = new Fact("Car-Rental-Info", r);
f4.setSlotValue("CRServiceName", new Value("CarRental1",
RU.STRING));
f4.setSlotValue("ServiceType", new Value("Car-Rental",
RU.STRING));
f4.setSlotValue("CarType", new Value("Japanese Car",
RU.STRING));
r.assertFact(f4);
r.eval("(facts)");
Fact f5 = new Fact("Car-Rental-Info", r);
f5.setSlotValue("CRServiceName", new Value("CarRental2",
RU.STRING));
f5.setSlotValue("ServiceType", new Value("Car-Rental",
RU.STRING));
f5.setSlotValue("CarType", new Value("Europe Car", RU.STRING));
r.assertFact(f5);
r.eval("(facts)");
r.executeCommand("(defrule ServiceSelectionCheck
(Flight-Reservation-Info (FRServiceName ?FRServiceName) (ServiceType
?FRServiceType){From == \"" + Constraint1 + "\" && To == \"" + Constraint2 +
"\"})(Hotel-Reservation-Info (HRServiceName ?HRServiceName) (ServiceType
?HRServiceType){HotelType == \"" + Constraint3 + "\"})(Car-Rental-Info
(CRServiceName ?CRServiceName) (ServiceType ?CRServiceType){CarType == \""+
Constraint4 + "\"})=>(bind ?WSlist (create$ ?FRServiceName ?HRServiceName
?CRServiceName)) (bind ?WSlist3 (create$ \"Data\")) (foreach ?f ?WSlist
(bind ?WSlist2 (delete$ ?WSlist (member$ ?f ?WSlist) (member$ ?f
?WSlist)))(foreach ?x ?WSlist2 (bind ?WSlist3 (insert$ ?WSlist3 (member$
\"Data\" ?WSlist3) ?f ?x)) (store Servicelist ?WSlist3))))");
r.run();
Value val = r.fetch("Servicelist"); // Servicelist is a list in
JESS
Context env = r.getGlobalContext();
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<body>");
out.println("<table width='75%' border='0' align='center'
cellpadding='5' cellspacing='0' bgcolor='#FFFFCC'>");
out.println("<tr bgcolor='#99CCFF'>");
out.println("<td width='34%''><div
align='center'><strong>เซอร์วิสที่เลือก</strong></div></td>");
out.println("<td width='66%''><div
align='center'><strong>เงื่อนไข</strong></div></td>");
out.println("</tr>");
out.println("<tr>");
out.println("<td>" + val.stringValue(env) + "</td>");
out.println("</tr>");
out.println("</table>");
out.println("</body>");
out.println("</html>");
} catch (JessException ex) {
System.err.println(ex);
}
}
protected void doPost(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
}
*****************************************************************
** Sorry for my bad bad English. Thank you for all reply.
Sakkanart
--
View this message in context:
http://www.nabble.com/Rules-can-used-result-from-other-rules---...and-servlet-problem-tp16646389p16646389.html
Sent from the Jess mailing list archive at Nabble.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]
--------------------------------------------------------------------