`
liqita
  • 浏览: 292118 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

访问EJB、JDBC、JMS代码示例

EJB 
阅读更多

访问EJB、JDBC、JMS代码示例
2011-03-20 14:52

要调用一个本地或者远程无状态session bean上的方法,客户端代码必须进行JNDI查找,以获取(本地或远程的)EJB Home对象,然后调用该对象的"create"方法,才能得到实际的(本地或远程的)EJB对象。然后才能调用一个或者多个EJB组件的方法。

为了避免重复的底层代码,很多EJB应用使用了服务定位器(Service Locator)和业务委托(Bussiness Delegate)模式,这样比在客户端代码中到处都进行JNDI查找要好些,不过它们的常见实现都有严重的缺陷。例如:

  • 通常如果代码通过服务定位器或业务代理单件来使用EJB,则很难对其进行测试。

  • 如果只使用了服务定位器模式而不使用业务委托模式,应用程序代码仍然需要调用EJB Home组件的create方法,并且要处理由此产生的异常。这样代码依然存在和EJB API的耦合并感染了EJB编程模型的复杂性。

  • 实现业务委托模式通常会导致大量的重复代码,因为对于EJB组件的同一个方法,我们不得不编写很多方法去调用它。

Spring的解决方式是允许用户创建并使用代码量很少的业务委托代理对象,通常在Spring的容器里配置。而不再需要编写额外的服务定位器或JNDI查找的代码,以及编码的业务委托对象里面的冗余方法,除非它们可以带来实质性的好处。

 

   在一个企业级应用系统中,业务逻辑通常会被封装成EJB,开发者需要通过JNDI来访问EJB中的业务逻辑;异步的消息传递通常会使用JMS服务器,开发者需要通过调用服务器支持的队列或者主题来完成消息发送和接收;更多的情况下,开发者需要通过JDBC来访问企业数据库,完成相关数据的持久化工作,下面我们简单的看看访问这些资源所需要编写的代码片断。

 

访问一个EJB需要完成的代码

  //初始化EJB访问上下文

Context context = new InitialContext();

//查找jndiName对应的EJB调用入口

Object o = ctx.lookup(“jndiName”);

//生成EJB访问的home接口

 XXXHome home = (XXXHome) javax.rmi.PortableRemoteObject

.narrow(o,XXXHome.class);

 //创建EJB对象

XXX xxx = home.create();

 //完成相关业务方法调用

 …

 //EJB使用完毕,清除EJB对象

xxx.remove();

 

访问JDBC数据源要完成的代码

 

 //加载数据库驱动 

 Class.forName(“driver_name_of_jdbc_driver”);

//通过DriverManager获取数据库连接

  Connection conn = DriverManager

.getConnection(jdbcUrl,userName,password);

//创建Statement对象

Statement stmt = conn.createStatement();

//完成相关数据的访问

 …

 //关闭Statement对象

 stmt.close();

 //关闭数据库连接

conn.close();

以上是硬编码获取Connection ,在EJB中还有另一种方法:

@Resource DataSource dataSource;
或者:

@Resource(mappedName="java:/DefaultDS"DataSource dataSource;

Connection con = dataSource.getConnection();

访问JMS需要完成的部分代码 

 //初始化EJB访问上下文

Context context = new InitialContext();

 //通过JNDI查询连接工厂

TopicConnectionFactory factory = (TopicConnectionFactory) ctx

lookup(“weblogic.jws.jms. TopicConnectionFactory”);

//使用连接工厂创建JMS连接

 TopicConnection conn = factory.createTopicConnection();

 //创建JMS会话

TopicSession session = connection

createTopicSession(false,Session.AUTO_ACKNOWLEDGE);

//通过jndiName查找目的地(主题)

Topic topic = (Topic) ctx.lookup(“jndiName”);

 //创建消息发生者

TopicPublisher publisher = session.createPublisher(topic);

//创建要发送的文本消息

TextMessage message = session.createTextMessage();

message.setText(“Hello World!”);

 //发送文本消息

  publisher.publish(message);

   这些只是J2EE标准中不到四分之一服务的客户端调用代码片断,从中我们可以发现每种企业资源的访问方式和API都不相同,而且每一种调用代码的编写都不是一件非常轻松的事情,而J2EE中还提供了更多的企业资源接访问接口方式如Web Services,JavaMail等,对于开发者而言,要完全掌握J2EE1.4客户端调用代码对每一个开发者而言都不是一件轻松的事情。

   控件(Controls)架构为解决这个难题提供了行之有效的方法。在控件(Controls)架构中,我们使用Java控件(Control)对资源访问进行封装,隐藏资源访问细节。开发者只需要继承这些Java控件(Control),而后提供自己的业务方法,使用Java控件(Control)中提供的特定注释(Annotation)来注释这些业务方法,就可以完成企业资源的访问工作。这种方式不但快捷高效,而且对于资源访问者而言,他始终采用同一接口去调用不同的资源,根本不需要去了解资源访问的细节。

分享到:
评论

相关推荐

    ejb3.0笔记和示例代码对应.doc

    3. **消息驱动Bean(Message Driven Bean,MDB)**:MDB专门用于处理异步消息,可以接收和发送JMS(Java消息服务)消息,非常适合处理长时间运行且无需即时响应的业务场景,例如后台任务处理或批处理作业。...

    Java中的EJB编程实例代码.zip

    在Java EE环境中,EJB与Web层(如Servlet和JSF)、持久层(JPA或JDBC)和中间件服务(如JMS)协同工作,形成完整的应用架构。例如,Web层负责用户交互,通过HTTP请求调用EJB,EJB处理业务逻辑并与数据库进行交互,...

    基于Java的源码-EJB编程实例代码.zip

    这个压缩包"基于Java的源码-EJB编程实例代码.zip"包含了一些EJB编程的示例代码,对于学习和理解EJB技术具有很高的价值。 EJB是一种面向服务的组件模型,它定义了三种主要类型的组件:会话bean(Session Beans)、...

    ejb 学习笔记6

    `EJBContext`是由容器提供的,允许EJB实例访问EJB容器。常用的方法包括`lookup(String name)`用于查找相关资源以及`setRollbackOnly()`用于控制事务回滚。 示例代码如下: ```java @Resource private Session...

    最新EJB3.0实例教程的实例代码

    EJB3.0是EJB的一个重要版本,它引入了许多改进,使得开发过程更加简化,更加面向对象,并且减少了大量的样板代码。本教程将深入探讨EJB3.0中的关键知识点,结合提供的实例代码进行详细解析。 1. **数据源配置...

    一些J2EE代码(jdbc XML)

    它包含了多种技术,如Servlet、JSP、EJB(Enterprise JavaBeans)、JMS(Java Message Service)、JDBC(Java Database Connectivity)等,这些技术共同为企业应用提供了一个强大且灵活的基础。在这个压缩包中,我们...

    ejb2.rar_ejb2. com

    这个压缩包“ejb2.rar”似乎包含了与EJB2相关的入门学习资料,可能包括教程、示例代码或者文档。EJB2在Java开发历史上占据了重要地位,特别是在处理企业级服务如事务管理、安全性、状态管理和并发控制等方面。 EJB2...

    EJB3.0实例教程

    **企业级JavaBeans(Enterprise JavaBeans,EJB)...此外,教程还可能包含实际的代码示例和案例研究,帮助你更好地理解和应用这些概念。通过深入学习和实践,你可以掌握使用EJB3.0开发高效、健壮的企业级应用的技能。

    weblogic+web+ejb部署学习j2ee(1)

    EJB分为三种类型:Session Beans(会话Bean)处理单个客户端交互,Message-driven Beans(消息驱动Bean)处理JMS消息,而Entity Beans(实体Bean)则持久化数据到数据库中。EJB容器提供了一系列服务,如事务管理、...

    java源码:EJB的真实世界模型(源代码).rar

    这个压缩包“java源码:EJB的真实世界模型(源代码).rar”显然包含了关于EJB的实际应用场景的源代码示例,这对我们深入理解和学习EJB技术至关重要。 EJB是一种组件模型,它定义了如何在Java应用程序服务器中部署和...

    Dependency Injection in EJB 3

    资源注入是EJB 3中的一项关键技术,它极大地简化了对EJB资源和服务的访问,如JDBC DataSource、JMS对象、JPA EntityManager以及服务如Timer、User Transaction和Web Services。通过使用依赖注入,开发者可以更轻松地...

    j2ee.ejb编程实例.rar

    压缩包内的“j2ee.ejb编程实例”可能包含了这些类型的bean的实例代码,以及如何在Java EE应用服务器(如JBoss、WebLogic、GlassFish等)上部署和测试的步骤。这些实例将帮助开发者了解EJB生命周期管理、事务处理、...

    ejb-3_0-fr-spec-ejbcore.rar_ejb 3.0

    **在ejb-3_0-fr-spec-ejbcore.pdf文档中,你将找到EJB 3.0的官方规范,其中包括详细的API说明、设计原则、用例示例和最佳实践。这份文档对于深入理解EJB 3.0的核心概念和机制至关重要,无论你是初学者还是经验丰富的...

    EJB例子源码自己写的

    这个EJB例子源码可能包含了以上各种概念的实际示例,通过阅读和分析这些代码,开发者可以了解如何在实际项目中应用EJB技术,解决分布式系统中的复杂问题。同时,实践是学习的最佳途径,通过修改和运行这些源码,你...

    EJB_BookStore.rar_DEMO_bookstore_bookstore e_ejb_网上书店 源码

    【标题】"EJB_BookStore.rar"是一个包含DEMO示例的网上书店源码项目,专注于使用EJB(Enterprise JavaBeans)技术实现。这个项目名为"bookstore e_ejb",表明它是一个EJB组件化的电子商务应用,专门用于模拟在线图书...

    ejb资料 javadb资料

    7. **安全性**:EJB 3.0支持基于角色的访问控制(RBAC),允许开发者通过注解来控制访问权限。 8. **生命周期方法**:包括@PostConstruct和@PreDestroy,分别在Bean实例创建后和销毁前执行。 另一方面,**JavaDB**...

    J2EE-Ejb-Jboss

    - **JDBC驱动**:下载并配置MySQL的JDBC驱动,使Java应用能够连接到MySQL数据库。 - **生成EJB**:使用Middlegen工具自动生成EJB,减少手动编码工作量。 ### 六、JSP与Web应用 #### 1. 环境设置 - **Apache Tomcat*...

    基于Java的一个较初级的EJB商业应用的例子.zip

    【Java EJB基础介绍】 Java Enterprise Edition ...你可以通过解压文件,查阅代码,结合EJB和Java EE的相关知识来深入理解这个示例应用的实现细节。这将是一个很好的实践机会,有助于巩固理论知识并提升实际开发技能。

    J2EE示例代码(入门必备)

    5. **JDBC(Java Database Connectivity)**: 用于与数据库进行交互的API,示例中可能有连接数据库、执行SQL查询、处理结果集的代码。 6. **JNDI(Java Naming and Directory Interface)**: JNDI提供了一种查找和...

Global site tag (gtag.js) - Google Analytics