分享
 
 
 

Schema Value Object

王朝java/jsp·作者佚名  2006-01-08
窄屏简体版  字體: |||超大  

Schema Value Object

Author

Olivier Brand (obrand@yahoo.com)

08/23/2001

Context

Value Objects must include validation code in order to optimize network traffic and XML features for B2B exchanges.

Problems

While implementing a three tier application using J2EE Core Patterns, a usual design will involve at least some Value Objects, some Session Facades, a few

Entity Beans and Data Access Objects for the underlying persistence logic.

A Value Object is the representation of a business data. Therefore it contains attributes and associated business methods.

A Value Object can be initialized by the Enterprise Java Bean layer (in the case of reads) or by the Client (in the case of creations or updates).

Usually the Value Object does not need to be validated when being created in the Enterprise layer since we assume that the data has already been

constrained by the persistent store.

A problem occurs when creating or updating these Value Objects (mutable Value Objects) in the Client layer.

For instance an attribute representing the email address of a customer in the Value Object can be tied to a specific column in a database with additional

constraints such as the length of the column and its format following a specific pattern (regular expression driven, ...).

Now the developer needs to make a decision where to add the validation code on this field.

The most common solution is to rely on the underlying datastore which will reject the insert or update if a field does not conform to a specific constraint.

The problem of relying on the datastore to check the data constraints is expensive in term of network overhead.

Another problem is that the implementation is more complex since the eventual thrown exceptions need to traverse multiple layers and be interpreted by the

client layer.

B2B data exchange must be realized through the HTTP protocol to overcome firewall restrictions. Standards such as SOAP, eBxml, ... are already defined.

Multiple implementations of these standards allow to wrap Enterprise Beans in a Web Service. Since the Enterprise Bean layer plays the role of a Value

Object Factory, the reulting data needs to be transformed at one point as XML to be encapsulated into SOAP or eBxml packets.

Forces

The validation of a Value Object is done early on, avoiding Network overheads (similar to the role of Javascript for form validation in web

applications)

Simplify the three tier layer in term of exception handling

Can rely on W3C specifications such as XML Schemas (or DTDs) for documenting and generating (see solution) data constraints.

XML aware Value Objects can be easily included in B2B exchanges

Solution

Use an existing XML framework to express data constraints and automate the process to unmarshal XML documents to Java Objects and to

marshal Java Objects to XML documents.

There are many XML frameworks available. Some are relying on DTDs, others are relying on the newest XML Schema (aka XSD) specifications.

I chose to rely on the XML Schema specification in order to express the Value Object constraints.XML Schemas are defined in XML (as opposed to

DTDs), therefore can be created using any XML aware tools, documentation can also be generated using XSL transforms (output HTML, ....).

XML Schemas are "object oriented friendly" since they allow for complex types creation and extension.

The framework of choice used for implementing this pattern is Castor from Exolab. This framework is on its way to support the final W3C specification, but

it showed in any projects that its Schema support is enough for implementing this pattern. This framework is also Open Source.

The main idea is to write an XML schema corresponding to the structure of the final Value Object (in term of attributes and types), and add the constraints

as defined in the database (length, format, .....). Some constraints such as uniqueness cannot be expressed, but typically, you want the underlying database to

reject the record if such constraint is violated.

Then you can use the Castor source generator class to generate the Java classes associated with the XSD Schema. Each complex type is sually defined as a

Class. Each element, attributes are defined as properties (class variable) and corresponding setter/getter methods are automatically generated.

Relying on a source generator prevents coding complex validation rules in a language that cannot be understand by non Java developers. For instance a

Database modeler and an Architect (or Senior Developer) can be involved early on in order to define those schemas. This will be the starting point for the

DDL and the Schema Value Objects generations. This is a nice approach to bring 2 different teams together on a design and implementation phases.

Then the Schema Value Objects need to be created. At this stage there are 2 possible choices:

The Schema Value Object extends the generated Java class from the XSD schema.

The Schema Value Object encapsulates (wraps) the generated Java class from the XSD schema.

I prefer the second solution for 2 reasons:

The Castor framework (or any other Schema aware framework generators) defines new types which correspond to the richer XSD Schema definition

(compared to Java types). Therefore, you might want to hide these "proprietary" classes allowing later on (if needed) to replace the Java Schema

generator with another one (for instance, when Javasoft will provide a Schema module for its JAXB framework).

You might want to validate field by field (when each setter is being called) and add some dirty flag support in the same methods. Wrapping the

generated setters with your own setters make then more sense.

When generating the Java classes from the XSD Schema using Castor, special classes called Descriptors are created.

These classes are handling the validation part (the constraints defined in the XML Schema are showing in this classes).

Do we want to validate field by field or the entire document ? Once again this is an implementationd ecision mostly driven by the client's implementation.

In my implementations, we decided to validate field by field (the validation is done in each setters).

To perform a field level validation, the Castor XML API offers a class to perform validation at the field level (as opposed as the entire document):

FieldValidator.

I highly encourage you to look at castor.exolab.org in order to get familiar with the possibility of the product.

The second part of the pattern is trivial since any Schema (or DTDs) aware code generator, Castor included, include marshaling and unmarshaling facilities.

These methods allow to transform Java to XML and XML to Java.

Castor offers 2 classes to perform such transformations: Marshaller and Unmarshaller.

The Marshaller class can transform a Java object to XML. Some methods allow to marshal the object directly in a W3X DOM Node object.

This method is highly optimized when dealing with SOAP where you want to include a fragment (therefore the generated Node) in a SOAP enveloppe.

This method is also preffered when dealing with XSL (in frameworks like Apache Cocoon, ....) since the DOM tree is already built.

This method also works with the W3C SAX API.

The Unmarshaller class can transform any XML sources to the Castor generated Java object.

One of my projects included this pattern and was successfully implemented using the Apache SOAP framework with a WSDL extension we had to write.

WSDL is an XML document containing the definition of the operations exposed as web services. Any complex types are referred to an XML Schema.

This is one of the reason why this pattern perfectly applies to B2B exchanges by bringing the J2EE and B2B worlds together.

Consequences

Takes advantage of the Value Object pattern

Therefore it reduces network traffic.

Uses W3C standards to express data constraints

Schemas or DTDs can be understood by non java developper and is the common ground for B2B exchanges (see WSDL, SOAP, UDDI, ...)

Allows for automated code generation

Once the XSD Schema written, a Java Binding framework like Castor, can be used to generate the Java classes.

Includes an XML framework to serialize/deserialize Java object to and from XML.

This fits perfectly in the Web Services world. This can also be used in Web Applications driven by JSPs and XSLT processing.

Related patterns

Value Object (Sun)

Proxy (GoF)

Links

SUN patterns: http://developer.java.sun.com/developer/restricted/patterns

GoF Patterns: http://www.hillside.net/patterns/DPBook/DPBook.html

Castor XML: http://castor.exolab.org

2 replies in this thread

Reply

Schema Value Object

Posted By: Olivier Brand on August 25, 2001 in response to this message.

This pattern could (and should) be renamed: Schema Data Object.

This approach applies to a lot of scenarios and schemas are a good complement to add constraints to languages.

The Value Object could be one implementation of this pattern.

0 replies in this thread

Reply

Schema Value Object - Options

Posted By: Earl Bingham on August 31, 2001 in response to this message.

At sourceforge.net there is a project called jvalid that was started last year that does validation with XML Schemas.

http://sourceforge.net/projects/jvalid/

Also, there is a XSLT Stylesheet called Schematron that is designed to allow validation of XML Documents to be done with a definition of the validation in XML.

http://www.ascc.net/xml/resource/schematron/schematron.html

I have started a project in sourceforge.net to build some J2EE components that can be re-used that leverage the Schematron Stylesheet.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有