Tag Archives: java

Open Source Workflow Engines Written in Java

Share the article!

This is an updated list of active Open Source Workflow Engine that are written in Java or hosted in a JVM:

  • uEngine – The uEngine BPM suite consists of a modeling tool and process engine, dashboard with SSO and a OLAP inspired process analyzer. uEngine BPM foundation is built using the Liferay Enterprise Portal, Mondrian OLAP Server, JBoss Drools BRE and Axis 2.
  • Triana – An open source problem solving environment developed at Cardiff University that combines an intuitive visual interface with powerful data analysis tools. Already used by scientists for a range of tasks, such as signal, text and image processing, Triana includes a large library of pre-written analysis tools and the ability for users to easily integrate their own tools.
  • Pegasus – The Pegasus project encompasses a set of technologies the help workflow-based applications execute in a number of different environments including desktops, campus clusters, grids, and now clouds. Scientific workflows allow users to easily express multi-step computations, for example retrieve data from a database, reformat the data, and run an analysis. Once an application is formalized as a workflow the Pegasus Workflow Management Service can map it onto available compute resources and execute the steps in appropriate order. Pegasus can handle 1 to 1 million computational tasks.
  • Drools Flow – Drools Flow provides workflow to the Drools platform. Drools Flow allows end users to specify, execute and monitor their business logic.The Drools Flow process framework is easily embeddable into any Java applicationor can run standalone in a server environment.
  • Activiti – Activiti is a Business Process Management (BPM) and workflow system targeted at business people, developers and system admins. Its core is a super-fast and rock-solid BPMN 2 process engine for Java. It’s open-source and distributed under the Apache license. Activiti runs in any Java application, on a server, on a cluster or in the cloud. It integrates perfectly with Spring.
  • jBpm

    JBoss jBPM is a platform for multiple process languages supporting workflow, BPM, and process orchestration. jBPM supports two process languages: jPDL and BPEL. jPDL combines human task management with workflow process constructs that can be built in Java applications. Includes also a Visual Designer for jPDL and Eclipse-based tooling for BPEL.

  • RiftSaw – Project Riftsaw is a WS-BPEL 2.0 engine that is optimized for the JBoss Application Server container. WS-BPEL 2.0 is an XML-based language for defining business processes that orchestrate web services. Riftsaw is based on Apache ODE .
  • Joget – Joget Workflow is a people-driven, form-based workflow management system. Joget Worklfow is XPDL compliant and has a plug-in architecture to extend its usability. The system can be used on its own to manage the flow of processes and data captured from forms. Supports synchronous and asynchronous integration of other business processes. Supports portal integration using AJAX or JSON APIs.
  • Orchestra – Orchestra is a complete solution to handle long-running, service oriented processes. It is based on the OASIS standard BPEL 2.0. Provides a generic engine (Process Virtual Machine), Web 2.0 based process console and a graphical BPEL designer.
  • Enhydra Shark

    Shark is completely based on standards from WfMC and OMG using XPDL as its native workflow definition format. Storage of processes and activities is done using Enhydra DODS.

  • Taverna The Taverna project aims to provide a language and software tools to facilitate easy use of workflow and distributed compute technology within the eScience community. Taverna is both a workflow enactor and also an editing suite.

  • Bonita

    Bonita is a flexible cooperative workflow system, compliant to WfMC specifications. A comprehensive set of integrated graphical tools for performing different kind of actions such as process conception, definition, instanciation, control of processes, and interaction with the users and external applications. 100% browser-based environment with Web Services integration that uses SOAP and XML Data binding technologies in order to encapsulate existing workflow business methods and publish them as a J2EE-based web services. A Third Generation Worflow engine based in the activity anticipation model.

  • Imixs – The project comprises a framework to create workflow systems as well as a reference implementation based on the J2EE standard. The project includes the development of a graphic editor for creation and management of workflow models based on the Eclipse framework.
  • Bigbross Bossa The engine is very fast and lightweight, uses a very expressive Petri net notation to define workflows, does not requires a RDBMS and is very simple to use and to integrate with java applications. Actually, it was designed to be embedded.

  • YAWL – YAWL (Yet Another Workflow Language), an open source workflow language/management system, is based on a rigorous analysis of existing workflow management systems and workflow languages. Unlike traditional systems it provides direct support for most of the workflow patterns (http://www.workflowpatterns.com). YAWL supports the control-flow perspective, the data perspective, and is able to interact with web services declared in WSDL. It is based on a distributed, web-friendly infrastructure.
  • Zebra – Zebra is a workflow engine – originally developed to fill in the gaps in some commercial and open source workflow engines. The key differences between it and other workflow systems are able to model all the workflows described in workflow patterns, a GUI designer and Hibernate persistence layer.
  • ActiveBPEL – ActiveBPEL engine is a robust runtime environment that is capable of executing process definitions created to the Business Process Execution Language for Web Services (BPEL4WS, or just BPEL) 1.1 specifications.
  • Ode – Orchestration Director Engine – The initial source for Ode originates from the Sybase Business Process Enginge (BPE) and the PXE BPEL 2.0 engine from Intalio. ODE implements the WS-BPEL specification. The implementation will also support Message/Event to process correlation. ODE can be plugged into various service bus or component architectures like ServiceMix.
  • BeanFlow – A tiny library with just a few classes and only depends on commons-logging and Java 5. Uses plain Java code to do boolean logic, handle state, do looping, call functions, create objects, aggregation and composition. Based on just one single concept, joins.
  • Swamp – SWAMP is a workflow processing platform.

    The workflow is designed in a XML based meta language. Workflows can be built from different workflow ‘patterns’ like simple actions, decisions, selections, loops, but also custom code and external events.

    SWAMP builds a HTML GUI from the workflow definition file that guides different users through the whole process, sends notifications if required, assembles overview pages over all running processes and much more. A SOAP interface can be used to integrate external systems into the workflow.

  • Sarasvati – Sarasvati is a workflow/bpm engine based on graph execution. It has a simple core which allows for subsititions of implementations.

    Features include: Simple graph execution based core;


    Process Definition/Graph Visualizations;

    Process Visualizations;

    Domain specific language (Rubric) for user understandable guards;

    XML file format for process definitions;

    Hibernate backed engine for DB persistence;

    Memory backed engine;

  • TobFlow – TobFlow (Total Object Base and Flow or the Object Flow) is a web application platform to manage forms and workflows. It is made of an engine which manages the user interface (forms) and the scheduling of tasks (workflows) based on object model descriptions.

    The TobFlow is a true document workflow tool.

  • >

    Codehaus Werkflow

    Werkflow is a flexible, extensible process- and state-based workflow engine. It aims to satisfy a myriad of possible workflow scenarios, from enterprise-scale business processes to small-scale user-interaction processes. Using a pluggable and layered architecture, workflows with varying semantics can easily be accomodated.

  • OpenSymphony OSWorkflow

    What makes OSWorkflow different is that it is extremely flexible.

  • Run WFE – RunaWFE consists of JBOSS-JBPM workflow core and a set of additional components. Includes user web interface,

    graphical process designer,

    flexible system for roles executors determination,

    web services, portlets,

    Alfresco integration and

    security with LDAP/MS Active Directory integration.

  • wfmOpen

    WfMOpen is a J2EE based implementation of a workflow facility (workflow engine) as proposed by the Workflow Management Coalition (WfMC) and the Object Management Group (OMG). Workflows are specified using WfMC’s XML Process Definition Language (XPDL) with some extensions.

  • OFBiz Workflow Engine

    The Open for Business Workflow Engine is based on the WfMC and OMG spec. OFBiz Workflow Engine uses XPDL as its process definition language.

  • JFolder JFolder (formerly PowerFolder) contains features critical to many applications – including web pages, workflow, security, persistence, email, file management, and data access.

  • Open Business Engine Open Business Engine is an open source Java workflow engine which supports the Workflow Management Coalition’s (WfMC) workflow specifications, including interface 1, also known as XPDL, interface 2/3 known as WAPI and interface 5 for auditing. OBE provides an environment for executing activities in a controlled, centralized environment. OBE supports both synchronous and asynchronous execution of workflows. The primary OBE implementation is based on J2EE.

  • Freefluo

    Freefluo is a workflow orchestration tool for web services. It can handle WSDL based web service invocation. It supports two XML workflow languages, one based on IBM’s WSFL and another named XScufl. Freefluo is very flexible, at its core is a reusable orchestration framework that is not tied to any workflow language or execution architecture. Freefluo includes extension libraries that enable execution of workflows written in a subset of WSFL.

  • Micro-Workflow – The micro-workflow framework targets developers who want to separate the control and logic aspects in their programs, thus making them flow independent. A well-factored flow independent application facilitates change because the most frequent business changes translate into process changes, thus leaving the code intact. Flow independence also fosters reuse, because domain objects make fewer assumptions about the control context in which they operate

  • con:cern – con:cern is a workflow engine based on an extended case handling approach. A process is described as a set of activities with pre- and postconditions. An activity is executed when its preconditions are met. It manipulates the process item, thereby creating postconditions. The process flow is determined at run-time. This approach is superior to the conventional process flow approach.
  • XFlow2 – Inspired by simple workflow definition language in XFlow developed to improve its implementation. Externalized SQL in iBatis mapping files. Works as embedded workflow engine.
  • Apache Agila – Agila is centered around Business Process Management, Workflow and Web Service Orchestration. It’s composed of two specialized modules: Agila BPM and Agila BPEL. Agila BPM is basically handling tasks and users who have to complete these tasks. It’s a very flexible and lightweight workflow component. Agila BPEL is a BPEL-compliant Web Services Orchestration solution
  • Syrup – Syrup is an adaptive Workflow system. Syrup provides five basic concepts: Tasks, Links, Workflows, Workers and the WorkSpace. Syrup can overcome the von Neumann bottleneck that stops traditional software systems from scaling. It does this by strictly separating the specification, identification and execution phase of Workflows in a distributed setup. Syrup doesn’t follow the more complex standards such as Wf-XML, BPML and XPDL.
  • Dalma – The heart of the engine is an ability to capture the execution state of a thread and resume it later. Many applications of today need to have a part of the program that waits for other entities. . Often there are multiple conversations running concurrently. Those are what we call “workflow” applications. Today, those applications can be written, but one can’t write it very productively. Dalma makes it very easy to write those workflow applications by letting you write it as an ordinary procedural program without any boilerplate.
  • Pi Calculus for SOA – The first stage of this project is to provide an implementation of the W3C Web Services Choreography Description Language (WS-CDL). It provides the necessary tools to describe and police blueprints for complex distributed IT architectures as well as for describing cross domain business protocols (e.g. FIX, fpML, SWIFT, etc).
  • Intalio BPMSIntalio BPMS is designed around the open source Eclipse BPMN Modeler, Apache ODE BPEL engine, and Tempo WS-Human Task service.
  • GridAnt – GridAnt is not claimed as a substitution for more sophisticated and powerful workflow engines such as BPEL4WS, XLANG and WSFL. Nevertheless, applications with simple process flows tightly integrated to work with GT3 can vastly benefit from GridAnt without having to endure any complex workflow architectures. The philosophy adopted by the GridAnt project is to use the workflow engine available with Apache Ant and develop a Grid workflow vocabulary on top of it. In other words, we provide a set of Grid tasks to be used within the Ant framework.
  • Kepler Project – The Kepler project’s overall goal is to produce an open-source scientific workflow system that allows scientists to design scientific workflows and execute them efficiently using emerging Grid-based approaches to distributed computation. Kepler is based on the Ptolemy II system for heterogeneous, concurrent modeling and design.
  • JOpera – JOpera for Eclipse is a rapid service composition tool offering a visual language and autonomic execution platform for building distributed applications out of reusable services, which include but are not strictly limited to Web services. Due to its generality, JOpera for Eclipse has a wide range of applications: from classical Workflow Management and Business Process Automation, Enterprise application integration, to Virtual laboratories (e.g., scientific workflows, bioinformatics), Cluster and Grid computing and even Data Stream processing.
  • BpmScript – BpmScript aims to make writing Business Processes simple by handling Workflow, Web Services Orchestration and Sheduling. BpmScript has an embedded ServiceMix ESB. This allows it to take advantage of the prebuilt ServiceMix components (e.g. SOAP, FTP, Email, File, RSS, Jabber, JMS etc.)
  • JaCOB – PXE’s BPEL implementation relies on the JACOB framework to implement the BPEL constructs. The framework provides the mechanism necessary to deal with two key issues in implementing BPEL constructs: Persistence of execution state and Concurrency. By rolling up these concerns in the framework, the implementation of the BPEL constructs can be simpler by limiting itself to implementing the BPEL logic and not the infrastructure necessary to support it.
  • Tempo – Intalio Tempo is a set of runtime components that support BPEL4People to bring workflow functionality to a BPEL engine. Tempo provides one possible User Interface for users to manage their tasks, which goes beyond the scope of BPEL4People. Tempo only provides runtime component. It does not provide tools to generate workflow processes nor does it provide forms.
  • Oryx – Oryx is a web-based, extensible modeling platform. You can create diagrams in many different modeling languages and share them.
  • GWES – The Generic Workflow Execution Service (GWES) is the workflow enactment engine. GWES coordinates the composition and execution process of workflows in arbitrary distributed systems, such as SOA, Cluster, Grid, or Cloud environments. The Generic Workflow Description Language (GWorkflowDL) is based on Petri nets. It provides interfaces to Web Portal frameworks and to a command line clients. The workflow service supports pure Web Services and Globus Toolkit 4.
  • Java Workflow Tooling – The Java Workflow Tooling project (JWT) aims to build design time, development time and runtime workflow tools and to foster an ecosystem of interoperable Business Process Management (BPM) platforms.
  • ZBuilder

    ZBuilder3 is a second generation of workflow development and management system which intends to be an open source product. It defines a set of standard JMX management interfaces for different workflow engines and their workflows. Abandoned

  • Twister – Twister’s aim is to provide a new generation, easily integrable, B2B oriented workflow solution in Java, based on the latest specification efforts in this field. The process engine is based on the BPEL business process specifications and Web Services standards. Abandoned
  • MidOffice BPEL Engine – MidOffice BPEL Editor (MOBE) is an open-source platform for process orchestration which executes, monitors, adjusts and terminates pre-defined processes). The platform is implemented using J2EE technologies and standards like BPEL, XML and SOAP. Abandoned
  • jawFlow – JawFlow is a Workflow Engine partially conformal to WfMC (www.wfmc.org) directives. It ia based on XML Process Definition Language (XPDL) and activities can be written in Java or any BSF based scripting language. JawFlow is composed of modules that are JMX Mbeans. Abandoned
  • Beexee – Bexee is a BPEL engine capable of executing deployed business processes described in BPEL by orchestrating existing Web Services. Abandoned
  • OpenWFE OpenWFE is an open source java workflow engine. It features 3 components, easily scalable : an engine, a worklist and a web interface. Its workflow definition language is inspired of Scheme, a Lisp dialect, though it is expressed in XML.Abandoned

  • Antflow – AntFlow (Onionnetworks)is a tool for the automation and scheduiling of data system tasks, including those with complex dependencies and workflow logic. Antflow represents a new approach to simplifying system automation that leverages pipelines of hot folders chained together to perform a given task. Using XML, Antflow associates an automated task, such as data transfer, compression, or encryption, with a directory on the local system. Whenever a file is copied or written into the hot folder, the associated task is executed and the file is moved to the next hot folder in the pipeline for further processing.Abandoned

Please let me know if I missed something that should be in the list.

Share the article!

Open Source Rule Engines Written In Java

Share the article!

I don’t recall if someone has put together a review of open source Rule Engines that are written in Java. Here’s the list I’ve accumulated so far:

  • Drools The JBoss Rules engine uses a modified form of the Rete algorithm called the Rete-OO algorithm. Internally it operates using the same concepts and methods as Forgy’s original but adds some node types required for seemless integration with an object-oriented language.
  • OFBiz Rule Engine Backward chaining is supported. Original code base from “Building Parsers in Java” by Steven John Metsker.
  • Mandarax Based on backward reasoning. The easy integration of all kinds of data sources. E.g., database records can be easily integrated as sets of facts and reflection is used in order to integrate functionality available in the object model.
  • Algernon Efficient and concise KB traversal and retrieval. Straightforward access to ontology classes and instances. Supports both forward and backward chaining.
  • TyRuBa TyRuBa supports higher order logic programming: variables and compound terms are allowed everywhere in queries and rules, also in the position of a functor- or predicate-name. TyRuBa speeds up execution by making specialized copies of the rule-base for each query in the program. It does so incrementally while executing a logic program and builds an index for fast access to rules and facts in the rule base, tuned to the program that is running. The indexing techniques works also for higher-order logic. TyRuBa does ‘tabling’ of query results.
  • JTP Java Theorem Prover is based on a very simple and general reasoning architecture. The modular character of the architecture makes it easy to extend the system by adding new reasoning modules (reasoners), or by customizing or rearranging existing ones.
  • JEOPS JEOPS adds forward chaining, first-order production rules to Java through a set of classes designed to provide this language with some kind of declarative programming.
  • InfoSapient Semantics of business rules expressed using fuzzy logic.
  • RDFExpert RDF-driven expert system shell. The RDFExpert software uses Brian McBride’s JENA API and parser. A simple expert system shell that uses RDF for all of its input: knowledge base, inference rules and elements of the resolution strategy employed. It supports forward and backward chaining.
  • Jena 2 – Jena is a Java framework for writing Semantic Web applications. Jena2 has a reasoner subsystem which includes a generic rule based inference engine together with configured rule sets for RDFS and for the OWL/Lite subset of OWL Full. These reasoners can be used to construct inference models which show the RDF statements entailed by the data being reasoned over. The subsystem is designed to be extensible so that it should be possible to plug a range of external reasoners into Jena, though worked examples of doing so are left to a future release.

  • JLisa – JLisa is a powerful framework for building business rules accessible to Java and it is compatible with JSR-94. JLisa is more powerful than Clips because it has the expanded benefit of having all the features from common lisp available. These features are essential for multi-paradigm software development
  • Euler – Euler is a backward-chaining reasoner enhanced with Euler path detection and will tell you whether a given set of facts and rules supports a given conclusion. Things are described in N3.
  • JLog – JLog is an implementation of a Prolog interpreter, written in Java. JLog is a BSF-compatible language. It includes built-in source editor, query panels, online help, animation primitives, and a GUI debugger.
  • Pellet OWL Reasoner – Pellet is an open-source Java based OWL DL reasoner. It can be used in conjunction with either Jena or OWL API libraries. Pellet API provides functionalities to see the species validation, check consistency of ontologies, classify the taxonomy, check entailments and answer a subset of RDQL queries (known as ABox queries in DL terminology). Pellet is an OWL DL reasoner based on the tableaux algorithms developed for expressive Description Logics.
  • Prova – Prova is derived from Mandarax Java-based inference system developed by Jens Dietrich. Prova extends Mandarax by providing a proper language syntax, native syntax integration with Java, and agent messaging and reaction rules. The development of this language was supported by the grant provided within the EU project GeneStream. In the project, the language is used as a rules-based backbone for distributed web applications in biomedical data integration.
  • OpenRules – OpenRules is a powerful Business Rule Engine that has been designed to create, deploy, execute, and maintain decision services for complex real-world applications. OpenRules comes with a sophisticated user-friendly Rules Administrator that utilizes the power of MS Excel and Eclipse.
  • SweetRules – SweetRules is an integrated toolkit for semantic web rules, revolving around the RuleML. SweetRules supports the powerful Situated Courteous Logic Programs extension of RuleML, including prioritized conflict handling and procedural attachments for actions and tests. SweetRules’ capabilities include semantics-preserving translation and interoperability between a variety of rule and ontology languages (including XSB Prolog, Jess, HP Jena-2, and IBM CommonRules), highly scaleable backward and forward inferencing, and merging of rulebases/ontologies. The SweetRules project is a multi-institutional effort, originated and coordinated by the SweetRules group at MIT Sloan.
  • JShop2 – Simple Hierarchical Ordered Planner (SHOP) written in Java. JSHOP2 is a domain-independent automated-planning systems. They are based on ordered task decomposition, which is a type of Hierarchical Task Network (HTN) planning. JSHOP2 uses a new “planner compilation” technique to achieve faster execution speed.
  • OpenLexicon – Lexicon is a business rules and business process management tool that rapidly develops applications for transaction and process-based applications.There are two main components of Lexicon: the metadata repository and the business rules engine. The Lexicon business rules engine is not Rete based. It has a predicate evaluator that includes a unique power: it can evaluate small, in-line Java expressions.
  • Hammurapi Rules – Hammurapi rules has the following distinguishing features: (1) Rules and facts are written in Java; (2) leverages Java language semantics to express relationships between facts and (3) builds derivation trees for validation, debugging and to detect logic loops.
  • MINS Reasoner – MINS stands for Mins Is Not Silri. MINS is a reasoner for Datalog programs with negation and function symbols. MINS supports the Well-Founded Semantics.
  • Zilonis – An extremelly efficient, multithreaded Rules engine based on a variation of the forward chainning Rete algorithm. It has a unique scoping framework where you can define a scope for a user or group of users with inheritance of rules between them. The rules language is similar to CLIPS.
  • JCHR – JCHR is an embedding of Constraint Handling Rules (CHR) in

    Java. The multi-paradigmatic integration of declarative, forward

    chaining CHR rules and constraint (logic) programming within the

    imperative, OO host language Java offers clear synergetic advantages to

    the software developer. High performance is achieved through an

    optimized compilation to Java code. The rule engine is suited for the

    high-level development of expert systems, incremental constraint

    solvers and constraint-based algorithms.li>

  • Esper – Esper enables rapid development of applications that process large volumes of incoming messages or events. Esper filters and analyzes events in various ways, and responds to conditions of interest in real-time. Supports Event Stream Processing

    : Time-based, interval-based, length-based and sorted windows; Grouping, aggregation, sorting, filtering and merging of event streams; Tailored SQL-like query language using insert into, select, from, where, group-by, having and order-by clauses; Inner-joins and outer joins (left, right, full) of an unlimited number of windows; Output rate limiting and stabilizing.

  • mProlog – mProlog is a sub-product of the 3APL-M project. It delivers a reduced Prolog engine, optimized for J2ME applications. The mProlog engine was developed based on the W-Prolog project from Michael Winikoff. The 3APL-M project a platform for building applications using Artificial Autonomous Agents Programming Language (3APL) as the enabling logic for the deliberation cycles and internal knowledge representation.
  • OpenL Tablets – Create Decision Tables in Excel and use them in Java application in a convenient type-safe manner. Use Data Tables in Excel for data setup and testing. Eclipse plugin controls validity of Excel tables.
  • Jamocha – Jamocha is a rule engine and expert system shell environment. Jamocha comes with a FIPA-compliant agent. The agent is based on the Multiagent System JADE that supports speech-acts and the FIPA agent interaction protocol.
  • JSL: Java Search Library – JSL is a library written in Java that provides a framework for general searching on graphs. Standard search algorithms depth-first, breadth-first and A* are provided by JSL, in addition you can plug in any other search algorithms.
  • Termware – TermWare is Term Processing System. It’s use is applicable to computational algebra systems and various formal models analysis.
  • Take – Take consists of a scripting language for defining rules, and a compiler that creates executable Java code. Take is based on Mandarax, it has a similar API but implements its own inference engine.
  • Datalog – Datalog is a logical query language. It exists somewhere between relational algebra (the formal theory behind SQL) and Prolog. Its primary addition to the semantics of databases is recursive queries.
  • IRIS Reasoner – Integrated Rule Inference System is an extensible reasoning engine for expressive rule-based languages. IRIS supports safe or un-safe Datalog, a comprehensive and extensible set of built-in predicates and support for all the primitive XML schema data types.
  • CEL – A polynomial-time Classifier for the description logic EL+. CEL is the first reasoner for the description logic EL+, supporting as its main reasoning task the computation of the subsumption hierarchy induced by EL+ ontologies. The most distinguishing feature of CEL is that, unlike other modern DL reasoners, it implements a polynomial-time algorithm. The supported description logic EL+ offers a selected set of expressive means that are tailored towards the formulation of medical and biological ontologies.

Please let me know if I’ve missed something.

Share the article!

Open Source Constraint Programming Solvers Written in Java

Share the article!

In a past life I wrote a language that would serve as a DSL to a variety of solvers. These solvers would include the Simplex based solvers, Quadratic solvers and in the most generalized form Constraint solvers. So I’ve had more than a passing interest in Constraint Programming (CP). Recently my interest in CP was rekindled. I was studying Javafx and found it’s binding mechanism to be eerily familiar. So, I looked back at my archives and to my surprise discovered a boat load of open source projects in existence that catered to Constraint Programming. Here is the list I compiled over the years.

  • Choco Solver – Choco Solver is a library for constraint satisfaction problems (CSP), constraint programming (CP) and explanation-based constraint solving (e-CP). Choco is built on a event-based propagation mechanism with backtrackable structures.
  • Cream – Cream is library helping for developing intelligent programs requiring constraint satisfaction or optimization on finite domains. Cream provides a natural description of constraints. It allows extensions of constraint and satisfaction algorithms. It includes simulated Annealing and Taboo Search. It provides an interface to OpenOffice Calc (Spreadsheet).
  • JSL – Java Search Library (JSL) is a framework for general searching on graphs. The standard search algorithms depth-first, breadth-first and A* are provided. JSL also allows the plug in of other search algorithms.
  • JHCR – The K.U.Leuven JCHR System is an integration of Java and Constraint Handling Rules (CHR) designed with three aims in mind: user-friendliness, flexibility and efficiency. User-friendliness is achieved by providing a high-level rule-based syntax that feels familiar to both Java programmers and users of other CHR embeddings, and by full compliance to the refined operational semantics. Flexibility is the result of a well thought-out design, allowing e.g. an easy integration of built-in constraint solvers and variable types. An optimized compilation to Java code and the use of a very efficient constraint store make the performance of the K.U.Leuven JCHR System competitive with that of state of the art CHR implementations in e.g. Prolog and HAL.
  • jOpt jOpt is an open source implementation of the Optimization Programming Language (OPL). OPL is a modeling language for combinatorial optimization problems that combines mathematical programming and constraint programming into a single language. Job Scheduling (JS), is the first add-on to have been released. Typically, JS problems involve assigning a set of activities to a limited number of resources with consideration given to time and ordering limitations.
  • Drools Solver – Drools Solver is library to help you solve planning problems using heuristic algorithms. Examples of planning problems include: employee shifts, freight routing, supply sorting, class scheduling and the traveling salesman problem. The Drools-solver combines a search algorithm with the power of the drools rule engine. Drools Solver uses the Drools rule engine for score calculation, which greatly reduces the complexity and effort to write very scalable constraints in a declarative manner. Drools-solver supports several search algorithms to efficiently wade through the incredbly large number of possible solutions. Drools-solver implements local search, including tabu search and simulated annealing.
  • JCL – Java Constraints Library (JCL) was one of the first libraries to bring constraints satisfaction problem solving to Java. JCL deals with discrete, fine domains as well as with continuous domains. Constraints can be crisp (as in the classic CSP problems) or soft.
  • SAT4J – The SAT4J library provides a SATisfiability problem solver. Compared to the OpenSAT project, the SAT4J library targets first users of SAT “black boxes”, willing to embed SAT technologies into their application without worrying about the details. SAT4J is an implementation in of Een and Sorenson’s MiniSAT specification: An extensible SAT solver. The original implementation was in C++.
  • Cassowary – Cassowary is an incremental constraint solving toolkit that efficiently solves systems of linear equalities and inequalities. The library appears to be designed to support support UI applications.

If you know of other projects in this area, please free to let me know.

Share the article!

Top Five Java Technologies that Didn’t Make the List and Why

Share the article!

I’m delighted that Joseph Ottinger has so graciously posted my previous post “Top Five Java Technologies to Learn in 2008” on the Serverside. A list limited to a select five entires surely will bring out some controversy. There will always be those who would feel left out. Of course, the list could have been expanded to 10 entries, but that defeats the entire point. As the Attention Economy has revealed, an individual’s attention is a scarce commodity.

Its been suggested that Polyglot programming be in the list. Even though I do subscribe to the notion that learning other languages are beneficial to one’s craft, it simply is not pragmatic advice. It is not practical to recommend that someone study Ruby, Groovy, Scala and who knows what other language is vying for your attention. Stick to a couple of languages and do it well. Some languages are better than others for certain tasks. However the biggest fallacy of all is that, a dynamic language is not considerably better than a static one. It’s no magic bullet.

Finally, of the Five technologies I selected, there’s an underlying recipe to it. That is, all are about infrastructure. See, it isn’t about the language. If anything is going to make you successful in creating the next killer it app, then the platform that it runs on would influence your success more than your selection of language. As anecdotal evidence, look at the Chandler project, they had to re-invent the wheel several and in fact did that several times. Life would have been simpler if they used what ever was out there. Unfortunately, NIH reared its ugly head before it was too late to notice.

Let me go down the list to explain my point about infrastructure. OSGi is about managing the complexity of deployment. The default Java classloading mechanisms are clearly inadequate for a system where multiple versions of the same jar file are used. A higher level structuring mechanism is required and that is what OSGi precisely provides. Bill Kayser has a very good read on this matter:

In most cases, the JVM still loads classes from the big vat of class soup indicated by the class path. What is needed is something more fundamental, something that would completely xe2x80x9cinvertxe2x80x9d the control of the whole application, executing everything as services, not the chosen few components.

Java Content Repository (JCR) is about managing unstructured content. In my development travels I find it disappointing to find that most projects consider a RDBMS as the only choice of data storage. It is clearly unfortunate since almost all systems require some kind of unstructured content storage. Even though you could shoehorn your data in blobs in a RDBMS, there still remains the additional task of building infrastructure around it. For example, how would you search through those blobs? SQL’s text search mechanisms are going to be a massive disappointment for those who are all too familiar with Google. But going beyond just usability, there will always be the need for users to annotate the data they work with.

GWT is about managing the complexity of Javascript. The two main problems with Javascript are (1) the extreme flexibility of the language and (2) the lack of consistency of browser implementations. GWT tackles the first problem by employing Java and treating Javascript as an assembly language. For most developers, it should not be necessary to have to delve deeply into assembly language to get your tasks done. The second problem is handled by the maintainers of GWT, they have painstakingly crafted variants of the Javascript that is generated to handle the different nuisances of the browsers. As browsers continue to evolve, GWT developers will continue to tweak their compiler. We should all be thankful that someone else is doing this arduous work.

Then there’s the controversial selection of Groovy. Groovy allows you easy access to meta-programming features in a dynamic manner. Java infrastructure has continually improved its meta-programming features. It has progressed initially form JavaBeans then to BCEL/ASM (runtime bytecode management)to finally Annotations and Aspect Oriented Programming. Groovy’s meta-programming features is one additional method in the tool chest. Of course, the scripting language shortcuts are indeed helpful.

Finally there is that notion of cloud computing. Cloud computing has been around for some time now, however I think Amazon’s entry into the space with a pay as you go model is truly disruptive. It is the convenience of it all that makes it all different. The amount of time saved, by not having to do it yourself or even not having to require a conversation with a human to get it done, is tremendous. The ability to scale up without a massive up front investment is changing the playing field as we speak.

In summary, the list is about technologies that add a base infrastructure to build you next killer app. Surely you can use whatever framework is out there, but ultimately your success will be influenced based on how much work you didn’t have to do by leveraging what was already out there.

Now going to the top five technologies that did not (or just barely) make the list:

  • #5 Android – Google’s attempt to turn the telco space on its head. This is expected to be not only game changing but disruptive. I of course will like to wait for (a) an actual hardware device to play with (b) Google winning the 700Mhz spectrum and (c) the deployment of 700Mhz cell towers across the states. The problem I have with Android is the problem the plagues J2ME devices. How do I keep my sanity as the variety of mobile devices increases exponentially? I have yet to have heard a compelling story (OSGi perhaps?) in this area. That’s plain unfortunate because it’s the biggest pain point for mobile developers.
  • #4 JRuby – Rails is certainly getting a lot of attention; JRuby channels that attention towards the JVM. The Ruby job market has grown to a stunning 3.3% of the size of the Java market. If you need something new (don’t ever try this with legacy code) then possibly the quickest route to a working application is via Rails (use Streamlined while your at it). However, not all applications consist only of CRUD screens, you’ll need to add more mojo into it. That’s when you have to question Rails viability. Convention over configuration only works well if you’re building something conventional.
  • #3 Scala – Scala is a brilliant well thought out language. It’s a language that is not only extremely expressive but one that doesn’t have the performance baggage of a dynamically typed language. In short, you could use it to build bleeding edge infrastructure stuff. The kind of stuff you would never dream of building using slow as molasses languages like Ruby. Sure, you have to subscribe to the static typing religion, it’s an unfortunate trade-off you have to make if you want to build really tight systems. It however didn’t make the list because I would only recommend it to ‘rocket scientists’ building serious heavy lifting infrastructure. Web front end developers need not apply.
  • #2 Seam – Gavin King (Hibernate’s creator) is an accomplished developer. So when he builds another framework, it behooves you to take notice. Seam is his latest creation and it merges JSF and EJB3 into a seamless workable framework that’s all hangs together with Annotations. Unfortunately, its strength is also its weak spot. All that annotation work is going to be a nightmare to debug. Personally, I think Spring is good enough, however if you must have an overarching framework then Seam would be it.
  • #1 Flex – If anything should have been on the list, this would be it. If you want to build rich applications on a browser then plain DHTML and Javascript isn’t going to cut it. The most innovative desktop like applications on the web are unfortunately built on Flash. GWT isn’t going to help you build applications like YouTube, Mindomo, Buzzword, Sketchcast or Pandora but Flex will. The bad news is that Flex isn’t Java, however the good news is that Adobe’s soon to be open sourced server (BlazeDS) is thankfully in Java.

So if you do have that extra bandwidth, I would recommend learning about these additional five technologies. Who just never know, these just might be the top five for 2009 ;-) .

Share the article!

Amazon Kindle Built on Java!

Share the article!

Interesting discovery by Igor Skochinsky, who hacked into Amazon Kindle book reader and discovered that its interface was built on Java.

The main GUI and most of the back-end code is written in Java. The framework is quite elaborate and can be extended with extra “booklets”.

This good open the floodgates to some interesting applications. I think this certainly justifies a purchase of the Kindle book reader.

Share the article!

Top Ten Obscure but Useful Java Open Source Projects – Circa 2007

Share the article!

Three years ago (has it been that long already?) I wrote about “Top 10 Obscure Java Projects“. It was a hit back then and I’m glad to find that several of those projects have graduated from being completely under the radar. Joda Time has become a major influencer in JSR-310 Date and Time API. Mondrian has become core to the Pentaho Business Intelligence project. Hypergate is now one of the more prominent Java CRM applications.

So I’m asking the same question I did back then. That is, what are the top 10 obscure Java projects of 2007 that deserves more respect? Well here’s my 2007 stab at that question. Any list will naturally have a kind of bias, in this case I list down projects that appear to be useful in emerging cloud computing. Cloud computing goes beyond distributed compute servers and moves in the world of distributed sources. This implies that need to handle that complexity.

  1. SymmetricDS – SymmetricDS is a web based, database independent, data synchronization system. Beyond replicating tables between relational databases the software incorporates functionality to handle a large number of databases, manage low-bandwidth connections and work within periods of network outage. The system supports two way replication, guaranteed delivery and multiple active schemas. This project is on this list because you can’t avoid synchronization issues when you work with distributed data sources.
  2. Bedework – Bedework is an institutional calendar system for higher education designed to conform to current calendaring standards. Bedework has a centralized server architecture allowing immediate update of public and personal information. Events can be imported and exported in icalendar (RFC2445) format. Bedework has support for Caldav which will allow caldav aware clients access to the server. This project is on the list because time management is so important but is always treated as an afterthought. It maybe because groking time is so difficult.
  3. Gadget – Gadget is used for transforming a few hundred Mb of XML into RDF. Gadget is built with scalability in mind and, in theory, there is no limit to the amount of data it can handle. This project is on the list simply because one should expect working with heterogeneous sources and a well designed framework to keep one’s sanity.
  4. Carbonado – Carbonado is a relational persistence abstraction layer, capable of binding to different storage technologies. One feature is the ability to issue queries without translating to SQL. Using Carbonado against a BDB offers high performance by skipping all the translation layers offered by other solutions. In order to query against a BDB, Carbonado adds support for indexes and joins. A rule-based query optimizer decides which indexes to use for a given query. A common use of Carbonado is to replicate into a BDB, using it as a complete cache. All queries go against the cache, sparing your central RDMS from the load. Carbonado was developed internally at Amazon.com. This project is in the list because Amazon has realized that not all data sources are from RDMSs.
  5. Nux – Nux is a toolkit making efficient and powerful XML processing easy. It is geared towards embedded use in high-throughput XML messaging middleware such as large-scale Peer-to-Peer infrastructures, message queues, publish-subscribe and matchmaking systems for Blogs/newsfeeds, text chat, data acquisition and distribution systems, application level routers, firewalls, classifiers, etc. Nux reliably processes whatever data fits into main memory (even, say, 250 MB messages), but it is not an XML database system, and does not attempt to be one. Nux integrates best-of-breed components, containing extensions of the XOM, Saxon and Lucene open-source libraries. This project is on the list because people fail to be reminded that most XML processing libraries don’t really scale.
  6. Cleversafe – Cleversafe uses Cauchy Reed-Solomon Information Dispersal Algorithms to separate data into unrecognizable Data Slices and distribute them, via secure Internet connections, to multiple storage locations on a Dispersed Storage Network. Cleversafe ensures that data remains secure even if transmissions are intercepted and decrypted. Cleversafe ensures that data remains secure even if storage is stolen and decrypted. This project is on the list because your customer’s data needs to be protected even if you don’t own your data servers.
  7. XXL – XXL is a Java library that contains a rich infrastructure for implementing advanced query processing functionality. The library offers low-level components like access to raw disks as well as high-level ones like a query optimizer. On the intermediate levels, XXL provides a demand-driven cursor algebra, a framework for indexing and a powerful package for supporting aggregation. This project is on the list because you expect to efficiently merge data sources in all kinds of unexpected ways.
  8. UIMA
    UIMA is a component framework for analysing unstructured content such as text, audio and video. UIMA can analyze large volumes of unstructured information in order to discover knowledge that is relevant to an end user. UIMA application might ingest plain text and identify entities, such as persons, places, organizations; or relations, such as works-for or located-at. UIMA enables such an application to be decomposed into components, for example “language identification” -> “language specific segmentation” -> “sentence boundary detection” -> “entity detection (person/place names etc.)”. Each component must implement interfaces defined by the framework and must provide self-describing metadata via XML descriptor files. The framework manages these components and the data flow between them. Components are written in Java or C++; the data that flows between components is designed for efficient mapping between these languages. This project is on the list because you can’t expect your data sources to be structured.
  9. Queplix – QueWeb Customer Care solution that focuses specifically on the portion of the Customer Relationship after the Customer has been acquired. The solution is a J2EE application that uses Google Web Toolkit (GWT) for its UI. This project is on the list because of it’s particularly impressive leverage of GWT.
  10. ZK – ZK is an event-driven, XUL-based, AJAX-embedded, all Java framework to enable rich user interfaces for Web applications. With ZK, you represent and manipulate RIA in XUL/HTML components all at the server similar to how you developed desktop apps. ZK includes an AJAX-based event-driven engine to automate interactivity, and a rich set of XUL-based components. This project is on the list because it’s possibly the most rich AJAX framework that nobody has ever heard of.

Open Source is much bigger today that it was three years ago. So unlike then, when this list included projects backed by a few people, this list includes projects that are backed by real organizations. It’s just unfortunate that with so much out there, these excellent projects are unable to rise above the noise. I do hope this list gives you a glimpse of what you may have easily overlooked.

Share the article!

Open Source Grid and Cluster Computing Frameworks Written in Java

Share the article!

Had a little bit of a conundrum on what title to give this list. I gather that “Grid” and “Cluster” computing would resonate better than “Distributed” and “Parallel”. There’s been a lot of activity lately in this area, however the one I’ve keenly interested in are the ones that integrate with Amazon’s S3 and Elastic Cloud efforts. These tools are really great but can be made more appealing it they can be implemented in the cloud. Here are some of the great tools I have discovered so far. (Note: see “Open Source Distributed Cache” for other related clustering tools )

  • GridGain – GridGain is a computational grid framework that aims to improve the performance of processing intensive applications by splitting and parallelizing the workload. GridGain’s unique feature is that it is an Aspect Oriented Programming (AOP)based grid solution. With AOP-based grid enabling you simply attach annotation to a method and it is automatically grid enabled. The goal is to combine a simple programming model with the state of the art grid computing features. GridGain comes with grid topology management, customizable failover and collision resolution, split-and-aggregate, in-grid and external invocation, pluggable deployment, checkpoint and automatic peer-to-peer deployment.
  • Hadoop – Hadoop is a platform that lets one easily develop applications that process vast amounts of data. Hadoop can reliably store and process petabytes. By distributing the data, Hadoop can process it in parallel on the nodes where the data is located. Hadoop automatically maintains multiple copies of data and automatically redeploys computing tasks based on failures. Hadoop implements Google’s MapReduce in Java. MapReduce divides applications into many small blocks of work. Hadoop has been demonstrated on clusters with 2,000 nodes.
  • Rio – Rio provides a dynamic architecture for developing, deploying and managing distributed applications composed of services. The differentiating features of Rio are a set of dynamic capabilities and reliance on policy-based and QOS mechanisms. Rio is based on Jini and enhances it by introducing a simple component model.
  • JPPF – Java Parallel Processing Framework (JPPG) is a grid framework that integrates with existing J2EE application servers. It has a programming model that abstracts the complexity of distributed and parallel processing. It provides graphical tools for fine-grained monitoring and administration of the grid. It provides redundancy, recovery and failover capabilities. JPPF also includes a screensaver node that enables the automatic use of idle computers
  • ProActive – ProActive is a platform for parallel, distributed and multi-threaded computing. ProActive features an Eclipse based IDE, a resource acquisition and deployment framework and a parallel programming framework. ProActive supports parallel programming concepts such as Master-Slave, Branch and Bound, Single Program Multiple Data processing, composable structured patterns and active objects. ProActive also supports fault-tolerance, load-balancing, mobility, and security.
  • Cougaar – The Cognitive Agent Architecture [cougaar] project provides a framework for distributed multi-agent systems. Cougaar supports the construction of large-scale distributed agent-based applications. It is the result of a multi-year DARPA research project into large scale agent systems. It also includes a variety of demonstration, visualization and management components to simplify the development of complex, distributed applications.
  • GridEngine – The Grid Engine project provides enabling distributed resource management software for wide ranging requirements from compute farms to grid computing. Grid Engine provides policy-based workload management and dynamic provisioning of application workloads. A Grid Engine master can manage a grid of up to ten thousand hosts, meeting the scalability needs of even the largest grids. Grid Engine supports flexible resource quotas, boolean expressions for requesting resources, DRMAA 1.0 Java and C-language bindings and DTrace support.
  • Cleversafe – Cleversafe uses Cauchy Reed-Solomon Information Dispersal Algorithms to separate data into unrecognizable Data Slices and distribute them, via secure Internet connections, to multiple storage locations on a Dispersed Storage Network. Cleversafe ensures that data remains secure even if transmissions are intercepted and decrypted. Cleversafe ensures that data remains secure even if storage is stolen and decrypted.
  • Darkstar – Darkstar is a server to support the development of massively multi-player online games. Darkstar allows developers to scale their applicaions without requiring the need to know distributed computing. Computing however by the server can be spread across any number of servers in a scalable and fault tolerant manner. The system is further more optimized for the low latencies required for game applications. It is a fully distributed, fault tolerant communication and event processing system. Darkstar servers have notable grid like properties: Zoneless and Shardless are not required for scaling, automatic fail-over, transparent persistence and a custom enterprise level transactional data storage system.
  • H2O – H2O is a scalable, stateless, and lightweight platform for building and deploying distributed applications. H2O is an open container that allows any authorized third parties to deploy services into the container. H2O features APIs for remote component deployment and management, and inter-component communication. H2O components can communicate via synchronous or asynchronous remote method invocations or through a publisher-subscriber distributed event model. The communication layer offers a selection of messaging protocols (JRMP, SOAP, RPC) and customizable transport stacks (SSL, compressed sockets, JXTA sockets, single-port tunneling, in-process sockets, all of which can be mixed in many combinations). H2O has been designed to support wide range of distributed programming paradigms, including self-organizing applications, widely distributed applications, massively parallel applications, task farms, component composition frameworks, and more. H2O is focused on security, ensuring the safety of shared resources and that of users data via the well-established technologies like SSL, JSSE, JAAS and the Java Platform Security.
  • Ibis – The Ibis project currently consists of several sub-projects that include communication libraries, programming models, a grid interface toolkit and a peer-to-peer grid framework. Satin is a programming model that makes it convenient to develop divide and conquer style programs. MPJ provides is a pure Java implementation of the MPI messaging protocol. GMI is a group based implementation for RMI. JavaGAT interfaces with other grid middleware, such as Globus, Unicore, SSH and Zorilla. JavaGAT provides a common uniform interface that provides file access, job submission, monitoring, and access to information services. Zorilla is a peer-to-peer overlay network.
  • Pegasus – Pegasus (Planning for Execution in Grids) is a workflow mapping engine developed and used as part of several NSF ITR projects. Pegasus bridges the scientific domain and the execution environment by automatically mapping the high-level workflow descriptions onto distributed infrastructures such as the TeraGrid and the Open Science Grid. Pegasus is used in a variety of scientific applications ranging from astronomy, biology, earthquake science and gravitational-wave physics.
  • Java Cog Kit -
    The Java CoG Kit framewok provides basic and advanced abstractions that aid in the development of Grid applications. These abstractions include job executions, file transfers, workflow abstractions, and job queues and can be used by higher level abstractions for rapid prototyping. The Java CoG Kit is extensible, users can include their own abstractions and enhance its functionality. Grid providers allow different Grids to be integrated into the framework.
  • JGrid – The JGrid is a service-oriented grid where components (services and clients) can dynamically join and leave the system at any time, and users can have simple and seamless access to grid services. The infrastructure is fault-resilient and reliable. JGrid provides a wide-area, distributed service discovery mechanism with content-based query routing and powerful matching semantics. The system allows users to access and use services, execute sequential or parallel programs in a secure environment, and interface with legacy systems. Secure communication and execution environment employs standard security mechanisms (X509, Kerberos, SSL).
  • JOMP – The JOMP project goal is to define and implement an OpenMP-like set of directives and library routines for shared memory parallel programming in Java.

So by now you may be bit confused as to what a Grid or Cluster Computing means. Well, you are not alone. Tim Bray wrote a good piece to resolve this ambiquity. Additional Grid information can be found here. Nevertheless, if you know on any more projects that fit the ‘Grid’ or ‘Cluster’ computing category, please feel free to contact me.

Share the article!

Open Source Social Networking Applications Written in Java

Share the article!

I’ve been googling the web looking for Java implementations of social networking functionality. I’m a bit disappointed that I couldn’t find more, but there are a few that can serve as a solid foundation. Here’s what I’ve found so far:

  • Mugshot – Mugshot is sponsored by Red Hat. Mugshot allows user to pull together activity from all your online accounts at one place on the web. It allows users to share web links with individuals or groups and get feedback when people visit those links. Mughots integrates with music sites like iTunes, Rhapsody, Yahoo! Music, and others. Mugshot keeps track of what friends are doing online. It supports groups where on can create public or private groups around shared interests.
  • Slynkr – Slynkr is a social news system that supports user submitted content, tagging, voting and RSS fields. It is based on a simple Servlet/JSP and JDBC architecture using no frameworks or persistence layer. It’s differentiator is that is support live queries that are unbounded rather than fixed.
  • Gnizr – Gnizr is a social bookmarking and web mashup application. Gnizr can be used to create a personalized del.icio.us-like portal to store, classify, and share information, and mash-it-up. Gnizr can assign geographical location values to bookmarks and view bookmarks on a map. It can define relationships between bookmark tags (i.e. broader, narrower and member-of ). View bookmarks in Clustermap and Timeline. Import new bookmarks from user-defined RSS subscriptions. Gnizr is built using WebWork, Spring, Freemarker and MySQL.
  • iFind – iFIND aims to improve social networking through some kind of digitally augmented serendipity. With iFIND, you and your friends can instantaneously exchange your locations on campus, talk to users nearby, and coordinate more effectively. iFIND aims to give full control of location to the users. The user can choose, on a peer to peer basis, when to disclose your individual data and to whom.
  • irate radio – iRATE radio is a collaborative filtering system for music. Users rate the tracks they downloads and the system uses these ratings and other user’s ratings to guess what they like. Leverages the JavaLayer project for MP3 and MAD for MPEG decoding.
  • Semantic Bank – Semantic Bank is the server companion of Piggy Bank that lets you persist, share and publish data collected by individuals, groups or communities. Semantic Bank allows users to share information with other people. It includes the ability to tag resources, it lets users publish information, both in RDF form or to regular web pages.
  • BuddySpace – BuddySpace is an instant messenger with the following features: it allows optional maps for geographical and office-plan visualizations in addition to standard ‘buddy lists’. BuddySpace provides enhanced capabilities for users to manage and visualise the presence of colleagues and friends in collaborative working, gaming, messaging, and other contexts.
  • S3B – S3B – Social Semantic Search and Browsing
    a middleware that delivers a set of search and browsing components that can be used in J2EE web applications to deliver user-oriented features based on semantic descriptions and social networking. Includes a trust engine, Firefox plugin, RSS/Atom subscriptions and del.icio.us import/export.
  • jMarks – jMarks is a multi-user web-based bookmark solutiona. jMarks allows users to mark their online bookmarks as public or private, and can also track the last time each bookmarked site was updated.
  • Chipmark – Chipmark is a shared bookmarking application. It provides the ability to share bookmarks, explore bookmarks ( random, popular and recently added ) and provides Firefox and IE enhanced support. Chipmark is a student run open-source project at the Univeristy of Minnesota.
  • Semanlink – Semanlink is a personal information management system based on RDF. It lets users add tags, as well as other RDF metadata, to files, bookmarks and short text notes. Semanlink provides a simple way to organize tags in a graph, it allows you to incrementally define the vocabulary you use when annotating documents. Semanlink is implemented as a servlet and the Jena RDF APIs.
  • MoochSpot – MoochSpot is where you can come to keep track of how much money you and your friends owe each other. MoochSpot provides open source wrappers to the Facebook API.
  • xOperator – xOperator combines advantages of social network websites with instant messaging. It tries to be a semantic agent for xmpp / jabber network which finds and shares content about resources (using RDF/SPARQL) for you and your jabber friends.
  • TagSEA – TagSEA is a framework for tagging locations of interest within Eclipse. TagSEA combines ideas from social bookmarking (tagging) and geographic navigation (way pointing) aiming to make finding information easier.
  • Hiitch – Hiitch is a thick client that notifies you of people and things that interest you. Hiitch helps users meet other online users by matching their profiles with what they have set out to look for. If a match is found, Hiitch will send an alert to notify user. Aside from profile matching, Hiitch will also alert users of other activities such as appointments, events, items received and off line messages.
  • Shindig – Shindig is an implementation Google’s OpenSocial APIs for client-side composed web applications. Google’s OpenSocial provides a common set of APIs for social applications across multiple websites. OpenSocial is similar Portal/Portlet technology, but is based on client-side compositing, rather than server. Ning intends to donate code based on their implementation of OpenSocial. The backend systems will be replaced with more generic equivalents in order to not bind the implementation to the Ning platform.
  • Skittr – Not really Java, but runs on a Java JVM. It is a Scala implementation of Twitter. It’s 884 ‘wc -l’ lines of code including comments. It can handle 1M+ users on a two Intel Core 2 Duo boxes (one as the web front end and the other as the message broker.)
  • OpenQabal – OpenQabal is currently in pre-alpha form. It provides the following features: a blogging server based on Roller, forums based on JavaBB and SSO based on CAS.
  • NEPOMUK – Networked Environment for Personalized, Ontology-based Management of Unified Knowledge. NEPOMUK is a project to extend the desktop into a collaboration environment supporting personal information management and the sharing and exchange across social and organizational relations.
  • SocialSite – The SocialSite project is delivering social networking functionality by adding social networking platform support based on the OpenSocial standard to any community site. Any social application written for the OpenSocial based social network can be seamlessly and easily hosted on a transformed community site that is powered by the SocialSite project. Watch this video to get a good idea as to what it does.

It’s a very varied and interesting mix. Certainly a good place to start to build your own social network. So please do let me know if you’ve found other interesting implementations that we can add to this list.

Share the article!

Open Source Replication and Synchronization Tools Written in Java

Share the article!

Continuing on the series of “open source” stuff written in Java, here now is a review of “open source” solutions for Replication and Syncronization.

  • SymmetricDS – SymmetricDS is a web based, database independent, data synchronization system. Beyond replicating tables between relational databases the software incorporates functionality to handle a large number of databases, manage low-bandwidth connections and work within periods of network outage. The system supports two way replication, guaranteed delivery and multiple active schemas.
  • Daffodil Replicator – Daffodil Replicator performs data replication based on the ‘Publish and Subscribe’ model. Replicator supports bi-directional data replication by either capturing a data source snapshot or synchronizing the changes. It monitors data changes, synchronizes all data changes on periodic basis or on-demand. Replicator can use pre-defined conflict resolution algorithms to resolve conflicts between data sources.
  • drS – The db4o Replication System (dRS) is a replication system that leverages Hibernate. It enables synchronization of objects bi-directionally between distributed instances of relational databases such as Oracle or MySQL.
  • Pollux – Pollux provides a framework for synchronizing data sources which share the same data format. The Record inferface of Pollux provides an abstractions for most kinds of data records, these may include PIM, database records or file/directories.
  • Bhavaya – Bhavaya is library that supports real-time synchronized up-to-date access to continually changing data. The Bhavaya persistence layer is different from other implementations such as Hibernate and Castor in that the properties of Bhavaya’s objects always reflect the current value of the data in the database.
  • GCalDaemon – GCALDaemon offers two-way synchronization between Google Calendar and various iCalendar compatible calendar applications. GCALDaemon is primarily designed as a calendar synchronizer but it can also be used as a Gmail notifier, Address Book importer, Gmail terminal and RSS feed converter.
  • Funambol Mobile Application server – The Funambol Mobile Application server ( originally named Sync4j )includes a certified implementation of the Open Mobile Alliance (OMA) Data Synchronization and Device Management protocols (OMA DS and DM, formerly known as SyncML).

Please let me know what I may have missed!

Share the article!

Open Source Calendar Management Written in Java

Share the article!

Human activities revolve around the management of time. It’s just ironic that Java’s support for time and calendar manipulation has been quite anemic at best. Fortuntately there are several open source solutions out there that make a valiant attempt to compensate for Java’s defficiencies. (note: There’s a new JSR 130 formed to address the situation) Here’s the list of solutions I have found:

  • Bedework – Bedework is an institutional calendar system for higher education designed to conform to current calendaring standards. Bedework has a centralized server architecture allowing immediate update of public and personal information. Events can be imported and exported in icalendar (RFC2445) format. Bedework has support for Caldav which will allow caldav aware clients access to the server.
  • iCal4j – iCal4j is a library used to read and write iCalendar data streams as defined in RFC2445. iCal4j provides a parser and an object model, it allows manipulation of iCalendar data or creating new data models. Validation is also provided to ensure the data maintains a state consistent with the specification.
  • CalDav4j – CalDAV4j is a protocol library that extends the Slide project’s WebDAV client and Apache’s HttpClient library to allow high level manipulation of CalDAV calendar collections as well as lower level CalDAV protocol interactions.
  • jical – JiCal is a partial implementation of RFC2445. It can scan directories, find iCalendars tand convert them to free busy files for serving from your webserver. JiCal can generate an XML calendar format which expands the repeating events that can use to render as HTML, CSV, PDF, TXT.
  • Time and Money – This is a project to develop code for manipulating basic concepts in recurring domains such as time and money. The design principles followed here are explained in Part III of Eric Evans’s book ‘Domain-Driven Design’.
  • Joda Time – Joda-Time provides a quality replacement for the Java date and time classes. The design allows for multiple calendar systems, while still providing a simple API. The ‘default’ calendar is the ISO8601 standard which is used by XML. The library is intended to provide all the functionality that is required for date-time calculations.
  • ObjectLab Kit – ObjectLab Kit came out of our frustration to have to re-do the same kind of code over and over each time we joined a new company and Bank. Most banks will require basic Date calculation, we did spot another open source project for this but their licence forbids most financial institution from using it. This one is released under the business-friendly Apache 2.0 license.
  • JTemporal -JTemporal is a framework of components providing functionality for time related applications based on the foundations of Instants and Periods. Provides basic functionality handling the most common temporal aspects (for the moment instant, period, mediators managing temporal associations).
  • TreeSched – TreeSched is a scheduling definition that is defined as hierachical tree of schedules, each providing a tighter constraint on the time frame of the schedule – from yearly events down to the millisecond. This allows great flexability in defining a schedule. TreeSched provides a schedule, not a scheduler.
  • JTimePiece – An easy-to-use API for working with dates and times. Includes methods for computing difference between two date/times; support for time zones, leap year and daylight savings; methods for adding and subtracting to and from date/times and methods for easily retrieving individual parts of date/times.
  • Zimbra – Zimbra is quite a large system however it has impressive calendaring capabilities that we shouldn’t easily dismiss.
  • InfoGlue Calendar – The InfoGlue Calendar is a portlet-based calendar and event management system. Features includes multiple administrators per calendar, advanced search and handling of participants and multi-language support.
  • Chandler Server – Chandler is an open source Note-to-Self Organizer designed for personal use and small-group collaboration. Chandler consists of a cross-platform, desktop application, sharing service and web application. The web application is built using Java technologies.

Please let me know what I’ve missed. If you’re looking for resource scheduling systems, see my this list.

Share the article!