Intro
This article is base of  JSF call EJB comp Demo , it maybe more deeper than that article, than one is just use SLSB, and here we will use all things except MB of EJB1.2, Now i will show you an whole EJB2.1+JSF+CMP case.
 
Background knowledge
In EJB, EntityBean should not be called directly, it should use in SessionBean,and for cilent when using SB, it should been use by which home interface, and call create() to create an SB handler, then you can use this handler do which provide, in other words, this EJB comp provide to you.
 
And to EntityBean, it should used in SessionBean, attention, which not need to create, becuse in you deploy, it register to App server's JDNI. So you just have get this resource,  in other words, you just need get which home hander.
 
When mention JDNI, make a not at here, in contianer it should use like it
==============
COMP_NAME="java:comp/env/ejb/UserSessionLocal";
==============
while outside should use
================
JNDI_NAME="UserSessionLocal";
================
 
Another question is we should remember all the time, if we want to add an method to comp, which should register in all interface file, it same between SB and EB, not forget this, if not, you will find in client side, you couldnot get your useful-method definded in comp.
 
Ok, follow me, let's have a look this  typical case.
 
Main Code and XML
 
EntityBean
UserBean.java
package ejbBeans; 
/** 
* Local home interface for UserData. 
*/
 
public interface UserLocalHome 
     extends javax.ejb.EJBLocalHome 

     public static final String COMP_NAME="java:comp/env/ejb/UserLocal"
     public static final String JNDI_NAME="UserLocal"

     public UserLocal create(java.lang.Integer id,java.lang.String name ) 
            throws javax.ejb.CreateException; 

     public UserLocal findByName(java.lang.String name) 
            throws javax.ejb.FinderException; 

     @SuppressWarnings("unchecked"
     public java.util.Collection findAll() 
            throws javax.ejb.FinderException; 

     public UserLocal findByPrimaryKey(java.lang.Integer pk) 
            throws javax.ejb.FinderException; 

}
 
UserLocalHome.java
package ejbBeans; 
/** 
* Local home interface for UserData. 
*/
 
public interface UserLocalHome 
     extends javax.ejb.EJBLocalHome 

     public static final String COMP_NAME="java:comp/env/ejb/UserLocal"
     public static final String JNDI_NAME="UserLocal"

     public UserLocal create(java.lang.Integer id,java.lang.String name ) 
            throws javax.ejb.CreateException; 

     public UserLocal findByName(java.lang.String name) 
            throws javax.ejb.FinderException; 

     @SuppressWarnings("unchecked"
     public java.util.Collection findAll() 
            throws javax.ejb.FinderException; 

     public UserLocal findByPrimaryKey(java.lang.Integer pk) 
            throws javax.ejb.FinderException; 

}
 
 
SessionBean
LocalUserSessionBean.java
package ejbBeans; 

import java.util.Collection; 

import javax.ejb.CreateException; 
import javax.ejb.EJBException; 
import javax.ejb.FinderException; 
import javax.ejb.RemoveException; 

import base.BaseSessionBean; 

public class LocalUserSessionBean extends BaseSessionBean{ 

  /** 
    *    
    */
 
  private static final long serialVersionUID = 5028163905841527500L; 
  /** 
         * The local home interface of user    entity bean. 
         */
 
  private UserLocalHome userdatahome=null
    
  /** 
         * Default create for SessionBean. 
         * 
         * @throws CreateException if bean instance can't be created 
         * @see org.ejbca.core.model.log.Admin 
         */
 
        public void ejbCreate() throws CreateException { 
          userdatahome=(UserLocalHome)getLocator().getLocalHome(UserLocalHome.COMP_NAME); 
        } 
        
        @SuppressWarnings("unchecked"
  public Collection getAllUser(){ 
          Collection usercollection=null
          try { 
      usercollection=userdatahome.findAll(); 
    } catch (FinderException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
    } 
          return usercollection; 
        } 
         
        /** 
         * Returns a user data source id, given it's user data source name 
         * 
         * @return the id or 0 if the user data source cannot be found. 
         * @ejb.transaction type="Supports" 
         * @ejb.interface-method view-type="both" 
         */
 
        public int getUserInfoId(String name) { 
                int returnval = 0; 
                if (userdatahome!=null || !userdatahome.equals(null)) { 
      System.out.println("userdatahome is not null"); 
    } 
                 
                try { 
                  //add    
                  /*UserLocal userdata=userdatahome.create(3,"testuser3"); 
                        System.out.println("userdata create"+userdata.getAddress()); 
                        */
 
                         
                        //read 
                  System.out.println("Test1: findByName"); 
                  System.out.println("name:"+name);                    
                        Integer id = (userdatahome.findByName(name)).getId(); 
                        returnval = id.intValue(); 
                        System.out.println("get id:"+id);    
                         
                        //read again                         
                        System.out.println("Test2: findByPrimaryKey"); 
                        UserLocal user=userdatahome.findByPrimaryKey(returnval); 
                        System.out.println("get address of id=:"+returnval+","+user.getAddress()); 
                         
                        //delete way1 
                        UserLocal userdemo=userdatahome.findByPrimaryKey(returnval); 
                        userdemo.remove(); 
                        System.out.println("delete user by id:"+returnval+"which name"+name); 
                         
                        //delete way2 - not pass test                         
//                        UserVO userobj=new UserVO(name); 
//                        userdatahome.remove(userobj); 
//                        System.out.println("delete userobj by name:"+name); 
                         
                } catch (FinderException e) { 
                  e.printStackTrace(); 
                } 
//             catch (CreateException e) { 
//      // TODO Auto-generated catch block 
//      e.printStackTrace(); 
//    } 
                catch (EJBException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
    } catch (RemoveException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
    } 

                return returnval; 
        } // getUserDataSourceId 
         
         
        /** 
         * Just a test ejb comp call method 
         * @param str 
         * @return 
         */
 
    public String setString(java.lang.String str ){    
     return "Do some job and return your enter str as:"+str; 
    } 

 
IUserSessionHome.java
/** 
*    
*/
 
package ejbBeans; 

/** 
* Home interface for UserAdminSession. 
*/
 
public interface IUserSessionHome 
     extends javax.ejb.EJBHome 

     public static final String COMP_NAME="java:comp/env/ejb/UserSession"
     public static final String JNDI_NAME="UserSession"

     public IUserSessionRemote create() 
            throws javax.ejb.CreateException,java.rmi.RemoteException; 


 
XML
 
ejb-jar.xml
<?xml version="1.0" encoding="UTF-8"?> 

<ejb-jar id="ejb-jar_1" xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/ejb-jar_2_1.xsd" version="2.1"> 

     <description><![CDATA[MyEJB generated by eclipse wtp xdoclet extension.]]></description> 
     <display-name>MyEJB</display-name> 

     <enterprise-beans> 

            <!-- Session Beans -->            
            

    <session id="Session_UserAdminSession"> 
                 <description><![CDATA[Administrates users in the database using User Entity Bean.]]></description> 


                 <ejb-name>UserSession</ejb-name> 
                 
                 <home>ejbBeans.IUserSessionHome</home> 
                 <remote>ejbBeans.IUserSessionRemote</remote> 
                 <local-home>ejbBeans.IUserSessionLocalHome</local-home> 
                 <local>ejbBeans.IUserSessionLocal</local> 
                 <ejb-class>ejbBeans.UserSessionSession</ejb-class> 
                 <session-type>Stateless</session-type> 
                 <transaction-type>Container</transaction-type> 
                    
                 <env-entry> 
                        <env-entry-name>DataSource</env-entry-name> 
                        <env-entry-type>java.lang.String</env-entry-type> 
                        <env-entry-value><![CDATA[java:/TestDS]]></env-entry-value> 
                 </env-entry> 
                 <env-entry> 
                        <description><![CDATA[Defines the JNDI name of the mail service used]]></description> 
                        <env-entry-name>MailJNDIName</env-entry-name> 
                        <env-entry-type>java.lang.String</env-entry-type> 
                        <env-entry-value><![CDATA[java:/EjbcaMail]]></env-entry-value> 
                 </env-entry>                    
                    
                 <ejb-local-ref id="EJBLocalRef_94"> 
                        <ejb-ref-name>ejb/UserLocal</ejb-ref-name> 
                        <ejb-ref-type>Entity</ejb-ref-type> 
                        <local-home>ejbBeans.UserLocalHome</local-home> 
                        <local>ejbBeans.UserLocal</local> 
                        <ejb-link>User</ejb-link> 
                 </ejb-local-ref> 
    </session> 
     
         <!-- 
             To add session beans that you have deployment descriptor info for, add 
             a file to your XDoclet merge directory called session-beans.xml that contains 
             the <session></session> markup for those beans. 
         
--> 

  <!-- Entity Beans -->    
  <entity id="ContainerManagedEntity_User"> 
                 <description><![CDATA[This enterprise bean entity represents a user]]></description> 
                 <display-name>UserEB</display-name> 

                 <ejb-name>User</ejb-name> 

                 <local-home>ejbBeans.UserLocalHome</local-home> 
                 <local>ejbBeans.UserLocal</local> 

                 <ejb-class>ejbBeans.UserBean</ejb-class> 
                 <persistence-type>Container</persistence-type> 
                 <prim-key-class>java.lang.Integer</prim-key-class> 
                 <reentrant>false</reentrant> 
                 <cmp-version>2.x</cmp-version> 
                 <abstract-schema-name>UserBean</abstract-schema-name> 
                 <cmp-field id="CMPAttribute_180"> 
                        <description><![CDATA[]]></description> 
                        <field-name>id</field-name> 
                 </cmp-field> 
                 <cmp-field id="CMPAttribute_181"> 
                        <description><![CDATA[]]></description> 
                        <field-name>name</field-name> 
                 </cmp-field> 
                 <cmp-field id="CMPAttribute_182"> 
                        <description><![CDATA[]]></description> 
                        <field-name>password</field-name> 
                 </cmp-field> 
                 <cmp-field id="CMPAttribute_183"> 
                        <description><![CDATA[]]></description> 
                        <field-name>phone</field-name> 
                 </cmp-field> 
                 <cmp-field id="CMPAttribute_184"> 
                        <description><![CDATA[]]></description> 
                        <field-name>address</field-name> 
                 </cmp-field> 
                 <primkey-field>id</primkey-field> 

                 <query> 
                        <description><![CDATA[findByName]]></description> 
                        <query-method> 
                             <method-name>findByName</method-name> 
                             <method-params> 
                                    <method-param>java.lang.String</method-param> 
                             </method-params> 
                        </query-method> 
                        <ejb-ql><![CDATA[SELECT OBJECT(a) from UserBean a WHERE a.name=?1]]></ejb-ql> 
                 </query> 
                 <query> 
                        <description><![CDATA[findAll]]></description> 
                        <query-method> 
                             <method-name>findAll</method-name> 
                             <method-params> 
                             </method-params> 
                        </query-method> 
                        <ejb-ql><![CDATA[SELECT OBJECT(a) from UserBean a]]></ejb-ql> 
                 </query> 
     <!-- Write a file named ejb-finders-UserBean.xml if you want to define extra finders. --> 

            </entity>     
                    
     </enterprise-beans> 
        
     <!-- assembly-descriptor --> 
     <assembly-descriptor> 
         <!--    container-transaction --> 
         <container-transaction id="MethodTransaction_273"> 
             <method id="MethodElement_297"> 
                    <ejb-name>UserSession</ejb-name> 
                     <method-name>*</method-name> 
                </method> 
                <trans-attribute>Required</trans-attribute> 
         </container-transaction> 
            
         <container-transaction id="MethodTransaction_305"> 
             <method id="MethodElement_329"> 
                    <ejb-name>UserSession</ejb-name> 
                    <method-intf>Local</method-intf> 
                    <method-name>setString</method-name> 
                    <method-params> 
                         <method-param>java.lang.String</method-param> 
                    </method-params> 
             </method> 
             <trans-attribute>Supports</trans-attribute> 
        </container-transaction> 
         
         <container-transaction id="MethodTransaction_316"> 
             <method id="MethodElement_340"> 
                    <ejb-name>User</ejb-name> 
                     <method-name>*</method-name> 
                </method> 
                <trans-attribute>Required</trans-attribute> 
         </container-transaction> 
        </assembly-descriptor> 
        
</ejb-jar>
 
Jboss.xml
<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE jboss PUBLIC "-//JBoss//DTD JBOSS 3.2//EN" "http://www.jboss.org/j2ee/dtd/jboss_3_2.dtd"> 

<jboss> 
  <unauthenticated-principal>nobody</unauthenticated-principal> 

  <enterprise-beans> 
    
    <!-- 
             To add beans that you have deployment descriptor info for, add 
             a file to your XDoclet merge directory called jboss-beans.xml that contains 
             the <session></session>, <entity></entity> and <message-driven></message-driven> 
             markup for those beans. 
         
--> 
            
         <entity> 
                 <ejb-name>User</ejb-name> 
                 <local-jndi-name>UserLocal</local-jndi-name> 

                <method-attributes> 
                </method-attributes> 

            </entity> 
             
    <session>     
                 <ejb-name>UserSession</ejb-name> 
                 <jndi-name>UserSession</jndi-name> 
                 <local-jndi-name>UserSessionLocal</local-jndi-name> 

                <method-attributes> 
                </method-attributes>                 
            </session> 
             
  </enterprise-beans> 

</jboss>
 
jbosscmp-jdbc.xml
<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE jbosscmp-jdbc PUBLIC "-//JBoss//DTD JBOSSCMP-JDBC 3.2//EN" "http://www.jboss.org/j2ee/dtd/jbosscmp-jdbc_3_2.dtd"> 

<jbosscmp-jdbc> 
  <defaults> 
    <datasource>java:/TestDS</datasource> 
    <datasource-mapping>mySQL</datasource-mapping> 
  </defaults> 

  <enterprise-beans> 

    <!-- 
      To add beans that you have deployment descriptor info for, add a file 
      to your XDoclet merge directory called jbosscmp-jdbc-beans.xml that 
      contains the <entity></entity> markup for those beans. 
    
-->     
    <!-- jboss 5.0.1 features --> 
    <!-- optimistic locking does not express the exclusions needed --> 
    <entity> 
      <ejb-name>User</ejb-name> 
      <table-name>user</table-name> 

      <cmp-field> 
        <field-name>name</field-name> 
      </cmp-field> 
      <cmp-field> 
        <field-name>password</field-name> 
      </cmp-field> 
      <cmp-field> 
        <field-name>id</field-name> 
        <column-name>id</column-name> 
      </cmp-field> 
      <cmp-field> 
        <field-name>phone</field-name> 
      </cmp-field> 
      <cmp-field> 
        <field-name>address</field-name> 
      </cmp-field>        
    </entity>     
  </enterprise-beans> 
    
  <!--    
  To add jboss relationships for beans not managed by XDoclet, add a 
      file to your XDoclet merge directory called 
      jbosscmp-jdbc-relationships.xml that contains the 
      <ejb-relation></ejb-relation> markups for those beans. 
  
--> 
    
  <!-- 
  <relationships> 
     
    <ejb-relation> 
      <ejb-relation-name>AdminGroupDataToAccessRules</ejb-relation-name> 

      <ejb-relationship-role> 
        <ejb-relationship-role-name>AdminGroupData</ejb-relationship-role-name> 
        <key-fields> 
          <key-field> 
            <field-name>primKey</field-name> 
            <column-name>AdminGroupData_accessRules</column-name> 
          </key-field> 
        </key-fields> 

      </ejb-relationship-role> 
      <ejb-relationship-role> 
        <ejb-relationship-role-name>AccessRulesData</ejb-relationship-role-name> 
        <key-fields /> 

      </ejb-relationship-role> 
    </ejb-relation> 
     
        
     
  </relationships> 
  
--> 
</jbosscmp-jdbc> 
 
JSF
 
Main MBean
LoginMBean.java
public class LoginMBean { 

  private static IUserSessionHome usersessionhome = null
  private IUserSessionRemote usersession = null
  private List userlist = new ArrayList(); 
    

  /** 
    * get session bean handler 
    */
 
  public void initialize() { 
    InitialContext ctx; 
    try { 
      ctx = new InitialContext(); 
      usersessionhome = (IUserSessionHome) PortableRemoteObject.narrow( 
          ctx.lookup(IUserSessionHome.JNDI_NAME), 
          IUserSessionHome.class); 

      usersession = usersessionhome.create(); 

    } catch (NamingException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
    } catch (RemoteException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
    } catch (CreateException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
    } 
  } 

  public int getIdByUserName() throws NamingException{ 
    InitialContext ctx; 
    int id=0; 
    try { 
      ctx = new InitialContext(); 
      usersessionhome = (IUserSessionHome) PortableRemoteObject.narrow( 
          ctx.lookup(IUserSessionHome.JNDI_NAME), 
          IUserSessionHome.class); 

      usersession = usersessionhome.create(); 
      id=usersession.getUserInfoId("daniel"); 

    } catch (RemoteException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
    } catch (CreateException e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
    } 
    return id; 
  } 
}
 
 
Index.jsp
<%@ taglib uri="http://java.sun.com/jsf/core" prefix="f" %> 
<%@ taglib uri="http://java.sun.com/jsf/html" prefix="h" %> 
<%@page contentType="text/html; charset=utf-8" %> 
<!doctype html public "-//w3c//dtd html 4.0 transitional//en"> 
<html> 
<head> 
  <title> DataTable </title>    
</head> 

  <body> 
    <f:view>            
    <h:outputText value="#{loginMean.idByUserName}" /> 
     
     

     
    </f:view> 
  </body> 
</html>
 
 
Source Code for DownLoad
 
More Contact me by danni-505#hotmail.com