blob: 5f0202afe711821e457ae3af107db789b4a7323e [file] [log] [blame]
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Apache Polygene</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta name="description" content="Apache Polygene™ is a community based effort exploring Composite Oriented Programming for domain centric application development. This includes evolved concepts from Aspect Oriented Programming, Dependency Injection and Domain Driven Design.
Composite Oriented Programming allows developers to work with 'fragments', smaller than classes, and 'compose' fragments into larger 'composites' which acts like the regular objects. Apache Polygene™ also tackles the enforcement of application composition, i.e. composites are declared in modules, modules are contained in layers and access between layers are controlled/enforced.
">
<meta name="author" content="The Apache Polygene™ Project">
<meta name="keywords" content="cop, composite oriented programming, ddd, domain driven design, composite, mixin, fragment, constraint, concern, side-effect, aop, aspect oriented programming, application, layer, module, structure, java, library, toolkit, framework">
<!-- Le styles -->
<link href="/landing-resources/css/bootstrap.css" rel="stylesheet">
<link href="/landing-resources/css/font-awesome.css" rel="stylesheet">
<style type="text/css">
body {
padding-top: 70px;
padding-bottom: 40px;
}
#home-logo p {
margin-top: 0.75em;
font-size: 2.5em;
font-weight: lighter;
}
</style>
<link href="/landing-resources/css/bootstrap-responsive.min.css" rel="stylesheet">
<!-- HTML5 shim, for IE6-8 support of HTML5 elements -->
<!--[if lt IE 9]>
<script src="http://html5shim.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<!-- Fav and touch icons -->
<link rel="shortcut icon" type="image/png" href="/landing-resources/ico/favicon.png">
<!-- Analytics -->
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','https://www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-89723617-1', 'auto');
ga('send', 'pageview');
</script>
</head>
<body>
<div class="navbar navbar-inverse navbar-fixed-top">
<div class="navbar-inner">
<div class="container-fluid">
<a class="btn btn-navbar" data-toggle="collapse" data-target=".nav-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</a>
<a class="brand" href="/"><img src="/landing-resources/img/logo-234x83.png" style="height: 45px;" /></a>
<div class="nav-collapse collapse">
<ul class="nav">
<li><a href="/news.html"><i class="icon-rss"></i> News</a></li>
<li><a href="/download.html"><i class="icon-download"></i> Download</a></li>
<li class="dropdown">
<a class="dropdown-toggle" role="button" data-toggle="dropdown" data-target="#" href="#">
<i class="icon-book"></i> Documentation <b class="caret"></b>
</a>
<ul class="dropdown-menu" role="menu">
<li role="menuitem"><a href="/java/latest/index.html"><i class="icon-caret-right"></i> Latest release</a></li>
<li role="menuitem"><a href="/java/3.0.0/index.html"><i class="icon-caret-right"></i> 3.0.0</a></li>
<li role="menuitem"><a href="/java/2.1/index.html"><i class="icon-caret-right"></i> 2.1</a></li>
<li role="menuitem"><a href="/java/2.0/index.html"><i class="icon-caret-right"></i> 2.0</a></li>
<li role="menuitem"><a href="/java/1.4/index.html"><i class="icon-caret-right"></i> &lt;=1.4.x</a></li>
<li class="divider"></li>
<li role="menuitem"><a href="/java/develop/index.html"><i class="icon-caret-right"></i> develop branch</a></li>
</ul>
</li>
<li class="dropdown">
<a class="dropdown-toggle" role="button" data-toggle="dropdown" data-target="#" href="/community">
<i class="icon-group"></i> Community <b class="caret"></b>
</a>
<ul class="dropdown-menu" role="menu">
<li role="menuitem"><a href="/community/get_help.html"><i class="icon-caret-right"></i> Get Help</a></li>
<li class="divider"></li>
<li role="menuitem"><a href="/community/participate.html"><i class="icon-caret-right"></i> Participate</a></li>
<li role="menuitem"><a href="/community/playing_field.html"><i class="icon-caret-right"></i> Playing Field</a></li>
<li class="divider"></li>
<li role="menuitem"><a href="/community/codebase.html"><i class="icon-caret-right"></i> Codebase</a></li>
<li role="menuitem"><a href="https://builds.apache.org/view/S-Z/view/Polygene/" target="_blank"><i class="icon-caret-right"></i> Continuous Integration</a></li>
<li role="menuitem"><a href="https://issues.apache.org/jira/browse/POLYGENE" target="_blank"><i class="icon-caret-right"></i> Issues</a></li>
<li class="divider"></li>
<li role="menuitem"><a href="/community/maturity.html"><i class="icon-caret-right"></i> Maturity Model</a></li>
<li role="menuitem"><a href="/community/contributors.html"><i class="icon-caret-right"></i> People behind Apache Polygene™</a></li>
<li class="divider"></li>
<li role="menuitem"><a href="http://www.apache.org/licenses/" target="_blank"><i class="icon-caret-right"></i> Licensing</a></li>
<li role="menuitem"><a href="/community/licensing_faq.html"><i class="icon-caret-right"></i> Licensing FAQ</a></li>
<li class="divider"></li>
<li role="menuitem"><a href="http://www.apache.org/foundation/sponsorship.html" target="_blank"><i class="icon-caret-right"></i> Sponsorship</a></li>
<li role="menuitem"><a href="http://www.apache.org/foundation/thanks.html" target="_blank"><i class="icon-caret-right"></i> Thanks</a></li>
<li role="menuitem"><a href="http://www.apache.org/security/" target="_blank"><i class="icon-caret-right"></i> Security</a></li>
</ul>
</li>
</ul>
</div><!--/.nav-collapse -->
<!-- ApacheCon resource -->
<div style="float: right; padding-top: 2px;">
<a href="http://www.apache.org/events/current-event.html"><img src="http://www.apache.org/events/current-event-234x60.png"/></a>
</div>
</div>
</div>
</div>
<div id="content" class="container-fluid">
<div class="row-fluid">
<div id="home-logo" class="span3" style="text-align: center; padding-top: 132px">
<img src="graphics/Polygene-logo-234x137.png"/>
</div>
<div class="span9">
<div class="row-fluid">
<div class="span9">
<div class="well">
<h2>What is Apache Polygene™?</h2>
<p>
The short answer is that <strong>Apache Polygene™</strong> is a community based effort exploring Composite Oriented Programming for domain centric application development. This includes evolved concepts from <a href="https://en.wikipedia.org/wiki/Aspect-oriented_programming">Aspect Oriented Programming</a>, <a href="https://en.wikipedia.org/wiki/Dependency_injection">Dependency Injection</a> and <a href="https://en.wikipedia.org/wiki/Domain-driven_design">Domain Driven Design</a>.
</p>
<p>
<strong>Composite Oriented Programming</strong> allows developers to work with 'fragments', smaller than classes, and 'compose' fragments into larger 'composites' which acts like the regular objects. Apache Polygene™ also tackles the enforcement of application composition, i.e. composites are declared in modules, modules are contained in layers and access between layers are controlled/enforced.
</p>
<p>
<strong>Apache Polygene™ (Java Edition)</strong>, first Apache Polygene sub-project, is an implementation of Composite Oriented Programming, using the standard Java platform, without the use of any pre-processors or new language elements. Everything you know from Java still applies and you can leverage both your experience and toolkits to become more productive with Composite Oriented Programming today.
</p>
<p>
The Apache Polygene™ community welcomes any effort exploring Composite Oriented Programming for domain centric application development using any technology.
</p>
<!--
<p>Let's create an example application. Open a terminal/console and type;</p>
<code><pre>
polygene create-project restapp Order my.domain.order
./gradlew assemble jettyRun
</pre>
</code>
<p>Open <a href="http://localhost:8080/app/api/">http://localhost:8080/app/api/</a> in browser. You will get the REST API root endpoint, showing Customers and Orders.</p>
<p>We can navigate to Customers <a href="http://localhost:8080/app/api/customers/">http://localhost:8080/app/api/customers/</a></p>
<p>There are no Customers, but instructions how to create one.</p>
<p>Open a new terminal and let's create a Customer.</p>
<code><pre>
curl -u admin:secret -d name="Niclas Hedhman" http://localhost:8080/app/api/customers/create
</pre></code>
<p>We get back a confirmation that the Customer was created and the location of </p>
<code><pre>
$ echo '{ "name": "Niclas Hedhman",
"address": "Canary Residence",
"city": "Cheras",
"country": "Malaysia",
"phone": "" }' | curl http://localhost:8080/app/api
</pre>
</code>
<p>
The simple Order domain model is found in <code>Order/model/src/main/java/my/domain/order/model/orders</code>
and we can see <code>Customer.java</code>, <code>Order.java</code> and <code>OrderItem.java</code>
</p>
<code><pre>
public interface Order extends Identity
{
Property&lt;String&gt; orderNumber();
Association&lt;Customer&gt; customer();
ManyAssociation&lt;OrderItem&gt; items();
Property&lt;ZonedDateTime&gt; registered();
@Optional Property&lt;ZonedDateTimeOpti shipped();
}
</pre></code>
<code><pre>
public interface OrderItem extends Identity
{
Property&lt;String&gt; partNumber();
Property&lt;BigDecimal&gt; unitPrice();
Property&lt;Integer&gt; units();
Property&lt;BigDecimal&gt; discount();
}
</pre></code>
-->
</div>
</div>
<div class="span3">
<a href="http://www.apache.org" target="_blank"><img src="landing-resources/img/asf_logo.png"/></a>
<h3><i class="icon-group"></i> Get Help</h3>
<p>Join the <a href="https://www.apache.org/foundation/mailinglists.html" target="_blank">dev@polygene.apache.org</a> mailing list to discuss and get help<!--, or help others on <a href="http://stackoverflow.com/questions/tagged/apache-polygene">Stackoverflow</a>-->.</p>
You can also subscribe from here: <a href="mailto:dev-subscribe@polygene.apache.org" title="Click to subscribe to this list" style="margin: 0 auto" class="btn btn-primary">Subscribe</a>
</div>
</div>
<div class="row-fluid">
<div class="span6">
<h3><i class="icon-briefcase"></i> Learn more</h3>
<p><a href="java/latest/intro.html">Learn more</a> about problems Apache Polygene™ (Java Edition) tries to solve thanks to Composite Oriented Programming and how you can confidently develop domain centric applications with it.</p>
</div><!--/span-->
<div class="span6">
<h3><i class="icon-download"></i> Download</h3>
<p><a href="download.html">Download</a> the Apache Polygene™ (Java Edition) SDK binaries and sources, learn how to <a href="java/latest/howto-depend-on-polygene.html">depend on Apache Polygene™ (Java Edition) in your build</a> or simply get the <a href="community/codebase.html">source</a>.</p>
</div><!--/span-->
</div><!--/row-->
<div class="row-fluid">
<div class="span6">
<h3><i class="icon-time"></i> Get started</h3>
<p>Get a grasp on Apache Polygene™ (Java Edition) in 42 minutes and then, get real through the first steps needed to get a complete application up and running. From there, work through the fundamentals of Apache Polygene™ (Java Edition) development with in-depth tutorials.</p>
<p><a href="java/latest/tutorials.html"><i class="icon-time"></i> View details &raquo;</a></p>
</div><!--/span-->
<div class="span6">
<h3><i class="icon-book"></i> Read the docs</h3>
<p>Everything you need to know about internals and how to use Apache Polygene™ (Java Edition). Runable samples, comprehensive documentation of the Apache Polygene™ (Java Edition) Core, Libraries, Extensions and Tools.</p>
<p><a class="" href="java/latest/index.html"><i class="icon-book"></i> View details &raquo;</a></p>
</div><!--/span-->
</div><!--/row-->
</div>
</div><!--/row-->
</div>
<div class="container-fluid">
<hr>
<footer>
<p>
Copyright &copy; 2015-2018 The Apache Software Foundation, Licensed under the <a href="http://www.apache.org/licenses/">Apache License, Version 2.0</a>.
<br/>
<small>
Apache Polygene, Polygene, Apache, the Apache feather logo, and the Apache Polygene project logo are trademarks of The Apache Software Foundation.<br/>
All other marks mentioned may be trademarks or registered trademarks of their respective owners.
</small>
</p>
</footer>
</div>
<!-- Le javascript
================================================== -->
<!-- Placed at the end of the document so the pages load faster -->
<script src="/landing-resources/js/jquery-1.8.3.min.js"></script>
<script src="/landing-resources/js/bootstrap.min.js"></script>
<script src="/landing-resources/js/qi4j.org.js"></script>
</body>
</html>