看看xml部署文件的pool名字有没有错误?
还有服务器有没有建立Account连接池

解决方案 »

  1.   

    因该不是pool名字的错误,因为如果是名字的错误的话,
    那么在DataSource ds = (DataSource) ic.lookup(dbName);
    这一步就应该报告javax.naming.NameNotFoundException: ejb contacts; remaining name ’java:comp/env/jdbc/Account‘
      

  2.   

    我用的是j2ee sdk 的container我的D:\j2sdkee1.3\config\resource.properties如下
    jdbcDataSource.0.name=jdbc/Account
    jdbcDataSource.0.url=jdbc:freetds:sqlserver://localhost:1433/EjbTest;TDS=7.0
    jdbcDataSource.1.name=jdbc/Cloudscape
    jdbcDataSource.1.url=jdbc:cloudscape:rmi:CloudscapeDB;create=true
    jdbcDataSource.2.name=jdbc/DB1
    jdbcDataSource.2.url=jdbc:cloudscape:rmi:CloudscapeDB;create=true
    jdbcDataSource.3.name=jdbc/DB2
    jdbcDataSource.3.url=jdbc:cloudscape:rmi:CloudscapeDB;create=true
    jdbcDataSource.4.name=jdbc/EstoreDB
    jdbcDataSource.4.url=jdbc:cloudscape:rmi:CloudscapeDB;create=true
    jdbcDataSource.5.name=jdbc/InventoryDB
    jdbcDataSource.5.url=jdbc:cloudscape:rmi:CloudscapeDB;create=true
    jdbcDriver.0.name=COM.cloudscape.core.RmiJdbcDriver
    jdbcDriver.1.name=com.internetcds.jdbc.tds.Driver
    jdbcXADataSource.0.name=jdbc/XACloudscape
    jdbcXADataSource.0.classname=COM.cloudscape.core.RemoteXaDataSource
    jdbcXADataSource.0.dbpassword=
    jdbcXADataSource.0.dbuser=
    jdbcXADataSource.0.prop.createDatabase=create
    jdbcXADataSource.0.prop.databaseName=CloudscapeDB
    jmsCnxFactory.0.name=QueueConnectionFactory
    jmsCnxFactory.0.isQueue=true
    jmsCnxFactory.1.name=TopicConnectionFactory
    jmsCnxFactory.1.isQueue=false
    jmsCnxFactory.2.name=jms/QueueConnectionFactory
    jmsCnxFactory.2.isQueue=true
    jmsCnxFactory.3.name=jms/TopicConnectionFactory
    jmsCnxFactory.3.isQueue=false
    jmsDestination.0.name=jms/Queue
    jmsDestination.0.isQueue=true
    jmsDestination.1.name=jms/Topic
    jmsDestination.1.isQueue=false我的xml部署文件如下:ejb-jar.xml<?xml version="1.0" encoding="GBK"?><!DOCTYPE ejb-jar PUBLIC '-//Sun Microsystems, Inc.//DTD Enterprise JavaBeans 2.0//EN' 'http://java.sun.com/dtd/ejb-jar_2_0.dtd'><ejb-jar>
      <description>no description</description>
      <display-name>accountEjb</display-name>
      <enterprise-beans>
        <session>
          <description>no description</description>
          <display-name>accountEjb</display-name>
          <ejb-name>accountEjb</ejb-name>
          <home>accountHome</home>
          <remote>accountRemote</remote>
          <ejb-class>accountEjb</ejb-class>
          <session-type>Stateful</session-type>
          <transaction-type>Bean</transaction-type>
          <security-identity>
            <description></description>
            <use-caller-identity></use-caller-identity>
          </security-identity>
          <resource-ref>
            <res-ref-name>jdbc/Account</res-ref-name>
            <res-type>javax.sql.DataSource</res-type>
            <res-auth>Container</res-auth>
            <res-sharing-scope>Shareable</res-sharing-scope>
          </resource-ref>
        </session>
      </enterprise-beans>
    </ejb-jar>
    sun-j2ee-ri.xml如下:
    <?xml version="1.0" encoding="GBK"?><j2ee-ri-specific-information>
      <server-name></server-name>
      <rolemapping />
      <web>
        <module-name>war-ic.war</module-name>
        <context-root>BisheTest</context-root>
        <ejb-ref>
          <ejb-ref-name>ejb/accountEjb</ejb-ref-name>
          <jndi-name>ejb/accountEjb</jndi-name>
          <use-ssl>false</use-ssl>
          <principal>
            <name></name>
          </principal>
        </ejb-ref>
      </web>
      <enterprise-beans>
        <module-name>ejb-jar-ic.jar</module-name>
        <unique-id>0</unique-id>
        <ejb>
          <ejb-name>accountEjb</ejb-name>
          <jndi-name>ejb/accountEjb</jndi-name>
          <ior-security-config>
            <transport-config>
              <integrity>supported</integrity>
              <confidentiality>supported</confidentiality>
              <establish-trust-in-target>supported</establish-trust-in-target>
              <establish-trust-in-client>supported</establish-trust-in-client>
            </transport-config>
            <as-context>
              <auth-method>username_password</auth-method>
              <realm>default</realm>
              <required>true</required>
            </as-context>
            <sas-context>
              <caller-propagation>supported</caller-propagation>
            </sas-context>
          </ior-security-config>
          <resource-ref>
            <res-ref-name>jdbc/Account</res-ref-name>
            <jndi-name>jdbc/Account</jndi-name>
            <default-resource-principal>
              <name>dbtest</name>
              <password>mytest</password>
            </default-resource-principal>
          </resource-ref>
        </ejb>
      </enterprise-beans>
    </j2ee-ri-specific-information>
      

  3.   

    向你介绍一个应用服务器Apusic,在www.apusic.com有下载!
      

  4.   

    产生的日志:error.logjavax.ejb.CreateException: access denied (java.lang.RuntimePermission accessDeclaredMembers)
    at accountEjb.ejbCreate(accountEjb.java:77)
    at accountHomeImpl.create(accountHomeImpl.java:19)
    at _accountHomeImpl_Tie._invoke(Unknown Source)
    at com.sun.corba.ee.internal.POA.GenericPOAServerSC.dispatchToServant(GenericPOAServerSC.java:512)
    at com.sun.corba.ee.internal.POA.GenericPOAServerSC.internalDispatch(GenericPOAServerSC.java:177)
    at com.sun.corba.ee.internal.POA.GenericPOAServerSC.dispatch(GenericPOAServerSC.java:106)
    at com.sun.corba.ee.internal.iiop.ORB.process(ORB.java:264)
    at com.sun.corba.ee.internal.iiop.LocalClientRequestImpl.invoke(LocalClientRequestImpl.java:99)
    at com.sun.corba.ee.internal.POA.GenericPOAClientSC.invoke(GenericPOAClientSC.java:96)
    at com.sun.corba.ee.internal.POA.GenericPOAClientSC.invoke(GenericPOAClientSC.java:135)
    at org.omg.CORBA.portable.ObjectImpl._invoke(ObjectImpl.java:297)
    at _accountHome_Stub.create(Unknown Source)
    at Servlet.init(Servlet.java:31)
    at javax.servlet.GenericServlet.init(GenericServlet.java:258)
    at org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:755)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:544)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:227)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:977)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:196)
    at org.apache.catalina.valves.ValveBase.invokeNext(ValveBase.java:242)
    at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:242)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:975)
    at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2041)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:161)
    at org.apache.catalina.valves.ValveBase.invokeNext(ValveBase.java:242)
    at org.apache.catalina.authenticator.SingleSignOn.invoke(SingleSignOn.java:225)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:975)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:159)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:977)
    at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:818)
    at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:897)
    at java.lang.Thread.run(Thread.java:484)
      

  5.   

    to wxyxl(断肠人) :什么毛病!?
      

  6.   

    可能是你调用连接池的时候出的问题,你把下面的代码:
    private void makeConnection() throws NamingException, SQLException
        {
              System.out.println("access database-makeConnection");
                  
              InitialContext ic = new InitialContext();
            DataSource ds = (DataSource) ic.lookup(dbName);
            System.out.println("look ok");
              
            con =  ds.getConnection();
        }
    重写一下试试看,比如:
    private void makeConnection() throws NamingException, SQLException
        {
              System.out.println("access database-makeConnection");
            Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver");
            con=DriverManager.getConnection (url,usr,pass);
             
        } 
    当然forName中的参数是你用的JDBC驱动。
    如果这样可以的话,我个人认为可能是调用连接池的时候出错,
    因为第一次调用的时候连接池为空,所以 ds.getConnection()可能返回为空。
    当连接池中有实例时,则ds.getConnection()给你返回一个连接!
      

  7.   

    用jdbc-odbc bridge
    1.set a ODBC Name as "MSDdata"
    2.
        String url="jdbc:odbc:MSData";
        Class.forName ("sun.jdbc.odbc.JdbcOdbcDriver");
        con=DriverManager.getConnection (url,usr,pass);
            
        
      

  8.   

    在ejb里面用odbc太慢了吧!to wxyxl(断肠人): 给个qq号吧!讨论一下  54422043 is mine在Ed roman 的master ejb中说();通过jndi来查找是jdbc2.0提供的,而你说的那种是以前的版本,我还是想用下面这个  
    DataSource ds = (DataSource) ic.lookup(dbName);
    System.out.println("look ok");
    con =  ds.getConnection();还有,你说的那种方法也不利于回头转换数据库?要是可以用你那种方法并能简单的转换数据库的话的,就好了!
        
      

  9.   

    很遗憾我不能用OICQ。
    可能是你的应用服务器有问题吧!
    你在Apusic上试试看!通过JNDI调用肯定是可以的。
    我们现在做的项目都是这样调用的,不过用的服务器是Apusic。
    你到www.apusic.com的Java俱乐部上去问问看!那儿有很多EJB高手!
      

  10.   

    to wxyxl(断肠人) :
    不管怎么说谢谢你了再看看吧--也许万一有一天发现了答案,别忘了告诉一声
    [email protected]
      

  11.   

    问题解决!我的jdbc驱动不支持
    DataSource ds = (DataSource) ic.lookup(dbName);
    con =  ds.getConnection();
    我用的是freeTds
    如果有别人碰到该问题---引以为柬