<?php  																														require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/app.class.php");	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/nav.class.php"); 	require_once($_SERVER['DOCUMENT_ROOT'] . "/eclipse.org-common/system/menu.class.php"); 	$App 	= new App();	$Nav	= new Nav();	$Menu 	= new Menu();		include($App->getProjectCommon());    # All on the same line to unclutter the user's desktop'

$pageTitle 		= "Proposal for Enterprise Component Framework";
$pageKeywords	= "";
$pageAuthor		= "";

ob_start();
?>
    <div id="maincontent">
      <div id="midcolumn">
        <h1>
          Proposal for Enterprise Component Framework
        </h1>
<?php
include_once($_SERVER['DOCUMENT_ROOT'] . "/projects/fragments/proposal-page-header.php");
generate_header("Enterprise Component Framework");
?>
        <p>You are invited to join the project and to provide feedback using the
        <a href="http://www.eclipse.org/newsportal/thread.php?group=eclipse.technology.ecp">eclipse.technology.ecp</a>
        newsgroup.&nbsp;</p>
        <h2>Introduction&nbsp;</h2>
        <p>The outstanding flexibility of the Eclipse Platform is provided by
        its comprehensive component model. The Eclipse Platform component model
        targets tools development, tools integration and rich client
        applications and offers users a strong GUI orientation. Unfortunately,
        there is nothing similar to the Eclipse Platform available for
        enterprise application developers. Existing components models do not
        provide the flexibility for <a href="http://en.wikipedia.org/wiki/Enterprise_application">enterprise
        applications</a> that the Eclipse Platform does for GUI-oriented
        applications.&nbsp;</p>
        <p>The Enterprise Component Framework's goal is to create a
        comprehensive component model for enterprise application development.
        The component model will provide a great deal of flexibility for
        building enterprise applications from components. In addition,
        applications would benefit from the component approach by acquiring such
        feature as adaptability e.g. ability to react on changes in environment
        at runtime. Finally, the project will create the ability to easily
        create enterprise application from existing components for development
        teams and users.</p>
        <p>A majority of the flexibility the Eclipse Platform inherited from the
        OSGi Service Platform. Similarly, the Enterprise Component Framework
        should also be based on and extend the OSGi Service Platform. The
        Equinox along with Eclipse Core will serve as a container for the
        enterprise components.&nbsp;</p>
        <p>This document proposes the scope and organization of the
        project.&nbsp;</p>
        <h2>Why A New Enterprise Component Model?&nbsp;</h2>
        <p>It is important to explore the specific market need for yet another
        component framework. By definition, the word, &quot;component&quot; is
        today much overloaded and overused. However, in this project, the
        following definition will be used: A component is a software unit that
        exposes the following features:&nbsp;</p>
        <ul>
          <li>Has well specified interface and explicit dependencies&nbsp;</li>
          <li>Can be customized&nbsp;</li>
          <li>Can be assembled&nbsp;</li>
          <li>Reusable by nature&nbsp;</li>
          <li>A unit of substitution&nbsp;</li>
          <li>A unit of delivery and deployment</li>
        </ul>
        <p>The primary reason for utilizing components is to provide a faster
        way to develop applications due to their high volume of reuse. In
        addition, components help to maintain existing application because of
        its customizability and substitutability. The following section
        describes the current market challenges that limit the usage of a
        component approach to develop enterprise applications and our
        propositions how to solve them.&nbsp;</p>
        <h2>Reusability&nbsp;</h2>
        <p>Today, there are no wide Java enterprise components on the market.
        The primary problem with this lack of diversity in the existing
        component models is that component models are mostly interface or
        object-oriented. They do not take in consideration that modern
        programming technologies require developers to use many different
        software artifacts such as services, resources, declarative programming
        specifications or object/relational mappings. Developers can't expose
        these artifacts as components because they are beyond of a component
        model. As a result, applications become monolithic because all of the
        artifacts are integrated into one big module such as war or ear.</p>
        <p>The Enterprise Component Framework project proposes a component model
        based on OSGi bundles that can contain different types of components and
        XML descriptors that describe these components in terms of exposed
        artifacts and required artifacts. Such components can be reused without
        internal modifications but by customization in using components. Eclipse
        plug-ins are a good example of such an approach.&nbsp;</p>
        <h2>Adaptability&nbsp;</h2>
        <p>All commonly used existing component models today are static (e.g
        components are supposed to be installed and work all the time). These
        component models do not define behavior of components when there are
        some changes are under way within runtime environment. It makes
        impossible or very difficult to maintain operational applications.
        Usually, applications based on a static component model need to be
        stopped, reconfigured or updated and then launched again.</p>
        <p>We propose a model that allows dynamic changes in the environment.
        Moreover applications can benefit from it by acquiring adaptability. In
        the same way as Eclipse IDE can be extended by plug-ins the proposed
        model allows extending enterprise applications.</p>
        <h2>Flexible Target Platform&nbsp;</h2>
        <p>The proposed component model will allow enterprise developers to
        create enterprise components without targeting any specific environment
        such as J2EE or J2SE. As a result, enterprise components can run both on
        server or client sides. Theoretically, the enterprise components can be
        deployed anywhere from a cell phone to grid infrastructure. The only
        limitation is possibility of the environment to satisfy the component
        dependencies.&nbsp;</p>
        <h2>Versioning&nbsp;</h2>
        <p>The proposed component model will have versioning will rely on the
        OSGi Platform for components versioning. As a result it will allow great
        level of adaptability for existing applications&nbsp;</p>
        <h2>High level architecture&nbsp;</h2>
        <p>This technical diagram illustrates the architecture of how the
        Eclipse with the Enterprise Components may become a complete platform
        for building business applications.</p>
        <p><img border="0" src="highlevel.gif" width="577" height="302"></p>
        <p>The architecture is comprised of the following:</p>
        <p><b>Java Platform </b>- the Java virtual machine plus the API
        specifications</p>
        <p><b>Eclipse OSGi Framework (Equinox) </b>- The Equinox provides the
        OSGi framework implementation and component model upon which the Eclipse
        RCP, IDE platforms and Enterprise Component Framework run</p>
        <p><b>Eclipse RCP </b>- Eclipse Rich Client Platform - The set of
        plug-ins needed to build a rich client application</p>
        <p><b>Enterprise Component Framework </b>- The proposed framework for
        building enterprise application components. Unlike enterprise components
        that run on server-side of the business applications, this Framework has
        no such requirement. Enterprise Components may run in the same container
        as RCP components.&nbsp;</p>
        <p><b>Enterprise Components, Rich Client Component, Eclipse Plug-ins </b>-
        The building blocks of the business applications and tools</p>
        <p><b>Business Application </b>- Any application that performs business
        functions and utilizes a GUI</p>
        <h2>Roles and responsibilities&nbsp;</h2>
        <p>We understand that the proposed platform will change the way how
        business applications are developed. We propose to recognize the
        following roles in software development process with the Enterprise
        components: technology providers, component providers and application
        developers.&nbsp;</p>
        <h3>Technology provider&nbsp;</h3>
        <p>Technology providers bundle their products into OSGi bundles. Some
        technology components may be exposed as enterprise components.
        Technology providers must have substantial knowledge of the OSGi
        platform. Some knowledge of the Enterprise Component Framework may be
        required.&nbsp;</p>
        <h3>Component provider&nbsp;</h3>
        <p>Component providers create business components that can be used to
        build applications. Component providers must have basic knowledge of
        OSGi platform and knowledge of Enterprise Components model (must know
        what component descriptors are). Components are developed using commonly
        used Java technologies (JavaBeans, JSP, JSF etc.). Component bundles
        contain Enterprise Component descriptor(s) if necessary.&nbsp;</p>
        <h3>Application developer&nbsp;</h3>
        <p>Application developers customize and assemble business components
        together to satisfy end users needs. Application developers must be
        familiar with OSGi platform (must know what bundle and service is) and
        Enterprise Component model (must know what component descriptors are).
        Application developers use Enterprise Component Development Tools to
        compose and customize applications.</p>
        <p><img border="0" src="roles.gif" width="468" height="881"></p>
        <h2>Project Scope&nbsp;</h2>
        <p>The Enterprise Component Framework Project will focus on the
        development of an enterprise component model, runtime and common
        services that support this model and set of tools to support development
        and runtime management of enterprise components.</p>
        <p>The items below describe the scope of the proposed Enterprise
        Component Framework project.&nbsp;</p>
        <h3>Enterprise Component Model&nbsp;</h3>
        <p>The following principles should be employed during the enterprise
        component model development:&nbsp;</p>
        <ul>
          <li>The component model should be based on the OSGi Service
            Platform.&nbsp;</li>
          <li>The component model should support multiple software artifacts
            such as resources, JavaBeans, OR mappings and process definitions in
            the same way as service components are supported by Service
            Component Runtime (see OSGi Service compendium: 112 Declarative
            Services Specification)&nbsp;</li>
          <li>The component model should specify dynamic behavior of the
            components. The components should adapt to the dynamic availability
            (the arrival or departure) of the services or other components they
            are using&nbsp;</li>
          <li>The component model should employ XML descriptors (non-intrusive
            model) and/or Java 5 annotations to describe, customize and
            assembling components&nbsp;</li>
          <li>The component model should allow converting existing software
            artifacts into enterprise components without any modifications in
            the artifacts&nbsp;</li>
        </ul>
        <h3>Enterprise Component Runtime&nbsp;</h3>
        <p>The project will specify and develop a runtime services
        that support and enforce the enterprise component model. The framework
        would include XML descriptor definitions for every component type
        defined by the component model, descriptor parsers, runtime support for
        registering/un-registering components and component dependencies
        resolving. In addition, the framework would provide a way to develop
        component applications that are sets of components that work together
        within the same context.&nbsp;</p>
        <h3>Enterprise Component Tools&nbsp;</h3>
        <p>The project goal is to provide a set of tools for the enterprise
        component development and runtime component management. Such tools would
        include managing lists of installed components, component dependencies
        resolving and validation, search/install/publish components from/into
        the component repository, wizards for component creation, import/export
        component project from/to a bundle, conversion software artifacts into a
        components, editors for component descriptors.&nbsp;</p>
        <h3>Enterprise Component Repository&nbsp;</h3>
        <p>The Enterprise Component Repository is a service that provides
        storage for components. The Component Repository would also provide
        search and retrieval of components. An optional runtime service would
        provide automatic discovery, download, install and activation of
        required components from the repository.&nbsp;</p>
        <h2>Out of scope&nbsp;</h2>
        <p>The initial project would not focus on compatibility with the
        existing enterprise component models such as EJB or currently developing
        such as SCA. Nevertheless, components that provide such services could
        be created within the boundaries of the basic enterprise component
        model.</p>
        <p>The project would not focus on a security model. The security model
        is defined in OSGi Service Platform specification.</p>
        <p>The project would not focus on packaging and deployment. The OSGi
        Service Platform specification defines module layer for these purposes.</p>
        <p>The project would not define any specific component set that should
        be preinstalled at runtime. Only component dependencies can specify what
        is required at runtime.&nbsp;</p>
        <h2>Relationship with other Eclipse Projects&nbsp;</h2>
        <p>The Enterprise Component Framework will strongly rely on Equinox. The
        tool set will be built upon the Eclipse Platform as set of plug-ins.
        Project may have a relationship with RCP for UI components.&nbsp;</p>
        <h2>Interested Parties&nbsp;</h2>
        <p>There are two major interested parties in this project - potential
        contributors and potential adopters. The project leads have talked to
        many companies have expressed their interest in participating to this
        project as potential adopters: AIG, HSN, ABN AMRO Bank, Deutsche Bank,
        CNet and Echopass. To express support, concern, or constructive opinion
        regarding the formation of this proposed project, all are encouraged to
        utilize the newsgroup.&nbsp;</p>
        <h3>Initial committers&nbsp;</h3>
        <ul>
          <li>Igor Shabalov, Exadel, Project Lead&nbsp;</li>
          <li>Alex Antonau, Exadel, Project Architect and Committer&nbsp;</li>
          <li>Nick Belaevski, Exadel, Committer&nbsp;</li>
          <li>Andrew Yanchevsky, Exadel, Committer&nbsp;</li>
        </ul>
        <h3>Code contributions&nbsp;</h3>
        <p>Initial code contribution will be based on Exadel development of
        Eclipse-based Components Framework. We also encourage other parties to
        contribute Enterprise Components based on exiting and new open source
        technologies.<br />
      </div>
    </div>
   
<?php
	# Paste your HTML content between the EOHTML markers!	
	$html = ob_get_contents();
	ob_end_clean();

	# Generate the web page
	$App->generatePage($theme, $Menu, $Nav, $pageAuthor, $pageKeywords, $pageTitle, $html);
?>