###############################################################################
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.
###############################################################################
# Solr configuration for custom OFBiz solr modules

# Webapp access details
solr.webapp.protocol=https
solr.webapp.domainName=localhost
# By default, port is same as OFBiz server, but can be overridden here.
solr.webapp.portOverride=
solr.webapp.path=/solr

# Global solr ECA service toggling
# Set to true to enable solr indexing using ECAs/SECAs.
# If set to false, solr services meant to be triggered by ECA/SECA will not execute and will "succeed" silently.
# This setting is equivalent to but overridden by the "ofbiz.solr.eca.enabled" system property.
solr.eca.enabled=false

# If true, connection errors during ECAs/SECAs are treated as warnings/failures rather than errors.
# If false, connection errors are treated as errors, and parent transactions are aborted.
solr.eca.treatConnectErrorNonFatal=true

# The username and password of a solr client to CRUD an index
solr.client.username=admin
solr.client.password=ofbiz

# Socket and connection timeout of a solr client
solr.client.socket.timeout=
solr.client.connection.timeout=

# If true, trust self signed certification, default is false.
solr.client.trust.selfsigned.cert=true
