« May 2007 | Main | July 2007 »

June 2007 Archives

June 1, 2007

SwarmCache - Cluster-aware Caching for Java

SwarmCache is a simple but effective distributed cache. It uses IP multicast to efficiently communicate with any number of hosts on a LAN. It is specifically designed for use by clustered, database-driven web applications. Such applications typically have many more read operations than write operations, which allows SwarmCache to deliver the greatest performance gains. SwarmCache uses Java Community internally to manage the membership and communications of its distributed cache.

Wrappers have been written that allow SwarmCache to be used with the Hibernate and JPOX persistence engines.

How It Works?
The concept behind SwarmCache is fairly simple. Each server instantiates its own manager. For each type of object that the server wishes to cache, it instantiates a cache and adds it to the manager. The manager joins a multicast group and communicates with other managers in the group. Whenever an object is removed from a cache, the manager notifies all other managers in the group. Those managers then ensure that the object is removed from their respective caches. The result is that a server will not have in its cache a stale version of an object that has been updated or deleted on another server.

Note that the managers only need to communicate when an object is removed from a cache. This only happens when an object is updated or deleted. The managers do not co-operate beyond this. This means that the amount of inter-server communications is proportional to the amount of updates/deletes of the application. As the communications is multicast, it is not proportional to the number of caching hosts. Also notice that there is no "server"; all hosts are equal peers and they can come and go from the cache group as they please without affecting other group members. Thus the operation of the distributed cache is very robust.

Basic Usage
SwarmCache is designed to be integrated in to the persistence layer of a database-driven Java application. However, it could be useful for other types of applications. Once built in to the persistence engine, SwarmCache should be transparent to higher layers of the software. SwarmCache does not directly support transaction management. This can be accomplished by wrapping the cached objects and storing some additional transaction data. This will described and possibly implemented at a later date.

Swarmcache requires that swarmcache.jar, jgroups-all.jar, commons-collections.jar, and commons-logging.jar (included in the download) be in your classpath.

For most applications, it is sufficient to make use of the CacheFactory class to configure and use SwarmCache. Here is an example:

import net.sf.swarmcache.*;

...

CacheFactory cacheFactory;

...

// Configure and Initialize the cache manager
CacheConfiguration conf = new CacheConfiguration();
conf.setCacheType(CacheConfiguration.TYPE_LRU);
cacheFactory = new CacheFactory(conf);

...

// Create a new cache, using a name that describes
// what kind of object we will store
ObjectCache cache = cacheFactory.createCache("People");

...

// Store something in the cache
String key = "0001";
String person = "John Watkinson";
cache.put(key, person);

...

// Retrieve something from the cache
String person = (String)cache.get("0001");
System.out.println(person);

...

// Clear an object from the cache
// (This results in the sending of a
// multicast message to other caching hosts)
cache.clear("0001");
String person = (String)cache.get("0001");
// The following will print 'null'
System.out.println(person);

The example is simple, but running this same code on multiple machines in a network will result in their caches being consistent.

Note that the keys used must be serializable objects-- they must implement java.io.Serializable. The objects themselves that are stored in the cache need not be serializable. And of course, the keys should not be large objects for transmission efficiency purposes.

In order to keep keys distinct, it is usually preferred to have one cache per type of object stored. In that case, it makes sense to follow the convention that the cache be named after the fully-qualified class name of the object type to be stored.



Usage in a Persistence Engine

Here is some skeleton code that demonstrates how SwarmCache could be integrated in to a persistence engine. The following class is responsible for persisting an object of type Person:

public class PersonEntity extends GenericEntity {

ObjectCache cache;

public PersonEntity(CacheFactory cacheFactory) {
cache = cacheFactory.createCache("Person");
// * Other initialization here
}

...

public Person get(long key) {
Long cacheKey = new Long(key);
Person person = (Person)cache.get(cachekey);
if (person == null) {
// * Get the object from the database
if (person != null) {
// Put it in the cache
cache.put(cacheKey, person);
}
}
return person;
}

...

public void insert(Person person) {
// * Do database insert
// Add new object to cache
Long cacheKey = new Long(person.getKey());
cache.put(cacheKey, person);
}

...

public void update(Person person) {
// * Do database update
// Remove object from cache
// (This causes all caches in the group to be notified)
Long cacheKey = new Long(person.getKey());
cache.clear(cacheKey);
// Re-add the object to the cache
cache.put(cacheKey, person);
}

...

public void delete(long key) {
// * Do database delete
// Remove object from cache
// (This causes all caches in the group to be notified)
Long cacheKey = new Long(key);
cache.clear(cacheKey);
}

...

}

SwarmCache Project Home Page
http://swarmcache.sourceforge.net

SwarmCache Documentation
http://swarmcache.sourceforge.net/documentation.html

Download SwarmCache
http://sourceforge.net/project/showfiles.php?group_id=78637&release_id=193220

Permalink

June 2, 2007

JBossCache - TreeCache

JBoss Cache is a replicated and transactional cache. It is replicated since multiple JBoss Cache instances can be distributed (either within the same JVM or across several JVMs whether they reside on the same machine or on different machines on a network) and data is replicated across the whole group. It is transactional because a user can configure a JTA compliant transaction manager and make the cache operation transactional. Note that the cache can also be run without any replication; this is the local mode.

Currently, JBoss Cache consists of two components: a generic cache (implemented internally as org.jboss.cache.TreeCache) and a POJO cache (implemented internally as org.jboss.cache.aop.PojoCache). TreeCache is a tree-structured cache that provides replication and transaction context, while PojoCache extends the functionality of TreeCache but behaves as a true object cache providing transparent and finer-grained object mapping into internal cache.

JBoss Cache is a product designed to cache frequently accessed Java objects in order to dramatically improve the performance of e-business applications. By eliminating unnecessary database access, JBoss Cache decreases network traffic and increases the scalability of applications.

But JBoss Cache is much more than a simple cache. JBoss Cache provides fully transactional features as well as a highly configurable set of options to deal with concurrent data access in the most efficient manner possible for your application. In addition, it is a clustered cache that replicates contents to other cache instances running on separate JVMs, servers or even entire networks, making JBoss Cache a highly efficient library used by application server developers to implement clustering features.

JBoss Cache provides two caching APIs to suit your needs. The JBoss Cache API offers a traditional, tree-structured, node-based cache and the Pojo Cache API, which builds on the JBoss Cache API, provides the ability to perform object-based, fine-grained replication of Java objects, resulting in maximum performance benefits. Please see the JBoss Cache user guide for a more detailed discussion on these APIs.

What is the license for JBoss Cache?

JBoss Cache is licensed under LGPL

How do I build JBoss Cache from CVS sources?

To build, do sh build.sh jar. This will produce jboss-cache.jar in the dist/lib directory. Or if you want to build the standalone package, do sh build.sh dist this will produce dist/jboss-cache-dist.zip Note that you will need to use JDK 5.0 to build the distribution. You can still use the binaries you build with J2SE 1.4.x though..

Can I run JBoss Cache outside of JBoss Application Server?

Of course! JBoss Cache comes in two flavors:
* Integrated with JBoss Application Server as an MBean service.
* Standalone, that can run in any Java EE server such as BEA WebLogic or IBM Websphere. Of course, it can also run in a standalone Java process (i.e., outside Java EE context).


How do I deploy JBoss Cache as a MBean service?

To deploy JBoss Cache as an MBean inside JBoss, you can copy the configuration xml file over to the deploy directory (from all configuration whereby the necessary jars are present). Under the standalone package etc/META-INF directory , there are example configuration files for different cache modes that can be used to deploy JBoss Cache as well.

How does JBoss Cache's replication mechanism work?

JBoss Cache leverages JGroups as a replication layer. A user can configure the cluster of JBoss Cache instances by sharing the same cluster name (cluster name). There is also an option of whether to populate the cache data upon starting a new instance in the ClusterConfig attribute.

Note that once all instances join the same replication group, every replication change is propagated to all participating members. There is no mechanism for sub-partitioning where some replication can be done within only a subset of members. This is on our to do list.

Which TransactionManagers are supported by JBoss Cache?

JBoss Cache supports any TransactionManager that is JTA compliant such as JBossTM. A user can configure the transaction manager through the configuration xml setting. JBossCache also has a built in dummy transaction manager (org.jboss.cache.tm.DummyTransactionManager) for testing purposes only. But note that DummyTransactionManager is not thread safe .i.e., it does not support concurrent transactions. Instead, only one transaction is allowed at a time.

Download JBoss Cache
http://labs.jboss.com/jbosscache/download/index.html

JBoss Cache Documentation
http://labs.jboss.com/jbosscache/docs/index.html

Whirlycache

Whirlycache is a fast, configurable in-memory object cache java. It can be used, for example, to speed up a website or an application by caching objects that would otherwise have to be created by querying a database or by another expensive procedure. From the testing that we have done, it appears to be faster than any other Java cache that we have been able to inspect.

Whirlycache Benchmark Results.

Whirlycache Design

Whirlycache is built around several design principles that differ from other cache implementations:

1. Require synchronization as infrequently as possible
2. Do as little as possible in the insertion and retrieval operations
3. Soft limits are acceptable for many applications
4. Disk overflow becomes a bad idea very quickly

Many attributes of Whirlycache are configurable in an XML file, but the most important components of the cache are the Backend, the Tuner, and the Policy.

We support pluggable backend implementations that need to implement the ManagedCache interface (which is a subinterface of java.util.Map, although not all the methods of Map need to be implemented). We currently support two backends: ConcurrentHashMap and FastHashMap. You can decide which one suits your application best. In our testing, it's hard to tell which one comes out on top all of the time. If you need to, you can even implement your own backed by implementing the ManagedCache interface.

The Tuner is a background thread that performs cache maintenance activites specified in the configured Policy implementation. One Tuner thread per cache is created and it is configured to run every n seconds. It depends on your application, but you definitely don't want to run the Tuner too often since it will only serve to burden the system unnecessarily. If your data doesn't change a lot, you could simply configure it to run every few minutes.

The purpose of the Tuner is to perform activities that would otherwise be performed by the insertion and retrieval operations (which we want to keep very lean and fast). The Tuner expires elements from the cache based on the configured Policy and the configured maxsize of the cache. Please keep in mind that the maxsize value is a softlimit that can be exceeded in between Tuner runs (remember that these only run every n seconds). When the Tuner thread runs, it will prune the cache down to the maxsize according to the rules of the Policy.

This last point is particularily relevant to those who may be inserting large objects into Whirlycache. For example, if you decide to cache 10Mb PDF files in memory, be sure that your Cache has an appropriately configured max-size and that you run the Tuner frequently enough to account for any activity that could result in something potentially disastrous such as ninety 10Mb files being inserted all of a sudden. If you don't have enough memory allocated to your JVM, you will inevitably get an exception complaining about a lack of memory! The max-size declaration in the whirlycache.xml file tells the configured Policy class to trim the Cache to n elements every time it runs. There is nothing to prevent you from successfully inserting n+1 objects into the cache. It will work, assuming you don't run out of memory.

The Policy defines the set of rules for removing elements from a cache. You can specify a different Policy implementation per named cache in the whirlycache.xml configuration file. Currently, we offer FIFO, LFU and LRU.

Configuration & Installation
To use Whirlycache, simply download the latest distribution and unzip it. Then, copy all of the supplied jar files in your classpath. Finally, you will need to supply a whirlycache.xml file in your classpath as well. You need to properly configure the whirlycache.xml file according to your needs, but we have supplied you with reasonable default values that you can change later if you need to.
Here is a sample whirlycache.xml configuration file.

Whirlycache License

Project Home Page
https://whirlycache.dev.java.net/

Whirlycache Source Code Download
https://whirlycache.dev.java.net/source/browse/whirlycache/

Download Whirlycache
https://whirlycache.dev.java.net/downloads/whirlycache-1.0.1.zip

Jofti

Jofti is a simple to use, high-performance object indexing and searching solution for Objects in a Caching layer or storage structure that supports the Map interface. The framework supports EHCache, JBossCache and OSCache and provides for transparent addition, removal and updating of objects in its index as well as simple to use query capabilties for searching. Features include type aware searching, configurable object property indexing, indexing/searching by interfaces as well as support for Dynamic Proxies, primitve attributes, Collections and Arrays.

Who needs Jofti?

If you want to be able to quickly search objects in your cache as if it was a datastore, leverage your cache data so you do not have to do expensive repeat fetching from remote systems or add flexible query capabilities to an existing cache. Even if you simply want to be able to find data in a cache or map without knowing the key, then Jofti is for you.

Jofti Supports

Jofti has been designed to allow developers freedom to use the caching solution they prefer as a plug-in or configure its Indexes as listeners for an existing Cache.

Currently supported are:

* IBM ObjectGrid
* Tangosol Coherence
* EHCache
* OSCache
* JBossCache
* Any Map structure


Features

Simple Querying

Jofti currently supports two standard query language formats:

* SQL
* EJB3 QL

The adoption of these standards for the query languages is to provide a low-learning curve for developers and enable easy development of complex queries using well understood idioms.

Ease of Integration

For Caches that support the listener model, Jofti can be added to any application by simply registering an existing Cache with Jofti's IndexManager.

The index is then kept up to date with the Cache no matter where it is used in the application. This means almost zero code change to add querying capabilities to an existing Cache instance.

Memory Management

For applications that have large cache sizes, or operate in a memory-sensitive environment, you can easily specify only a portion of the index data to be kept in memory, with the rest paged to and from disk on-demand.
Flexible licensing

The current release (version 1.1) is available under a dual license of GPL or a Commercial license for those that want to avoid the implications of the GPL license.

Also,

* Multi Cache support
* Transaction support
* Type aware searching
* Configurable property indexing
* Indexing/searching by interfaces
* Support for dynamic proxies
* Support for primitve attributes
* Support for collections and arrays
* String prefix searching
* Simple query language

Jofti Home Page
http://www.jofti.com

Jofti Support Forum
http://jofti.com/forums/

Download Jofti
http://www.jofti.com/download.html

More Open Source Cache Systems

cache4j

cache4j is a cache for java objects. Simple API and fast implementation.

* in memory caching
* design for multithread environment
* two implementation: synchronized, blocking
* eviction algorithm LFU, LRU, FIFO
* for store object can use strong or soft reference
* available under the BSD license

cache4j Tutorials
http://cache4j.sourceforge.net/tutorial.htm

Cache4j Download
http://sourceforge.net/project/showfiles.php?group_id=160023&package_id=180807&release_id=399978

More Open Source Cache Systems

June 3, 2007

JasperReports

JasperReports is a powerful open source Java reporting tool that has the ability to deliver rich content onto the screen, to the printer or into PDF, HTML, XLS, CSV and XML files. It is entirely written in Java and can be used in a variety of Java enabled applications, including J2EE or Web applications, to generate dynamic content.

Its main purpose is to help creating page oriented, ready to print documents in a simple and flexible manner.

 

JasperReports Key Features

 

Embeddable

* Embeddable Java reporting library

* Enables embedding in any host application

* No external reporting server required

* Plug in Java and Groovy code

Complex Reports

* Sub-reports easily handle highly complex layouts

* Pixel-perfect page-oriented output for web or print

* Report output in PDF, XML, HTML, CSV, XLS, RTF, TXT

* NEW: Now with crosstabs

Integrated Charting

* Comprehensive set of chart types

Internationalized and Localizable

* Multi-language Unicode and other native encodings

* Dynamic text localization

* Localized date, number, and currency formatting

Scalable

* High performance report generation

* No limit to report size

Extensible

* Supplement built-in expressions with Java or Groovy

* Plug in Java code and Groovy code

Easy to Use

* iReport visual report designer

* Other Eclipse- and Swing-based designers available

* Built-in Swing viewer

* Extensive code examples

Standards Based

* Written in Java

* Report definitions in XML

Flexible Data Access

* Multiple data sources of multiple kinds in one report

* Built-in support for JDBC, EJB, POJO, Hibernate, XML

* Extensible to any data source

JasperReports Requirements

JRE

 

JRE 1.3 or higher

Commons

Jakarta Commons BeanUtils Component (version 1.7 or later)
http://jakarta.apache.org/commons/beanutils/

Jakarta Commons Collections Component (version 2.1 or later)
http://jakarta.apache.org/commons/collections/

Jakarta Commons Javaflow (Sandbox version)
http://jakarta.apache.org/commons/sandbox/javaflow/

Jakarta Commons Logging Component (version 1.0 or later)
http://jakarta.apache.org/commons/logging/

XML

JAXP 1.1 XML Parser

Jakarta Commons Digester Component (version 1.7 or later)
http://jakarta.apache.org/commons/digester/

JDBC

JDBC 2.0 Driver

PDF

iText - Free Java-PDF library by Bruno Lowagie and Paulo Soares (version 1.01 or later)
http://www.lowagie.com/iText/

XLS

Jakarta POI (version 2.0 or later)
http://jakarta.apache.org/poi/

JExcelApi (version 2.5.7 or later)
http://jexcelapi.sourceforge.net/

Charts

JFreeChart (1.0.0 or later)
http://www.jfree.org/jfreechart/

JCommon - required by JFreeChart
http://www.jfree.org/jcommon/

 

Download JasperReports 

http://www.jasperforge.org/index.php?option=com_docman&task=cat_view&gid=74&Itemid=248 

JasperReports Documentation

http://jasperforge.org/sf/wiki/do/viewPage/projects.jasperreports/wiki/HomePage 

 

JasperForge.org

On this site you will find all JasperSoft open source projects, source code, bug trackers, discussion forums, etc.
The other JasperSoft open source projects are:

More Open Source Charting & Reporting applications

June 4, 2007

InfoGlue - Content Management Platform

InfoGlue is an advanced, scalable and robust content management / Portal platform written in 100% Java. It is suitable for a wide range of applications and organisations. Typical uses include public websites, portal solutions, intranets and extranets. The platform is released under the GPL-license and it can be run on almost any platform, including Microsoft Windows, Mac OS X and most Linux distributions, and it is compatible with most major databases such as MySQL, SQL Server, Oracle and DB2.

Key features includes JSR-168 support (portlets), full multi-language support, unlimited number of sites in one installation, excellent information reuse withing a site and between sites and extensive integration capabilities. A dynamic visual page builder ensures that page can be built by non technicians and the platform also supports advanced workflows as well as very detailed access control both internally and externally.

We have dedicated ourselves to make InfoGlue the fast, reliable and cost effective way to manage and publish your organisations information on the web. It is not only userfriendly and packed with great functionality but also easy to maintain which is an important factor when it comes to total cost of ownership.

This site and the InfoGlue community is maintained by the community itself and it is totally independent from all companies and organisations. The community has only one priority and that is to offer a strong Open Source alternative on the CMS market. Many consultant firms have already started working with the platform and we will allow them to advertise their offers & services on this site as we feel they contribute to making InfoGlue a good choice for customers.

 

The InfoGlue platform is distributed under the GNU Public General License and is developed as a independent Open Source project by individuals from all over the world. In this part of the site we will present more information about the platform and it's features.

The InfoGlue project started in August 2002 and was officially released in it's first version in April 2003. It has fast become one of the leading Open Source CMS alternatives available. This is partly because of the high activity in the project but also because of the strong technical architecture and the possibility for seperation of concern in projects. Below is a sketch of the platforms parts and some aspects of how projects relate to it.

As you can see from the graphics the idea is to give the developers / users as much infrastructure as possible to speed up the implementation process in their project. The most important part of the project is as allways the initial analysis and taking a decision on what to implement. The implementation time is allways decided by how good the analysis was.

  

Download the official version of InfoGlue here

After you have downloaded the package you should follow the installation instructions found in the zipfile or the one found here.

In addition you can find nightly builds here. We strongly recommend you not to use these versions in production. Often they may not work at all depending on the state of development. Using them is at your own risk as usual.

For information about how to get the source and build InfoGlue look at our CVS-page

For documentation of the platform look at the document section under products here.

Project Home Page 

http://sourceforge.net/projects/infoglue 

More Open Source Java Resources

Open Source Java Community

Heritrix Web Crawler

Heritrix is the Internet Archive's open-source, extensible, web-scale, archival-quality web crawler project.

Heritrix (sometimes spelled heretrix, or misspelled or missaid as heratrix/heritix/ heretix/heratix) is an archaic word for heiress (woman who inherits). Since our crawler seeks to collect and preserve the digital artifacts of our culture for the benefit of future researchers and generations, this name seemed apt.

Heritrix is designed to respect the robots.txt exclusion directives and META robots tags, and collect material at a measured, adaptive pace unlikely to disrupt normal website activity.

System Runtime Requirements

Java Runtime Environment

The Heritrix crawler is implemented purely in java. This means that the only true requirement for running it is that you have a JRE installed.

The Heritrix crawler makes use of Java 5.0 features so your JRE must be at least of a 5.0 (1.5.0+) pedigree.

We currently include all of the free/open source third-party libraries necessary to run Heritrix in the distribution package. See dependencies for the complete list (Licenses for all of the listed libraries are listed in the dependencies section of the raw project.xml at the root of the src download or here on sourceforge).

Hardware

Default heap size is 256MB RAM. This should be suitable for crawls that range over hundreds of hosts.

Linux

The Heritrix crawler has been built and tested primarily on Linux. It has seen some informal use on Macintosh, Windows 2000 and Windows XP, but is not tested, packaged, nor supported on platforms other than Linux at this time.


Heritrix Home Page
http://crawler.archive.org/

Heritrix Documentation
http://crawler.archive.org/articles/user_manual/index.html

Download Heritrix
http://crawler.archive.org/downloads.html

More Java Open Source Applications

WebSPHINX ( Website-Specific Processors for HTML INformation eXtraction)

WebSPHINX ( Website-Specific Processors for HTML INformation eXtraction) is a Java class library and interactive development environment for web crawlers. A web crawler (also called a robot or spider) is a program that browses and processes Web pages automatically. WebSPHINX consists of two parts: the Crawler Workbench and the WebSPHINX class library. Crawler Workbench The Crawler Workbench is a graphical user interface that lets you configure and control a customizable web crawler. Using the Crawler Workbench, you can: * Visualize a collection of web pages as a graph * Save pages to your local disk for offline browsing * Concatenate pages together for viewing or printing them as a single document * Extract all text matching a certain pattern from a collection of pages. * Develop a custom crawler in Java or Javascript that processes pages however you want. WebSPHINX class library The WebSPHINX class library provides support for writing web crawlers in Java. The class library offers a number of features: * Multithreaded Web page retrieval in a simple application framework * An object model that explicitly represents pages and links * Support for reusable page content classifiers * Tolerant HTML parsing * Support for the robot exclusion standard * Pattern matching, including regular expressions, Unix shell wildcards, and HTML tag expressions. Regular expressions are provided by the Apache jakarta-regexp regular expression library. * Common HTML transformations , such as concatenating pages , saving pages to disk, and renaming links WebSPHINX Project Home Page - Download - Documentation http://www.cs.cmu.edu/~rcm/websphinx/

Open Source Java Community

Oracle Berkeley Database(DB) - High Performance, Pure Java, Embeddable Database Engine

Oracle Berkeley DB is a family of open source embeddable databases that allows developers to incorporate within their applications a fast, scalable, transactional database engine with industrial grade reliability and availability. As a result, customers and end-users will experience an application that simply works, reliably manages data, can scale under extreme load, but requires no ongoing database administration. As a developer, you can focus on your application and be confident that Oracle Berkeley DB will manage your persistence needs. Oracle Berkeley DB Java Edition High Performance, Pure Java, Embeddable Database Engine Oracle Berkeley DB Java Edition is a open source, embeddable, transactional storage engine written entirely in Java. Like Oracle Berkeley DB, Oracle Berkeley DB Java Edition executes in the address space of the application, without the overhead of client/server communication. It stores data in the application's native format, so no runtime data translation is required. It provides an easy-to-use, programmatic interface, allowing developers to store and retrieve information quickly, simply and reliably. Oracle Berkeley DB Java Edition was designed from the ground up in Java. It takes full advantage of the Java environment to simplify development and deployment. The architecture of Oracle Berkeley DB Java Edition supports very high performance and concurrency for both read-intensive and write-intensive workloads. Berkeley DB Project Home Page http://www.oracle.com/technology/products/berkeley-db/je/index.html Berkeley DB License http://www.oracle.com/technology/software/products/berkeley-db/htdocs/licensing.html Download Berkeley DB Java Edition http://www.oracle.com/technology/software/products/berkeley-db/je/index.html

Open Source Java Community

Eclipse - Java Language IDE

Eclipse is well known for its Java IDE. However, there are Eclipse base language IDEs for most of the popular languages. Some are popular Eclipse open source project, such as CDT, and others are popular open source projects and commercial solutions.

Eclipse Java Development Tools (JDT)

The JDT project provides the tool plug-ins that implement a Java IDE supporting the development of any Java application, including Eclipse plug-ins.

The JDT project contributes a set of plug-ins that add the capabilities of a full-featured Java IDE to the Eclipse platform. The JDT plugins provide APIs so that they can themselves be further extended by other tool builders.
The JDT plugins are categorized into:

JDT APT

JDT APT adds annotation processing support to Java 5 projects in Eclipse. It provides the following features:

* Support for running annotation processors written for Sun’s command-line apt tool
* Contribution of annotation-based build artifacts during incremental build
* Contribution of problem markers for annotation-based problems

JDT Core

JDT Core defines the non-UI infrastructure. It includes:

* An incremental Java builder
* A Java Model that provides API for navigating the Java element tree. The Java element tree defines a Java centric view of a project. It surfaces elements like package fragments, compilation units, binary classes, types, methods, fields.
* Code assist and code select support
* An indexed based search infrastructure that is used for searching, code assist, type hierarchy computation, and refactoring.
* Evaluation support

The JDT Core infrastructure has no built-in JDK version dependencies.

JDT Debug

JDT Debug implements Java debugging support and works with any JDPA-compliant target Java VM. It is implemented on top of the language independent "debug model" provided by the platform debugger.

JDT debug provides the following debugging features:

* Launching of a Java VM in either run or debug mode
* Attaching to a running Java VM
* Expression evaluation in the context of a stack frame
* Scrapbook pages for interactive Java code snippet evaluation
* Dynamic class reloading where supported by Java virtual machine

JDT UI

JDT UI implements Java-specific workbench contributions:

* Packages View
* Type Hierarchy View
* Java Outline View
* Wizards for creating Java elements
* Java Editor.

The Java editor provides the following features:

* Keyword and syntax coloring
* Context specific (Java, Javadoc) code assist and code select
* Method level edit
* Margin annotations for problems, break points, or search matches
* Outliner updating as editing takes place
* API help shows Javadoc specification for selected Java element in a pop-up window
* Import assistance automatically creates and organizes import declarations
* Code formatting

The JDT UI provides refactoring support like: Extract Method or Safe Rename for Java elements that also updates references. Users can preview (and veto) individual changes stemming from a refactoring operation.

JDT searching support implements precise searches like find declarations of and/or references to packages, types, methods, and fields, scoped to the workspace, a working set, or the current selection.

JDT compare support implements a structured compare of Java compilation units showing the changes to individual Java methods. It supports to replace individual Java elements with version of element in the local history.

Eclipse Project Home Page
http://www.eclipse.org/

Download Java Specific Eclipse
http://www.eclipse.org/jdt/core/index.php
Download Eclipse

June 7, 2007

Compiere ERP & CRM

Compiere is open source Enterprise Resource Planning(ERP) and Customer Relationship Management(CRM) software that provides a seamless 360-degree view of your company, its customers and vendors. For years only large corporations have been able to enjoy the benefits of ERP systems. Now, Compiere ERP and CRM puts the power of timely and consistent communications within reach of small to medium-sized businesses by offering a superior ERP system that is affordable, adaptable, and scalable…ensuring you always have exactly the ERP solution your company needs. Visit our ERP FAQ to discover how Compiere can help your company grow. The Compiere Difference: Easier and Affordable ERP Compiere is changing the economics of business solutions by making Enterprise Resource Planning (ERP) and Customer Relationship Management (CRM) easier. Easier to acquire. Easier to implement. Easier to extend. Easier to change. Typical business solution software vendors aren't focused on making their solutions easier, more adaptable or more affordable. Instead, they spend over 50 percent of their revenues convincing you to buy their products (sales and marketing) and less than 10% of revenues on innovation. This unbalanced business approach has lead to a consolidated software industry providing customers with fewer choices and even less innovation. Compiere is taking a fresh and balanced approach to business solution software. We develop Compiere in the open and distribute it through open source licensing.

You are free to evaluate and use the open source version of Compiere without restriction. To support your demanding use of Compiere, we provide a range of valuable fee-based services from training and technical support to automated migration tools and certification of technology platforms and implementation partners. Our network of authorized partners add additional value through their focused expertise in solution design, integration and local requirements. In this model everyone wins through expanded choice, reduced acquisition risk, more innovation and valuable customer-centric services.

Easier Doesn't Mean Simple

Compiere offers powerful capabilities to automate all of your financial, distribution, sales and service functions to improve business efficiency and customer satisfaction. Applications are built on an innovative model-based development platform that gives customers unprecedented adaptability, rapid deployment and low cost of ownership. The solution supports the needs of local and global businesses alike, with robust support for multiple currencies, accounting rules, tax codes, organizational structures and languages required by your business. If you only do business in one language or currency, we handle that as well. Compiere, Inc. offers commercial backing, support and services to its global network of nearly 100 authorized partners across 25 countries. Compiere is privately held and headquartered in Redwood Shores, Calif.

What is ERP and CRM?

ERP stands for Enterprise Resource Planning and it is the smart solution to all your business management needs. ERP applications typically consist of modules such as Marketing and Sales, Field Service, Production, Inventory Control, Procurement, Distribution, Human Resources, Finance and Accounting. CRM stands for Customer Relationship Management. CRM software supports your business process to find, get, and retain customers. CRM applications typically consist of modules such as Sales Force Automation, Call Management, and Self Service.

Features : Compiere ERP software is a cross platform Java J2EE solution that provides:

* fully integrated ERP and CRM solutions
* both front-office (POS, Web Store) and back-office functionality
* inventory management
* automated accounting
* professional services solution
* managed distribution networks
* streamlined order processing

More Product Features

Compiere is an integrated Enterprise Resource Planning (ERP) and Customer Relations Management (CRM) software solution that combines the power of point of sales (POS), distribution, inventory, e-commerce, accounting, and workflow systems within one robust application. Compiere is fully customizable to your enterprise and was created to handle the challenges of global commerce.

Point Of Sales

Compiere's center piece is a state-of-the-art point of sales software (POS Software) with an integrated POS Terminal. At your fingertips, you have all the required information to improve productivity in the front office while also easily accessing the information for efficient distribution management in the back office.

Distribution and Inventory
Use our distribution and inventory solutions to manage the supply chain within your organization as well with suppliers and customers. Supply Chain Management covers all material management activities including inventory receipts, shipments, moves and counts within a client and its organizations, as well as to suppliers and customers.

E-Commerce
The Compiere Web Store provides all you need to run your web presence. The information is shared with the standard application, so no synchronization or extra integration work is required. The web store components Compiere provides can be customized to the look-and-feel of your web site.

Accounting
Our accounting solutions cater to the needs of your enterprise, no matter what currency or schema you use. Compiere even provides the flexibility to account in one or more Accounting Schema in parallel.

Workflow
In contrast to all other known ERP and CRM applications, Compiere is based on Workflow. The Compiere Workflow Engine is Compiere's core transaction management. That means that all processes in Compiere are automatically workflow enabled and easy to extend and modify. As the Compiere workflow solution is completely integrated rather than being built "on top" of the application, it is much easier to maintain and provides more functionality then the external or ad-on workflow offerings of other ERP and CRM vendors.

Product Comparisons
There are several companies providing product comparisons for a fee. Examples are the Accounting Software Library and Accounting Software Comparison or ERP Evaluation and Vendor Showcase You will see that Compiere is extremely competitive and has certainly the best ROI. If we are lacking functionality, check with us. Our development cycle is very fast and it might already be available, but not reflected in the comparisons.

Compiere Project Home Page http://www.compiere.org

Download Compiere http://www.compiere.org/download/index.html

Installation Requirements Server Requirements Client Requirements

June 8, 2007

IzPack Java Installer

IzPack is an installers generator for the Java platform. It produces lightweight installers that can be run on any operating system where a Java virtual machine is available. Depending on the operating system, it can be launched by a double-click or a simple java -jar installer.jar from a shell. The most common use is to distribute applications for the Java platform, but you can also use it for other kinds of projects. The main benefit of IzPack is that it provides a clean and unique way of distributing a project to users using different operating systems. IzPack is reported to run on:

* Unix-like systems, mostly Linux and FreeBSD variants
* Mac OS X
* Windows 2000, XP and Vista.

A big care has been put in making IzPack as small as possible in order to reduce the weight of IzPack itself in the final installer archive. Also, IzPack has been designed around modularity and flexibility. As a consequence, you are able to specify how your installer should be by selecting the panels that you want to show to the final user. Sometimes there are even several panels for the same usage so that you can pick the one that suits the best your needs. If ever you don’t find your way through the available panels, you can still develop your own ones with the nice and easy IzPack API.

Main features:

* XML-based installer descriptors
* Uses the maximum Jar archives compression level
* Apache Ant integration
* Great flexibility and modularity, it is very easy to extend IzPack
* No native code is required, but you can extend IzPack with native code
* Shortcuts creation system (Win32 and FreeDesktop.org)
* Flexible and powerful user input panel
* Automatic uninstaller creation
* Easy localization with XML langpacks: many translations are provided by default
* Variables substitution system
* OS-specific scripts interaction
* ... and many more!

Licensing

IzPack is licensed under the terms of the liberal opensource Apache Software License version 2.0.

IzPack Project Home Page
http://izpack.org/

Download IzPack
http://izpack.org/downloads

June 9, 2007

Apache Struts - Web Framework

Apache Struts is a free open-source framework for creating Java web applications.

Web applications differ from conventional websites in that web applications can create a dynamic response. Many websites deliver only static pages. A web application can interact with databases and business logic engines to customize a response.

Web applications based on JavaServer Pages sometimes commingle database code, page design code, and control flow code. In practice, we find that unless these concerns are separated, larger applications become difficult to maintain.

One way to separate concerns in a software application is to use a Model-View-Controller (MVC) architecture. The Model represents the business or database code, the View represents the page design code, and the Controller represents the navigational code. The Struts framework is designed to help developers create web applications that utilize a MVC architecture.

The framework provides three key components:

* A "request" handler provided by the application developer that is mapped to a standard URI.
* A "response" handler that transfers control to another resource which completes the response.
* A tag library that helps developers create interactive form-based applications with server pages.

The framework's architecture and tags are buzzword compliant. Struts works well with conventional REST applications and with nouveau technologies like SOAP and AJAX.

The Apache Struts Project is the open source community that creates and maintains the Apache Struts framework. The project consists of a diverse group of volunteers who share common values regarding collaborative, community-based open source development. The Apache Struts Project is proud to share these values with our parent organization: The Apache Software Foundation.

The project is called "Struts" because the framework is meant to furnish the "invisible underpinnings" that support professional application development. Struts provides the glue that joins the various elements of the standard Java platform into a coherent whole. Our goal is to leverage existing standards by producing the missing pieces we need to create enterprise-grade applications that are easy to maintain over time.

The Apache Struts Project offers two major versions of the Struts framework. Struts 1 is recognized as the most popular web application framework for Java. The 1.x framework is mature, well-documented, and widely supported. Struts 1 is the best choice for teams who value proven solutions to common problems.

Struts 2 was originally known as WebWork 2. After working independently for several years, the WebWork and Struts communities joined forces to create Struts 2. The 2.x framework is the best choice for teams who value elegant solutions to difficult problems.

Model-View-Controller(MVC)

Web applications based on JavaServer Pages sometimes commingle database code, page design code, and control flow code. In practice, we find that unless these concerns are separated, larger applications become difficult to maintain.

One way to separate concerns in a software application is to use a Model-View-Controller (MVC) architecture. The Model represents the business or database code, the View represents the page design code, and the Controller represents the navigational code.

The term "MVC" originated with the SmallTalk Model-View-Controller framework. In Smalltalk MVC, the View updates itself from the Model, via the "Observer" pattern. The original MVC pattern is like a closed loop: The View talks to the Controller, which talks to the Model, which talks to the View.

But, a direct link between the Model and the View is not practical for web applications, and we modify the classic MVC arrangement so that it would look less like a loop and more like a horseshoe with the controller in the middle.

In the MVC/Model 2 design pattern, application flow is mediated by a central Controller. The Controller delegates requests - in our case, HTTP requests - to an appropriate handler. The handlers are tied to a Model, and each handler acts as an adapter between the request and the Model. The Model represents, or encapsulates, an application's business logic or state. Control is usually then forwarded back through the Controller to the appropriate View. The forwarding can be determined by consulting a set of mappings, usually loaded from a database or configuration file. This provides a loose coupling between the View and Model, which can make applications significantly easier to create and maintain.

While MVC is a convenient paradigm, many workers find that applcations may utilize more than three layers. For example, within the Model, there is often distinct business logic and data access layers.

The framework provides the control layer for a Model 2 web applications. Developers can use this layer with other standard technologies to build the business, data access, and presentation layers.

Apache Struts Features

* Build!
o Easy startup - Jumpstart new projects with our bootstrap tutorial and template application or Maven archetype.
o Improved Design - Code clean against HTTP-independant framework interfaces.
o Enhanced Tags - Code less with stylesheet-driven form tags that provide their own markup.
o Stateful Checkboxes - Avoid special handling with smart checkboxes that know when they are toggled.
o Flexible Cancel Buttons - Go directly to a different action on cancel.
o First-class AJAX support - Add interactivity and flexibility with AJAX tags that look and feel just like standard Struts tags.
o Easy Spring integration - Inject dependencies into Actions using Spring without glue code or red tape. (Plexus support also available.)
o Enhanced Results - Do more with speciality results for JasperReports, JFreeChart, Action chaining, and file downloading.
o POJO forms - No more ActionForms! Use any JavaBean to capture form input or put properties directly on an Action class. Use both binary and String properties!
o POJO Actions - Use any class as an Action class -- even the interface is optional!
* Deploy!
o Easy plugins - Add framework extensions by dropping in a JAR. No manual configuration required! Bundled plugins add support for JavaServer Faces, JasperReports, JFreeChart, Tiles, and more ...
o Integrated profiling - Peek inside Struts2 to find where the cycles are going!
o Precise Error Reporting - Flip directly to the location and line of an error.
* Maintain!
o Easy-to-test Actions - Test Struts2 Actions directly, without resorting to mock HTTP objects.
o Intelligent Defaults - Skip obvious and redundant settings. Most framework configuration elements have a default value that we can set and forget. Say it once!
o Easy-to-customize controller - Customize the request handling per action, if desired. Struts2 only does what you want it to do!
o Integrating Debugging - Research problem reports with built-in debugging tools.
o Easy-to-tweak tags - Customize tag markup by editing a FreeMarker template. No need to grok the taglib API! JSP, FreeMarker, and Velocity tags are fully supported.

Struts Home Page
http://struts.apache.org/

Struts Documentation
http://struts.apache.org/primer.html

Download Struts 2.x
http://struts.apache.org/2.x/index.html
Struts 2.x Documents