这应该是很多J2EE新手都会碰到的问题,我在做一个J2SE中调用EntityManager学习JPA的小例子,遇到了不少异常信息
其中一个问题就是,运行Main程序时拿不到MySqlDS的配置,
google的一堆文章之后,在这篇帖子中找到的想要的答案 http://www.theserverside.com/discussions/thread.tss?thread_id=29813
总结一下就是JBoss默认将数据源绑定在本地JNDI命名空间下,所以不能从JBoss运行的JVM之外查找到改数据源,要解决这个问题就是配置JBoss将数据源绑定在全局命名空间下。
这个在dataSource的配置文件中指定,以MySql为例,就是在修改${JBOSS_HOME}/server/default/deploy/mysql-ds.xml
在<jndi-name>MySqlDS</jndi-name>下面一行添加 <use-java-context>false</use-java-context>
下面截取了JBoss此时打印出的一段日志,可以明显看到我们要的结果生效了
*** CONTEXTS IN ERROR: Name -> Error
persistence.unit:unitName=#HelloTitan -> javax.naming.NameNotFoundException: MySqlDS not bound
14:29:24,589 INFO [Http11Protocol] Starting Coyote HTTP/1.1 on http-127.0.0.1-8080
14:29:24,693 INFO [AjpProtocol] Starting Coyote AJP/1.3 on ajp-127.0.0.1-8009
14:29:24,709 INFO [ServerImpl] JBoss (Microcontainer) [5.0.0.GA (build: SVNTag=JBoss_5_0_0_GA date=200812042120)] Started in 1m:768ms
14:35:10,011 INFO [ConnectionFactoryBindingService] Unbound ConnectionManager 'jboss.jca:service=DataSourceBinding,name=MySqlDS' from JNDI name 'java:MySqlDS'
14:35:10,222 INFO [WrapperDataSourceService] Bound ConnectionManager 'jboss.jca:service=DataSourceBinding,name=MySqlDS' to JNDI name 'MySqlDS'