EJB3+JBOSS 报NameingNotfoundException错误:MySql not Bound

错误原因:

1. 使用的jndi 和绑定时的jndi name本身不一致,所以找不到对应的class (比较少,但是有)


2.配置文件不全或错误

  1. META-INF下的persistence.xml文件

                <?xml version="1.0" encoding="UTF-8"?>
                  <persistence xmlns="http://java.sun.com/xml/ns/persistence"
                       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                    xsi:schemaLocation="http://java.sun.com/xml/ns/persistence  
                    http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd"
                      version="1.0">
    <persistence-unit name="jpaunit">
    <!-- <provider>org.hibernate.ejb.HibernatePersistence</provider> -->
        <jta-data-source>java:/MySqlDS</jta-data-source>
        <!-- <non-jta-data-source>java:/MySqlDS</non-jta-data-source> -->
        <properties>
            <property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect" />
            <!-- <property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"
                /> <property name="hibernate.connection.username" value="root" /> <property
                name="hibernate.connection.password" value="root" /> <property name="hibernate.connection.url"
                value="jdbc.mysql://fh1:3306/trust" /> -->
            <property name="hibernate.hbm2ddl.auto" value="create" />
            <property name="hibernate.show_sql" value="true" />
        </properties>
    </persistence-unit>
</persistence>

          2.server/deploy/下的mysql-ds.xml

<?xml version="1.0" encoding="UTF-8"?>

<!-- $Id: mysql-ds.xml 41016 2006-02-07 14:23:00Z acoliver $ -->
<!--  Datasource config for MySQL using 3.0.9 available from:
http://www.mysql.com/downloads/api-jdbc-stable.html
-->

<datasources>
  <local-tx-datasource>
    <jndi-name>MySqlDS</jndi-name>
    <connection-url>jdbc:mysql://localhost:3306/trust</connection-url>
    <driver-class>com.mysql.jdbc.Driver</driver-class>
    <user-name>root</user-name>
    <password>root</password>
    <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLExceptionSorter</exception-sorter-class-name>
    <!-- should only be used on drivers after 3.22.1 with "ping" support
    <valid-connection-checker-class-name>org.jboss.resource.adapter.jdbc.vendor.MySQLValidConnectionChecker</valid-connection-checker-class-name>
    -->
    <!-- sql to call when connection is created
    <new-connection-sql>some arbitrary sql</new-connection-sql>
      -->
    <!-- sql to call on an existing pooled connection when it is obtained from pool - MySQLValidConnectionChecker is preferred for newer drivers
    <check-valid-connection-sql>some arbitrary sql</check-valid-connection-sql>
      -->

    <!-- corresponding type-mapping in the standardjbosscmp-jdbc.xml (optional) -->
    <metadata>
       <type-mapping>mySQL</type-mapping>
    </metadata>
  </local-tx-datasource>
</datasources>

                 3.Next, we need to set the <datasource> and<type-mapping> elements in thestandardjaws.xml or jaws.xml file:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jaws PUBLIC
          "-//JBoss//DTD JAWS 2.4//EN"
          "http://www.jboss.org/j2ee/dtd/jaws_2_4.dtd">
<jaws> 
<datasource>java:/MySqlDS</datasource> 
<type-mapping>mySQL</type-mapping> 
<!--
   <enterprise-beans>
        <entity>
            <ejb-name>demo.Story</ejb-name>
            <cmp-field>
                <field-name>id</field-name>
                <column-name>ID</column-name>
            </cmp-field>
            <cmp-field>
                <field-name>author</field-name>
                <column-name>AUTHOR</column-name>
            </cmp-field>
            <cmp-field>
                <field-name>subject</field-name>
                <column-name>SUBJECT</column-name>
            </cmp-field>
            <cmp-field>
                <field-name>content</field-name>
                <column-name>CONTENT</column-name>
            </cmp-field>
            <finder>
                <name>findById</name>
                <query><![CDATA[where ID = {0}]]></query>
                <order></order>
            </finder>
            <finder>
                <name>findByAuthor</name>
                <query><![CDATA[where AUTHOR = {0}]]></query>
                <order></order>
            </finder>
            <table-name>STORY</table-name>
            <time-out>10</time-out>
        </entity>
    </enterprise-beans>-->
</jaws>

We also need to set the <datasource> and <datasource-mapping> elements in thestandardjbosscmp-jdbc.xml or jbosscmp-jdbc.xml file:

<jbosscmp-jdbc>
    <defaults>
       <datasource>java:/MySqlDS</datasource>
       <datasource-mapping>mySQL</datasource-mapping>
  </defaults>
</jbosscmp-jdbc>

Finally, we modify login-config.xml with MySQLdatabase settings. Add the following <application-policy/> element to login-config.xml:

<application-policy name = "MySqlDbRealm"> 
   <authentication> 
      <login-module code =  
  "org.jboss.resource.security.ConfiguredIdentityLoginModule" 
                            flag = "required"> 
         <module-option name ="principal">sa</module-option> 
         <module-option name ="userName">sa</module-option> 
         <module-option name ="password"></module-option> 
         <module-option name ="managedConnectionFactoryName">  
            jboss.jca:service=LocalTxCM,name=MySqlDS 
         </module-option> 
      </login-module> 
   </authentication> 
</application-policy>  

By modifying the mysql-ds.xml, standardjaws.xml, standardjbosscmp-jdbc.xml, and login-config.xml files,the JBoss 4.0 server is configured to be used with a MySQL database.

转自:http://www.onjava.com/pub/a/onjava/2004/02/25/jbossjdbc.html#mysql

           https://books.google.com.hk/books?id=EjqbAgAAQBAJ&pg=PA138&lpg=PA138&dq=Depend+On:+++++jboss.jca:service%3DDataSourceBinding,name%3DMySqlDS&source=bl&ots=xkQwGmAo-Q&sig=inckUiWa2yT4Qukdjxd_kOtk77A&hl=zh-CN&sa=X&ei=LWm8VK-3EazesATokICYAg&ved=0CEwQ6AEwBQ#v=onepage&q=Depend%20On%3A%20%20%20%20%20jboss.jca%3Aservice%3DDataSourceBinding%2Cname%3DMySqlDS&f=false




3. 如果你确保jndi没有使用错误的情况下,在很大可能上就属于如下情形了:
这时候,通常我们的应用程序运行在一个standalone的环境中,也即是我们的client端本身不是运行在JBoss环境中,而是另外一个JVM中。
原因之一,是我们把jndi-name定义成了java:/hibernate/SessionFactory。 可是我们忘了, 所有以java:/开头的jndi都只能在同一个JVM中使用。
原因之二,即使我们的jndi并没有以java:/开头(这种情况下返回的通常是null),但是在缺省情况下,出于安全方面的原因,JBoss是把datasoure绑定到java:下的,没有把DataSource share给别的JVM使用。所以我们自然也就查找不到了。
By default, the datasources in JBoss are bound to java: namespace and are not visible outside the server JVM

如果一定想要在另外一个JVM中使用的话,可以在*-ds.xml文件中通过在设置use-java-context为false。

<use-java-context>false</use-java-context>  加上这个后persistence.xml中----不能使用    <jta-data-source>java:/mySource</jta-data-source> 而改为

<jta-data-source>mySource</jta-data-source>




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值