Spring管理JNDI来调用EJB

29、Spring与J2EE集成:JNDIEJB和JMS的深入解析 本文深入解析了Spring与J2EE的集成,重点探讨了JNDIEJB和JMS的使用方法及技术要点。通过具体示例展示了Spring如何简化JNDI资源查找、EJB构建与访问,以及如何利用Spring强大的依赖注入和事务管理功能优化J2EE应用程序开发。文章还总结了相关操作步骤和技术优势,为开发者提供了实用的参考指南。 阅读详情

        最近还是在做平台项目,遇到了很多问题,接下来会用几篇博客来分享一下这些问题和解决方法。

        首先要说的就是通过Spring管理JNDI来调用EJB。

        在开始之初,由于没有看重功能实现,所以就在web端中简单的配置了一下Spring管理JNDI 来调用EJB的配置,而且还会调用成功了。

       具体的配置如下:

<bean name="addFunctionAction"
       class="com.tgb.collegeplatform.function.addfunction.action.AddFunctionAction"
       scope="prototype">
       <property name="commonAddBean" ref="commonAddBean"></property>
    </bean>
    <bean id="commonAddBean" class="org.springframework.jndi.JndiObjectFactoryBean">
       <property name="jndiName" value="common_AddBean/remote"></property>
    </bean>


        能够从上面的配置看出来,首先Action实例化的时候要注入一个CommonAddBean对象,而CommonAddBean对象是通过JndiObjectFactoryBean对象通过JNDI查找Common_AddBean/remote来找到的ejb对象。

        这样会调通是因为这个EJB对象是在本地,而JNDI调用的时候是需要有property的,如果没有配置property的话,也就是默认在的在localhost上来查找。所以会调用成功。

        随后,由于开发战友反映JBoss开发重启问题太影响开发效率,所以我就开始做demo,将后台的公共的EJB对象部署到另一台机器上,而这样减轻JBoss启动时候的负载量,或者可以Web端直接用Tomcat开发。

        所以写Demo的时候就发现我这里的配置文件是有问题,因为仅仅能够调用localhost的,所以需要多加配置。经过学习并且修改,配置为下面的:

<!-- Spring管理Struts2的Action -->
    <bean name="modifyRoleAction"
       class="com.tgb.collegeplatform.role.modifyrole.action.ModifyRoleAction"
       scope="prototype">
       <property name="commonTreeModelQueryBean" ref="commonTreeModelQueryBean"></property>
       <property name="commonQueryBean" ref="commonQueryBean"></property>
       <property name="commonModifyBean" ref="commonModifyBean"></property>
    </bean>
    <bean id="commonTreeModelQueryBean" class="org.springframework.jndi.JndiObjectFactoryBean">
       <property name="jndiName" value="common_TreeModelQueryBean/remote"></property>
       <property name="jndiEnvironment">
           <props>
              <prop key="java.naming.factory.initial">org.jnp.interfaces.NamingContextFactory</prop>
              <prop key="java.naming.factory.url.pkgs">org.jboss.naming:org.jnp.interfaces</prop>
              <!-- <propkey="java.naming.factory.url.pkg">org.jboss.naming</prop>-->
              <prop key="java.naming.provider.url">192.168.24.40:1099</prop>
           </props>
       </property>
    </bean>


        之后就要验证这个配置的正确性,需要启动Web来测试。

        启动之后,就遇到了另外一个问题:javax.naming.CommunicationException Root exceptionis java.rmi.UnknownHostException: Unknown host,分析这个问题,首先应该考虑到的是这个问题一定是出现在服务器,也就是192.168.24.40的机器。

        上网搜索了一下问题的解决方法,网上说是JBosss服务器启动时,指定了-b 0.0.0.0 导致出现这个问题。解决方法为run -b 0.0.0.0 -Djava.rmi.server.hostname=你的Ip地址 -Dremoting.bind_by_host=false

         之后在在40机器上启动jboss之后添加了上面的参数,之后再调用的时候上面的问题就不出现了。但是又报了另外一个错误,错误很低级了,是没有将pageModel和TreeModel序列号的问题。这个也是以前没有发现的,因为这个jar以前在localhost调用的时候不会出现问题,但是移到远端就出现问题了,这个很好理解。解决方法就是在这两个类上实现序列号接口。在之后又报了另外一个错误,是没有发现org.hibernate.collection.PersistentSet类的异常,因为我使用的Tomcat调用的,所以断定是lib包的问题,就没有再解决(因为我知道在后面还会出现这个问题,到时候一并解决),开始着手部署linux系统把底层的JBoss服务器搭建起来。

        这样就算解决了Spring管理JNDI 调用EJB的问题。

        其实往往问题的出现是连锁的,需要的是能够从问题中找到问题源头,如何解决问题的本领。还有就是对问题要有预见性,要知道哪里是存在隐患的,要越早的发现问题并且将问题解决掉是非常重要的。

 

JNDI查找部署在JBOSS中的EJB对象并调用 使用环境java1.5.0安装在(JAVA_HOME)C:/Program Files/Java/ JBOSS4.0.2安装在(JBOSS_HOME)C:/Program Files/jboss-4.0.2/ANT1.6.2安装在(ANT_HOME)C:/Program Files/apache-ant-1.6.2/文件路径EjbDemo2(client(HelloClient 阅读详情

相关推荐

关于JNDI and EJB

 JNDI (The Java Naming and Directory Interface,Java 命名和目录接口) 是一组在Java 应用中访问命名和目录服务的API。为开发人员提供了查找和访问各种命名和目录服务的通用、统一的方式。借助于JNDI 提供的接口,能够通过名字定位用户、机器、网络、对象服务等。 命名服务:就像DNS一样,通过命名服务器提供服务,大部分的J2EE 服务器

Tomson Xu 1669

websphere 安装中出现JNDI资源找不到问题总结

问题场景:进行重装应用,删除旧应用,基于原旧应用映射集群重新安装应用。在安装过程中出现JNDI找不到这类问题。 问题归纳:   数据源问题:删除应用,对应集群的数据源可能会受到影响,如数据源下具体的配置被删除,故而导致问题发生。   集群节点问题:数据源建立好之后选在映射集群后,测试连通性失败(具体报错为集群不含节点之类),原因为删除应用,集群下的节点也会被...

aolv3500的博客 405

重温深入浅出Spring Boot的笔记

目录第一章 Spring Boot来临1.1 Spring的由来1.2 注解还是XML1.3 Spring Boot 的优点1.4 传统Spring MVC和Spring Boot的对比 第一章 Spring Boot来临 1.1 Spring的由来 在EJB年代,开发一个EJB需要大量接口和配置文件,其造成的结果就是往往配置的工作量比开发的工作量还要大,还有就是EJB是在EJB容器中运行,而JSP和Servlet却运行在Web容器中,而使用Web容器去调用EJB容器的服弊端括: 需要增加调用的配置文件

A_stubborn_man的博客 1484

TongWeb7的JNDI配置

TongWeb7的JNDI配置

web的博客 4299

J2EE容器,EJBJNDI概念扫盲

1.什么是J2EE容器 J2ee含的容器种类大约有 Web容器、Application Client容器、EJB容器、Applet客户端容器等

HAPP NEW JAVA 5882

JavaEE体系架构概述(续)

持久层框架提供透明持久化,业务层应用程序只需要调用持久层框架的API就 可以保存、查询和删除持久对象了。持久层框架会使用O/R(对象/关系)映射 自动生成访问数据库的SQL语句。另外,持久层框架能在服务器外面运行, 不需要将其部署到应用服务器中

justhacker的专栏 1457

spring的BeanFactory和AplicationContext

[b]本文转载http://lelglin.iteye.com/blog/975622,主要用于记录和回忆[/b] org.springframework.aop ——Spring的面向切面编程,提供AOP(面向切面编程)的实现 org.springframework.asm——spring 2.5.6的候需要asm jarspring3.0开始提供它自己独立的asm jar...

iteye_3337的博客 155

javaEE之--------Spring简介

SSH三大框架分别是Struts2  Spring  Hibernate这三个框架组成,这篇文章主要说一下Spring 简单的理论介绍   Spring的核心是个轻量级容器,实现了IoC(控制翻转)模式的容器,基于此核心容器所建立的应用程序,可以达到程序组件的松散耦合。这些特性都使得整个应用程序维护简化。 Spring框架核心由下图所示的七个模块组成。 1、核心容器(

yangxin_blog的专栏 3086

第28章 Spring框架内的JNDI支持

本章内容JNDI简单回顾Spring框架内JNDI访问的基石——JndiTemplateJNDI对象的依赖注入——JndiObjectFactoryBean。

hello world 11万+

EJBSpring

EJB实现原理: 就是把原来放到客户端实现的代码放到服务器端,并依靠RMI进行通信。RMI实现原理 :就是通过Java对象可序列化机制实现分布计算。服务器集群: 就是通过RMI的通信,连接不同功能模块的服务器,以实现一个完整的功能。

lipviolet的博客 1259

SpringEJB的整合

Spring支持EJB能够大致的分成两类:访问和实现。Spring中内置了三种抽象类作为EJB Bean的基类,相对应于EJB无状态Bean、有状态Bean和消息Bean,它们分别为AbstractStatelessSessionBean、AbstractStatefulSessionBean、AbstractMessageDrivenBean。运用只要以它们为父类,作相应的扩展即可。 ...

Tankywang的专栏 460

SpringEJB 比较

本文中,笔者希望比较客户的评价Spring相对EJB所具有的一些特性,同Spring可以与EJB进行协同的工作,Spring可以应用到EJB应用中去,同样,EJB可以在Spring应用中很好的使用。首先EJB最初的设计思想考虑的是为分布式的应用服务的。比如,JBoss的EJB 3.0的实现是基于Hibernate的,Oracle的EJB 3.0实现是基于TopLink的,但是,在JBoss或者Oracle上跑应用程序,开发者既不需要去学习Hibernate,也不需要学习TopLink提供的独特API。

JBIB ENGINE 1347

Java面试之EJB & Spring

1、EJB 与JAVA BEAN 的区别?【基础】 答:Java Bean 是可复用的组件,对Java Bean 并没有严格的规范,理论上讲,任何一个Java 类都可以是一个Bean。但通常情况下,由于Java Bean 是被容器所创建(如Tomcat)的,所以Java Bean 应具有一个无参的构造器,另外,通常Java Bean 还要实现Serializable 接口用于实现Bean 的持久性...

晓宇博客 981

EJBspringboot

典型内容:

weixin_41961922的博客 884

Spring mvc 4系列教程(一)

一、Spring框架概览 Spring框架是一种轻量级、一站式解决企业级应用的解决方案。不仅如此,Spring的模块化的特点,可以使你只引用所需要的部分,而无需引用全部。你可以使用控制反转容器(IoC container)、Hibernate集成代码、JDBC抽象层。Spring支持事务管理声明、RMI或Web Service实现远程调用。它能够全部支持MVC框架的全部特性,且能显示集成AOP到...

weixin_33835690的博客 105

基于SpringJNDI方式请求EJB服务

         开发中有一个新项目需要调用现存的EJB服务,新项目有Spring容器,参考文档后使用JNDI方式请求EJB服务。解决思路如下。            首先是配置JNDI服务的属性文件,application.local.properties。 ######################################################### # JNDI ...

Gordon的博客 367

经典笔试篇-EJBSpring

七、EJBSpring 部分:(共18 题:基础4 道,中等难度13 道,较难1 道) 162、EJB 与JAVA BEAN 的区别?【基础】 答:Java Bean 是可复用的组件,对Java Bean 并没有严格的规范,理论上讲,任何一个Java 类都可以是一个Bean。但通常情况下,由于Java Bean 是被容器所创建(如Tomcat)的,所以Java Bean 应具有一个无参的构造器...

逍遥云恋 503
上一篇: linux安装jdk
下一篇: linux解压命令
lfsf802
博客等级 码龄16年 1576粉丝 189原创
评论 4
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值