polygene-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Niclas Hedhman <nic...@hedhman.org>
Subject Re: Introduction
Date Fri, 19 Aug 2016 07:51:34 GMT
Hi and welcome to Apache Zest,

I have good news, and perhaps less good news. The good news is that this is
a small community with relatively slow progress, so it is easy to get to
know everyone, get help and keep up with what is going on. I think we
average one mail per day over a quarter, so not too hard.
But, Zest is about Composite Oriented Programming (COP), a paradigm coined
by this community (then Qi4j) about 9 years ago. And COP on Java is
mind-bending, so you might be in for a shock therapeutic experience going

Now, regarding the "Migrate to Java 8"; Most of the work is done, but there
are a LOT (too much!) of things we want to do in the 3.0 release.

First of all, I think you need to familarize yourself with the Zest
programming model. For instance, understanding that;

public interface Person extends HasName, HasAge{}

public interface HasName {
    Property<String> name();

@Mixins( HasAge.Mixin.class )
public interface HasAge {
    int age();
    int age( LocalDate at );

    Property<LocalDate> birthdate();

    abstract class Mixin
        implements HasAge {

        public int age(){
            return age( LocalDate.now() );

        public int age( LocalDate at ) {
            return Period.between( birthdate().get(), at ).getYears();

With the above entity (of type Person), Zest will wire up this to actually
work without additional code, and one could do;

@UnitOfWorkPropagation( MANDATORY )  // if unit of work isn't in progress,
this will fail
public Iterator<Person> findPerson( String name )
    QueryBuilder qb = queryBuilderFactory.newQueryBuilder( Person.class );
    HasName template = templateFor( HasName.class );
    qb = qb.where( eq( template.name(), name ) );
    Query<Person> q = unitOfWorkFactory.currentUnitOfWork().newQuery( qb );
    return q.iterator();

To query for all person with a given name in the underlying entity store.

To get these basics, I think that you should try out the Qi4j 2.1 release,
and do some simple examples from the Tutorials section first. And please
come back with questions and suggestions on how to improve the tutorials.
That is something we really need at the moment.

After that, if you are still at your senses, you might want to tackle
relatively easy tasks first, such as "multi @Constraints, @Concerns and
@Mixins annotations" or an extension for a new entity store. The latter
having the advantage of a ready-made test kit. Or you might be interested
in creating more tests to get the hang of how apps are written with Zest.

Once again, welcome to a mind-blowing world of Composite Oriented


On Fri, Aug 19, 2016 at 2:56 PM, Prince Arora <aroraprince151@gmail.com>

> Hi Everyone,
> My self Prince Arora and i am working as senior developer in an IT services
> based organisation in India. I have 4 years of experience working in Java
> and really want to give my contribution to community.
> I have worked with CMS like Adobe AEM, Jahia, products like Adobe Live
> cycle, and other technologies and frameworks like Spring, JPA, Swing,
> Digital Signing and Encryption, Mongo, SQL, Linux and application servers
> like Apache Tomcat and Wildfly.
> I have used some of Apache's frameworks like httpcomponents, commons-lang,
> common-io, commons-net.
> I am going through the code and issues in Jira. I will be really happy to
> give my contribution and open for suggestions.
> Since this is my first contribution in an open source project, i will be
> needing little bit help with the procedures and best practices. Let me know
> how and where i can start giving my contribution.
> Thanks.
> Prince Arora

Niclas Hedhman, Software Developer
http://zest.apache.org - New Energy for Java

  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message