2009年2月26日星期四

JDev_019:使用JDeveloper 11g 发布Web应用(基于ADF、EJB、JPA、JSF)

1. 完成教程 《Build a Web Application with JDeveloper 11g Using EJB, JPA, and JavaServer Faces 》,并确保在JDeveloper 内置的WebLogic Server 上运行成功。

2. 右击EJBModel,选择New> General > Deployment Profiles,选择EJB JAR File。名称:HR_EJB。

3. 右击UserInterface,选择New> General > Deployment Profiles,选择WAR File。名称:HR_Web。

4. 右击EJBModel或UserInterface,选择New> General > Deployment Profiles,选择EAR File。名称:HR_App。HR_App要包括HR_EJB和HR_Web。

5. 建立指向独立的WebLogic Server的连接。

6. 发布HR_App到独立的WebLogic Server。

7. 访问http://127.0.0.1:7001/HR_Web/faces/browse.jspx。

问题1:访问http://127.0.0.1:7001/HR_Web/faces/browse.jspx时,出现错误:
Exception Description: Cannot acquire data source [java:/app/jdbc/jdbc/HRConnDS].
Internal Exception: javax.naming.NameNotFoundException: While trying to look up /app/jdbc/jdbc/HRConnDS in /app/ejb/HR_EJB.jar#HRFacade.; remaining name '/app/jdbc/jdbc/HRConnDS'

检查后发现是DataSource没有正确建立,于是先在Console中建立DataSource,Name:HRDS;JNDI Name:jdbc/HRDS。
然后,修改persistence.xml文件,把所有出现 java:/app/jdbc/jdbc/HRConnDS的地方,一律改成 jdbc/HRDS。
重新发布,访问应用,成功!
原因分析:是JPA EclipseLink搞的鬼,与设置 application scopedglobally scoped 有关,详细分析请参考:JNDI can not aquire datasource
关于JPA EclipseLink,将另文专述。

没有评论: