dataSource = (DataSource) ctx.lookup("java:comp/env/DataSource");dataSource是你的数据源变量,
(DataSource)的意思是向下转型,因为ctx.lookup返回的是Object类型.
ctx是从weblogic服务器返回的Context对象,
"java:comp/env/DataSource"是DataSource的路径.BMP我还真不懂...一般实际开发中不会用到BMP的,自己有兴趣研究倒不错.

解决方案 »

  1.   

    飞思那帮家伙其实没水平写ejb,建议你看<Mastering Enterprise JavaBean 2>.
      

  2.   

    你用的是weblogic吧
    那lookup的后面应该是"jndn"名字呀!
    而且dataSource = (DataSource) ctx.lookup("java:comp/env/DataSource");
    因改写成dataSource ds= (DataSource) ctx.lookup("jndn name");呀
    至于dataSource是你的数据源变量,
    (DataSource)的意思是向下转型,因为ctx.lookup返回的是Object类型.
    ctx是从weblogic服务器返回的Context对象,
    "java:comp/env/DataSource"是DataSource的路径.
    我自己也对BMP也不了解.很抱歉!
      

  3.   

    java:comp/env和JNDI是不同的,很多人都有一些混淆,甚至认为这个就是JNDI名称。其实,java:comp/env 是环境命名上下文(environment naming context(ENC),是在EJB规范1.1以后引入的,引入这个是为了解决原来JNDI查找所引起的冲突问题。比如你要把一个EJB的Jar包部署到两台Server,而这两台Server共享一台JNDI名字空间,此时问题就出来了,因为JNDI名字空间要求JNDI名字必须唯一。使用ENC查找,将可以避免这个冲突,EJB或者J2EE应用的移植性也提高了。ENC是一个引用,引用是用于定位企业应用程序的外部资源的逻辑名。引用是在应用程序部署描述符文件中定义的。在部署时,引用被绑定到目标可操作环境中资源的物理位置( JNDI 名)。使用ENC是把对其它资源的JNDI查找的硬编码解脱出来,通过配置这个引用可以在不修改代码的情况下,将引用指向不同的EJB(JNDI)。 在J2EE中的引用常用的有:---------JDBC 数据源引用在 java:comp/env/jdbc 子上下文中声明 
    ---------JMS 连接工厂在 java:comp/env/jms 子上下文中声明
    ---------JavaMail 连接工厂在 java:comp/env/mail 子上下文中声明 
    ---------URL 连接工厂在 java:comp/env/url 子上下文中声明
      

  4.   

    感谢二位的讲解,星期一上班我再试试后给二位结贴wingtrace(暮寒.烟灰.风化物) 说:“一般实际开发中不会用到BMP的”,因为我没做过EJB项目,只是自已闲时练练,我不知商业(实际)开发是用哪方面技术,你能说说你开发过的项目情况吗?
    我大致浏览宠物店的例子,我想问实际开发中前端表现界面一般是JSP页面吗,有没有全用JAVA UI设计的,也就是swing开发的,就类似宠物店administ...那个界面一样.
      

  5.   

    建议楼主在实际中,注意把连接数据库的这些代码提出,写一方法..这样应该比较好一点....正如上面大侠说的一样......
                   我的建议:
          1,引入import 时,先将javax.naming.*引入..这样在NEW时就好一些...
            再定义一私有成员变量,,就以上,
            可以这样定义:private EntityContext context;  上下文环境
                         private Connection con;连接
            private String dbName="java:comp/env/jdbc/DataSource";
          这样子,在写代码,好像有点意思,也有点感觉..(纯属个人感觉,不知大侠们有没有).    2.  public void setEntityContext(EntityContext entityContext) {
                      this.entityContext=context;//(.......!!!!!!!!!!!!!)
                      try
                      {
                       makeConnection();
                       }  
                      catch(Exception ex)
                      {
                           throw new EJBException("*********************"+ex.getMessage());
                      }               
                          
    }        //建议将数据库连接部分独立起来,好调用,程序也好看懂,当然还好重用...
           private void makeConnection() throws NamingException,SQLException
            {  
                 InitialContext ic=new InitialContext();//构造
                 DataSource ds=(DataSource)ic.lookup(dbName);
                 con.ds.getConnection();
            }
                              
    主要是看楼主要结贴了,,所以我也想分点分....yousnow(流浪的刺猬) ,wingtrace(暮寒.烟灰.风化物) 两老兄都讲的差不多了..俺就不多说了...  注意,你的那程序DataSource 那里有错呀......   
                 画蛇添足之作,只想要点分....................呵呵 ....
      

  6.   

    //建议将数据库连接部分独立起来,好调用,程序也好看懂,当然还好重用...
           private void makeConnection() throws NamingException,SQLException
            {  
                 InitialContext ic=new InitialContext();//构造
                 DataSource ds=(DataSource)ic.lookup(dbName);
                 con=ds.getConnection();
            }
    把个=写个.去了...不好意思...刚看刚发现...呵呵.
      

  7.   

    各位大侠,不行啊,今天作了一个客户端测了一下,出现
    java.rmi.RemoteException: Error during setXXXContext: ; nested exception is: 
    javax.ejb.EJBException: Error Lookupjavax.naming.NameNotFoundException: Unable to resolve 'app/ejb/Test2.jar#Employees1/comp/env/jdbc/SQLServer' Resolved: 'app/ejb/Test2.jar#Employees1/comp/env' Unresolved:'jdbc' ; remaining name 'jdbc/SQLServer'
    我是这么写的
    public void setEntityContext(EntityContext entityContext) {
        this.entityContext = entityContext;
        try {
          javax.naming.Context ctx = new javax.naming.InitialContext();
          dataSource = (DataSource) ctx.lookup ("java:comp/env/jdbc/SQLServer");    }
       //("java:comp/env/jdbc/datasources/SQLServer");也试过     
           //dataSource是变量  
        catch (Exception e) {
          throw new EJBException("Error Lookup" + e.toString());
        }  } SQLServer是我在WebLogic7设的JNDI JNDI及import schema from database时的JNDI NAME
    我在学CMP的时候是通过的。当然CMP不用写上面的代码。以下是jndi-definitions.xml的内容<?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE jndi-definitions PUBLIC "-//Borland Corporation//DTD JndiDefinitions//EN" "http://www.borland.com/devsupport/appserver/dtds/jndi-definitions.dtd">
    <jndi-definitions>
        <visitransact-datasource>
            <jndi-name>serial://datasources/SQLServer</jndi-name>
            <driver-datasource-jndiname>serial://datasources/driverSQLServer</driver-datasource-jndiname>
            <property>
                <prop-name>connectionType</prop-name>
                <prop-type>Enumerated</prop-type>
                <prop-value>Direct</prop-value>
            </property>
            <property>
                <prop-name>dialect</prop-name>
                <prop-type>Enumerated</prop-type>
                <prop-value>mssqlserver</prop-value>
            </property>
        </visitransact-datasource>
        <driver-datasource>
            <jndi-name>serial://datasources/driverSQLServer</jndi-name>
            <datasource-class-name>com.inprise.visitransact.jdbc1w2.InpriseConnectionPoolDataSource</datasource-class-name>
            <property>
                <prop-name>user</prop-name>
                <prop-type>String</prop-type>
                <prop-value>sa</prop-value>
            </property>
            <property>
                <prop-name>password</prop-name>
                <prop-type>String</prop-type>
                <prop-value>1</prop-value>
            </property>
            <property>
                <prop-name>url</prop-name>
                <prop-type>String</prop-type>
                <prop-value>jdbc:weblogic:mssqlserver4:northwind@tornado:1433</prop-value>
            </property>
            <property>
                <prop-name>driverClassName</prop-name>
                <prop-type>String</prop-type>
                <prop-value>weblogic.jdbc.mssqlserver4.Driver</prop-value>
            </property>
        </driver-datasource>
    </jndi-definitions>
    各位再帮看看如何搞