在EJB3.0中试用JPA连接MYSQL数据库问题,各位大神,求解决!!!感谢~~~~

[size=large] 我把程序部署到JBOSS4.2.2G 服务器上去了。当我使用main方法进行测试时候报错了。[/size]
Exception in thread "main" javax.naming.NoInitialContextException: Cannot instantiate class: org.jnp.interfaces.NamingContextFactory [Root exception is java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory]
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:657)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:288)
at javax.naming.InitialContext.init(InitialContext.java:223)
at javax.naming.InitialContext.(InitialContext.java:197)
at com.ejb.test.EjbTest.selectScustomer(EjbTest.java:19)
at com.ejb.test.EjbTest.main(EjbTest.java:25)
Caused by: java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at com.sun.naming.internal.VersionHelper12.loadClass(VersionHelper12.java:46)
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:654)
... 5 more

[size=large]到网上查了下资料,说是包的问题。 我不不知道是不是,但我又不知道删除那个包!!!求解
现在发下包[/size]
com.sun.java.jdk.win32.x86_1.6.0.013\jre\lib\resources.jar
com.sun.java.jdk.win32.x86_1.6.0.013\jre\lib\rt.jar
com.sun.java.jdk.win32.x86_1.6.0.013\jre\lib\jsse.jar
com.sun.java.jdk.win32.x86_1.6.0.013\jre\lib\jce.jar
com.sun.java.jdk.win32.x86_1.6.0.013\jre\lib\charsets.jar
com.sun.java.jdk.win32.x86_1.6.0.013\jre\lib\ext\dnsns.jar
com.sun.java.jdk.win32.x86_1.6.0.013\jre\lib\ext\localedata.jar
com.sun.java.jdk.win32.x86_1.6.0.013\jre\lib\ext\sunjce_provider.jar
com.sun.java.jdk.win32.x86_1.6.0.013\jre\lib\ext\sunmscapi.jar
com.sun.java.jdk.win32.x86_1.6.0.013\jre\lib\ext\sunpkcs11.jar
com.genuitec.eclipse.j2eedt.core_8.6.0.me201007292038\data\libraryset\EE_5\javaee.jar
com.genuitec.eclipse.j2eedt.core_8.6.0.me201007292038\data\libraryset\EE_5\jsf-impl.jar
com.genuitec.eclipse.j2eedt.core_8.6.0.me201007292038\data\libraryset\EE_5\jsf-api.jar
com.genuitec.eclipse.j2eedt.core_8.6.0.me201007292038\data\libraryset\EE_5\jstl-1.2.jar

如果还需要别的什么的请说,求解决!!!!!!!!!!小弟在此谢谢了! 可以加我MSN帮忙解决也行 qcs4712248@live.com

所以在 persistence.xml 中的 必须为: java:/xxxx-ds

而在 deploy 下,必须有 xxxx-ds.xml 这个文件!而这个文件里的 jndi-name 的值必须是这个文件名,即 xxxx-ds

这是 jboss 的规定

很明显,你使用 main 方法运行的时候,缺少了很多 Jboss 上面的支持包,比如说 %JBoss Home%\client\jbossall-client.jar。另外,你用 JPA 的话,还需要将相应的JPA实现。将相关的包加入到当前的 classpath 应该就可以了。

你将 CustomerServiceImpl 主要代码帖上来看看

乍一看,好像是没有问题。@Remote 标记在这里没有必要吧?
他报的错误是找不到那个名字的 bean。你给它指定名字看看吧?

[code="java"]@Stateless(name="CustomerServiceImpl")[/code]

然后在 main 里面用:

[code="java"]context.lookup("CustomerServiceImpl"); [/code]

我的MSN都忘记密码了。

你将 eclipse console 里面的输出帖上来看看

很明显,你的配置有错,EJB环境起不来。

[code="java"]15:29:31,640 WARN [Ejb3DescriptorHandler] Descriptor based bean has no ejb-class defined: CustomerServiceImpl/remote
...
15:29:31,890 ERROR [URLDeploymentScanner] Incomplete Deployment listing:

--- MBeans waiting for other MBeans ---
ObjectName: persistence.units:jar=MyEjbAndSpring.jar,unitName=jpaUnit
State: NOTYETINSTALLED
I Depend On:
jboss.jca:name=MySqlDS,service=DataSourceBinding
Depends On Me:
jboss.j2ee:jar=MyEjbAndSpring.jar,name=CustomerServiceImpl,service=EJB3

ObjectName: jboss.j2ee:jar=MyEjbAndSpring.jar,name=CustomerServiceImpl,service=EJB3
State: NOTYETINSTALLED
I Depend On:
persistence.units:jar=MyEjbAndSpring.jar,unitName=jpaUnit

ObjectName: persistence.units:jar=Struts2EJB.jar,unitName=Struts2EJBPU
State: NOTYETINSTALLED
I Depend On:
jboss.jca:name=mysqlDataSource,service=DataSourceBinding
Depends On Me:
jboss.j2ee:jar=Struts2EJB.jar,name=UserDaoImpBean,service=EJB3

ObjectName: jboss.j2ee:jar=Struts2EJB.jar,name=UserDaoImpBean,service=EJB3
State: NOTYETINSTALLED
I Depend On:
persistence.units:jar=Struts2EJB.jar,unitName=Struts2EJBPU

--- MBEANS THAT ARE THE ROOT CAUSE OF THE PROBLEM ---
ObjectName: jboss.jca:name=mysqlDataSource,service=DataSourceBinding
State: NOTYETINSTALLED
Depends On Me:
persistence.units:jar=Struts2EJB.jar,unitName=Struts2EJBPU

ObjectName: jboss.jca:name=MySqlDS,service=DataSourceBinding
State: NOTYETINSTALLED
Depends On Me:
persistence.units:jar=MyEjbAndSpring.jar,unitName=jpaUnit

[/code]

应该是数据库连接的部分写错了。你按照以下的方法试一下:

1、把文件 orm.xml 改名为 mysql-ds.xml

2、把 mysql-ds.xml 中的语句 MySqlDS 改为: mysql-ds

3、把这个文件复制到你的 jboss 的 deploy 目录下,如 d:\jboss\server\default\deploy

4、把 persistence.xml 中的 java:MySqlDS 改为: java:/mysql-ds

5、把 persistence.xml 中的语句: META-INF/orm.xml
com.ejb.entity.Customer
删除掉

重启jboss 试试

数据源必须是以 -ds.xml 结尾的文件!