#
# Copyright (c) 2010, 2018 Oracle and/or its affiliates. All rights reserved.
#
# This program and the accompanying materials are made available under the
# terms of the Eclipse Public License v. 2.0, which is available at
# http://www.eclipse.org/legal/epl-2.0.
#
# This Source Code may also be made available under the following Secondary
# Licenses when the conditions for such availability set forth in the
# Eclipse Public License v. 2.0 are satisfied: GNU General Public License,
# version 2 with the GNU Classpath Exception, which is available at
# https://www.gnu.org/software/classpath/license.html.
#
# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0 WITH Classpath-exception-2.0
#

jdbc.exc_jb_val=RAR5103 : Error setting java bean value : {0}
RAR5103.diag.cause.1=The pool parameters in the domain.xml are improper.
RAR5103.diag.cause.2=The application server process does not have enough permissions to access the DataSource class
RAR5103.diag.check.1=Check that the pool parameters specified in the domain.xml are correct. For example check that parameters that expect numeric values are numerals
RAR5103.diag.check.2=Check that the application server process has permissions to read the directory where the class resides
jdbc.exc_nfe=RAR5104 : Not a valid type for this method : {0}
RAR5104.diag.cause.1=The pool parameters in the domain.xml are improper.
RAR5104.diag.check.1=Check that the pool parameters specified in the domain.xml are correct. For example check that parameters that expect numeric values are numerals
jdbc.exc_cnfe_ds=RAR5099 : Wrong class name or classpath for Datasource Object
RAR5099.diag.cause.1=Classpath is not properly set in the domain.xml
RAR5099.diag.cause.2=The application server process does not have read permissions on the directory that holds the classes/jar
RAR5099.diag.check.1=Check if the server classpath specified in the java-config element in the domain.xml has an entry for the jar containing this class
RAR5099.diag.check.2=Check that the directory where the classes/jars reside have read permission for the application server process
jdbc.exc_inst=RAR5101 : Exception while instantiating {0}
RAR5101.diag.cause.1=The appserver process does not have read access to the directory where this class resides
RAR5101.diag.cause.2=The application server process does not have security permissions to access this code
RAR5101.diag.check.1=Check if the application server has read permissions on the directory where this class/jar containing this class resides
RAR5101.diag.check.2=Check if your security manager policy is configured properly
jdbc.exc_acc_inst=RAR5102 : Access error while instantiating {0}
RAR5102.diag.cause.1=The application server process do not have permission to access the code base where the class resides
RAR5102.diag.cause.2=This is an internal server/JVM error. Please contact Sun Microsystems with the complete error log
RAR5102.diag.check.1=See if the application server process has permission to read the directory where the class/jar resides
RAR5102.diag.check.2=Check if all relevant JVM patches are installed on your machine. Please contact Sun Microsystems with the complete error log
statement.leak.detector_reclaim_statement_failure=RAR9000 : Failure while reclaiming statement for pool : {0}. Exception : {1}
RAR9000.diag.cause.1=Database could be inaccessible.
RAR9000.diag.check.1=Check if the database is accessible.
jdbc.invalid_operation.close_on_completion=Close on completion on Statement object is not permitted when Statement leak detection is turned on.
jdbc.ex_stmt_wrapper=RAR9009 : Exception while invoking method. Exception : {0}
RAR9009.diag.cause.1=Statement object could be closed before invoking this method
RAR9009.diag.cause.2=Method is not implemented in the JDBC driver
RAR9009.diag.check.1=Check if the method is not called on a closed Statement object
RAR9009.diag.check.2=Check if the JDBC driver vendor implements this method as expected
jdbc.ex_get_object=RAR9010 : Exception while doing getObject. Exception : {0}
RAR9010.diag.cause.1=Conversion from SQL type of the parameter to the requested Java data type not supported
RAR9010.diag.cause.2=JDBC driver does not support this method
RAR9010.diag.check.1=Check if the JDBC driver vendor implements this method as expected
jdbc.ex_dmd_wrapper=RAR9011 : Exception while invoking method on a DatabaseMetaData object. Exception : {0}
RAR9011.diag.cause.1=Database is inaccessible
RAR9011.diag.check.1=Check if database is accessible.

#------------------------------------------------------------------------------------------------------
#RAR9000 till RAR9500 reserved for jdbc-ra LogStrings.
#Please increment RAR IDs by one for any new additional messages added here.
#Add any new properties above these comments.
#------------------------------------------------------------------------------------------------------

#------------------------------------------------------------------------------------------------------
#RAR8010 till RAR8500 reserved for connectors-runtime LogStrings.
#RAR8501 till RAR8700 reserved for connectors-inbound-runtime LogStrings.
#RAR8701 till RAR8850 reserved for connectors-internal-api LogStrings.
#RAR8850 till RAR8999 reserved for work-management LogStrings.
#RAR9000 till RAR9500 reserved for jdbc-ra LogStrings.
#------------------------------------------------------------------------------------------------------
