###############################################################################
# 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\uff1a\u5728\u6a21\u5757 {1} \u4e2d\uff0cejb-ref {0} \u4e2d\u7684\u201cejb-ref-name\u201d\u5143\u7d20\u65e0\u6548\u3002
#EXPLANATION None.
#USERACTION None.

# --------------------------------
ERROR_EAR_INVALID_EREFTYPE=CHKJ3010E\uff1a\u5728\u6a21\u5757 {1} \u4e2d\uff0cejb-ref {0} \u4e2d\u7684\u201cejb-ref-type\u201d\u5143\u7d20\u65e0\u6548\u3002
#EXPLANATION None.
#USERACTION None.

ERROR_EAR_MISSING_EREFTYPE=CHKJ3014E\uff1a\u5728\u6a21\u5757 {1} \u4e2d\uff0cejb-ref {0} \u4e2d\u7684\u201cejb-ref-type\u201d\u5143\u7d20\u4e22\u5931\u3002


# --------------------------------
ERROR_EAR_MISSING_EREFHOME=CHKJ3011E\uff1a\u5728\u6a21\u5757 {1} \u4e2d\uff0cejb-ref {0} \u5143\u7d20\u4e2d\u4e22\u5931\u4e86 home \u63a5\u53e3\u3002
#EXPLANATION None.
#USERACTION None.

# --------------------------------
ERROR_EAR_MISSING_EREFREMOTE=CHKJ3012E\uff1a\u5728\u6a21\u5757 {1} \u4e2d\uff0cejb-ref {0} \u5143\u7d20\u4e2d\u4e22\u5931\u4e86\u8fdc\u7a0b\u63a5\u53e3\u3002
#EXPLANATION None.
#USERACTION None.

# --------------------------------
ERROR_EAR_MISSING_EJB_ROLE=CHKJ2827W\uff1a\u201csecurity-role-ref\u201d\u5143\u7d20 {0} \u5b9a\u4e49\u4e86\u201crole-link\u201d\u5143\u7d20\uff0c\u4f46\u5728\u5e94\u7528\u7a0b\u5e8f\u63cf\u8ff0\u7b26\u4e2d\u6ca1\u6709\u201csecurity-role\u201d\u5143\u7d20\u3002
#EXPLANATION None.
#USERACTION None.

# --------------------------------
ERROR_EAR_DUPLICATE_RESREF=CHKJ3013E\uff1a\u540d\u4e3a {0} \u7684\u201cresource-ref\u201d\u5143\u7d20\u91cd\u590d\u3002
#EXPLANATION None.
#USERACTION None.

# new string added for version 5 WSAD
UNRESOLVED_EJB_REF_WARN_=IWAE0034W \u5728\u6a21\u5757 {1} \u548c EAR {2} \u4e2d\u4e0d\u80fd\u89e3\u6790 EJB \u94fe\u63a5\u5143\u7d20 {0}\u3002

ERROR_EAR_DUPLICATE_SERVICEREF=CHKJ3015E\uff1a\u540d\u4e3a {0} \u7684\u201cservice-ref\u201d\u5143\u7d20\u91cd\u590d\u3002
ERROR_EAR_DUPLICATE_SECURITYROLEREF=CHKJ3016E\uff1a\u540d\u4e3a {0} \u7684\u201csecurity role-ref\u201d\u5143\u7d20\u91cd\u590d\u3002
ERROR_EAR_DUPLICATE_EJBREF=CHKJ3017E\uff1a\u540d\u4e3a {0} \u7684\u201cejb-ref\u201d\u5143\u7d20\u91cd\u590d\u3002
ERROR_EAR_DUPLICATE_RESENVREF=CHKJ3018E\uff1a\u540d\u4e3a {0} \u7684\u201cresource environment-ref\u201d\u5143\u7d20\u91cd\u590d\u3002
ERROR_EAR_DUPLICATE_MESSSAGEDESTINATIONREF=CHKJ3019E\uff1a\u540d\u4e3a {0} \u7684\u201cmessage destination-ref\u201d\u5143\u7d20\u91cd\u590d\u3002




