| <!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> <=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<String> orderNumber(); |
| Association<Customer> customer(); |
| ManyAssociation<OrderItem> items(); |
| Property<ZonedDateTime> registered(); |
| @Optional Property<ZonedDateTimeOpti shipped(); |
| } |
| </pre></code> |
| <code><pre> |
| public interface OrderItem extends Identity |
| { |
| Property<String> partNumber(); |
| Property<BigDecimal> unitPrice(); |
| Property<Integer> units(); |
| Property<BigDecimal> 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 »</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 »</a></p> |
| </div><!--/span--> |
| </div><!--/row--> |
| </div> |
| </div><!--/row--> |
| |
| |
| </div> |
| <div class="container-fluid"> |
| <hr> |
| <footer> |
| <p> |
| Copyright © 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> |