Uni Era's profileThe Unified EraBlogLists Tools Help

Blog


    UNSAE 1.1A Refresh

    It seems that UNSAE 1.5 will take a long time to be carried out, we think it's necessary to update the 1.0 package, so there it is:


    and also


    Type-Driven Rendering

        A Type-Driven Rendering tech is being considered to add in UNSAE 1.5 for high reusing of page elements.

        ...

    CoreService finished

    The CoreService of UNSAE 1.5, as Controller role in the MVC design pettern, is finished now. Its lastest config spec is following


    <?xml version="1.0" encoding="ascii"?>

    <schema targetNamespace="http://www.uniera.org/unsae/core"
        xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:core="http://www.uniera.org/unsae/core"
        elementFormDefault="qualified" attributeFormDefault="unqualified"
        version="1.5b">

        <element name="module" type="core:moduleType" />

        <complexType name="moduleType">
            <sequence>
                <element name="bundle" type="core:bundleType" minOccurs="0"
                    maxOccurs="unbounded" />
                <element name="script" type="core:scriptType" minOccurs="0" maxOccurs="unbounded" />
                <element name="form" type="core:formType" minOccurs="0"
                    maxOccurs="unbounded" />
                <element name="screen" type="core:screenType" minOccurs="0"
                    maxOccurs="unbounded" />
                <element name="entry" type="core:entryType" minOccurs="0"
                    maxOccurs="unbounded" />
                <element name="error" type="core:errorType" minOccurs="0"
                    maxOccurs="unbounded" />
            </sequence>
            <attribute name="version" type="string" fixed="1.5b"/>
            <attribute name="name" default="/">
                <simpleType>
                    <restriction base="string">
                        <pattern value="/.*" />
                    </restriction>
                </simpleType>
            </attribute>
            <attribute name="folder" default="/">
                <simpleType>
                    <restriction base="string">
                        <pattern value="/.*" />
                    </restriction>
                </simpleType>
            </attribute>
        </complexType>

        <complexType name="scriptType">
            <simpleContent>
                <extension base="string">
                    <attribute name="name" type="string" default="" />
                    <attribute name="compile" type="boolean" />
                </extension>
            </simpleContent>
        </complexType>

        <complexType name="bundleType">
            <attribute name="file" type="core:literalType" />
            <attribute name="locale" type="string" default="" />
        </complexType>

        <complexType name="formType">
            <sequence>
                <element name="script" type="core:scriptType" minOccurs="0" />
            </sequence>
            <attribute name="type" type="core:classType" use="required" />
            <attribute name="name" type="core:formIdType" />
            <attribute name="eval" type="core:exprType" />
            <attribute name="scope" type="core:scopeType" default="request" />
        </complexType>

        <complexType name="screenType">
            <sequence>
                <element name="param" type="core:paramType" minOccurs="0"
                    maxOccurs="unbounded" />
            </sequence>
            <attribute name="name" type="core:screenIdType" use="optional" />
            <attribute name="desc" type="core:literalType" />
            <attribute name="file" type="core:literalType" use="required" />
        </complexType>

        <complexType name="entryType">
            <sequence>
                <element name="form" type="core:formType" minOccurs="0" maxOccurs="1" />
                <element name="script" type="core:scriptType" minOccurs="0" maxOccurs="1"/>
                <element name="command" type="core:commandType" minOccurs="0" maxOccurs="unbounded"/>
                <element name="screen" type="core:screenType" minOccurs="0" maxOccurs="unbounded"/>
            </sequence>
            <attribute name="uri" type="core:uriType" use="required" />
            <attribute name="desc" type="core:literalType" />
            <attribute name="eval" type="core:exprType" use="optional" />
            <attribute name="form" type="core:formIdType" use="optional" />
            <attribute name="target" type="core:screenIdType" use="optional" />
            <attribute name="error" type="core:screenIdType" use="optional" />
            <attribute name="input" type="core:screenIdType" use="optional" />
            <attribute name="permit" type="string" default="" />
            <attribute name="token" type="boolean" default="false" />
        </complexType>

        <complexType name="commandType">
            <sequence>
                <element name="param" type="core:paramType" minOccurs="0" maxOccurs="unbounded"/>
            </sequence>
            <attribute name="type" type="core:classType" use="required" />
            <attribute name="scope" type="core:scopeType" default="context" />
            <attribute name="method" type="core:literalType" default="execute" />
        </complexType>

        <complexType name="paramType">
            <attribute name="name" use="required">
                <simpleType>
                    <restriction base="string">
                        <pattern value="\$.*" />
                        <pattern value=".*" />
                    </restriction>
                </simpleType>
            </attribute>
            <attribute name="value" type="core:literalType" use="optional" />
        </complexType>

        <complexType name="errorType">
            <sequence>
                <element name="script" type="core:scriptType" minOccurs="0" />
                <element name="screen" type="core:screenType" minOccurs="0" />
            </sequence>
            <attribute name="type" type="core:classType" use="required" />
            <attribute name="target" type="core:screenIdType" />
        </complexType>

        <simpleType name="scopeType">
            <restriction base="string">
                <enumeration value="request" />
                <enumeration value="thread" />
                <enumeration value="session" />
                <enumeration value="context" />
                <enumeration value="unique" />
            </restriction>
        </simpleType>

        <simpleType name="uriType">
            <restriction base="string" />
        </simpleType>

        <simpleType name="classType">
            <restriction base="string" />
        </simpleType>

        <simpleType name="exprType">
            <restriction base="string" />
        </simpleType>
       
        <simpleType name="literalType">
            <union memberTypes="string core:exprType">
            </union>
        </simpleType>

        <simpleType name="screenIdType">
            <restriction base="string" />
        </simpleType>

        <simpleType name="formIdType">
            <restriction base="string" />
        </simpleType>
    </schema>

    The Core Architecture of UNSAE 1.5

    1, Architecture diagram

    2, Procedure diagram

    UNSAE Can Support Stand-alone Application Now.

    Some modifications have been done for UNSAE 1.5 to support stand-alone applications. This maybe very meaningful in the future.

    UNSAE: the Module tree and the MVC Config

    A draft diagram here.

    <mvc-config> XSD draft for UNSAE 1.5

        We believe that a perfect beginning is necessary for a perfect business. So exhausted to draft it!


    <?xml version="1.0" encoding="UTF-8"?>

    <schema targetNamespace="http://www.uniera.org/unsae/core"
        xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:core="http://www.uniera.org/unsae/core"
        elementFormDefault="qualified" attributeFormDefault="unqualified"
        version="1.5a">

        <element name="mvc-config" type="core:mvc-configType" />

        <complexType name="mvc-configType">
            <sequence>
                <element name="bundle" type="core:bundleType" minOccurs="0"
                    maxOccurs="unbounded" />
                <element name="script" type="core:scriptType" minOccurs="0" maxOccurs="1" />
                <element name="form" type="core:formType" minOccurs="0"
                    maxOccurs="unbounded" />
                <element name="screen" type="core:screenType" minOccurs="0"
                    maxOccurs="unbounded" />
                <element name="entry" type="core:entryType" minOccurs="1"
                    maxOccurs="unbounded" />
                <element name="error" type="core:errorType" minOccurs="0"
                    maxOccurs="unbounded" />
            </sequence>
            <attribute name="module" default="/">
                <simpleType>
                    <restriction base="string">
                        <pattern value="/.*" />
                    </restriction>
                </simpleType>
            </attribute>
            <attribute name="folder" default="/">
                <simpleType>
                    <restriction base="string">
                        <pattern value="/.*" />
                    </restriction>
                </simpleType>
            </attribute>
            <attribute name="version" type="string" fixed="1.5"/>
        </complexType>

        <complexType name="scriptType">
            <simpleContent>
                <extension base="string">
                    <attribute name="name" type="string" default="" />
                    <attribute name="compile" type="boolean" />
                </extension>
            </simpleContent>
        </complexType>

        <complexType name="bundleType">
            <attribute name="file" type="core:fileType" />
            <attribute name="locale" type="string" default="" />
        </complexType>

        <complexType name="formType">
            <sequence>
                <element name="script" type="core:scriptType" minOccurs="0" />
            </sequence>
            <attribute name="class" type="core:classType" use="required" />
            <attribute name="name" type="core:formIdType" />
            <attribute name="eval" type="core:exprType" />
            <attribute name="scope" type="core:scopeType" default="request" />
        </complexType>

        <complexType name="screenType">
            <sequence>
                <element name="param" type="core:paramType" minOccurs="0"
                    maxOccurs="unbounded" />
            </sequence>
            <attribute name="name" type="core:screenIdType" />
            <attribute name="desc" type="core:exprType" />
            <attribute name="file" type="core:fileType" use="required" />
        </complexType>

        <complexType name="entryType">
            <sequence>
                <element name="form" type="core:formType" minOccurs="0" />
                <element name="script" type="core:scriptType" minOccurs="0"/>
                <element name="command" type="core:commandType" minOccurs="0" maxOccurs="unbounded"/>
                <element name="screen" type="core:screenType" minOccurs="0" maxOccurs="unbounded"/>
            </sequence>
            <attribute name="uri" type="core:uriType" use="required" />
            <attribute name="form" type="core:formIdType" use="optional" />
            <attribute name="screen" type="core:screenIdType"
                use="optional" />
            <attribute name="error" type="core:screenIdType" use="optional" />
            <attribute name="eval" type="core:exprType" use="optional" />
            <attribute name="permit" type="string" default="" />
            <attribute name="desc" type="core:exprType" />
            <attribute name="token" type="boolean" default="false" />
        </complexType>

        <complexType name="commandType">
            <sequence>
                <element name="param" type="core:paramType" minOccurs="0" maxOccurs="unbounded"/>
            </sequence>
            <attribute name="class" type="core:classType" use="optional" />
            <attribute name="scope" type="core:scopeType"
                default="application" />
            <attribute name="method" type="core:exprType" default="execute" />
        </complexType>

        <complexType name="paramType">
            <attribute name="name" type="string" use="required" />
            <attribute name="value" type="core:exprType" use="optional" />
        </complexType>

        <complexType name="errorType">
            <sequence>
                <element name="script" type="core:scriptType" minOccurs="0" />
                <element name="screen" type="core:screenType" minOccurs="0" />
            </sequence>
            <attribute name="class" type="core:classType" use="required" />
            <attribute name="screen" type="core:screenIdType" />
        </complexType>

        <simpleType name="scopeType">
            <restriction base="string">
                <enumeration value="request" />
                <enumeration value="session" />
                <enumeration value="threadlocal" />
                <enumeration value="application" />
            </restriction>
        </simpleType>

        <simpleType name="uriType">
            <restriction base="string" />
        </simpleType>

        <simpleType name="classType">
            <restriction base="string" />
        </simpleType>

        <simpleType name="exprType">
            <restriction base="string">
                <pattern value="javascript:.*" />
                <pattern value=".*" />
            </restriction>
        </simpleType>

        <simpleType name="fileType">
            <restriction base="string" />
        </simpleType>

        <simpleType name="screenIdType">
            <restriction base="string" />
        </simpleType>

        <simpleType name="formIdType">
            <restriction base="string" />
        </simpleType>
    </schema>

    UNSAE 1.5 Delayed again!

    We are very sorry to say: Its release time is delayed again due to development reason. Some new features such as scripts are considering to be added in the release.

    UNSAE Group
    2006/8/2




    Note: The core config xml's dtd is being modified now to enhance both its readability and functionality. the result xml format will differ greatly from the one in UNSAE 1.3(not released version).

    Mentions for UNSAE 1.5 (2)

    •  Enhanced url-processing mechanism
    Wildcard url mapping supported and data-based access control method integrated.

    • Intelligible configuration mechanism
    Very easy for using and/or understanding.

    Mentions for UNSAE 1.5

    • It's still request-based.
    Performance is considered much more, and a component-based framework is always more consumptive than request-based.
    • Java VM 5.0 required.
    This is not for fashion, you know, Java 5.0 is the mainstream in the future and we really get some benefits from the new language features. For example, the new logging APIs added the Vararg support to avoid the unnecessary string concatting.
    • Incompatible to previous versions.
    We have to change those illogical and/or improper APIs, Tags and configuration ways in the previous versions.

    <<Not end>>

    UNSAE: Plan Changed Again!

    1.3 is too later to come out! So it's possible a better idea that 1.5 will be the next release instead of 1.3. Now the things on our to-do list below:

    1. Refine and clean the 1.0 package.
    2. Sophisticated transaction supports.
    3. SQL statements isolation.
    4. A exhaustive/perfect demo
    5. Java 5.0 migration?
    6. Other changes...
    UNSAE Group
    2006/6/19
    ----------------------------

    UNSAE 1.3 Delayed

    The development of UNSAE 1.3 (the next release package of UNSAE project) is suspended again because of the development for another significant plugin (codename "swlet") for firefox and/or ie. We hope to present these two results as early as possible.
    Cheer up! folks.

    "Swlet" subproject is stopped because of some problems about its feasibility.
    2006/5/24
    Today I got some new result below! Very good!!!

    Plan of UNSAE changed!

        Considering the huge span between 1.0 and 2.0 and long time waiting for next release package is painful, a middle version, UNSAE 1.3,  will be developped and released before the development of UNSAE 2.0.

        Features of UNSAE 1.3:
    • Refine and clean the 1.0 package.
    • Sophisticated transaction supports.
    • SQL statements isolation.
    • A exhaustive and far more perfect example included.
        The release date of 1.3A is about before 2006/6/1.Cheer! Hard work for UNSAE group! It's also difficult to say whether another middle version will be constructed between 1.3 and 2.0 now.

    About the features of UNSAE 2.0

    Hello, folks

        It is possibly not a good manner to develop 2.0 hurriedly, because 2.0 is considered very important to www.uniera.org and it should/must support most following features:
    1, Modeling and development tools as eclipse plug-ins.
    2, Model Driven Architecture supports.
    3, Services-Oriented Architecture supports.
    4, Distributed transaction supports.
    5, Clustered object cache.
    6, Work flow support.
    7, General Report supports.

        To achieve these goals, the following requirements must/should be met firstly:
    1, Refine and clean the 1.0 package.
    2, Sophisticated transaction supports.
    3, SQL statements isolation.
    4, A exhaustive/perfect demo is necessary.
    5, Micro containers(for DAOs and cached objects).
    6, JSTL extension?
    7, Java 5.0 migration?
    8, Auto/manual performance tuning?
    9, Dynamic code generation?

        And amounts of basic libraries must be constructed before all above things to keep our source codes independent.

    Best regards!
    www.uniera.org

    Think the UNSAE's future

        In my view, the development of UNSAE 2.0 is at least 10 months late to start up after the finish of UNSAE 1.0, so we should hurry up to carry back what we lost before.

        And beyond that, we should also make a plan to develop UNSAE 2.5(or 5.0) in a little future. since UNSAE 2.0 framework is figured on Java SE 1.4 level and Java EE 1.3 level, to be "modern", UNSAE 2.5 will be constructed for running on Java SE 5.0 and Jave EE 1.4 platforms. The obvious things need to do about UNSAE 2.5 are:
    • Re-code it with Java Programming Language 3.0
    • Add JMX support
    • ... ...
        And more beyond those, the next next UNSAE framework should be planning  for  running  on Java SE 6.0 and Jave EE 1.5(or 5.0) platforms.

    My Words about UNSAE 1.0

    To the production:
    • A little good work
    • Just a tiny experiment
    • Maybe a ugly framework
    • Definitely need much more improvements
    To the folks:
    • All good staffs
    • Missing each other for long time
    • Best regards for everybody here!

    mvc-config.dtd

    <!--
    DTD for UNSAE 2.0 - CoreService configuration
    @version 2.0A

    Note:
    UNSAE 2.0 can inclusively parse another xml files via following process
    instruction:

    <?include "module-name/another-config.xml"?>

    -->


    <!--
    Root element core config definition.
    -->
    <!ELEMENT mvc-config (url-mapping*, error-handler*)>
    <!-- child elements:
    url-mapping - Optional one or more mapping entrys to define the handling
    process for the url.
    error-handler - Optional one or more handler entrys to define the handler
    for the kind of error.
    -->
    <!ATTLIST mvc-config
    web-dir CDATA #IMPLIED
    local-dir CDATA #IMPLIED
    bundle CDATA #IMPLIED
    >
    <!-- attributes:
    web-dir - Web uri prefix, pattern as */*.
    local-dir - Local folder in .WAR, pattern as */*.
    bundle - For message translation, by default as same as this xml file.
    -->


    <!ELEMENT url-mapping (form-bean?, (command|screen)+)>
    <!-- child elements:
    form-bean - Optional bean objects for populating parameters from request.
    command - At least one or more logical processing objects definition.
    screen - The optional one or more result page definition for client.
    if any, the last command's choice is used; if no choice, screen
    reference is used.
    -->
    <!ATTLIST url-mapping
    url ID #REQUIRED
    name CDATA #IMPLIED
    screen IDREF #IMPLIED
    permit CDATA ""
    token (true|false) "false"
    >
    <!-- attributes:
    url - Web uri string, pattern as */*.
    name - Identifier of this url, inside the web dir. Be translatable by
    starting with char '%'.
    screen - Screen name reference as result for client
    permit - Permission needed to access this url, by default, nothing needed.
    token - Whether setup a token to prevent repeatedly committing.
    -->


    <!ELEMENT error-handler (screen)>
    <!-- child elements:
    screen - The unique handler for this type of errors in scope of this xml.
    -->
    <!ATTLIST error-handler
    class CDATA "java.lang.Excepion"
    >
    <!-- attributes:
    class - Error type for handling.
    -->


    <!ELEMENT form-bean EMPTY>
    <!ATTLIST form-bean
    name CDATA #IMPLIED
    class CDATA #REQUIRED
    scope (none | request | session | context) "request"
    >
    <!-- attributes:
    name - Identifier of the form bean to put into the specified scope if not
    'none'. If no name present, scope must be 'none'.
    class - Required class name of the from bean, the class must has a default
    contructor necessarily.
    scope - Where does the form bean instance exist, by default 'request'
    -->


    <!ELEMENT command (argument*)>
    <!-- child elements:
    argument - Optional one or more arguments passed into the invoked method
    of the command object. If no argument defined, (manager,
    request, response, servlet) is setup as passed argument list .
    -->
    <!ATTLIST command
    class CDATA #REQUIRED
    method CDATA "doExecute"
    singleton (true|false) "true"
    >
    <!-- attributes:
    class - Required class name of the command, the class must has a default
    contructor necessarily.
    method - Method name for invoking, by default is "doExecute", can return
    a screen name to choose it.
    singleton - Whether the instance of the command is unique, by default is 'true'
    for saving memory.
    -->


    <!ELEMENT argument EMPTY>
    <!ATTLIST argument
    kind (manager|request|response|session|context|servlet|form) #REQUIRED
    >
    <!-- attributes:
    kind - Type of the argument: 'manager' means class ServiceManager, 'form'
    means the form bean's class.
    -->


    <!ELEMENT screen (parameter*)>
    <!-- child elements:
    parameter - Optional one or more parameter definition to insert into the
    mainboard page of the screen.
    -->
    <!ATTLIST screen
    name ID #IMPLIED
    page CDATA #IMPLIED
    >
    <!-- attributes:
    name - Name of the screen, if not present, it can't be a choice of others.
    page - Forward target as mainboard, inside the local dir.
    -->


    <!ELEMENT parameter EMPTY>
    <!ATTLIST parameter
    key CDATA #REQUIRED
    value CDATA #REQUIRED
    dircet (true|false) "true"
    >
    <!-- attributes:
    key - Identifier of this parameter.
    value - Value content of the parameter, Translatable by starting with '%'.
    dircet - Whether outputted directly or included into mainboard page.
    -->

    About core-config.xml

    An example for core-config.xml. The defferences from UNSAE 1.0:
    • a better include manner
    • combining the url-def and screen-def in one file is more readable
    • form-bean added newly for auto parameter populating
    • web-dir is for supporting mutiple modules
    ----------------------------------

    <?xml version="1.0" encoding="ascii"?>

    <?include "another.xml"?>

    <core-config web-dir="*/*" local-dir="*/*" error-screen="*">
    <url-def url="*" target-screen="*" error-screen="*"
    description="*" permit="*" token="false|true">


    <!-- Optional -->
    <form-bean name="*" class="*" scope="application|session|request" />

    <!-- Optional, one or more -->
    <command class="*" method="*" singleton="true|false">
    <argument kind="*" />
    </command>

    <!-- Optional, one or more -->
    <screen name="*" local-dir="*" page="*.jsp">
    <parameter key="*" value="*" direct="true" />
    <parameter key="*" value="*.jsp" direct="false" />
    </screen>
    </url-def>
    </core-config>
    ----------------------------------

    Any suggetions there? Is every tag name appropriate to its usage?

    DTD will be made out soon.

    The lasted core config example (rename to mvc-config.xml
    ):

    ----------------------------------

    <?xml version="1.0" encoding="UTF-8"?>

    <?include "module/another-config.xml"?>

    <!DOCTYPE core-config SYSTEM "mvc-config.dtd" >

    <!--
    Supposing:
    context-root='/unsae2', core-servlet-mapping='*.do'
    -->

    <mvc-config bundle="#.properties" local-dir="dir1" web-dir="dir2">

    <!-- Charge of URI '/unsae2/dir2/dothing.do' -->
    <url-mapping url="dothing" name="%doThingName" permit="do" screen="DO_THING">
    <!-- 'doThingName' is i18ned via bundle properties file -->
    <form-bean class="demo.DoThingForm" name="doThingForm"
    scope="none" />
    <command class="demo.DoThingCommand" singleton="true" method="doThing">
    <argument kind="manager" />
    <argument kind="form" />
    <!--
    method doThing(ServiceManager m, DoThingForm f) invoked and can/may
    return a String to choose a screen.
    -->
    </command>
    <screen name="DO_THING" page="doThing.jsp">
    <!-- /dir1/doThing.jsp is default result page for client -->
    <parameter key="HtmlCopyRight" value="/jsp/copyRight.jsp" />
    </screen>
    <screen name="DO_THING2" page="/dir3/doThing2.jsp" direct="false">
    <!--
    /dir3/doThing2.jsp is optional result page for client.
    Pay attention to the leading "/" of '/dir3/doThing2.jsp'.
    -->
    <parameter key="HtmlCopyRight" value="jsp2/copyLeft.jsp"
    direct="false" />
    <!--
    /dir1/jsp2/copyLeft.jsp is optional component for /dir3/doThing2.jsp.
    -->
    </screen>
    </url-mapping>
    <error-handler class="java.lang.Excepion">
    <screen page="/jsp/error.jsp">
    <parameter key="HtmlTitle" value="%errorPageName" direct="true" />
    </screen>
    </error-handler>
    </mvc-config>


    UNSAE 2.0 Plan

    Goals in order:
    • Adjust and optimize the net service architecture.
    • Make it more compact, agile, robust, efficient, easy-to-use and hot-load enabled.
    • O-R mapping and SQL sentence insulation.
    • More web-tier components.
    • Distributed transcation support.
    • Clustered cache.
    • Simplified JDO support.
    • Simplified DMA support.
    • Simplified Workflow support.
    • Eclipse plugins for developers.
    • ... ...
    Ooh, it seems a long way for our steps!

    Project UNSAE Open!

    UNSAE project is aimed to construct a java-based, easy-to-use, compact and efficient web application framework for developers and customers.

    *UNSAE 1.0F is preparing to release this week, and full documentation and demo application will be contained in the release.

    uniera.org
    2006-2-8
    ----------------------------------
    *Just looking up a better web storage for the release package.
     

    ----------------------------------

    * Release packages was uploaded to http://groups.msn.com/uniera-org/ already. Join the group to download them if you want.


    Unified Net Service Architecture Experiment (UNSAE).

    Founders:

    Name E-Mail/MSN
    ${uniera}  uniera@gmail.com
    Tainfch  yl_tfc@hotmail.com
    Wangzq  walker612@hotmail.com
    Kknd  llzhang168@hotmail.com
    Garry  lily_kwan82@hotmail.com
    Liubz  lbz_2003_22@hotmail.com
    Chenxb  chenxiaobinsdu@hotmail.com

    uniera.org
    2006-2-18