001: package org.drools.jsr94.rules;
002:
003: /*
004: * Copyright 2005 JBoss Inc
005: *
006: * Licensed under the Apache License, Version 2.0 (the "License");
007: * you may not use this file except in compliance with the License.
008: * You may obtain a copy of the License at
009: *
010: * http://www.apache.org/licenses/LICENSE-2.0
011: *
012: * Unless required by applicable law or agreed to in writing, software
013: * distributed under the License is distributed on an "AS IS" BASIS,
014: * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
015: * See the License for the specific language governing permissions and
016: * limitations under the License.
017: */
018:
019: import javax.rules.ConfigurationException;
020: import javax.rules.RuleRuntime;
021: import javax.rules.RuleServiceProvider;
022: import javax.rules.RuleServiceProviderManager;
023: import javax.rules.admin.RuleAdministrator;
024:
025: import org.drools.jsr94.rules.admin.RuleAdministratorImpl;
026: import org.drools.jsr94.rules.admin.RuleExecutionSetRepository;
027:
028: /**
029: * This class provides access to the <code>RuleRuntime</code> and
030: * <code>RuleAdministrator</code> implementation supplied by Drools when
031: * running under J2SE. <p/> This class should be used in environments without a
032: * JNDI provider - typically when writing standalone J2SE clients. Within the
033: * J2EE environment the <code>RuleServiceProvider</code> implementation class
034: * provided by Drools should be retrieved using a JNDI lookup. <p/> This class
035: * should be constructed using the
036: * <code>RuleServiceProviderManager.getRuleServiceProvider</code> method.
037: * This class is automatically registered to "http://drools.org/" on startup,
038: * via the static block.
039: *
040: * @see RuleRuntimeImpl
041: * @see RuleAdministratorImpl
042: * @see RuleServiceProvider
043: * @see javax.rules.RuleServiceProviderManager#getRuleServiceProvider(String)
044: *
045: * @author <a href="mailto:thomas.diesler@softcon-itec.de">thomas diesler </a>
046: */
047: public class RuleServiceProviderImpl extends RuleServiceProvider
048: implements java.io.Serializable {
049: public static final String RULE_SERVICE_PROVIDER = "http://drools.org/";
050:
051: /** An instance of <code>RuleRuntimeImpl</code>. */
052: private RuleRuntime ruleRuntime;
053:
054: /** An instance of <code>RuleAdministratorImpl</code>. */
055: private RuleAdministrator ruleAdministrator;
056:
057: private RuleExecutionSetRepository repository;
058:
059: static {
060: try {
061: RuleServiceProviderManager.registerRuleServiceProvider(
062: RULE_SERVICE_PROVIDER,
063: RuleServiceProviderImpl.class);
064: } catch (ConfigurationException e) {
065: System.err
066: .println("Unable to regiser Rule Service Provider "
067: + RULE_SERVICE_PROVIDER);
068: }
069: }
070:
071: /**
072: * Create a new <code>RuleServiceProviderImpl</code>.
073: */
074: public RuleServiceProviderImpl() {
075: // no special initialization required
076: }
077:
078: /**
079: * Returns the RuleExecutionSetRepository
080: * @return
081: */
082: public synchronized RuleExecutionSetRepository getRepository() {
083: // Lazy loaded
084: if (this .repository == null) {
085: this .repository = new RuleExecutionSetRepository();
086: }
087: return this .repository;
088: }
089:
090: /**
091: * Returns a class instance of <code>RuleRuntime</code>. Specifically an
092: * instance of the Drools <code>RuleRuntimeImpl</code> is returned.
093: *
094: * @return an instance of <code>RuleRuntime</code>
095: */
096: public synchronized RuleRuntime getRuleRuntime() {
097: if (this .ruleRuntime == null) {
098: this .ruleRuntime = new RuleRuntimeImpl(getRepository());
099: }
100:
101: return this .ruleRuntime;
102: }
103:
104: /**
105: * Returns a class instance of <code>RuleAdministrator</code>.
106: * Specifically an instance of the Drools <code>RuleAdministratorImpl</code>
107: * is returned.
108: *
109: * @return an instance of <code>RuleAdministrator</code>
110: */
111: public synchronized RuleAdministrator getRuleAdministrator() {
112: // Lazy instantiate
113: if (this .ruleAdministrator == null) {
114: this .ruleAdministrator = new RuleAdministratorImpl(
115: getRepository());
116: }
117: return this.ruleAdministrator;
118: }
119: }
|