| --- |
| layout: default |
| title: Apache Polygene |
| --- |
| <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--> |