Mailing List
Register in our mailing list to receive updated information and news about JProvocateur  

 Welcome

Jprovocateur is an open source project that intends to simplify the development of small and medium sized web java business applications. It is based on popular frameworks  and allows developers with limited experience to produce complicated Ajax forms/grids (without writing javascript just xml configuration) and services with minimum effort. The technologies that is based on are:Ext J.S, Freemarker and Spring MVC for the presentation layer; Spring and Oval Validation for the business layer; Hibernate for the Data layer.

 

You can access the the demo application  (username:guest password:guest)  that has been created without a single line of javascript or click here to view the basic features of the demo application and step by step instructions on how it was created .

News

(20/01/2012) Jenkins and Sonar Installed

Jenkins was installed in order to have better control over the builds. You can access our Sonar  server now and view Jprovocateur quality related metrics.

Primary target now is to add more unit tests and improve the code coverage metrics.

 

(15/01/2012)Nexus Maven Repository Installed with 2.0.2 Pre-Alpha-1

Maven repository installed and Maven Archetypes created. 2.0.2 Pre-Alpha-1 is available. If you face any problems during the installation you can contact us through the Help Forum.

Step 0 - Prerequisites page is updated. Installation process is simplyfied with the use of the Maven archetypes and our own Maven Repository .

Step 1 - Hibernate Object page is updated

 (07/01/2012)2.0.0 Pre-Alpha-1 Deployed on the server  (not available for download yet)

The version will be available in 2-3 weeks.

Completely removed xml configuration files on the business layer and replaced them with spring/jpa annotations.

Generation of the views based on Hibernate Entity metadata, so just add the hibernate object and the rest are generated. So no need to write from scratch. Preview the forms that are generated based on the Hibernate Entity (from the menu Administration>Hibernate Entities as admin/admin) and then download and modify them according to your needs.

 

  • Services configuration with Spring Annotations.
  • Automatic generation of the views (List with master detail  , Create, Update, Delete) and services based on the Hibernate Entity. Click here to view the generated views for object Customer  (Customer 1--* Account 1--* Transactions) with admin/admin
  • Hibernate configuration with Annotations.
  • Generics in the Services
  • No need to download Ext J.S or other j.s libraries to run the examples.
  • No need to configure your own database. HSQLDB is used for the examples.

Simple Example

This is a simple example to create a Grid with paging, filters in all columns(serverside/clientside), export to XLS, printFriendly, sorting (serverside/clientside), grouping etc. On the tabs you can find the actual code that implements this service.

 Example Ext J.S Grid

Simple Hibernate POJO + Oval Annotations that are used for CREATE/UPDATE actions

package com.example.service.objectmodel.country;

import java.util.HashSet;
import java.util.Set;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.OneToMany;
import javax.persistence.SequenceGenerator;
import javax.persistence.Table;

import net.sf.oval.constraint.Length;
import net.sf.oval.constraint.NotEmpty;
import net.sf.oval.constraint.NotNull;

@Entity
@Table(name = "COUNTRY")
public class Country {
	
	@Id
	@Column(name = "COUNTRYID")
	@GeneratedValue(strategy=GenerationType.SEQUENCE, generator="basis_gen")
	@SequenceGenerator(name="basis_gen", sequenceName="exampleapp_seq")
	public Long countryId;
	
	@Column
	@NotNull 
	@NotEmpty
	@Length(max = 100)
	private String name;
	
	@Column
	@NotNull 
	@NotEmpty
	@Length(max = 100)
	private String countryCode;
	
	@Column
	@NotNull 
	@NotEmpty
	@Length(max = 50)
	private String continent;
	
	
	@Column
	@NotNull 
	@NotEmpty
	@Length(max = 100)
	private String intPhoneCode;
	
	
	@Column
	@NotNull 
	@NotEmpty
	private Long population;
	
	
	@OneToMany(fetch = FetchType.LAZY, mappedBy = "country")
	private Set cities = new HashSet(0);
	
	
	public Long getCountryId() {
		return countryId;
	}
	public void setCountryId(Long countryId) {
		this.countryId = countryId;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public String getIntPhoneCode() {
		return intPhoneCode;
	}
	public void setIntPhoneCode(String intPhoneCode) {
		this.intPhoneCode = intPhoneCode;
	}
	public Long getPopulation() {
		return population;
	}
	public void setPopulation(Long population) {
		this.population = population;
	}
	

	public String getCountryCode() {
		return countryCode;
	}
	public void setCountryCode(String countryCode) {
		this.countryCode = countryCode;
	}
	
	public String getContinent() {
		return continent;
	}
	public void setContinent(String continent) {
		this.continent = continent;
	}
	
	
	public Set getCities() {
		return cities;
	}
	public void setCities(Set cities) {
		this.cities = cities;
	}

}

Service

package com.example.service.businesslayer.country;

import javax.annotation.Resource;

import org.jprovocateur2.basis.datalayer.GenericDaoDB;
import org.jprovocateur2.basis.error.BasisException;
import org.jprovocateur2.basis.serviceslayer.BusinessLogicInt;
import org.jprovocateur2.basis.serviceslayer.impl.BusinessLogic;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.example.service.objectmodel.country.Country;


@Service("countryListService")
@Scope("prototype")
@Transactional(readOnly = true)
public class CountryListService extends BusinessLogic{
	
	@Resource(name="genericDaoDB")
	private GenericDaoDB dao;
	


	public GenericDaoDB getDao() {
		return dao;
	}


	public String getExecutionType() {
		return BusinessLogicInt.LIST;
	}	
	
	public void initMetadata(Country country) throws BasisException {
		this.metaData.restrictionStartsWith("name", country.getName());
	 
	}
	

}


Access Rights Configuration






        
        
		
			true
		
		
			list
		
		
			
				Africa
				Asia
				Europe
				NorthAmerica
				SouthAmerica
				Oceana
			
		
	




	countryId
	
	numberfield
	true
	50
	true
	countryId




	name
	
	true
	550
	Country Name





	countryCode
	
	true
	550
	Country Code





	intPhoneCode
	
	true
	550
	60%
	Int. Phone Code
	




	population
	
	numberfield
	true
	550
	true
	{0}

', Ext.util.Format.formatNumber(value ));}]]>
70% Population
countryListForm false 980 751 true true true ../grid/grid.ftl bcObject.listSize ../json/listCountries Countries false true 30 bcObject.executionListData countryId name DESC true true continent /container/simpleContainer

Definitions of the MVC using Spring

package com.service.mvc.dataControllers;

@Controller
public class DataCountriesServicesController   extends SimpleDataController {

	@RequestMapping(value = "/json/listCountries")
	public ModelAndView listCountries(HttpServletRequest request, HttpServletResponse response) {
		Map expectedParams = new HashMap ();
		return handleRequest(request ,response, "countryListService" , new JSONTextView(), new Country(), expectedParams );
	}
	
}

Main Features of Project

Presentation Layer
  • Generation of complicated Ajax Master-Detail Forms/Grids using Ext j.s without writing Javascript, just simple xml configuration.
  • Generic Controller that automatically bind posted values to your objects.
  • Automatic conversion of your data to JSON/XML with full integration with the Ext j.s Forms/Grids.
  • Automatic conversion of business errors to JSON/XML integraded with your Ext j.s Forms/Grids.
  • Grid state management in the database.
  • PDF Export of Forms. 
  • XLS Export of Grids. (Not included yet in version 2)
  • Printing of Grid results (Not included yet in version 2)
Business-Data Layer
  • Flow Controller
  • Automatic transaction management.
  • Validation based on defined Annotations and user defined business rules.
  • Access Rights based on Roles.
  • Quartz Scheduler.
  • Administration Modules for user/roles/access rights (OPTIONAL).
  • Generic DAO to perform list/create/update/delete operations.

 

Where/When you can use it:

  • Small and medium size business applications.
  • Quick results required. You do not want to waste time configuring everything from scratch
  • Well defined steps for the analyst-developer-tester.
  • Configure the real views instead of creating Mockups.
  • Reduced team resources.
  • Reduced expertise in Ext J.S/Hibernate/Spring.

The following technologies are used

 
Highlights

October 17, 2011
Jprovocateur project is now sponsored by Oxxus.net Java web hosting

September 30, 2010
Mangolia CMS is installed and demo application is updated

September 5, 2010
The initial demo application is online(username:guest password:guest)

May 19, 2010
Help is needed! If you like to contribute please contact jprovocateur.dev

May 19, 2010
Registration of the domain and creation of the project in SourceForge

Design downloaded from free website templates.
 
Web Templates created with FlashMint. .