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

为什么引用ejb的时候有的时候用:。。。lookup("userejb");
有的书却用。。。。lookup("java:cmp/env/userejb");
前一个好象是jndi引用,后面一个是参考引用,具体有什么区别呢,据说参考应用是ejb1.0以后增加的特性
前者是
在应用服务器的JNDI服务中定义的名字,它与一个class实例绑定在一起,所以通常是
UserEjb instance = context.lookup("userejb");

后者是
在ejb.xml文件中定义的名字

userejb
java.lang.String
userejb

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

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