/**
 * Copyright (c) 2010, 2019 Mia-Software and others.
 *    All rights reserved. This program and the accompanying materials
 *    are made available under the terms of the Eclipse Public License v2.0
 *    which accompanies this distribution, and is available at
 *    http://www.eclipse.org/legal/epl-v20.html
 *    
 *    Contributors:
 *    
 *    	   Nicolas Guyomar (Mia-Software) - initial API and implementation
 */
package org.eclipse.modisco.jee.ejbjar.EjbJar21;


/**
 * <!-- begin-user-doc -->
 * A representation of the model object '<em><b>Ejb Ref Type Type</b></em>'.
 * <!-- end-user-doc -->
 *
 * <!-- begin-model-doc -->
 * 
 * 
 * 	The ejb-ref-typeType contains the expected type of the
 * 	referenced enterprise bean.
 * 
 * 	The ejb-ref-type designates a value
 * 	that must be one of the following:
 * 
 * 	    Entity
 * 	    Session
 * 
 *       
 * <!-- end-model-doc -->
 *
 *
 * @see org.eclipse.modisco.jee.ejbjar.EjbJar21.EjbJar21Package#getEjbRefTypeType()
 * @model extendedMetaData="name='ejb-ref-typeType' kind='simple'"
 * @generated
 */
public interface EjbRefTypeType extends org.eclipse.modisco.jee.ejbjar.EjbJar21.String {
} // EjbRefTypeType
