###############################################################################
# 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: \u30e2\u30b8\u30e5\u30fc\u30eb {1} \u3067\u3001ejb-ref {0} \u5185\u306e ''ejb-ref-name'' \u30a8\u30ec\u30e1\u30f3\u30c8\u304c\u7121\u52b9\u3067\u3059\u3002
#EXPLANATION None.
#USERACTION None.

# --------------------------------
ERROR_EAR_INVALID_EREFTYPE=CHKJ3010E: \u30e2\u30b8\u30e5\u30fc\u30eb {1} \u3067\u3001ejb-ref {0} \u5185\u306e ''ejb-ref-type'' \u30a8\u30ec\u30e1\u30f3\u30c8\u304c\u7121\u52b9\u3067\u3059\u3002
#EXPLANATION None.
#USERACTION None.

ERROR_EAR_MISSING_EREFTYPE=CHKJ3014E: \u30e2\u30b8\u30e5\u30fc\u30eb {1} \u3067\u3001ejb-ref {0} \u5185\u306e ''ejb-ref-type'' \u30a8\u30ec\u30e1\u30f3\u30c8\u304c\u6b20\u843d\u3057\u3066\u3044\u307e\u3059\u3002


# --------------------------------
ERROR_EAR_MISSING_EREFHOME=CHKJ3011E: \u30e2\u30b8\u30e5\u30fc\u30eb {1} \u3067\u3001\u30db\u30fc\u30e0\u30fb\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u304c ejb-ref {0} \u30a8\u30ec\u30e1\u30f3\u30c8\u306b\u3042\u308a\u307e\u305b\u3093\u3002
#EXPLANATION None.
#USERACTION None.

# --------------------------------
ERROR_EAR_MISSING_EREFREMOTE=CHKJ3012E: \u30e2\u30b8\u30e5\u30fc\u30eb {1} \u3067\u3001\u30ea\u30e2\u30fc\u30c8\u30fb\u30a4\u30f3\u30bf\u30fc\u30d5\u30a7\u30fc\u30b9\u304c ejb-ref {0} \u30a8\u30ec\u30e1\u30f3\u30c8\u306b\u3042\u308a\u307e\u305b\u3093\u3002
#EXPLANATION None.
#USERACTION None.

# --------------------------------
ERROR_EAR_MISSING_EJB_ROLE=CHKJ2827W: ''security-role-ref'' \u30a8\u30ec\u30e1\u30f3\u30c8 {0} \u306f\u3001\u30a2\u30d7\u30ea\u30b1\u30fc\u30b7\u30e7\u30f3\u8a18\u8ff0\u5b50\u3067 ''role-link'' \u30a8\u30ec\u30e1\u30f3\u30c8\u3092\u5b9a\u7fa9\u3057\u3066\u3044\u307e\u3059\u304c\u3001''security-role'' \u30a8\u30ec\u30e1\u30f3\u30c8\u3092\u5b9a\u7fa9\u3057\u3066\u3044\u307e\u305b\u3093\u3002
#EXPLANATION None.
#USERACTION None.

# --------------------------------
ERROR_EAR_DUPLICATE_RESREF=CHKJ3013E: {0} \u3068\u3044\u3046\u540d\u524d\u306e ''resource-ref'' \u30a8\u30ec\u30e1\u30f3\u30c8\u304c\u91cd\u8907\u3057\u3066\u3044\u307e\u3059\u3002
#EXPLANATION None.
#USERACTION None.

# new string added for version 5 WSAD
UNRESOLVED_EJB_REF_WARN_=IWAE0034W EJB \u30ea\u30f3\u30af\u30fb\u30a8\u30ec\u30e1\u30f3\u30c8 {0} \u304c\u30e2\u30b8\u30e5\u30fc\u30eb {1} \u304a\u3088\u3073 EAR {2} \u3067\u89e3\u6c7a\u4e0d\u53ef\u80fd\u3067\u3059\u3002

ERROR_EAR_DUPLICATE_SERVICEREF=CHKJ3015E: {0} \u3068\u3044\u3046\u540d\u524d\u306e ''service-ref'' \u30a8\u30ec\u30e1\u30f3\u30c8\u304c\u91cd\u8907\u3057\u3066\u3044\u307e\u3059\u3002
ERROR_EAR_DUPLICATE_SECURITYROLEREF=CHKJ3016E: {0} \u3068\u3044\u3046\u540d\u524d\u306e ''security role-ref'' \u30a8\u30ec\u30e1\u30f3\u30c8\u304c\u91cd\u8907\u3057\u3066\u3044\u307e\u3059\u3002
ERROR_EAR_DUPLICATE_EJBREF=CHKJ3017E: {0} \u3068\u3044\u3046\u540d\u524d\u306e ''ejb-ref'' \u30a8\u30ec\u30e1\u30f3\u30c8\u304c\u91cd\u8907\u3057\u3066\u3044\u307e\u3059\u3002
ERROR_EAR_DUPLICATE_RESENVREF=CHKJ3018E: {0} \u3068\u3044\u3046\u540d\u524d\u306e ''resource environment-ref'' \u30a8\u30ec\u30e1\u30f3\u30c8\u304c\u91cd\u8907\u3057\u3066\u3044\u307e\u3059\u3002
ERROR_EAR_DUPLICATE_MESSSAGEDESTINATIONREF=CHKJ3019E: {0} \u3068\u3044\u3046\u540d\u524d\u306e ''message destination-ref'' \u30a8\u30ec\u30e1\u30f3\u30c8\u304c\u91cd\u8907\u3057\u3066\u3044\u307e\u3059\u3002




