`
stenlylee
  • 浏览: 255829 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

扩展seam组件

阅读更多

任何一个框架都必须拥有一个非常重要的功能:可扩展性。JBoss Seam在这个方面得到了最高的分数。理由非常简单。The main goal, to introduce consistent programming model that will make various frameworks to work together, is not just promoted for application developer, but also used through-out Seam itself.所以,通过了解如何使用组件模型并快速深入其内部原理后,你就能便捷地开始扩展内置组件。

首先,你需要了解组件开发的流程。Seam程序由context listener启动,context listener则通过根据配置实例化Initialization对象来生成。而这些配置依次来自于以下几个部分:
1、WEB-INF/components.xml和不建议使用的WEB-INF/events.xml
2、servlet context和classpath根目录下的seam.properties
3、用@Name注解的Seam组件

然后,依赖管理器通过评估组件依赖关系来决定加载哪些组件。

在这里,Seam会用到另外一个注解——@Install。它并不仅仅指定是否加载某个组件及其依赖的组件(该功能还可以通过配置文件来覆盖),同时还指定了组件的优先权。如果两个组件拥有相同的名称,并且同时存在,依赖管理器就会加载具有更高优先级的那个。

这里的优先级是由预先定义的整型常量指定:
1、BUILT_IN [0]用于内置组件
2、FRAMEWORK [10]用于继承自Seam的框架
3、APPLICATION [20],默认的优先级,用于程序中的组件
4、DEPLOYMENT [30]用于在particular deployment中复写的组件
5、MOCK [40]用于在测试中使用到的对象

以下两个注解提供了组件在部署过程中的更多控制功能:
1、@BypassInterceptors:让Seam拦截在某个个类或者方法上失效
2、@Startup在相应的scope中初始化组件,让其生效

通过了解以上部分,你就可以扩展任何组件,不管是Seam内置的组件还是第三方提供的框架或程序。

扩展Identity对象

作为示例,我将向你展示,如何扩展内置的Identity对象,让其能够支持自定义的JAAS登录模块...
As example I’ll show you how to extend built-in identity object to support custom JAAS Login Module that requires custom callback handler to be used to obtain/provide further information. This particular implementation adds functionality to support NTLM as other authentication method (together with customized jCIFS library) and NTLM support iself is not part of this code snapshot.

 

@Name(”org.jboss.seam.security.identity”)
@Scope(SESSION)
@Install(precedence = APPLICATION)
@BypassInterceptors
@Startup
public class NTLMIdentity extends Identity {

//
// custom code
//

@Override
public String login() {
    try {
       retrieveNTLMAuthenticationDetails();
    } catch (LoginException le) {
       log.error(”Unable to retrieve NTLM authentication details!”, le);
       return null;
    }
}

@Override
protected CallbackHandler getDefaultCallbackHandler() {
     return new CallbackHandler() {
       public void handle(Callback[] callbacks)
          throws IOException, UnsupportedCallbackException {
          for (int i = 0; i < callbacks.length; i++) {
            if (callbacks[i] instanceof NameCallback) {
              ((NameCallback) callbacks[i]).setName(getUsername());
            } else if (callbacks[i] instanceof PasswordCallback) {
              ((PasswordCallback) callbacks[i]).setPassword(getPassword() != null ?
                  getPassword().toCharArray() : null);
            } else if (callbacks[i] instanceof SFSIdentityCallbackHandler) {
               processSFSCallbackHandler((SFSIdentityCallbackHandler) callbacks[i]);
            } else {
               throw new UnsupportedCallbackException(callbacks[i], “Unsupported callback”);
            }
         }
       }
     };
   }

   //
   // custom code
   //
}

 

 

 

 

这里@Name注解覆盖了Seam内置的Identity组件名称,并且给他比BUILT_IN更高的优先级。所以当你运行程序的时候,#{identity}和Identity.instance()将调用NTLMIdentity对象。

分享到:
评论

相关推荐

    JBOSS SEAM组件中文手册

    JBOSS SEAM组件中文手册 Seam_2.0_Reference_zh_CN

    Seam - 语境相关的组件

    Seam - 语境相关的组件 ,学习seam的好资料.

    JBoss Seam 工作原理、seam和hibernate的范例、RESTFul的seam、seam-gen起步、seam组件、配置组件、jsf,jboss、标签、PDF、注解等等

    Seam - 语境相关的组件[满江红20071230]............................................................................................................................ 1 Java EE 框架...........................

    jboss-seam2.1

    Seam组件可能是 态义 关关 态 有状 的,包含与几个定 良好的上下文中任何一个相 的状 , 包括长开间运行上 下文、持久化上下文、业务流程上下文, 以及用户够交互中能 跨多个 Web请求保存的务 务上下文。

    Seam 2.1 安全模块框架

    Seam2.10安全API为你使用Seam开发的应用程序提供了大量与安全认证...• 权限管理 - 一组内置的Seam组件,能让应用程序的安全政策变得容易管理 • 验证码支持 - 帮助防止通过软件或脚本对你用Seam开发的网站进行攻击等等

    jboss-seam 注解

    为一个类定义一个Seam组件。所有Seam组件都需要该注解。 @Scope @Scope(ScopeType.CONVERSATION) 定义默认的组件上下文。可以定义的值由 ScopeType 枚举:EVENT, PAGE, CONVERSATION, SESSION, BUSINESS_PROCESS, ...

    jboss seam

    这是中文手册,Seam为持久化集成了JPA和Hibernate 3,为轻量化的异步性集成了EJB ... Seam组件可以同时作为一个Web Service进行调用,异步地从客户端JavaScript或者Google Web Toolkit,或者当然也可以直接从JSF调用。

    Seam-语境相关的组件

    对JBoss Seam及其上下文相关的组件模型等的介绍 资源中包括两个文档,但是内容一样,怎么方便怎么看

    seam需要的jar包

    seam框架需要的所有jar包,支持seam ui组件

    seam_carving 代码实现 seam

    seam_carving代码实现 图像缩放

    seam 2.1 参考手册

    作为第一选择的显示层,这包含着一些技术细节:我们所作的是让你能够明显的通过Wicket使用Seam组件,从Wicket内部类中使用Annotations,能够控制你的业务进程管理任务等。简单地说,就是所有的控制事务你能够在你的...

    Seam框架文档简述

    Seam全称是Jboss Seam,是一个Java EE 5框架。它通过把JSF与EJB3.0组件合并在一起,以及利用JDK5.0的Annotation技术,从而为开发基于Web的企业应用程序提供一个最新的模式。

    Jboss-Seam 2RC 中文翻译

    Seam为你的应用程序中所有的业务逻辑定义了一种统一的组件模型。 Seam组件可能是有状态的,包含与几个定义良好的上下文中任何一个相关联的状态, 包括长时间运行上下文、持久化上下文、业务流程上下文, 以及用户...

    seam_in_action

    seam in action seam in action seam in action seam in action seam in action seam in action seam in action

    jboss Seam2.0 语境相关的组件文档

    jboss Seam2.0 语境相关的组件_[满江红20080327](PDF+CHM双版本)

    JBOSS_SEAM配置

    JBOSS_SEAM配置

    seam级联菜单例子

    seam级联菜单例子

    seam资料

    seam资料seam资料seam资料seam资料seam资料seam资料seam资料seam资料

    JBoss Seam

    JBoss Seam JBoss Seam JBoss Seam

    seam_seamcarving_

    seam carving的相关代码实现

Global site tag (gtag.js) - Google Analytics