<?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 		= "Archived Technology Projects";
$pageKeywords	= "technology";
$pageAuthor		= "Bjorn Freeman-Benson Nov 20/05";

ob_start();
?>
    <div id="maincontent">
	<div id="midcolumn">
        <h1><?= $pageTitle ?></h1>
        
<style>
body {  
background-image: url('/images/archive.gif');
background-repeat: repeat-y
}
</style>

      <p>Projects under the Eclipse Technology Project have limited lifecycles.
      Unlike the major top-level Projects, the Technology Projects are meant to
      be technology explorations or incubators. When these projects have
      explored, proved, or disproved their associated technologies, the project
      comes to its natural end. For some projects, this end is a paper
      publishing the research results; for others, this end is to be
      incorporated into the base technology of another top-level project. </p>
		
      <p><a href="/newsgroups/archivedgroups.php">Archived
      newsgroups</a> and <a href="/mail/archivedlists.php">mailing
      lists</a> are also available separately. </p>
      
<h2>ALF</h2>
      <p>The ALF website, newsgroup, mailing list, source code, etc.
      are available in <a href="http://archive.eclipse.org/technology/archives/alf.tgz">a 
      compressed tar archive <font size=-1>(342Mb)</font></a></p>
		 
<h2>CME</h2>
      <p>The CME website, newsgroup, mailing list, source code, etc.
      are available in <a href="http://archive.eclipse.org/technology/archives/cme-project.tar.gz">a 
      compressed tar archive <font size=-1>(256Mb)</font></a></p>
		
<h2>Koi</h2>
      Koi version 1.0 is functionally complete and currently used in commercial
      Eclipse add-ons. Koi provides a intra-workspace communication platform for
      development of collaborative Eclipse features. Examples of collaborative
      features that are possible using Koi range from the relatively simple such
      as event notification (check-in, check-out, conflicting changes, etc.) to
      something as complex a supporting remote pair programming.&nbsp;
      <p>The Koi infrastructure is built around a client/server architecture
      using a Web Services RPC communications model. The clients are individual
      eclipse platform instances that communicate with a &quot;collaboration
      server&quot; that supports data persistence and implements shared
      collaborative services. The base infrastructure also includes some base
      services such as user identification/authentication, client-to-client
      messaging, and event notification.</p>
      <p>The Koi website, newsgroup, mailing list, source code, and latest
      download are available in <a href="http://archive.eclipse.org/technology/archives/koi-project.tar.gz">a
      compressed tar archive <font size=-1>(6.5Mb)</font></a>.</p>
      
 <h2>Dali EJB Object-Relational Mapping Project</h2>    
    <p>The goal of Dali is to build support for the definition and editing of Object-Relational Mappings (ORM) 
	for EJB 3.0 Entities (JSR 220). EJB 3.0 is part of the Java EE 5 specification (JSR 244). 
	Dali is comprised of a set of extensible frameworks and exemplary tools designed to reduce 
	the complexity of ORM by providing creation and automated initial mapping wizards, 
	code assistance, and dynamic problem identification.</p>
	<p>This project has moved from the
      Technology PMC to the <a href="/webtools">Web Tools
      Platform</a> project.</p>
	<p>The Dali website, newsgroup, mailing list, source code, and latest
    download are available in <a href="http://archive.eclipse.org/technology/archives/jsr220orm-project.tar.gz">a
    compressed tar archive <font size=-1>(6.5Mb)</font></a>.</p>
    
<h2>IDE for Laszlo</h2>
<p>IDE for Laszlo is an Eclipse-based development environment for 
creating, editing, debugging, and testing applications based on 
the LZX declarative mark-up language. Laszlo is based on LZX, 
which is an XML and JavaScript description language similar in 
spirit to XUL (XML User interface Language) and XAML 
("Longhorn" mark-up language by Microsoft&trade;).</p>
<p>The Laszlo Platform is an open-source platform for the development
 and delivery of Rich Internet applications (see 
 <a href="http://www.openlaszlo.org">http://www.openlaszlo.org</a> for more information) where the LZX XML 
 mark-up is used to create the user interfaces.
 </p>
<p>The Laszlo website, newsgroup, mailing list, source code, and latest 
download are available in <a href="http://archive.eclipse.org/technology/archives/laszlo-project.tar.gz">
a compressed tar archive. <font size=-1>(9MB)</font></a></p>
    

<h2>Lepido, Tools for Apache Cocoon</h2>
	<p>The Lepido website, newsgroup, mailing list, source code, and latest 
	download are available in <a href="http://archive.eclipse.org/technology/archives/lepido-project.tar.gz">
	a compressed tar archive <font size=-1>(9MB)</font></a></p>

<h2>OMELET (Open Modeling 
      Environment with Links for Extensions and Transformations)</h2>
 The Open Modeling Environment with Links for Extension by Transformation project aimed to provide the ability to integrate the increasingly wide variety of modeling transformation technologies and tools so that otherwise incompatible tools could be used in combination. As such OMELET could be viewed as a next generation make, using meta-models to give strict type signatures for models and transformations between models.
      <p><b>Successes<br>
      </b>OMELET demonstrated an ability to integrate various tools, supporting transformations written in Java, XSLT1, XSLT2, or ANT. OMELET pioneered a multi-level typing system for meta-models so that a model comforming to a meta-model could be described as a file representation of an XML 1.0 serialization of an XMI 1.3 encoding of a UML 1.4 meta-model, thereby allowing transformations to operate at appropriate levels of abstraction. Work in progress supported ATL, Tefkat, a simple composite transformation language and a set of Ecores for various MOF and UML standards.<br>
      <br>
      <b>Failures<br>
      </b>OMELET never acquired sufficient resources to progress at a satisfactory rate. Lack of resources was a particular problem for an integration project since it was too easy to be distracted into looking at every other interesting modeling project and concluding that yes that too would be good to integrate with OMELET. Lack of resources also prevents the release of MOF and UML models since licensing issues were never resolved.</p>
      <p><b>Final status</b><br>
      OMELET was just about functional with respect to invoking individual transformations, but that was more sensibly done within the environment of that transformation. OMELET was close to supporting composite transformations at which point OMELET would become useful.</p>
      <p>Prior to archiving, the prevailing CVS status was upgraded to support Eclipse 3.1 and Java 5. The final release on the update site needed the Eclipse 3.1M4 release to avoid problems with early Eclipse support for Java 5.&nbsp;</p>

<p>The <a href="/mddi"> MDDi project</a> has almost identical goals to OMELET and significantly greater resources. It is therefore hoped that MDDi can fulfill OMELET's ambitions.&nbsp;</p>

<p>The OMELET website, newsgroup, mailing list, source code, and latest download
are available in a <a href="http://archive.eclipse.org/technology/archives/omelet-project.tar.gz">compressed tar
archive <font size=-1>(2mb)</font></a></p>

<h2>Pollinate</h2>
<h3>Goals Achieved</h3>
Pollinate is an Eclipse technology project for build an Eclipse-based
IDE and toolset that leverages open source application frameworks Apache
Beehive and platforms like Web Tools Platform. There is a tight focus on
Beehive related functionality making everything else that Pollinate
needs secondary. 
>From inception until work ended at the end of Q1 2005, Pollinate focused
on building on WTP to address Apache Beehive NetUI and PageFlows,
leaving Controls and Web Services MetaData for the future. To that end,
there is a basic Page Flow Editor in Pollinate plus basic support for
assembling and launching a Beehive based web application.

<h3>Final Status</h3>
At this time the Pollinate Project is in archival.  We would welcome
others from the community who are interested in Pollinate to step-up and
lead or contribute to the project. <p>The Pollinate website, newsgroup, mailing list, source code, and
latest downloads are available in a <a href="http://archive.eclipse.org/technology/archives/pollinate-project.tar.gz">compressed
tar archive <font size=-1>(155Mb)</font></a> 

<h3>More information</h3>
Visit <a href="http://beehive.apache.org/">beehive.apache.org</a> for more information on the apache beehive
project. Visit <a href="/webtools/">www.eclipse.org/webtools</a> for information about the web tools
project. Additional resources are available at <a href="http://dev2dev.bea.com/opensource">dev2dev.bea.com/opensource</a> and
<a href="http://dev2dev.bea.com/eclipse">dev2dev.bea.com/eclipse</a> for articles, blogs and other related material.

<h2>Stellation</h2>
      Stellation is a software configuration management system designed to be 
      an extensible platform for building systems based on the integration of 
      advanced or experimental SCM techniques with the Eclipse development environment. 
      The Stellation project will be using this system to integrate support for 
      fine-grained software artifacts into the Eclipse environment, with particular 
      focus on dynamic program organization, and inter-program coordination.<p>The Stellation website, newsgroup, mailing list, source code, and
      latest download are available in a <a href="http://archive.eclipse.org/technology/archives/stellation-project.tar.gz">compressed
      tar archive <font size=-1>(110Mb)</font></a>.
 
<h2><a href="/webtools" target="_top">WSVT (Web Service Validation 
      Tools)</a></h2>
The mission of the project is to provide a set of web service validation
tools that can be used during the development, deployment, testing and
debugging of web service applications... This project has moved from the
      Technology PMC to the <a href="/webtools">Web Tools
      Platform</a> project. (For archival reasons, the last independent release
      of WSVT is <a href="../wsvt/index.html" target="_top">still available</a>.)

<h2><a href="http://www.eclipse.org/emf" target="_top">XSD</a></h2>
      The XSD Infoset Model is a reference library for use with any code that 
      examines, creates or modifies XML Schemas (standalone or as part of other 
      artifacts, such as XForms or WSDL documents)... This project has moved
      from the Technology PMC to the <a href="/emf">Eclipse Modeling Framework</a>
      project.</td>
      <br /><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);
?>
