错误原因:
1. 使用的jndi 和绑定时的jndi name本身不一致,所以找不到对应的class (比较少,但是有)
2.配置文件不全或错误
- 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
这时候,通常我们的应用程序运行在一个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>