板桥上文章上的疑惑:一个JAVABEAN的JNDI问题。问了几个人了,都说不知道。

众所周直DAO模式了
但是DAO模式里的FACTORY模式中有这么个代码
Context ctx=new InitialContext();
String className=(String)ctx.lookup("java:comp/env/CgjhDaoClass");
cgjhDao=(CgjhDao)Class.forName(className).newInstance();
这个cgjhDao只是一个JAVABEAN而已,为什么用JNDI的方式去查找?
最重要的是JAVABEAN一般不用JNDI的这种方式去查找,这个JAVABEAN的JNDI是哪里来的呀?在WEBLOGIC这样的应用服务器上配的,还是在自己专门些的程序去绑定的??
DAO模式的代码 http://www.jdon.com/designpatterns/ejb.htm

呵呵,头一次看见这么使用jndi的。原来是把Bean的实现类的名字绑定到jndi了。

java:comp/env/CgjhDaoClass绑定的是一个daoImp名字,这样当数据库发生变化的时候(比如从mysql移植到oracle),只需添加一个daoOracleImp,然后修改配置文件,将java:comp/env/CgjhDaoClass指向daoOracleImp就可以了,其他调用的程序不用变动,程序的扩展性好。

这个类似JavaBean中的工厂模式,相同于Jive中的ForumFactory做法。

那能不能告诉我具体是怎么配置的呀?比如用WEBLOGIC。

ejb-jar.xml中
<session>
<env-entry>
<env-entry-name>CgjhDaoClass</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>com.yz.dao.CgjhDaoClass</env-entry-value>
</env-entry>
</session>

ejb-jar.xml文件
<session>
<env-entry>
<env-entry-name>CgjhDaoClass</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>com.yz.dao.CgjhDaoClass</env-entry-value>
</env-entry>
</session>