|In this chapter we quickly walk through the basics on contributing; future chapters go into more depth.|
|Java 1.6||Infinispan is baselined on Java 6.0, and is built and tested using Sun Java 6.0.|
|Maven 3||The Infinispan build uses Maven, and we recommend using Maven 3.|
|Git (optional)||The Infinispan sources are stored in Git. If you don't wish to install Git, you can download source bundles|
Infinispan uses JIRA for issue management, hosted on issues.jboss.org. You can log in using your normal jboss.org username and password.
If you need to create a new issue then follow these steps.
- Choose between
- Feature Request if you want to request an enhancement or new feature for Infinispan
- Bug if you have discovered an issue
- Task if you wish to request a documentation, sample or process (e.g. build system) enhancement or issue
- Then enter a Summary, describing briefly the problem - please try to be descriptive!
- You should not set Priority.
- Now, enter the version you are reporting an issue against in the Affects Version field, and leave the Fix Version field blank.
- In the Environment text area, describe in as much detail as possible your environment (e.g. Java runtime and version, operating system, any network topology which is relevant).
- In the Description field enter a detailed description of your problem or request.
- If the issue has been discussed on the forums or the mailing list, enter a reference in the Forum Reference field
- Finally, hit Create
|Only Infinispan contributors should set the Fix Version field.|
When setting the Fix Version field for bugs and issues in JIRA, the following guidelines apply:
Version numbers are defined as MAJOR.MINOR.MICRO.MODIFIER. For example, 4.1.0.BETA1 would be:
If the issue relates to a Task or Feature Request, please ensure that the .FINAL version is included in the Fixed In field. For example, a new feature should contain 4.1.0.BETA1, 4.1.0.FINAL if it is new for 4.1.0 and was first made public in BETA1. For example, see ISPN-299.
If the issue relates to a bug which affected a previous FINAL version, then the Fixed In field should also contain the .FINAL version which contains the fix, in addition to any ALPHA, BETA or CR release. For example, see ISPN-546.
If the issue pertains to a bug in the current release, then the .FINAL version should not be in the Fixed In field. For example, a bug found in 4.1.0.ALPHA2 (but not in 4.1.0.ALPHA1) should be marked as fixed in 4.1.0.ALPHA3, but not in 4.1.0.FINAL. For example, see ISPN-416.
or to clone your fork:
For more information, read the Git chapter.
Maven supports generating IDE configuration files for easy setup of a project. Tested are Eclipse, IntelliJ IDEA and Netbeans.
Before we import the project, we need to clone the project as described above.
- Install the m2eclipse plugin if you have not already installed it. Eclipse is including it since version "Indigo" 3.7, for older versions follow instructions at http://eclipse.org/m2e/.
- Import the Infinispan maven project. Select File -> Import in your eclipse workbench. Select the Existing Maven Project importer.
- Select the root directory of your Infinispan checkout.
- Select Infinispan modules that you want to import.
- Finally, from Infinispan 5.0 onwards, annotation processing is used to allow log messages to be internationalized. This processing can be done directly from Eclipse as part of compilation but it requires some set up:
- Open the properties for infinispan-core and locate Annotation Processing
- Tick Enable project specific settings
- Enter target/generated-sources/annotations as the Generated source directory
Code Formatting. From the menu Window->Preferences-> select Java -> Code Style -> Formatter. Import formatter.xml
Code template. From the menu Window->Preferences-> select Java -> Code Style -> Code Templates. Import codetemplates.xml
As some modules use Scala, it's worth installing the Scala tools.
IntelliJ's built-in Maven support is the best way to go. From IntelliJ 9 onwards, this is a robust and reliable mechanism to import a project from Maven.
- Create a new project in IntelliJ
- And choose to import the project from an external model
- When asked, point the wizard to the directory created when you cloned the repository
- Make sure that the check-boxes for "Search for projects recursively" and "Create module groups for multi-module Maven projects" are checked.
- Just follow through the rest of the steps in the wizard and you're good to go.
- Finally, from Infinispan 5.0 onwards, annotation processing is used to allow log messages to be internationalized. This processing can be done directly from IntelliJ as part of compilation but it requires some set up:
- Go to "Preferences/Compiler/Annotation Processor" and click on Enable annotation processing
- Add an annotation processor with "Processor FQN Name" as org.jboss.logging.LoggingToolsProcessor
- In "Processed Modules", add all modules except the root and the parent modules.
IntelliJ has built in Scala support, just make sure the Scala module is installed.
IntelliJ related code style jar is at idea-code-style.jar
Infinispan uses Jenkins on Cloudbees for continuous integration. Jenkins polls GitHub for updates and runs whenever updates are available. For more information view the project site.
Infinispan uses TestNG for unit and functional tests, and all Infinispan tests are run in parallel. For more information see the Test Suite chapter; this chapter gives advice on writing tests which can safely execute in parallel.
Infinispan uses the K&R code style for all Java source files, with two exceptions:
- use 3 spaces instead of a tab character for indentations.
- braces start on the same line for class, interface and method declarations as well as code blocks.
In addition, sure all new line characters used must be LF (UNIX style line feeds). Most good IDEs allow you to set this, regardless of operating system used.
All patches or code committed must adhere to this style. Code style settings which can be imported into IntelliJ IDEA and Eclipse are committed in the project sources, in ide-settings.
Ensure correct spelling in code, comments, Javadocs, etc. (use American English spelling). It is recommended that you use a spellchecker plugin for your IDE.
All source files must have up-to-date license headers as described in Copyright Ownership and Licenses. Never remove existing headers or copyrights.
Please ensure any commit comments use this format if related to a task or issue in JIRA. This helps JIRA pick out these checkins and display them on the issue, making it very useful for back/forward porting fixes. If your comment does not follow this format, your commit may not be merged into upstream.
Infinispan offers both programmatic configuration and XML configuration. For more information read the Configuration chapter.
From Infinispan 5.0 onwards, Infinispan uses JBoss Logging to abstract over the logging backend. Infinispan supports localization of log message for categories of INFO or above as explained in the JBoss Logging guidelines. As a developer, this means that for each INFO, WARN, ERROR, FATAL message your code emits, you need to modify the Log class in your module and add an explicit method for it with the right annotations. For example:
And then, instead of calling log.info(...), you call the method, for example log.anInformativeMessage(param1, param2). If what you're trying to log is an error or similar message and you want an exception to be logged as cause, simply use @Cause annotation, example:
The last thing to figure out is which id to give to the message. Each module that logs something in production code that could be internationalized has been given an id range, and so the messages should use an available id in the range for the module where the log call resides. Here are the id range assignments per module:
|Module name||Id range|
|core||1 - 1000|
|tree||1001 - 2000|
|bdbje cache store||2001 - 3000|
|cassandra cache store||3001 - 4000|
|hotrod client||4001 - 5000|
|server core||5001 - 6000|
|server hotrod||6001 - 7000|
|cloud cache store||7001 - 8000|
|jdbc cache store||8001 - 9000|
|jdbm cache store||9001 - 10000|
|remote cache store||10001 - 11000|
|server memcached||11001 - 12000|
|server rest||12001 - 13000|
|server websocket||13001 - 14000|
|query||14001 - 15000|
|lucene directory||15001 - 16000|
|rhq plugin||16001 - 17000|
|cdi integration||17001 - 18000|
|You will need to enable annotation processing in order to be able to compile Infinispan and have the logger implementation generated.|