sql注入查找注入点_基本的EJB参考,注入和查找

sql注入查找注入点

在本系列的第一部分中 ,我们介绍了Enterprise JavaBeans v。3.0规范提供的机制,用于定义EJB组件,声明对EJB的引用并通过依赖项注入或程序化JNDI查找将它们连接起来。

在此博客文章中,我们将研究一些基本示例以了解如何使用EJB API。

基本EJB

EJB本质上是带有一些额外EJB元数据的POJO。 可以通过使用EJB批注或通过标准部署描述符来提供将其部署为EJB组件所需的元数据。 以下类实现了一个非常基本的无状态会话EJB:

package es.reacts;import javax.ejb.Stateless;@Stateless(name = "UniqueLocalSessionEJB")
public class UniqueLocalSessionEJBBean implements UniqueLocalBusinessInterface {public UniqueLocalSessionEJBBean() {}public String sayLocalHello() {return this.getClass().getName() + "::" + "Local hello.";}
}

正如您可能从我们之前的博客文章中所回顾的那样, @Stateless批注用于定义无状态会话bean。 可选的name元素用于定义会话bean 名称 。 该元素类似于标准部署描述符的<ejb-name />元素。 此元素默认为bean类(UniqueLocalSessionEJBBean在上面的例子中),和上述使用它的示例的非限定名称重新命名bean来UniqueLocalSessionEJB。

由于我们使用@Stateless批注,因此不再需要在部署描述符中声明EJB。

在此示例中,我们假设EJB打包在EJB模块中,该模块取决于包含其业务接口定义的模块(如以下部分所述)。

业务接口

每个EJB都实现一个或多个业务接口。 业务接口可以是本地远程的 。 两种类型的业务接口之间最重要的区别可以总结如下:

  • 本地业务接口对其方法使用按引用传递语义,并且方法调用不能跨越JVM边界。 本地业务接口仅对被调用方的相同应用程序和JVM实例中的调用方可用。
  • 远程业务接口对其方法使用按值传递语义,并且方法调用可以跨越JVM边界。 远程业务接口可用于被叫方应用程序之外的主叫方。

在上一个示例中,业务接口UniqueLocalBusinessInterface声明如下:

package es.reacts;import javax.ejb.Local;@Local
public interface UniqueLocalBusinessInterface {String sayLocalHello();
}

在EJB v。3.0世界中,业务接口只是用@Local@Remote批注进行批注的普通Java接口。

包装业务接口

在此示例中,我们假设EJB业务接口打包在EJB模块依赖的JAR文件中。 由于EJB客户端仅依赖EJB业务接口,因此,将业务接口打包在一个单独的库中是一个好习惯,以简化接口分配并使它们与实现分离。

将EJB注入Java Servlet

既然我们已经定义了EJB,就可以在Java EE Web模块中的servlet中使用它了。 假设在我们的应用程序中只有一个EJB实现了UniqueLocalBusinessInterface ,我们可以使用空的@EJB注释将其注入:

package es.reacts;import java.io.IOException;
import java.io.PrintWriter;import javax.ejb.EJB;import javax.servlet.*;
import javax.servlet.http.*;public class ServletTest1 extends HttpServlet {@EJBUniqueLocalBusinessInterface lc;public void doGet(HttpServletRequest request,HttpServletResponse response)throws ServletException, IOException {[...]lc.sayLocalHello();[...]}

首先要注意的是,由于仅bean接口就足以识别目标EJB,因此应用服务器将EJB注入到servlet中。 在这种情况下,@EJB批注的beanInterface元件取它的默认值,因为在我们解释之前的帖子 UniqueLocalBusinessInterface:,那是注入字段的类型。 由于应用程序中只有一个EJB可以实现此业务接口,因此servlet的lc字段将注入对此类实例的引用。

值得指出的第二件事是,由于EJB是无状态的 ,因此我们正在将EJB安全地注入到servlet字段中。 由于servlet的默认情况下无状态的 ,你应该注射状态的资源转换成Servlet时域特性,否则你可能会碰到并发相关的问题。 如果您需要在Servlet中使用有状态EJB,则应通过程序化JNDI查找来检索引用,因为这将确保每次查找操作都返回一个新实例。

让我们部署和运行我们的应用程序,我们将看到servlet注入了它的目标EJB,并且正确执行了对其业务接口的sayLocalHello()方法的方法调用。

如果我们想注入对远程接口的引用,则客户端代码不会受到影响。 如果尝试将UniqueLocalBusinessInterface@Local更改为@Remote ,那么您会看到该servlet没有任何变化,并且可以继续正常工作。

如果一个以上的EJB实现相同的接口会发生什么?

假设我们在此应用程序的EJB模块中添加了另一个EJB,它实现了与上一个相同的接口UniqueLocalBusinessInterface 。 在这种情况下,由于bean接口不再足以确定要注入的目标bean,因此将返回错误。 例如,在WebLogic Application Server中部署这样的应用程序会导致引发以下错误:

[08:46:25 PM] Caused by: weblogic.deployment.EnvironmentException: [J2EE:160199]Error resolving ejb-ref 'es.reacts.ServletTest1/lc1' from module 'WebTest0' of application 'EJBTestApp'. The ejb-ref does not have an ejb-link and the JNDI name of the target bean has not been specified. Attempts to automatically link the ejb-ref to its target bean failed because multiple EJBs in the application were found to implement the 'es.reacts.UniqueLocalBusinessInterface' interface. Please specify a qualified ejb-link for this ejb-ref to indicate which EJB is the target of this ejb-ref.

注入对特定EJB实例的引用

为了解决上一节中出现的问题,我们需要为应用程序服务器提供所需的信息以标识目标EJB。 如前一篇文章所述 ,我们可以使用以下两种方法:

  • 我们要么使用@EJB批注的name元素(或部署描述符的相应<ejb-ref-name />元素)在应用程序的私有名称空间中声明EJB引用,然后使用EJB链接到目标bean。部署描述符。
  • 或者,我们使用@EJB批注的beanName元素(或部署描述符的相应<ejb-link />元素)直接在我们的代码中进行操作。

将EJB映射到私有命名空间

使用第一种方法,我们将在servlet中获得以下代码:

@EJB(name = "ejb/bean-name")
UniqueLocalBusinessInterface lc;

以及充当EJB客户端的Java EE Web模块的部署描述符(web.xml)中的以下元素:

<ejb-local-ref><ejb-ref-name>ejb/bean-name</ejb-ref-name><ejb-ref-type>Session</ejb-ref-type><local>es.reacts.UniqueLocalBusinessInterface</local><ejb-link>UniqueLocalSessionEJB</ejb-link>
</ejb-local-ref>

<ejb-link />元素包含我们在示例开头定义的带注释的Bean名称:

@Stateless(name = "UniqueLocalSessionEJB")

在EJB实现类中。

请注意,在此示例中,我们显式使用了@EJB name元素,但是我们可以使用其默认值建立链接。 name元素的默认值为:

[合格的类名称] / [属性或字段名称]

在这种情况下,将是:

es.reacts.ServletTest1 / lc

使用默认的自动生成的名称以及使用<ejb-link />进行EJB链接的缺点是,每次重构代码时,都必须检查部署描述符。 尽管开发人员有时会另外考虑,但Java EE规范定义了一些其他角色,例如,攻击者和部署者。 在大型公司环境中,此类概要文件覆盖开发人员的注释以“插入”应用程序使用的组件的情况并不少见。 注释覆盖是标准部署描述符仍然存在的原因之一。 当引用是在应用程序内部或外部的远程组件时,尤其如此。 为此,我建议你不要依赖于自动生成的名称,并使用自定义的有据可查的名称代替。

将EJB链接到私有命名空间中的引用

第二种方法提供了使用@EJB批注的beanName元素将引用链接到其目标bean的直接方法。 Servlet代码将使用以下EJB参考:

@EJB(beanName = "UniqueLocalSessionEJB")
UniqueLocalBusinessInterface lc;

而且我们在部署描述符中不需要其他信息。

尽管此方法允许开发人员在不依赖部署描述符的情况下将引用链接到EJB,但上一节末尾给出的建议仍然有效。 请记住,可以在部署时覆盖注释! 如果事先知道这样的引用可以覆盖,则不要将EJB链接到该引用。 在这种情况下,如上一节所述,最好为引用指定一个名称。

参考: The Gray Blog上的JCG合作伙伴 Gray提供了基本的EJB参考,注入和查找 。

相关文章 :
  • EJB 3.0注入和查找简介
  • EJB程序化查找
  • 使用Oracle WebLogic对应用程序外部的EJB的引用
  • EJB 3.1全局JNDI访问
  • GWT EJB3 Maven JBoss 5.1集成教程
  • Java泛型快速教程
  • JVM如何处理锁

翻译自: https://www.javacodegeeks.com/2011/08/basic-ejb-references-injection-and.html

sql注入查找注入点

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/359692.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

安徽省c语言选择题题库,C语言选择题题库.doc

C语言程序设计题库说明一 本题库适用对象计算机应用技术计算机软件软件技术计算机网络技术与计算机控制技术等专业二 本题库包含有175道选择题三 本题库所有题目均附有答案一、选择题下列各题ABCD四个选项中&#xff0c;只有一个选项是正确的&#xff0c;请将正确选项涂在答题卡…

求二叉树的最小深度

思路&#xff1a;用递归的方法求解。 输入&#xff1a;二叉树的根节点&#xff1b; 输出&#xff1a;二叉树的最小深度。 最小深度的定义&#xff1a;从根节点到叶子节点的最短路径上的节点数。 算法如下&#xff1a; 将二叉树分为这么几种情况&#xff1a; 传入的根节点为空&a…

qfp封装能够linux,QFP、PQFP、LQFP、TQFP封装形式及PCB详解

问题&#xff1a;画PCB时&#xff0c;会发现很多的集成电路都是QFP封装&#xff0c;比如很多的单片机都有这种封装。各个器件商会在自己的数据手册中说明他的器件是QFP&#xff0c;LQFP或TQFP&#xff0c;然后&#xff0c;有的给出封装尺寸图&#xff0c;有的则不给。那么&…

编写下载服务器。 第三部分:标头:内容长度和范围

这次&#xff0c;我们将探索更多的HTTP请求和响应标头&#xff0c;以改善下载服务器的实现&#xff1a; Content-length和Range 。 前者表示下载量很大&#xff0c;后者允许部分下载文件或在我们开始时失败后继续下载。 Content-length响应标头对于跟踪下载进度的客户端非常有…

dede文章列表加上序号效果

dede文章列表加上序号效果 css代码部分 <style type"text/css"> <!-- .downtop { FLOAT: left; OVERFLOW: hidden; WIDTH: 218px; HEIGHT: 278px } .downtop UL.text { MARGIN: 0px 10px; WIDTH: 198px; PADDING-TOP: 5px } .downtop UL.text LI { WIDTH: 1…

解答互联网创业中,你肯定会遇到的问题!

作为创过业&#xff0c;并且失败了的人&#xff0c;还是有那么一点点经验来回答这些问题的。1.我现在有个idea&#xff0c;上线之前如何在保证不被泄露的情况下又能了解这个idea对用户有多大吸引力&#xff1f;答&#xff1a;短时间内快速做出原型&#xff0c;找到10个左右的目…

android 垂直自动滚动条,Android实现Activity水平和垂直滚动条的方法

本文实例讲述了Android实现Activity水平和垂直滚动条的方法。分享给大家供大家参考&#xff0c;具体如下&#xff1a;android:layout_width"match_parent"android:layout_height"match_parent"android:scrollbars"vertical" >android:layout_…

javadoc定义异常_Doclava:来自Google的自定义Javadoc Doclet

javadoc定义异常Doclava是Google的自定义Javadoc Doclet&#xff0c;由Google Guice使用&#xff08;请参见稍冷一些的Javadocs &#xff09;。 Doclava使用JSilver作为其模板引擎&#xff0c;这是Clearsilver的纯Java实现。 我个人喜欢联合文档的想法&#xff0c;该概念允许文…

HDU 2845 Beans

本来是很简单的一道题&#xff0c;却想了好长时间 由于数据量比较大&#xff0c;所以逐行读入&#xff0c;逐行处理 先处理每一行的不相邻元素和的最大值&#xff0c;记录在数组b中 最后计算不相邻行的和的最大值 二者的状态转移方程都类似&#xff1a;dp[j] max(dp[j - 1], d…

计算机由什么组成

对于一个不是计算机专业的编程人员&#xff0c;有很多东西要去学习&#xff0c;一直不理解计算机的组成和原理&#xff0c;今天查看百科&#xff0c;稍微了解一下写出来&#xff0c;让以后巩固&#xff1a; 1&#xff0c;计算机是由硬件系统和软件系统组成的 硬件系统&#xff…

android 重新启动应用程序,通过单击应用程序图标打开Android应用程序时重新启动...

我是Android开发世界的新手,我已经建立了一个简单的“Hello World”应用程序.首先,活动请求一个文本.当单击“Go”按钮时,应用程序将启动显示输入文本的第二个活动.如果我单击HOME按钮,然后单击应用程序图标,该应用程序将再次启动第一个活动,但是如果我按住主屏幕按钮并单击“最…

继承,is,as,多态

继承中的构造方法&#xff1a;1、创建子类对象时&#xff0c;一定会先创建父类对象2、如果调用的子类构造方法没有使用base&#xff0c;就会自动调用父类无参的构造方法&#xff0c; 如果父类没有无参的构造方法就会报错3、如果调用的子类构造方法使用了base&#xff0c;就会…

太古鸿蒙诀正式版v1.07,百变队长安崎:台上小辣椒,台下情歌王

在舞台上魅力四射的THE9队长安崎&#xff0c;在台下却是喜欢唱情歌的软萌girl。这样的安崎你爱了么&#xff1f;反差萌王者安崎作为队长&#xff0c;在舞台上的表现一直都是“炸裂”、“辣”、“性感”、“野性”&#xff0c;而舞台之下的安崎则一直呈现的是可爱、甜美&#xf…

erlang 架构原理_Erlang与Java内存架构

erlang 架构原理我读了一篇关于Erlang VM的内存管理策略的非常非常有趣的文章。 它是Jesper Wilhelmsson撰写的论文 &#xff0c;我认为讨论Erlang的内存设置和Oracle的Java VM之间的差异可能会很好。 作为对从未听说过Erlang的人们的一个简短的介绍; 它是一种功能语言&#xf…

ASP.NET MVC IOC 之AutoFac攻略

一、为什么使用AutoFac&#xff1f; 之前介绍了Unity和Ninject两个IOC容器&#xff0c;但是发现园子里用AutoFac的貌似更为普遍&#xff0c;于是捯饬了两天&#xff0c;发现这个东东确实是个高大上的IOC容器~ Autofac是.NET领域最为流行的IOC框架之一&#xff0c;传说是速度最快…

android对话框跳转页面,android应用Dialog跳转到Activity

Java基础-四要素之一《多态》什么是多态 指允许不同类的对象对同一消息做出响应.即同一消息可以根据发送对象的不同而采用多种不同的行为方式.(发送消息就是函数调用) 多态是指程序中定义的引用变量所指向的具体类型和通过该引用变量发出的 ...java进制转换器 图形用户界面 十进…

apache cxf_Apache CXF负载平衡和故障转移

apache cxf不久前&#xff0c;我们已经面临了基于Apache CXF的负载平衡Web服务客户端的需求。 此外&#xff0c;当某些服务器关闭时&#xff0c;客户端应自动进行故障转移。 更糟糕的是&#xff0c;服务器目标地址列表要从外部服务获取并在运行时更新。 最终&#xff0c;我们最…

HDU 1874 最直接的最短路径问题

题目链接&#xff1a;http://acm.hdu.edu.cn/showproblem.php?pid1874 Problem Description某省自从实行了很多年的畅通工程计划后&#xff0c;终于修建了很多路。不过路多了也不好&#xff0c;每次要从一个城镇到另一个城镇时&#xff0c;都有许多种道路方案可以选择&#xf…

晶体管

晶体管-沟道 场效应-电容性的控制沟道 势效应-直接控制沟道 平带电压 由于半导体和金属的功函数的不同&#xff0c;导致半导体表面层并不属于平带状态&#xff0c;为了恢复平带状态所加的电压为平带电压&#xff0c;Vfb 转载于:https://www.cnblogs.com/rice808/p/3874597.html…

领域驱动设计模式设计与实践_在域驱动设计中使用状态模式

领域驱动设计模式设计与实践域驱动设计&#xff08;DDD&#xff09;是一种开发软件的方法&#xff0c;其中&#xff0c;通过将实现与核心业务概念的不断发展的模型相联系&#xff0c;解决了问题的复杂性。 该术语是由Eric Evans创造的&#xff0c;并且有一个DDD专用站点可以促进…