- 浏览: 147592 次
- 性别:
- 来自: 广州
最新评论
-
tianmo2008:
最近在使用,遇到点问题,希望能请教一下.
请问一下,你出现过I ...
RCP中实现带有run in background按钮的进度条对话框 -
zhangzcz1999:
lin36 写道楼主的程序有问题,测试的时间包含有调用&quo ...
java写文件方法之比较 -
hnbcjzj:
FileOutputStream 用于写入诸如图像数据之类的原 ...
java写文件方法之比较 -
zhangzcz1999:
xueshuanglong 写道网上现在的资料尽是一些旧版的, ...
LifeRay安装配置开发环境全过程(一) -
xueshuanglong:
网上现在的资料尽是一些旧版的,没有最新的。
LifeRay安装配置开发环境全过程(一)
[原创] 在JBoss服务器上开发 EJB3 应用的碰壁过程
我的JBoss服务器安装在 D:\jboss420GA 目录下。
为了开发Entity Bean映射Oracle的Table,我配置OracleDS数据源:
1、从 D:\jboss420GA\docs\examples\jca 将配置文件 oracle-ds.xml 复制到 D:\jboss420GA\server\default\deploy 下。
2、编辑修改oracle-ds.xml的内容:
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>OracleDS</jndi-name>
<connection-url>jdbc:oracle:thin:@localhost:1521:lw</connection-url>
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<user-name>scott</user-name>
<password>tiger</password>
<exception-sorter-class-name>
org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter
</exception-sorter-class-name>
<metadata>
<type-mapping>Oracle9i</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>
3、将Oracle的JDBC驱动程序 ojdbc14.jar 或 classes12.jar 复制到 D:\jboss420GA\server\default\lib 文件夹下。
4、在Netbeans IDE 中激活“运行环境”视图,选择“服务器”----“JBoss Application Server”,启动。启动过程中NetbeansIDE的输出窗口显示如下内容:
14:28:21,328 INFO [ConnectionFactoryBindingService] Bound ConnectionManager 'jboss.jca:service=DataSourceBinding,name=OracleDS' to JNDI name 'java:OracleDS'
14:28:21,406 INFO [TomcatDeployer] deploy, ctxPath=/jmx-console, warUrl=.../deploy/jmx-console.war/
14:28:21,953 INFO [EARDeployer] Init J2EE application: file:/K:/J2ee/jboss-4.2.0.GA/server/default/deploy/EJB3Leaning.ear
......
注意粗体字内容,说明数据源配置文件没有问题。
5、编写Servlet测试数据源是否有效:新建Web项目,建立测试数据源的Servlet,其内容如下:
运行,调用此Servlet,页面上成功列出了 Employee 表中所有雇员的名字。
说明,数据源配置正确。
6、创建“企业应用程序”项目,在EJB模块中,利用“通过数据库创建实体类”向导,选择OracleDS数据源,创建Employee表及其关联表映射的实体类,并同时创建持久化单元。持久化单元定义文件persistence.xml 内容如下:
7、部署EJB:在项目名称上右键点击,但后选择“部署项目”菜单项。注意观察JBoss服务器的输出信息。发现有如下错误信息:
数据源配置没问题,但是发布EJB的时候就报数据源绑定错误。
为什么?!
这个问题困扰了我好几天,终于在 WikiJBoss 找到了答案。原来需要在数据原配置文件oracle-ds.xml中加入不使用Java上下文的选项:
WikiJBoss的原文摘录如下:
因此,作此修改后,前面测试数据源配置是否有效的Servlet就要做适当修改为:
我的JBoss服务器安装在 D:\jboss420GA 目录下。
为了开发Entity Bean映射Oracle的Table,我配置OracleDS数据源:
1、从 D:\jboss420GA\docs\examples\jca 将配置文件 oracle-ds.xml 复制到 D:\jboss420GA\server\default\deploy 下。
2、编辑修改oracle-ds.xml的内容:
<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>OracleDS</jndi-name>
<connection-url>jdbc:oracle:thin:@localhost:1521:lw</connection-url>
<driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
<user-name>scott</user-name>
<password>tiger</password>
<exception-sorter-class-name>
org.jboss.resource.adapter.jdbc.vendor.OracleExceptionSorter
</exception-sorter-class-name>
<metadata>
<type-mapping>Oracle9i</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>
3、将Oracle的JDBC驱动程序 ojdbc14.jar 或 classes12.jar 复制到 D:\jboss420GA\server\default\lib 文件夹下。
4、在Netbeans IDE 中激活“运行环境”视图,选择“服务器”----“JBoss Application Server”,启动。启动过程中NetbeansIDE的输出窗口显示如下内容:
14:28:21,328 INFO [ConnectionFactoryBindingService] Bound ConnectionManager 'jboss.jca:service=DataSourceBinding,name=OracleDS' to JNDI name 'java:OracleDS'
14:28:21,406 INFO [TomcatDeployer] deploy, ctxPath=/jmx-console, warUrl=.../deploy/jmx-console.war/
14:28:21,953 INFO [EARDeployer] Init J2EE application: file:/K:/J2ee/jboss-4.2.0.GA/server/default/deploy/EJB3Leaning.ear
......
注意粗体字内容,说明数据源配置文件没有问题。
5、编写Servlet测试数据源是否有效:新建Web项目,建立测试数据源的Servlet,其内容如下:
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); DataSource ds; try { ds = getOracleDS(); Connection conn=ds.getConnection(); Statement sta=conn.createStatement(); ResultSet rs= sta.executeQuery("select * from Employee"); while ( rs.next() ) { out.println(rs.getString(2)+"<br>"); } rs.close(); conn.close(); } catch (Exception ex) { ex.printStackTrace(); } out.close(); } private DataSource getOracleDS() throws NamingException { Context c = new InitialContext(); return (DataSource) c.lookup("java:comp/env/OracleDS"); }
运行,调用此Servlet,页面上成功列出了 Employee 表中所有雇员的名字。
说明,数据源配置正确。
6、创建“企业应用程序”项目,在EJB模块中,利用“通过数据库创建实体类”向导,选择OracleDS数据源,创建Employee表及其关联表映射的实体类,并同时创建持久化单元。持久化单元定义文件persistence.xml 内容如下:
<?xml version="1.0" encoding="UTF-8"?> <persistence version="1.0" 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"> <persistence-unit name="testEJB-ejbPU" transaction-type="JTA"> <jta-data-source>OracleDS</jta-data-source> <properties/> </persistence-unit> </persistence>
7、部署EJB:在项目名称上右键点击,但后选择“部署项目”菜单项。注意观察JBoss服务器的输出信息。发现有如下错误信息:
15:04:55,437 INFO [PersistenceUnitDeployment] Starting persistence unit persistence.units:ear=testEJB.ear,unitName=testEJB-ejbPU 15:04:55,718 WARN [ServiceController] Problem starting service persistence.units:ear=testEJB.ear,unitName=testEJB-ejbPU javax.naming.NameNotFoundException: OracleDS not bound at org.jnp.server.NamingServer.getBinding(NamingServer.java:529) at org.jnp.server.NamingServer.getBinding(NamingServer.java:537) at org.jnp.server.NamingServer.getObject(NamingServer.java:543) at org.jnp.server.NamingServer.lookup(NamingServer.java:296) at org.jnp.interfaces.NamingContext.lookup(NamingContext.java:625) ......
数据源配置没问题,但是发布EJB的时候就报数据源绑定错误。
为什么?!
这个问题困扰了我好几天,终于在 WikiJBoss 找到了答案。原来需要在数据原配置文件oracle-ds.xml中加入不使用Java上下文的选项:
<use-java-context>false</use-java-context>
WikiJBoss的原文摘录如下:
<use-java-context> - A boolean indicating if the jndi-name should be prefixed with java: which causes the DataSource to only be accessible from within the jboss server vm. The default is true. Configuring a DataSource for remote usage As of jboss-4.0.0 there is support for accessing a DataSource from a remote client. The one change that is necessary for the client to be able to lookup the DataSource from JNDI is to specify use-java-context=false as shown here: <datasources> <local-tx-datasource> <jndi-name>GenericDS</jndi-name> <use-java-context>false</use-java-context> <connection-url>...</connection-url> ... This results in the DataSource being bound under the JNDI name "GenericDS" instead of the default of "java:/GenericDS" which restricts the lookup to the same VM as the jboss server.
因此,作此修改后,前面测试数据源配置是否有效的Servlet就要做适当修改为:
private DataSource getOracleDS() throws NamingException { Context c = new InitialContext(); return (DataSource) c.lookup("OracleDS"); }搞明白这些问题后,实体部署已经没问题了。 8、设计会话Bean:采用NetbeansIDE提供的“创建实体类的会话Bean”向导,创建Emp实体类的会话Bean,生成远程接口,然后部署到JBoss服务器上,过程正常。 9、编写Servlet,通过远程接口调用会话Bean:Servlet的主要代码如下:protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); EmpFacadeRemote dao=lookupEmpFacade(); List l=dao.findAll(); for (int i=0; i<l.size(); i++){ Emp e=(Emp)l.get(i); out.println(e.getEname()+"<br>"); } out.close(); } private EmpFacadeRemote lookupEmpFacade() { try { Context c = new InitialContext(); return (EmpFacadeRemote) c.lookup("java:comp/env/ejb/EmpFacade"); } catch(NamingException ne) { Logger.getLogger(getClass().getName()).log(Level.SEVERE,"exception caught" ,ne); throw new RuntimeException(ne); } }
然后部署项目,运行项目,当Servlet被调用时,报错:type Exception report message description The server encountered an internal error () that prevented it from fulfilling this request. exception java.lang.RuntimeException: javax.naming.NameNotFoundException: ejb not bound com.pqf.servlet.ListEmp.lookupEmpFacade(ListEmp.java:81) com.pqf.servlet.ListEmp.processRequest(ListEmp.java:38) com.pqf.servlet.ListEmp.doPost(ListEmp.java:64) javax.servlet.http.HttpServlet.service(HttpServlet.java:710) javax.servlet.http.HttpServlet.service(HttpServlet.java:803) org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96) root cause javax.naming.NameNotFoundException: ejb not bound org.jnp.server.NamingServer.getBinding(NamingServer.java:529) org.jnp.server.NamingServer.getBinding(NamingServer.java:537) org.jnp.server.NamingServer.getObject(NamingServer.java:543) org.jnp.server.NamingServer.lookup(NamingServer.java:267) org.jnp.server.NamingServer.lookup(NamingServer.java:270) org.jnp.interfaces.NamingContext.lookup(NamingContext.java:625) org.jnp.interfaces.NamingContext.lookup(NamingContext.java:716) org.jnp.interfaces.NamingContext.lookup(NamingContext.java:587) javax.naming.InitialContext.lookup(InitialContext.java:392) com.pqf.servlet.ListEmp.lookupEmpFacade(ListEmp.java:77) com.pqf.servlet.ListEmp.processRequest(ListEmp.java:38) com.pqf.servlet.ListEmp.doPost(ListEmp.java:64) javax.servlet.http.HttpServlet.service(HttpServlet.java:710) javax.servlet.http.HttpServlet.service(HttpServlet.java:803) org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:96)
又是为何?
(完)
发表评论
-
(转)Word文档解析介绍(using Jacob & HtmlParser)
2010-11-01 14:21 2681Java中Word的解析方法据我了解有多种,如通过jacob调 ... -
(转)Java同步技术
2010-03-15 15:26 1231Java同步技术 收藏 by:文/ Iangao 200 ... -
Java和oracle分页处理
2009-12-09 18:16 2560Oracle的分页查询语句基 ... -
java写文件方法之比较
2009-11-12 10:57 8586(转)最近对以前开发的一个通用数据迁移的软件进行优化。除了 ... -
Log4j记录详细异常信息
2009-08-11 16:56 1496//代码片断,其中log为log4j对象,ex为异常对象 / ... -
解决iframe中session丢失的问题
2009-08-04 11:35 2802最近由于要做页面引用,在Iframe中引用其他系统的页面,而其 ... -
转:HttpClient POST 的 UTF-8等编码问题
2009-04-26 15:46 3652Apache HttpClient ( http://jaka ... -
RCP中实现带有run in background按钮的进度条对话框
2009-04-02 12:05 3442public class TestWithProgress ... -
spring cron表达式
2009-03-02 15:35 2036Cron表达式是一个字符串 ... -
使用apache的Httpclient上传文件
2009-02-27 14:25 4560String targetUrl = "htt ... -
eclipse中的线程
2009-02-10 16:25 915先大致讲一讲GUI程序中 ... -
GEF初步学习
2009-01-21 17:06 1451这周公司突然要我去接手同事写的GEF和RCP工作。于是急匆匆的 ... -
(转)Java复习
2009-01-16 17:28 802类成员访问修饰符与继承的关系 私有的(private)类成员 ... -
eclipse启动参数(eclipse.ini)说明
2009-01-07 09:45 1679今天在写RCP程序的时候跟踪程序,出现了java.lang.O ... -
Lucene已建索引的全部删除
2008-11-07 17:37 1550今天搞个重建索引工作,一开始想要把建索引的文件目录删除然后再来 ... -
Lucene 搜索试用
2008-10-22 11:57 1007传说中强大的Lucene搜索,首先要创建索引: impor ... -
JXL操作excel代码实例
2008-10-18 17:53 1471import java.io.File; import ... -
Webphere启动报java.lang.ClassCastException问题解决
2008-09-26 19:55 3436昨天使用websphere部署war包,部署成功了,启动也成功 ... -
opencsv开源 CSV文件操作包简介
2008-05-30 09:47 3953opencsv is a very simple csv (c ... -
Tomcat下配置与使用CAS实现单点登录
2008-05-23 10:47 2536配置Tomcat使用SSL安全认证 因为CAS使用的是http ...
相关推荐
在IT行业中,开发企业级应用程序通常涉及到多个技术的集成,如Eclipse作为IDE,Jboss作为应用服务器,以及MySql作为数据库系统。本教程将详细阐述如何利用这些工具来开发EJB(Enterprise JavaBeans)。 **Eclipse**...
在本文中,我们将深入探讨如何使用Eclipse IDE与JBoss应用程序服务器(版本7.x)来开发和部署一个基于EJB 3.x的简单企业级Java应用程序。EJB(Enterprise JavaBeans)是Java平台上的核心组件,它提供了一种标准的...
经典Java EE企业应用实战:基于WebLogic/JBoss的JSF+EJB 3+JPA整合开发 part3
经典JAVA EE企业应用实战基于WEBLOGIC JBOSS的JSF+EJB 3+JPA整合开发——源码.part1 其他部分详见我的上传列表,全部分卷下载完成才能解压。 本书介绍了Java EE规范的三大主要规范JSF、EJB 3和JPA,其中JSF是Sun...
《经典Java EE企业应用实战:基于WebLogic/JBoss的JSF+EJB 3+JPA整合开发》介绍了Java EE规范的三大主要规范JSF、EJB 3和JPA,其中JSF是Sun公司提供的JSF RI;EJB 3部分则包含Session Bean、Message Driven Bean的...
本文将围绕“Jboss下开发ejb应用之一会话bean的应用”这一主题,深入探讨如何在Jboss应用服务器上开发和部署会话Bean,以及涉及到的相关工具和源码。 会话Bean是EJB的一种类型,它代表了业务逻辑组件,为客户端提供...
经典JAVA EE企业应用实战 基于WEBLOGIC JBOSS的JSF+EJB 3+JPA整合开发.part2
经典Java EE企业应用实战:基于WebLogic/JBoss的JSF+EJB 3+JPA整合开发 part2
本篇文章将深入探讨在JBoss应用服务器上开发EJB应用,特别是实体Bean的使用。 标题:“Jboss下开发ejb应用之一实体bean的应用” 首先,理解EJB实体Bean的含义至关重要。实体Bean代表持久化的业务对象,它们与...
在Java企业版(Java EE)应用开发中,EJB(Enterprise JavaBeans)是核心组件,用于构建可扩展、安全和事务处理的服务器端应用程序。JBoss AS(现在称为WildFly)是一个开源的应用服务器,它支持Java EE规范,包括...
经典JAVA EE企业应用实战基于WEBLOGIC JBOSS的JSF+EJB 3+JPA整合开发 PDF 书籍 本书介绍了Java EE规范的三大主要规范JSF、EJB 3和JPA,其中JSF是Sun公司提供的JSF RI;EJB 3部分则包含Session Bean、Message ...
本文将重点讨论如何在JBoss应用服务器上配置EJB 2.0和EJB 3.0。 首先,让我们来看看EJB 2.0的配置过程: 1. **ejb-jar.xml**:这是EJB 2.0中的主要部署描述符,包含了关于EJB的所有元数据,如bean的类型、接口、...
经典JAVA EE企业应用实战 基于WEBLOGIC JBOSS的JSF+EJB 3+JPA整合开发个人认为是不错的书
经典JAVA EE企业应用实战 基于WEBLOGIC JBOSS的JSF+EJB 3+JPA整合开发。第二部分。
总的来说,JBOSS7.1.1 Final与EJB3的结合,为开发者提供了强大且灵活的企业级应用开发环境,简化了部署流程,同时提供了丰富的服务和组件,以满足复杂的企业需求。通过深入理解和实践,开发者可以充分利用这一平台的...
总之,这个"jboss+myeclipse+ejb案例"涵盖了Java EE企业级开发的核心要素,通过学习和实践,开发者可以掌握如何在JBoss环境下使用MyEclipse进行EJB开发,为后续的大型企业级应用开发打下坚实基础。
在本文中,我们将深入探讨如何使用JBOSS服务器与EJB3.0相结合,并结合MySQL数据库进行企业级应用开发。JBOSS是一个流行的开源Java应用服务器,它支持EJB(Enterprise JavaBeans)3.0规范,这是一个用于构建企业级...