###############################################################################
# Copyright (c) 2001, 2004 IBM Corporation and others.
# All rights reserved. This program and the accompanying materials
# are made available under the terms of the Eclipse Public License v1.0
# which accompanies this distribution, and is available at
# http://www.eclipse.org/legal/epl-v10.html
# 
# Contributors:
# IBM Corporation - initial API and implementation
###############################################################################
#This properties file hold all the externalised strings for eTools J2EE Validation project
# Validation project
#
# Messages should be according to the format at:
#     http://hany.austin.ibm.com/messages/index.html
#
# Briefly:
#     MESSAGE_ID=<ComponentPrefix><MessageNumber><TypeCode>: <MessageText>
#
# The prefix for this component is:
#     CHKJ (IBM WebSphere Validation)
#
# Note the ": " that appears between the type code and the message text.
#
# :Begin: WebSphere Quality Validation Information :Begin:
#COMPONENTPREFIX CHKJ
#COMPONENTNAMEFOR CHKJ IBM WebSphere Validation
#CMVCPATHNAME ncf/src/java/com/ibm/websphere/validation/erefvalidation.properties
# :End: WebSphere Quality Validation Information :End:
#
# 14-October-2001:
#

# --------------------------------
ERROR_EAR_MISSING_EREFNAME=CHKJ3009E: nel modulo {1}, l''elemento "ejb-ref-name" in ejb-ref: {0} non \u00e8 valido.
#EXPLANATION None.
#USERACTION None.

# --------------------------------
ERROR_EAR_INVALID_EREFTYPE=CHKJ3010E: nel modulo {1}, l''elemento "ejb-ref-type" in ejb-ref: {0} non \u00e8 valido.
#EXPLANATION None.
#USERACTION None.

ERROR_EAR_MISSING_EREFTYPE=CHKJ3014E: nel modulo {1}, l''elemento "ejb-ref-type" in ejb-ref: {0} risulta mancante.


# --------------------------------
ERROR_EAR_MISSING_EREFHOME=CHKJ3011E: nel modulo {1}, l''interfaccia locale risulta mancante dall''elemento ejb-ref: {0}.
#EXPLANATION None.
#USERACTION None.

# --------------------------------
ERROR_EAR_MISSING_EREFREMOTE=CHKJ3012E: nel modulo {1}, l''interfaccia remota risulta mancante dall''elemento ejb-ref: {0}.
#EXPLANATION None.
#USERACTION None.

# --------------------------------
ERROR_EAR_MISSING_EJB_ROLE=CHKJ2827W: l'elemento ''security-role-ref'' {0} definisce l'elemento ''role-link'' ma non gli elementi ''security-role'' nel descrittore dell'applicazione.
#EXPLANATION None.
#USERACTION None.

# --------------------------------
ERROR_EAR_DUPLICATE_RESREF=CHKJ3013E: Elemento ''resource-ref'' denominato {0}.
#EXPLANATION None.
#USERACTION None.

# new string added for version 5 WSAD
UNRESOLVED_EJB_REF_WARN_=IWAE0034W L''elemento di collegamento EJB {0} risulta non risolvibile nel modulo {1} e nell''EAR {2}.

ERROR_EAR_DUPLICATE_SERVICEREF=CHKJ3015E: Elemento ''service-ref'' denominato {0}.
ERROR_EAR_DUPLICATE_SECURITYROLEREF=CHKJ3016E: Elemento ''security role-ref'' denominato {0}.
ERROR_EAR_DUPLICATE_EJBREF=CHKJ3017E: Elemento ''ejb-ref'' denominato {0}.
ERROR_EAR_DUPLICATE_RESENVREF=CHKJ3018E: Elemento ''resource environment-ref'' denominato {0}.
ERROR_EAR_DUPLICATE_MESSSAGEDESTINATIONREF=CHKJ3019E: Elemento ''message destination-ref'' denominato {0}.




