jndi与java reference到底有什么区别?

为什么引用ejb的时候有的时候用:。。。lookup("userejb");
有的书却用。。。。lookup("java:cmp/env/userejb");
前一个好象是jndi引用,后面一个是参考引用,具体有什么区别呢,据说参考应用是ejb1.0以后增加的特性

前者是
在应用服务器的JNDI服务中定义的名字,它与一个class实例绑定在一起,所以通常是
UserEjb instance = context.lookup("userejb");

后者是
在ejb.xml文件中定义的名字
<env-entry>
<env-entry-name>userejb</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>userejb</env-entry-value>
</env-entry>

userejb仅仅对应的字符串,通常是这样调用
String userejbName = context.lookup(("userejb");
UserEjb instantce = (UserEjb)Class.forName(userejbName);

参考应用是 reference name,初学者建议先不使用这种方式。