Middleware
Application Server
How-To: Building a Rules Enabled Java Application - Car Rental with XML Business Objects
You need the following to build and run this Oracle Business Rules application:
This section shows the contents of the ZIP file:
import java.io.File;
import java.util.List;
import java.util.ArrayList;
import java.util.Properties;
import javax.xml.bind.*;
import oracle.rules.sdk.ruleset.RuleSet;
import oracle.rules.sdk.repository.RuleRepository;
import oracle.rules.sdk.repository.RepositoryManager;
import oracle.rules.sdk.repository.RepositoryType;
import oracle.rules.sdk.repository.RepositoryContext;
import oracle.rules.sdk.repository.RepositoryException;
import oracle.rules.sdk.dictionary.RuleDictionary;
import oracle.rules.rl.RuleSession;
JAXBContext jc = JAXBContext.newInstance("generated");
Unmarshaller um = jc.createUnmarshaller();
String fs = System.getProperty("file.separator");
String xmlpath = "data" + fs + "carrental.xml" ;
Object root = um.unmarshal(new File(xmlpath)); try
{
//connect to repository
String repoPath = "dict" + fs + "CarxmlRepository";
final String jarstoreKey = "oracle.rules.sdk.store.jar";
RepositoryType jarType = RepositoryManager.getRegisteredRepositoryType( jarstoreKey );
RuleRepository repo = RepositoryManager.createRuleRepositoryInstance( jarType );
//fill in init property values
RepositoryContext jarCtx = new RepositoryContext();
jarCtx.setProperty( oracle.rules.sdk.store.jar.Constants.I_PATH_BASE, repoPath );
//init the repository instance. If the init is successful,
//we shall get a useable repository instance
repo.init( jarCtx );
//load the dicionary/version
RuleDictionary dict = repo.loadDictionary( "CarRentalxml", "HowToxml" );
}
NOTE
//init a rule session
String rsname = "vehicleRent";
String dmrl = dict.dataModelRL();
String rsrl = dict.ruleSetRL( rsname );
RuleSession session = new RuleSession();
session.executeRuleset( dmrl );
session.executeRuleset( rsrl );
List argList = new ArrayList(3);
argList.add( "generated" );
argList.add( root );
argList.add( "//*" );
session.callFunctionWithArgumentList( "assertXPath", argList );
session.callFunctionWithArgument( "run", rsname);
$ . setCP
On windows systems:
> setCP.cmd
> java carrental.TestXML
Rental declined Qun Under age: age is: 15
>
Ensure the %ORACLE_HOME% environment variable is defined, and from the %HOWTO_HOME% directory, type the command:
To build the application, type the following command from the %HOWTO_HOME% directory:
ant
$ ant
Buildfile: build.xml
init:
prepare:
generate-jaxb:
[echo] Classpath is: /myoraclehome/rules/lib/rulesdk.jar:/myoraclehome/rules/lib/rl.jar:/myoraclehome/lib/xml.jar:/myoraclehome/lib/xmlparserv2.jar
[java] generated/Repository.java
[java] generated/RepositoryType.java
[java] generated/DriverType.java
[java] generated/RepositoryImpl.java
[java] generated/RepositoryTypeImpl.java
[java] generated/DriverTypeImpl.java
[java] generated/ObjectFactory.java
[java] XML-32111: (Warning) following generated java source files overwrote existing files "
[java] /mydemo_dir/build/jaxbgen/generated/Repository.java
[java] /mydemo_dir/build/jaxbgen/generated/RepositoryType.java
[java] /mydemo_dir/build/jaxbgen/generated/DriverType.java
[java] /mydemo_dir/build/jaxbgen/generated/RepositoryImpl.java
[java] /mydemo_dir/build/jaxbgen/generated/RepositoryTypeImpl.java
[java] /mydemo_dir/build/jaxbgen/generated/DriverTypeImpl.java
[java] /mydemo_dir/build/jaxbgen/generated/ObjectFactory.java
[java] /mydemo_dir/build/jaxbgen/generated/jaxb.properties
[java] "
[java] Java Result: -1
[javac] Compiling 7 source files to /mydemo_dir/build/jaxbgen
[jar] Building jar: /mydemo_dir/build/lib/generated.jar
[copy] Copying 1 file to /mydemo_dir/lib
classes:
[echo] Classpath is: /myinstall/lib/rulesdk.jar:/myinstall/lib/rl.jar:/myoc4jinstall/lib/xml.jar:/myoc4jinstall/lib/xmlparserv2.jar:/mydemo_dir/lib/generated.jar
[javac] Compiling 1 source file to /mydemo_dir/build/classes
[jar] Building jar: /mydemo_dir/build/lib/carxml.jar
[copy] Copying 1 file to /mydemo_dir/lib
BUILD SUCCESSFUL
Total time: 3 seconds
$ant classes
Buildfile: build.xml
init:
prepare:
classes:
[echo] Classpath is: myinstall/lib/rulesdk.jar:myinstall/lib/rl.jar:/myoraclehome/lib/xml.jar:/myoraclehome/lib/xmlparserv2.jar:/mydemo_dir/lib/generated.jar
[javac] Compiling 1 source file to /mydemo_dir/build/classes
[jar] Building jar: /mydemo_dir/build/lib/carxml.jar
[copy] Copying 1 file to /mydemo_dir/lib
BUILD SUCCESSFUL
Total time: 2 seconds