Java的应用服务器- 01:介绍应用服务器

2009年9月15日由恩里克 留下一个回复»

现在我们有一个RPC服务可以作为实施应用服务器的基础,但只有一个RPC服务是不够的。 因此,我们将实现这些模块/服务:

  • 安全性:授权,认证和审计

  • 连接池与数据库

  • 异步消息传递服务

而且,除了有一个API来添加服务,服务器将提供一个API添加用户模块。 现在的服务器组件图:

Diagrama de componentes

组件图

在上层的组件使用的底层组件的功能。 现在,让我们探讨的每个组件。

安全领域的经理

这是在任何应用服务器强制性的。 在三界安全管理器安装安全领域。 什么是安全的境界? 从概念上讲它是一个组件,控制访问服务。 从技术角度来看,是该接口的实现:

  SecurityRealm {公共接口
     / **
      * login方法。
      * @参数凭据的凭据来验证
      * @抛出LoginException如果在登录信息exeption ocurrs
      * /
    无效登录(证书认证)抛出LoginException;

     / **
      *注销方法。
      * @参数凭据的凭据
      * /
    无效注销(证书认证);

     / **
      *此方法返回true,当且仅当服务的方法可
      *由于执行与凭据。
      *
      * @参数凭据凭据执行用户
      * @参数的ServiceName服务名称
      * @参数methodName中方法名执行
      * @参数PARAMS的paramenters传递给方法
      * @抛出NotExecutedException的信号执行不给定的凭据中,servicename,methodName中,而params允许
      * /
     executionAllowed无效(证书认证,字符串的ServiceName,字符串methodName中,对象... PARAMS)抛出NotExecutedException;
 } 

只有三种方法:登录,注销和isExecutionAllowed。 前两个涉及到认证的概念,第三是指释放的概念,但也可以关联到审计,哪些是始终执行之前,服务调用。

安全管理器使用的拦截器领域,在Java RPC - 07显示:在方法onPreExecution()方法被调用executionAllowed()在安全领域,并继续执行,如果这个异常没有NotExecutedException。 出于安全原因,不运行如果有任何executionAllowed异常(或错误)()等防止错误中断的安全系统。

然后放置任意代码executionAllowed()的方法可以授权或禁止的某些参数与服务方法执行。

在安全领域的经理管理着安全领域的集合。 他们运行的所有和唯一授权的,如果所有的授权采取打电话。 该安全服务器已实现了一个抽象的领域,它是基于用户名和密码,并为审计(日志记录)其他安全领域的基础。

 公共抽象类扩展AbstractUserPasswordSecurityRealm SecurityRealmAdapter {

    公共AbstractUserPasswordSecurityRealm(){
     }

    公共无效登录(证书C)抛出LoginException {
         UserPasswordCredentials CRED =(UserPasswordCredentials)C;
        如果(cred! = NULL){
             Cred.getUser弦乐用户=();
             Cred.getPassword字符串传递=();
            验证(用户,通过);
        否则{}
            抛出新LoginException(“空凭据”);
         }
     }

    公共无效executionAllowed(凭据凭据,弦乐的ServiceName,字符串methodName中,对象... PARAMS)抛出NotExecutedException {
        如果(凭据== NULL){
            抛出新NotExecutedException(“不等同于”);
         }
     }

    公共抽象无效验证(弦乐用户,串通)抛出LoginException;
 } 

模块管理

正如我们所看到的,服务器是可扩展的。 怎么会呢? 通过模块。 一个模块就是一个bean,有一个名字和两个方法来管理生命周期:启动()和shutdown()。 然后,服务器有一个方法来获取模块的名字。 由于界面是如此简单,容易适应任何服务纳入到服务器。 例如,异步消息传递服务实现单独创建了一个模块,以适应这个应用服务器。 同上与连接池的数据库。 接口:

  {公共接口模块
    无效的setName(String名称);
    字符串的getName();

    无效启动()抛出异常;
    无效关机();
 } 

对于一个从服务模块,我们要求ServerContext:

ServerContext.getModule(MODULENAME);

核ServerContext类的,提供访问应用服务器的不同部分静态的方法。 这些谁是最GetModule desatacan()和getServerConfig()。 第一个我们看到的。 第二个返回一个与那些从配置文件中加载属性映射。 我们将看到它一节专门的配置。

装载机服务

这是组件读取配置文件并创建在中国服务。 它是作为一个模块,可轻松更换,而另一个连接到服务器。 基本上读取配置文件描述的服务,并添加参数到服务器。

在接下来的文章中,我将介绍数据库和信息服务的连接池。 我还将描述配置文件。

直到下一次。

Blogger帖子 DIGG 书签交易 谷歌阅读器 分享
广告

发表评论

垃圾邮件保护WP验证码-免费