» tagged pages
» logout

sorted by: recent | see : popular
Content Tagged with License:ASF2.0 + Java

Introducing Inject4Spring library

In this blog entry I introduce small library that extends base functionality of Spring framework by allowing specifying references between in beans using "opposite" direction of them comparing to standard Spring approach.

What I’ve tried to solve

Several days ago I’ve blogged about necessity and possibilities of specifying dependencies in Spring context using "opposite" direction of references.

In just two words, if we have, say, two beans defined within context, and first bean refers to other bean, that reference should be described within bean context configuration XML directly as part of referring bean definition. This is casual and "natural" Spring way of defining dependencies between beans.

However, for some types of applications that approach does not work. The major drawback of it is as follows: during definition of referring bean it’s assumed that the name of bean to which it refers is known.

Unfortunately, for applications that are built using plugin architecture, that assumption becomes serious limitation, since it does not allow to create really extensible application without necessity of Spring context modification – of course, that does not corresponds to overall idea of plugins at all. And that’s even more sad if we’ll consider functionality that is already included into Spring – like creation of application context from several files that could be resolved dynamically (say, via direct list of their locations or via wildcards withing classpath).

Therefore, to obtain truly extensible applications, we need to have ability to "extend" existing content of Spring context.

From that point of view, the application may include, for example, one or more Spring configuration files with beans that represents "extension points" and, several dynamically loaded modules of plugins which may include beans that may be plugged into that extension points.

The following picture illustrates this concept:

What should be considered as extension point there? Well, the answer is pretty simple there – just properties of some beans. We have named bean, we have named property – so we could address the point where we could inject our reference pretty precise.

Of course, in extending context we need to know names of beans and properties to which we may inject beans from extending contexts. However, this issues is completely different to original approach of Spring – in such case, beans in "core" context represents a kind of dynamic API (pretty funny, but I suppose that such and context definition may be considered as API without API), and at the moment of defining beans in "core" context we are completely not aware how ones will be customized later (or even probably by third-party plugin developer).

Ok, now that we have extension points, the only thing we need to make the entire concept of such injection live is just an ability to specify that beans should be wired outside of referencing bean definition.

In other words, here we need to have some mechanism which will said Spring that beans should be wired not in "core" context, but directly in "extending" one.

The following picture illustrates difference between "normal" and "opposite" directions of references:

Now we are almost ready to move further. The only thing that we need to consider at the moment is types of references. Spring provides several standard ways to specify references between beans:

  • using ordinary reference;
  • using list of beans;
  • using map of beans;
  • using set of beans.

And, of course, there is ability to specify value of particular property. If we’ll look on these ways of defining relations between beans it will be clear that it’s quite possible to use opposite direction of injection to support them.

Inject4Spring overview

Well, that was background for tasks which are solved by Inject4Spring library. It’s a small (about 35k in jar) library which I wrote about year ago to have support of such "opposite" directions of specifying references between beans. At the moment, we’ve used it in several projects developed in SoftAMIS. Inject4Spring is released under Apache License, so it could be used both in open source and commercial applications.

In general, while it could be used for Spring 1.x, primarily it’s targeted to Spring 2.x, since it heavy relies on custom namespaces functionality introduced in Spring 2.0. Actually, from the usage point of view, all functionality of that library is exposed via set of custom XML tags that belongs to "inject" namespace.

Here is brief overview of possible types of dependencies in Spring and custom tags included into Inject4Spring that corresponds them:

License and download

Inject4Spring is released under Apache License, so it could be used both in open source and commercial applications. At the moment, you may to download it directly from our site, but probably later I’ll move it as project on SourceForge or something like that.

At the moment it’s quite stable and we’ve used it during last year for several projects. However, if you’ll have some comments, issues, requests for improvements – please do not hesitate contacting me


The Inject4Spring library was developed in SoftAMIS, a Ukraine based software development company specialized on Java and Web development outsourcing services. To find more about SoftAMIS, our services, skills and experience, please visit our site –

http://www.soft-amis.com

The home page of Inject4Spring is currently located here

cluster4spring

Clustered Remoting for Spring Framework (Cluster4Spring) represents an alternative implementation of the remoting subsystem of Spring framework and provides possibilities to build more stable and fault tolerant systems with dynamic discovering of remote services. Cluster4Spring uses Apache 2.0 license that allows using it both in commercial and non-commercial products.

Briefly, the major features of Cluster4Spring library are:
  • Support of one-to-one scheme of remoting (similar to one currently supported by Spring);

  • Support of one-to-many scheme of remoting, which assumes that one client selects remote service for invocation from one of predefined locations;

  • Support of one-to-many scheme of remoting with dynamic discovering of remote services;

  • Several built-in policies for selecting remote service for invocation are included (they are applied if service is available in several locations);
  • Built-in functionality for handling remoting exceptions of method invocations that provides ability to re-invoke remote service using different service location automatically;
  • Steep learning curve since ideological implementation of Cluster4Spring bears a close resemblance to the implementation of remoting in Spring;
  • Non-intrusive for existing applications – it is simply enough to change appropriate remoting-related Spring configuration files to start using Cluster4Spring;
  • Provides a convenient way to add custom interceptors both on client and server side;
  • Flexible and modular architecture which is ready for further extensions and customizations;
  • Library is stable and ready to use;

Another feature, which is currently missing in remoting subsystem offered by Spring framework, is lack of the ability to dynamically discover remote services.

The main purpose of Cluster4Spring is to extend remoting system of Spring framework and overcome limitations mentioned above.

The Cluster4Spring library was developed in SoftAMIS, a Ukraine based software development company specialized on Java and Web development outsourcing services. To find more about SoftAMIS, our services, skills and experience, please visit our site –

http://www.soft-amis.com

The home page of Cluster4Spring is located here

dmLite

Modelibra (former dmLite) is a domain model framework for rapid application development. A domain model may be designed, generated, and validated as a web application. Modelibra uses the Wicket web framework for generic web components that are views of model concepts. The generic web components may be mixed with specific web components to develop a professional Wicket application.

quartz

Quartz is an enterprise-class job scheduler for integration with stand-alone Java applications and full-scale J2EE applications.

SourceLabs includes Quartz in its Self Support Suite for Linux and Open Source Java offering.

cglib

cglib is a set of utility classes that can be used to generate and load Java classes at runtime.

SourceLabs includes CGLib in its Self Support for Linux and Open Source Java offering.

Axis

Apache AXIS is a Java-based implementation of the “Simple Object Access Protocol” (SOAP) submission to the W3C; it’s considered by many to be the defacto Java web services stack.

Apache Axis is supported by a number of companies, including SourceLabs. Axis is part of SourceLabs SASH stack for Java.

Apache Axis is covered in SourceLabs Self-support Suite for Linux and Open Source Java

See Also

Spring

Spring is a Java/J2EE application framework that assembles components via configuration files. Spring is an open source project but is developed by engineers with Interface 21, and Spring Framework is a trademark of Interface 21. Spring is supported by a number of companies including Interface21 and SourceLabs, and is covered in SourceLabs Self-support Suite for Linux and Open Source Java

Spring’s core technical selling point has been the Inversion of Control design idea, where programming is focused on interfaces rather than classes. Spring’s design comes from the book Expert One-on-One J2EE Design and Development by Rod Johnson.

Mission

Spring’s mission statement as articulated by Interface21 includes these points:
  1. J2EE should be easier
  2. Interfaces > Classes
  3. JavaBeans are good for configuration
  4. OOP > implementation technology (J2EE)
  5. Testability is important and should be easier
  6. Frameworks shouldn’t force recoverable exception catching

And these direct points about Spring

  1. Spring should be a pleasure to use
  2. Spring APIs should not be a dependency
  3. Spring should not compete with good existing solutions like JDO and Hibernate.

External Links

From Rod Johnson

Reviews of Spring

Critiques of Spring

batik

Batik is a Java-based toolkit for applications that want to use images in the Scalable Vector Graphics (SVG) format for various purposes, such as viewing, generation, or manipulation.

GenericRCP

GenericRCP is a client based on SpringRCP automatic generic gui generation. It uses a hibernate domain model (with .hbm.xml-file or annotations).

please expand this project description.

Raven

Raven is a build tool for Java applications written in Ruby.

December 2007 article on Raven.

EasyStub

EasyStub is a framework for making stubs. When you find most of time you are using a mock framework to create an object that always returns the same value, and you did not care about the interactions, what you need is actually a stub.

Examples:

to create stub:
  • MyInterface stub = createStub(MyInterface.class);
to return value:
  • make(stub.hello()).returning(‘hello’);
to throw exception:
  • make(stub.hello()).throwing(expectedException);
to throw exception for method without return value:
  • stub.nothing();
  • willThrow(expectedException);

Java based virtual file system for ZIP, TAR and derivatives

TrueZIP is a Java based Virtual File System (VFS) which enables client applications to access ZIP, TAR and derivative archive types transparently as if they were just directories in a file’s path name.

geonames

software for the the geonames.org project.

More information needed! Please edit and add information about geonames

Roma Framework

ROMA is a project that attempts to glue the best of Java tools and frameworks together. ROMA seeks to avoid reinventing the wheel or building a new web framework, but rather package existing Java tools together in a convenient way for a developer.

Roma takes POJOs and creates persistence, presentation, monitoring and reporting around them. In this sense it is a similar project to Rails, which also does little more than glue existing projects togther in a careful and structed way to try and create a better development environment.

SPARQL4J

SPARQL4J aims to deliver a JDBC driver by the time W3C working group (DAWG) finishes the SPARQL specification.

OpenJPA

Open JPA will be an ASL-licensed implementation of the Java Persistence API (JPA) which is defined as part of JSR-220. Open JPA is a derivative of the basis of the BEA WebLogic Server (WLS) EJB3 JPA implementation, and so is an important piece of the BEA code base.

TurtleMock

An easy to use and understand mock framework for unit testing, makes testing using mock objects less painful.

Different from jmock and easy mock, it uses a “log pattern” to keep setup-do-assert order in your testcase, which makes testcases using mock less confusing. It also puts fewer constraints on the default invocation verify, making testcases smaller, more focused on describing a single behavior, and less fragile…

The point is “only test what you want to test”.

More info

Simflet

Simflet is an MVC framework for JSR-168 portlet development that brings the MVC design model to building complex portlets.

ROMA

ROMA is a web application framework for building Ajax powered web applications from simple POJOs.

ROMA is based on an Object Oriented MVC architecture, encouraging the Domain Driven development model. The use of POJOs as the basic programming elements allows ROMA applications to be portable across Java frameworks.

ROMA utilizes inversion of control through the Spring Framework IoC container, other IoC containers such as Picocontainer may be used as well.

Aranea framework

Aranea is a hierarchical Model-View-Controller Web framework that provides a common, simple approach to building Web application components, reusing custom or general GUI logic, and extending the framework.

The framework enforces programming using object oriented techniques with POJOs and provides a JSP tag library that facilitates the programming of Web GUIs without writing HTML.

Rhino in Spring

Rhino in Spring is a project that integrates the Java JavaScript interpreter from Mozilla with the Spring Framework.

This allows for javascript server development on a lightweight framework.

Spring IDE for Eclipse

Spring IDE for Eclipse provides plugins for the Eclipse platform to ease working with Bean Factory configuration files for the Spring Framework.

It contains a Spring project nature (with an incremental builder for validating Spring bean config files), an image decorator (which decorates Spring projects and all Spring bean config files), a Spring view (which allows one to browse Spring projects and their Spring bean config files, including bean properties), and an editor showing a graph from the beans of a single config file or a set of config files.

cintoo Messages

Messages is a open source framework to make internationalization easier for Java applications. It supports locales for threads and bundles can be associated with different packages. This allows the usage of different bundles for different parts of the application like plugins, installer or logging.

Bundles can be managed and associated with packages without any changes in the code. This makes bundle management and refactoring much easier than with other solutions. Messages supports global locales for client applications written in Swing or SWT and thread local ones for serverside web applications.

Usage

An example on using Messages:

import static api.cintoo.messages.Messages.*;

public class MessagesExample { 
  public static void main(String[] args) { 
    Messages.setLocale(new Locale(”en”, “”)); // set the Locale 
    Messages.setBundle(”messages”); // set the bundle file to use 
    System.out.println( $(”helloWorld”)); 
  } 
} 

Store a file called Messages.properties in your classpath

#messages.properties 
helloWorld=Hello World! 

Running the program should print “Hello World!”.

Jini

Jini is a network architecture developed by Sun Microsystems for use in distributed systems.

Apache Portals

Apache Portals is a collaborative software development project dedicated to providing robust, full-featured, commercial-quality, and freely available Portal related software on a wide variety of platforms and programming languages.

This project is managed in cooperation with various individuals worldwide (both independent and company-affiliated experts), who use the Internet to communicate, plan, and develop Portal software and related documentation.

solex

Solex is a plugin for Eclipse for testing web applications.

Solex tracks HTTP requests and responses and tests involve running checks against those requests and response. Tools are included to tweak parameters and replay scenarios.

EasyConf

EasyConf is a java library to access configuration of software components and applications.

EasyConf defines simple conventions to make it easier to use and was born in a portlets-based portal and has several features useful for this and similar environments.

EasyConf is based on known and respected open source libraries such as Commons Configuration, Digester, Xstream, etc.

Java Caching System

JCS or Java Caching System is a distributed caching system written in java.

JCS is a distributed caching system written in java. It is intended to speed up applications by providing a means to manage cached data of various dynamic natures. Like any caching system, JCS is most useful for high read, low put applications. Latency times drop sharply and bottlenecks move away from the database in an effectively cached system. Learn how to start using JCS.

The JCS goes beyond simply caching objects in memory. It provides numerous additional features:

  • Memory management
  • Disk overflow (and defragmentation)
  • Thread pool controls
  • Element grouping
  • Minimal dependencies
  • Quick nested categorical removal
  • Data expiration (idle time and max life)
  • Extensible framework
  • Fully configurable runtime parameters
  • Region data separation and configuration
  • Fine grained element configuration options
  • Remote synchronization
  • Remote store recovery
  • Non-blocking “zombie” (balking facade) pattern
  • Lateral distribution of elements via HTTP, TCP, or UDP
  • UDP Discovery of other caches
  • Element event handling
  • Remote server chaining (or clustering) and failover

JCS works on JDK versions 1.3 and up. It only has two dependencies: Commons Logging and Doug Lea’s Util Concurrent.

cayenne

Cayenne is a free object-relational persistence framework written in Java. Its goal is to make development of database Java applications faster and more consistent with the Object Oriented Programming concept.

XmlIO

XmlIO is a framework for reading XML files into corresponding Java objects and for writing a graph of Java objects to XML.

Apache Tuscany

Tuscany is a SOA runtime framework based on the SCA specifications, with implementations in Java and C++ .

Radeox

Radeox is a Wiki markup rendering engine written in Java. Radeox supports the Wiki Standard markup called WikiCreole.

Sequoia

Sequoia (formerly known as the Clustered JDBC project) provides high availability and performance scalability for databases. It provides transparent database clustering (partitioning, replication, etc.)

OpenToro

OpenToro 3.0 is a web database publisher designed to create web applications that connect directly to a database.

OpenToro alleviates the drudgery of having to use JSP and SQL to implement a forms based data driven web-based application.

AjaxAnywhere

AjaxAnywhere is designed to turn any set of existing JSP components into Ajax aware components without complex JavaScript coding.

Strata Frameworks For Java

Strata Frameworks is a collection of J2EE frameworks designed to help jumpstart any application. From mapping Relational Databases to definining logging services, Strata is an all encompassing set of frameworks to help build architected, layered applicaitions that allow your team to work in parallel.

Strata Platform is the base framework that all other Strata frameworks build upon.

Page 1 | Next >>