Java Ultra-Lite Persistence (JULP)
Quick Guide
To use JULP you need to extend your object from org.julp.AbstractDomainObject. See Tips and Tricks to learn a workaround.
Then you need to create object which extends org.julp.DomainObjectFactory.
This is can be done using small Swing GUI utility: org.julp.util.rs2db.GeneratorMain or commandline utility org.julp.util.rs2db.ResultSet2JavaBeanGenerator
The utilities will generate object which extends org.julp.AbstractDomainObject, object which extends org.julp.DomainObjectFactory and mappings .properties.
To see detailes run org.julp.util.rs2db.GeneratorMain and open menu "Help/Content".
Here is Product:
package org.julp.examples;
public class Product extends org.julp.AbstractDomainObject implements java.io.Serializable, Cloneable{
public Product() {}
protected java.lang.Integer id;
protected java.lang.String name;
protected double price;
protected java.lang.String comments;
public java.lang.Integer getId() {
return this.id;
}
public void setId(java.lang.Integer id) {
if (!isLoading()){
/* DBColumn nullability: NoNulls - modify as needed */
if (id == null){
throw new IllegalArgumentException("Missing field: id");
}
if (!id.equals(this.id)){
this.modified = true;
}
}
this.id = id;
}
public java.lang.String getName() {
return this.name;
}
public void setName(java.lang.String name) {
if (!isLoading()){
/* DBColumn nullability: NoNulls - modify as needed */
if (name == null || name.trim().equals("")){
throw new IllegalArgumentException("Missing field: name");
}
if (!name.equals(this.name)){
this.modified = true;
}
}
this.name = name;
}
public double getPrice() {
return this.price;
}
public void setPrice(double price) {
if (!isLoading()){
/* DBColumn nullability: NoNulls - modify as needed */
if (price != this.price) {
this.modified = true;
}
}
this.price = price;
}
public java.lang.String getComments() {
return this.comments;
}
public void setComments(java.lang.String comments) {
if (!isLoading()){
/* DBColumn nullability: Nullable - modify as needed */
if (comments == null && this.comments != null) {
this.modified = true;
}else if (comments != null && this.comments == null) {
this.modified = true;
}else if (!comments.equals(this.comments)) {
this.modified = true;
}
}
this.comments = comments;
}
}
Here is ProductFactory:
package org.julp.examples;
import java.util.*;
import org.julp.*;
import java.sql.*;
public class ProductFactory extends org.julp.DomainObjectFactory implements java.io.Serializable, Cloneable{
public ProductFactory() {
this.setRequestor(Product.class);
/* IT IS NOT NESSESARY TO LOAD MAPPINGS THIS WAY, COULD BE ANYTHING: XML, JNDI, DATABASE, ETC... */
setMapping(loadMappings("Product.properties"));
sqlMap = loadMappings("Product.sql");
}
protected Properties sqlMap = null;
public Properties loadMappings(String path){
java.io.InputStream inStream = null;
Properties props = new Properties();
try{
inStream = this.getClass().getResourceAsStream(path);
props.load(inStream);
}catch(java.io.IOException ioe){
throw new RuntimeException(ioe);
}finally{
try{
inStream.close();
}catch(java.io.IOException ioe){
throw new RuntimeException(ioe);
}
}
return props;
}
public int findAllProducts(){
int records = 0;
try{
records = this.load(this.dbServices.getResultSet(sqlMap.getProperty("findAllProducts")));
printAllProducts();
}catch (SQLException sqle){
throw new RuntimeException(sqle);
}
return records;
}
public void createAndStoreProducts(){
int records = findAllProducts();
Product product = new Product();
// this is NOT proper way to genarate id
product.setId(new Integer(records + 1));
product.setName("Zaurus SL-5600");
product.setPrice(299.98);
product.setComments("Good deal!");
this.create(product);
System.out.println("\ncreated product: " + product + "\n");
/*
another way:
product.create();
product.setObjectId(this.getNextObjectId());
this.getObjectList().add(product);
or:
product.create();
this.setObject(product);
*/
java.text.NumberFormat nf = java.text.NumberFormat.getInstance();
nf.setMaximumFractionDigits(2);
ListIterator li = this.objectList.listIterator();
while (li.hasNext()){
Product productToUpdate = (Product) li.next();
double currentPrice = productToUpdate.getPrice();
if (currentPrice < 10){
double newPrice = currentPrice * 1.1;
productToUpdate.setPrice(Double.parseDouble(nf.format(newPrice)));
productToUpdate.store();
}
}
System.out.println("\n======================= this is after data modifications ===========================\n");
printAllProducts();
try{
this.dbServices.beginTran();
boolean success = this.writeData();
Throwable t = this.getWhatIsWrong();
if (t != null){
throw t;
}
if (success){
this.dbServices.commitTran();
}else{
throw new SQLException("Data modification: failed");
}
this.syncSqlStatus();
}catch (Throwable t){
try{
this.dbServices.rollbackTran();
}catch (SQLException sqle){
sqle.printStackTrace();
throw new RuntimeException(sqle);
}
t.printStackTrace();
}finally{
try{
this.dbServices.release(true);
}catch (SQLException sqle){
sqle.printStackTrace();
throw new RuntimeException(sqle);
}
}
System.out.println("\n======================= this is after COMMIT & syncSqlStatus() or after ROLLBACK ===========================\n");
printAllProducts();
}
public void getProductPages(){
System.out.println("\n======================= this is all products ===========================\n");
findAllProducts();
this.setPageSize(10);
PageHolder page = this.getPage(1);
System.out.println("\nTotal records: " + page.getObjectsTotal() + ", Page " + page.getPageNumber() + " of " + page.getPagesTotal() + "\n");
Iterator iter1 = page.getPage().iterator();
while (iter1.hasNext()){
Product product = (Product) iter1.next();
System.out.println(product);
}
PageHolder thirdPage = this.getPage(3);
System.out.println("\nTotal records: " + thirdPage.getObjectsTotal() + ", Page " + thirdPage.getPageNumber() + " of " + thirdPage.getPagesTotal() + "\n");
Iterator iter2 = thirdPage.getPage().iterator();
while (iter2.hasNext()){
Product product = (Product) iter2.next();
System.out.println(product);
}
}
protected void printAllProducts(){
List products = this.getObjectList();
Iterator productsIter = products.iterator();
while (productsIter.hasNext()){
Product product = (Product) productsIter.next();
System.out.println(product);
}
}
}