2009-03-25

[RELEASE] Zauber Commons 3.10

If you are using Zauber Commons (our java components), you may be interested on the new version: 3.10. This release may not be compatible with the 3.8/3.9 version.

Global Notes:
  • new modules: commons-web-transformation and commons-wicket
  • The upgrade from older version might require supervision. Some transitive dependencies might be missing. (zauber commons changed some dependency versions)
  • You need to upgrade from log4j 1.2.8 to 1.2.14. We suggest to upgrade your application (this is required if you use commons-repository). Change your pom:
               
                 log4j
                 log4j
                 1.2.15
                 
                    
                      javax.mail
                      mail
                    
                    
                      javax.jms
                      jms
                    
                    
                      com.sun.jmx
                      jmxri
                    
                    
                      com.sun.jdmk
                      jmxtools
                    
                 
                
    
Changelog:
  • commons-doxia:
    • This module aims to provide functionality related to the transformation of html/xml content.
    • So far we've implemented the XmlSanitizer interface, the purpose of which is to parse a dom tree and "sanitize" the dangerous nodes.
    • The only implementation of XmlSanitizer available at this time is DeletingElementNodeSanitizer. It deletes element/attribute nodes considered invalid. In order to do this it requires a TagSecutrityStrategy, implemented by HashMapTagSecurityStrategy.
    • XmlSanitizerTest provides an example of how to use this functionality.
  • commons-web-wicket:
    • we start to detect reusable classes across wicket projects:DynamicDetachableModel, RepositoryDynamicDetachableModel, ConfirmLink
  • commons-doxia:
    • upgrade to doxia 1.1 (http://jira.codehaus.org/secure/ReleaseNote.jspa?version=13617&styleName=Html&projectId=10780)
  • commons-spring:
    • remove unused dependency: org.springframework:spring-webmvc-struts
  • commons-web-utils:
    • new filter (NullFilter) that does nothing. usefull for conditional configuration of filters. for example in this example, depending on a property we activate/deactivate a caching filter depending on a flag:
            <bean name="anunciosServletCache" class="ar.com.zauber.commons.spring.beans.factory.SwitchConditionalFactoryBean">
                  <property name="caseBlocks">
                      <list>
                          <bean class="ar.com.zauber.commons.spring.beans.factory.impl.BooleanPropertyCaseBlock">
                              <constructor-arg index="0" value="${bar.cache.active}"/>
                              <constructor-arg index="1">
                                  <bean class="com.foo.bar.web.filters.AnunciosCacheFilter">
                                      <constructor-arg index="0" ref="anunciosCacheManager"/>
                                      <constructor-arg index="1" value="anuncios"/>
                                      <constructor-arg index="2" ref="seoStrategy"/>
                                      <constructor-arg index="3" ref="pagingHelper"/>
                                      <constructor-arg index="4" ref="commonsWebUtilsVersionProvider"/>
                                      <constructor-arg index="5" ref="lastModificationEntities"/>
                                  </bean>
                              </constructor-arg>
                          </bean>
                          <bean class="ar.com.zauber.commons.spring.beans.factory.impl.DefaultCaseBlock">
                              <constructor-arg index="0">
                                  <bean class="ar.com.zauber.commons.web.filter.NullFilter"/>
                              </constructor-arg>
                          </bean>
                      </list>
                  </property>
              </bean>
          
  • commons-repository:
    • upgrade from hibernate 3.2.x to 3.3.1 (this is the lastest stable version. also it is the version that will be used with spring 3.x). The changes that repository user need to take in consideration:
      • Hibernate migration guide http://www.hibernate.org/250.html#A51
      • If you want to ehcache 2nd level cache you need to add
        <dependency>
                            <groupId>org.hibernate</groupId>
                            <artifactId>hibernate-ehcache</artifactId>
                            <version>3.3.1.GA</version>
                            </dependency>
    • repository now has the ability to group by and apply an agregate function at the same time. This is usefull to lazy load entities and know how many entities are in the query:
              final Query/lt;DireccionDummy> query = 
                  new SimpleQuery<DireccionDummy>(DireccionDummy.class, 
                      new NullFilter(), null,  new Ordering(Collections.emptyList()));
              AggregateFunction function = new CompositeAggregateFunction(
                      Arrays.asList(new AggregateFunction[]{
                              new CountPropertyAggregateFunction("numero"),
                              new GroupPropertyAggregateFilter("direccion"),
                              new GroupPropertyAggregateFilter("numero"),
                      }));
              
               for(Object row: repository.aggregate(query, function, List.class)) {
                   final Object [] fields = (Object[]) row;
                   System.out.println("frequency: " + fields[0] + " | direccion:  " + fields[1] + "numero:  " + fields[2]);
               }
      
    • Another implementation of Value called PropertyValue that allows queries that have to compare it's properies. For example select Person where length > age. For example:
              final Query<PersonaDummy> q1 =
                  new SimpleQuery<PersonaDummy>(
                          PersonaDummy.class, new EqualsPropertyFilter("id", 
                                  new PropertyValue("id")), null, null);
      
      
              assertEquals(Integer.valueOf(6), 
                      repository.aggregate(q1, new RowCountAggregateFilter(), Integer.class));
      
    • new Hibernate interceptor used to inject dependencies from a spring context to achieve a Domain Driven Design. It is called =SpringInjectionInterceptor=. The classes wishing being injected with this interceptor, must be annotated with the annotation =@Configurable= And each field that will be injected must be transient and annotated with @Qualifier.The qualifier name can be used to set the bean name (else it uses the field name). For example:
      @Entity
      @Configurable
      public class DomainEntityExample implements Persistible {
          @Id
          private Long id;
      
          @Qualifier(value = "someService")
          private transient SomeService service;
          @Qualifier
          private transient SomeService someService;
          ...
      
          private DomainEntityExample() {
             // hibernate's
          }
      
          public DomainEntityExample(SomeService service, SomeService someService) {
              .....
              this.service = service;
              this.someService = someService;
          }
          public final SomeService getService() {
              return service;
          }
          public final SomeService getSomeService() {
              return someService;
          }
          ....
      }
      
      We also provide a SpringInjectionHibernateAuditLoggerInterceptor that combines the HibernateAuditLoggerInterceptor with SpringInjectionInterceptor (hibernate only let you specify only one interceptor) enhance SpringInjectionInterceptor (the interceptor that inject dependencies to hibernates entities). If the annotated bean implements InitializingBean, the afterPropertiesSet is called for post configuring settings.
Known Bugs
None known at this time
How to use it

There isn't a site with tutorials or formal documentation for Zauber Commons yet, but we are working on that. For now you can browse the source at the SVN repository https://code.zauber.com.ar/repos/sandbox/components/commons/code/trunk/. Also you can use Zauber Commons with a Maven 2:

  <repositories>
     <repository>
       <id>zauber-code-releases</id>
       <name>public zauber repository</name>
       <url>https://repo1.zauber.com.ar/zauber/code/releases</url>
       <releases><enabled>true</enabled></releases>
       <snapshots><enabled>false</enabled></snapshots>
     </repository>
     <repository>
       <id>zauber-code-snapshots</id>
       <name>public zauber repository</name>
       <url>https://repo1.zauber.com.ar/zauber/code/snapshots</url>
       <releases><enabled>false</enabled></releases>
       <snapshots><enabled>true</enabled></snapshots>
     </repository>
   </repositories>   
 
And for example add a dependency to your project
  <dependency>
    <groupId>ar.com.zauber.commons.web</groupId>
    <artifactId>commons-web-version</artifactId>
    <version>${commons.version}</version>
  </dependency>

Diffstat
 auth/password/pom.xml                                                                                                               |    6 
 commons/pom.xml                                                                                                                     |    6 
 dao/src/test/java/ar/com/zauber/commons/dao/OrderTest.java                                                                          |   16 
 exception/pom.xml                                                                                                                   |    7 
 facebook/pom.xml                                                                                                                    |    1 
 jetty-launcher/pom.xml                                                                                                              |    6 
 message/impl/pom.xml                                                                                                                |    7 
 pom.xml                                                                                                                             |   83 +++
 repository/api/src/main/java/ar/com/zauber/commons/repository/query/aggreate/GroupPropertyAggregateFilter.java                      |   30 +
 repository/api/src/main/java/ar/com/zauber/commons/repository/query/filters/BeginsLikePropertyFilter.java                           |    8 
 repository/api/src/main/java/ar/com/zauber/commons/repository/query/filters/ContainsLikePropertyFilter.java                         |    8 
 repository/api/src/main/java/ar/com/zauber/commons/repository/query/filters/EndsLikePropertyFilter.java                             |    8 
 repository/api/src/main/java/ar/com/zauber/commons/repository/query/filters/EqualsPropertyFilter.java                               |    6 
 repository/api/src/main/java/ar/com/zauber/commons/repository/query/filters/ExactLikePropertyFilter.java                            |    8 
 repository/api/src/main/java/ar/com/zauber/commons/repository/query/filters/GreaterThanEqualsPropertyFilter.java                    |    7 
 repository/api/src/main/java/ar/com/zauber/commons/repository/query/filters/GreaterThanPropertyFilter.java                          |    7 
 repository/api/src/main/java/ar/com/zauber/commons/repository/query/filters/LessThanEqualsPropertyFilter.java                       |    7 
 repository/api/src/main/java/ar/com/zauber/commons/repository/query/filters/LessThanPropertyFilter.java                             |    7 
 repository/api/src/main/java/ar/com/zauber/commons/repository/query/filters/LikePropertyFilter.java                                 |    8 
 repository/api/src/main/java/ar/com/zauber/commons/repository/query/values/PropertyValue.java                                       |   42 +
 repository/api/src/main/java/ar/com/zauber/commons/repository/query/values/SimpleValue.java                                         |   17 
 repository/impl/entities/pom.xml                                                                                                    |    1 
 repository/impl/spring-hbm/pom.xml                                                                                                  |   39 +
 repository/impl/spring-hbm/src/main/java/ar/com/zauber/commons/repository/SpringHibernateRepository.java                            |    4 
 repository/impl/spring-hbm/src/main/java/ar/com/zauber/commons/repository/aggregate/ProjectionAggregateFunctionVisitor.java         |    3 
 repository/impl/spring-hbm/src/main/java/ar/com/zauber/commons/repository/query/visitor/CriteriaFilterVisitor.java                  |  102 ++--
 repository/impl/spring-hbm/src/main/java/ar/com/zauber/commons/repository/usertypes/URLUserType.java                                |  163 +++++++
 repository/impl/spring-hbm/src/main/java/ar/com/zauber/commons/repository/utils/SpringInjectionHibernateAuditLoggerInterceptor.java |   52 ++
 repository/impl/spring-hbm/src/main/java/ar/com/zauber/commons/repository/utils/SpringInjectionInterceptor.java                     |  217 ++++++++++
 repository/impl/spring-hbm/src/test/java/ar/com/zauber/commons/repository/test/model/DomainEntityExample.java                       |   82 +++
 repository/impl/spring-hbm/src/test/java/ar/com/zauber/commons/repository/test/model/SomeService.java                               |   27 +
 repository/impl/spring-hbm/src/test/java/ar/com/zauber/commons/repository/utils/SpringInjectionInterceptorTest.java                 |   77 +++
 repository/impl/spring-hbm/src/test/java/ar/com/zauber/commons/test/SpringHibernateRepositoryTest.java                              |   53 ++
 repository/impl/spring-hbm/src/test/resources/ar/com/zauber/commons/repository/utils/injection-hibernate-mapping-spring.xml         |   15 
 repository/impl/spring-hbm/src/test/resources/ar/com/zauber/commons/repository/utils/injection-hibernate-spring.xml                 |   52 ++
 repository/pom.xml                                                                                                                  |   49 --
 spring/pom.xml                                                                                                                      |   16 
 spring/src/main/java/ar/com/zauber/commons/spring/mail/NullMailSender.java                                                          |   16 
 web/pom.xml                                                                                                                         |    1 
 web/transformation/pom.xml                                                                                                          |   44 ++
 web/transformation/src/main/java/ar/com/zauber/commons/web/transformation/sanitizing/api/AttributeValueValidator.java               |   31 +
 web/transformation/src/main/java/ar/com/zauber/commons/web/transformation/sanitizing/api/TagSecutrityStrategy.java                  |   48 ++
 web/transformation/src/main/java/ar/com/zauber/commons/web/transformation/sanitizing/api/XmlSanitizer.java                          |   35 +
 web/transformation/src/main/java/ar/com/zauber/commons/web/transformation/sanitizing/impl/AbstractElementNodeSanitizer.java         |  125 +++++
 web/transformation/src/main/java/ar/com/zauber/commons/web/transformation/sanitizing/impl/DeletingElementNodeSanitizer.java         |   73 +++
 web/transformation/src/main/java/ar/com/zauber/commons/web/transformation/sanitizing/impl/HashMapTagSecurityStrategy.java           |   82 +++
 web/transformation/src/main/java/ar/com/zauber/commons/web/transformation/sanitizing/impl/HrefUrlOnlyValueValidator.java            |   41 +
 web/transformation/src/main/java/ar/com/zauber/commons/web/transformation/sanitizing/impl/StyleAlignmentOnlyValueValidator.java     |   42 +
 web/transformation/src/main/java/ar/com/zauber/commons/web/transformation/sanitizing/impl/StyleTextDecorationValueValidator.java    |   45 ++
 web/transformation/src/main/java/ar/com/zauber/commons/web/transformation/sanitizing/impl/TargetSelfBlankValueValidator.java        |   33 +
 web/transformation/src/test/java/ar/com/zauber/commons/web/transformation/sanitizing/impl/XmlSanitizerTest.java                     |  133 ++++++
 web/utils/src/main/java/ar/com/zauber/commons/web/filter/NullFilter.java                                                            |   51 ++
 wicket/impl/pom.xml                                                                                                                 |   58 ++
 wicket/impl/src/main/java/ar/com/zauber/commons/wicket/components/ConfirmLink.java                                                  |   69 +++
 wicket/impl/src/main/java/ar/com/zauber/commons/wicket/model/DynamicDetachableModel.java                                            |  107 ++++
 wicket/impl/src/main/java/ar/com/zauber/commons/wicket/model/RepositoryDynamicDetachableModel.java                                  |   93 ++++
 wicket/pom.xml                                                                                                                      |   20 
 

0 comments:

Post a Comment