JAF(JavaBeans Activation Framework)

--------http://blog.sina.com.cn/s/blog_61583c540100dw42.html

JAF(JavaBeans Activation Framework)

  (2009-08-02 22:20:09)
标签: 

java

 

jaf

 

jsr925

分类: Java相关规范解读

JAF(JavaBeans™ Activation Framework Specification Version1.1-JSR 925)

1、对其用途进行一个通俗描述

我们经常在用浏览器,浏览器强大的媒体识别和显示能力大家应该深有体会。当我们想在浏览器中显示浏览器默认支持之外的内容时,我们可以通过装插件的方式来达到目的。在html/xhtml中有一个标签:embed。典型的属性如下:

<embed /> Attributes:

  • align(optional)
  • alt (optional)
  • code (optional) (Internet Explorer)
  • codebase (recommended)
  • frameborder (optional)
  • heigh (optional) (Netscape)
  • hidden (optional)
  • hspace (optional)
  • name (optional)
  • pallette (optional)
  • pluginspage (optional)
  • pluginurl (optional)
  • src (optional)
  • type (optional)
  • units (optional)
  • vspace (optional)
除了一些显示属性定义之外,最重要的两个属性是src和type:
<embed src="hi.flv" type="video/x-flv"/>

其实与其相关的有很多类似的例子:
  • 你在桌面上双击一个文件为什么就会直接用对应的程序打开呢?
  • 如果你是开发者,你不会不知道eclipse,eclipse->Window->Preferences->General ->Content type&Editor->File Associations
这种例子太多了。

上面的共同点是:
任何资源应该有一个对应的类型,所有的类型应该至少有一个对应的处理程序。如果要资源和应用对应起来,必须要有一个 注册管理表。有兴趣的人可以研究Windows的在什么地方放,linux的在什么地方放?呵呵。

回到我们的主题,JavaBeans Activation Framework就是提供一个标准的框架,让应用程序和资源类型对应起来,从而实现资源识别和资源处理的自动化。

简单的一个对应例子: .gif -> image/gif -> gif显示器

2 抓出核心框架

2.1 资源 DataSource(接口)
资源至少要告诉自己的类型,当然我们可以通过后缀简单直接获取类型(需要mime.types对应表)。类似:
text/html                            html htm HTML HTM
text/plain                            txt text TXT TEXT java c c++ pl cc h
image/gif                            gif GIF
image/ief                            ief
image/jpeg                            jpeg jpg jpe JPG
image/tiff                            tiff tif

当然我们可以直接告诉类型。

DataSource接口:
 String getContentType()
          This method returns the MIME type of the data in the form of a string.
 InputStream getInputStream()
          This method returns an InputStream representing the data and throws the appropriate exception if it can not do so.
 String getName()
          Return the name of this object where the name of the object is dependant on the nature of the underlying objects.
 OutputStream getOutputStream()

2.2 资源对应的处理程序 DataHandler(类)
其实资源对应的处理程序本质上的意思就是:只有该处理程序能够理解和处理资源数据的(首选处理)。但在JAF中,一个设计理念就是如何让JAF向JavaBean靠拢(JavaBean相关内容,请参考 http://java.sun.com/javase/technologies/desktop/javabeans/ ,这也是为什么叫JavaBean Activation Framewor的缘故),所以在设计中会发现很多资源<->对象之间的转化的内容,不过大家要分清楚JAF主要是干什么的--一个数据处理的框架。


说这么多大家基本理解没有问题。记住核心的是: JAF是一个资源<->处理程序关联的框架

3 实现是怎么回事?

谈到规范都是一些接口、抽象类和框架类,但具体实现究竟是什么呢?大家可能糊里糊涂在使用JAF。JAF典型应用代码如下(来自JAF的一个Demo):

       FileDataSource fds = new FileDataSource(filename);
       DataHandler dh = new DataHandler(fds);
       // comment out previous two lines, and uncomment next
       // line and pass in a URL on the command line.
       // DataHandler dh = new DataHandler(new URL(filename));

       CommandInfo bi = dh.getCommand("view");//view是什么意思,为什么通过view能够拿到特定的资源操作JavaBean呢?

      
       if (bi == null) {
              System.out.println("no viewer found, exiting");
              System.exit(1);
       }

       frame = new Frame("Viewer");
       frame.add((Component)dh.getBean(bi));
       frame.setSize(new Dimension(400,300));
       frame.show();

调用如此简单,绿色部分描述的如此强大,能够直接添加到界面进行显示,厉害啊!

其实这里的一个设计模式就是Command模式,为什么View就代表显示组件呢(你说了算,目前没有明确的规范规定,由实现自己确认,奇怪,我就是找不见这块有一个规范)典型的配置如下:
application/x-wombat; ; x-java-View=com.foo.WombatViewBean; \ x-java-edit=com.foo.WombatEditBean; \
x-java-print=com.foo.WombatPrintBean; \
x-java-content-handler=com.foo.WombatDataContentHan

其实想一想,对资源的操作无非就是:view/edit/print/content-handler/save什么的。

Command模式就是通过命名来查找服务类和实例化的一种模式,其实如何查找、如何配置Command命名和实现类之间的映射是JAF实现的关键内容。

javax.activation.CommandMap类就是这个关键查找的类,目前默认的实现是
javax.activation.MailcapCommandMap,而这在Sun的参考实现中已经出现com.sun的信息,并且默认是从配置文件中检索。

我们自己的实现可以通过DataHandler.setCommandMap直接注入自己的CommandMap。


我在我的系列文档中会介绍JavaBean规范,请大家索取  Janins@163.com。
 

该规范本身就很简单。但迷迷糊糊不是我们Java程序员应该有的问题。

Jakarta Activation 是一个用于处理多种媒体类型的程序库,它提供了在 Java 平台上处理 MIME 数据的技术。它是由 Oracle 公司开发,并作为 JavaBeans Activation FrameworkJAF)的一部分发布。 Jakarta Activation 提供了一种标准的方式来处理 MIME 类型数据。MIME(Multipurpose Internet Mail Extensions)是一种互联网标准,它定义了电子邮件、网页等多种媒体类型的编码和传输规则。Jakarta Activation 可以解析 MIME 数据并根据其类型执行适当的操作。 通过 Jakarta Activation,开发人员可以轻松地处理各种 MIME 类型数据,包括文本文档、图片、音频、视频等。它提供了一组 API,使开发人员能够读取、写入、转换、传输和处理各种类型的数据。 Jakarta Activation 还为嵌入式系统提供了支持,可以在资源受限的设备上运行。它支持与 MIME 类型相关的操作,例如解析邮件附件、提取图片和视频元数据等。 除了处理 MIME 数据,Jakarta Activation 还提供了一套用于管理数据源和监听数据变化的机制。这样,开发人员就可以根据数据源的变化来自动执行相应的操作,实现对数据处理的自动化。 总之,Jakarta Activation 是一个功能强大的程序库,它提供了处理各种 MIME 类型数据的标准化和简化方法。它为开发人员提供了处理和操作多媒体数据的工具,为他们在 Java 平台上构建应用程序提供了便利。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值