Main | Next page »
Monday Feb 08, 2010

Version 2.0.2 announcement

We are currently working on the next Release 2.0.2 of the Imixs JEE Workflow Engine. The new release will support JEE6 and Glassfish 3. It includes also extended Rest Service API and some additional bug fixes. See the Issue tracker for more details or check out the current Snapshot Sources.

Friday Jan 29, 2010

Glassfish & OpenID - JSR-196 with OpenID4Java

Imixs supports now a new Login Module which enables JEE Web Applications to authenticate against OpenID Providers. 

You can test a Imixs Workflow Application using your own Google Account or any other OpenID Account on the ShareYourWork Online Workflow Plattform.

Read details about this Authentication Module for Glassfish here.

Tuesday Dec 08, 2009

Comparsion of JBPM and Imixs Workflow

If you take a closer look at the Imixs Workflow Project you may ask yourself where the project is different to other Workflow Engines like JBoss JBPM. So I will try to do a short comparison of JBPM and Imixs Workflow. This comparison is not in technical detail but it should give an overview about the goals the two open source projects. First I want to point out that the Imixs Workflow and JBPM are not rivals in the BPM market. Both projects are open source and both try to find solutions for similar but not equal problems in business process management.

In general JBPM and Imixs Workflow follow different goals in the area of business process management. Where JBPM is more focusing on the technical aspects of a workflow, the Imixs Workflow try to support the users needs during a business process. JBPM gives you - as a developer - the possibility to control the flow (workflow) in a business process. You can provide the engine with implementations which takes care about the current state of a process instance and you can implement event handlers to control the transition from one state to another.
The Imixs Workflow tries to provide the end-user with informations about the running tasks and the engine take care about typical functionality of a human based worklfow management system.
So lets begin with the Imixs Modeler. With this technical modeling tool you describe a business process mostly started by a user. In each transition (WorklfowActivity) you describe what should happen with the process instance. Therefore the Imixs Modeler provides a set of WorklowPlugins which implement typical workflow functions like:

  • Email notification (e.g. when a new task was started)
  • Process documentation (what happens during a workflow of a process instance)
  • Access Control (who should be able access or modify a process instance)
  • Creation of Versions of a process instance
  • ...and so on..

The Imixs Worklfow Plugins are comparable to JBPM ActionHandlers. But the goal of the Imixs Workflow project is to provide precise implementations of these functions.
So for example you can use the Imixs Modeler to configure a email notification



The org.imixs.workflow.jee.plugins.MailPlugin will then read this configuration during a process step and will perform sending a SMTP Mail Message.

Or another example is the workflow History. This allows you to describe what happens to a process during the editing by the users. This workflow history can be displayed by an application to document the process flow.



As you can see these are less technical aspects and there is one of the differents to JBPM which is more answering the question how technical modules play together during a workflow transition. The Imixs Workflow is more focusing on human need during a business process.

But one of the most important features of the Imixs Workflow is the access control of a process instance. You can define in each transition who can read or modify the process instance (workitem).



These settings will be processed by the org.imixs.workflow.plugins.AccessPlugin and mapped to the data management used by the workflow application.
An typical scenario for this feature is a publishing process fully controlled by the workflow engine. Imagine you have a document which is edited by a team of web-authors. This document has a read and write restriction so only the editor-team is able to read or modify the document. When the document goes through a publishing process a chief-editor can publish the document to the internet. Now the workflow engine release the read restriction and restrict the write access to a chief-editor team. So as a result now this document is readable by anonymous web users but only editable by the chief-editor. The hole functionality is completely controlled by the workflow engine and the model description. There is no need to implement this behavior inside the application.

So you can see the Imixs Workflow is more focusing what an actor in a business process can do with a document or what should happen with a document.

To get all this functionality into your application you need an implementation of an Imixs Workflow Management System. I am talking about Workflow Management System and not about Workflow Engine. This is because the Engine is only responsible for the flow of a workitem and not for the access and representation from a end-user-view.

As you can see on our project site the Imixs project consists of different parts and libraries. There is the Imixs API which is a basic Workflow Framework implemented in Java, the Imixs XML library which is providing xml client functions for WebServices or Rest Services. And the Eclipse based modeler to describe the technical model details like email messages or the versioning of a document.

All parts are highly extensible. Also the Imixs Modeler allows to implement an application specific plugin and control elements.
But if you want start with the Imixs Workflow "out of the Box" the Imxis JEE Workflow is the most interesting part of the project. This is a full featured workflow management system based on the JEE5 spec. This implementation allows you to control any business process in any kind of JEE/Java application. You can check out the "imixs-workflow-jsf-sample" which is a workflow demo application and also a good starting point to begin an individual workflow app.

There is a tutorial available which explains how all parts of the JEE Implementation fit together.
http://workflow.imixs.org/roller/imixsworkflow/entry/building_a_imixs_workflow_webapp

As I explained at the beginning I don't want to go in technical details but give an overview what the Imixs Workflow is in different to JBPM. If you have any comments please let me know.

Tuesday Dec 01, 2009

Imixs Workflow JEE Lib 2.0.1 released

Today the new version 2.0.1 of the Imixs Worklfow JEE Library was finally released.

Read more about the Imixs Workflow API on the www.imixs.org Project Site.

We are starting now immediate the 2.0.2-SNAPSHOT release. One goal of this new release is support for Hibernate and JBoss APP Server.

Saturday Nov 28, 2009

Imixs Workflow API 2.0.1 released

Today the new version 2.0.1 of the Imixs Worklfow API was finally released.

Read more about the Imixs Workflow API on the www.imixs.org Project Site.

Thursday Nov 19, 2009

Imixs Modeler version 2.3.1 released!

The latest version 2.3.1 of the Eclipse based Imixs Workflow Modeler is now released.
The new version includes different bug fixes and improvements in usability like the "new Report Wizard" and a new design of the modeler perspective.

 

The new release includes also additional updates:

  • Imixs Workflow Modeler - 2.3.1.v200911181830
  • Imixs Workflow Modeler Integration Plug-in - 2.2.7.v200911181830
  • Imixs Workflow Report Plug-in -  1.0.1.v200911181830

Read more: http://doc.imixs.org/modeler/

Thursday Nov 05, 2009

Building a Imixs Workflow Webapp - Part III.

In the first part of my tutorial I explained how to define a business model using the Imixs Workflow Modeler. The second part describes how to setup the JEE Application server. Now its time to complete the tutorial and build the workflow application!

As you have seen I spent much time in explaining the modeling process and the server configuration. The reason is that the development of the JEE Workflow application is really easy and did not take much time. I will use the Maven build and configuration tool. The Imixs Workflow project is maven based and all components are available as maven artifacts. This makes it mostly easy to setup a application in a short time. It is necessary that you are familiar with java and as the application will be a web application you should also be familiar with html, css and JSF. But you did not need to be a JEE expert! You can use the Imixs JEE Workflow as components of your application. And you did not need to modify these components as they fulfill all the requirements to a scalable and robust workflow management system.

Building a new Application from a Maven archetype

When using Maven it is mostly easy to setup a new Imixs workflow project as this project provides a Maven archetype. A Maven archetype is kind of template or scaffold to build an new project. General informations about using maven in conjunction with imixs workflow can be found here .

Next I will explain how you can setup a new workflow project with Eclipse and Maven

This tutorial assumes that you are working with Eclipse IDE and you have installed the Eclipse Maven2 Plugin. You can also setup a new project  using the maven standard command line tool with any other IDE. The usage of the maven command line tool will be explained on the Imixs JSF Tools Project site. Additional Informations about using Imixs Workfow with Maven can be found here.

 

Adding the java.net Repository Index

The Imxis Workflow Project is hosted on java.net . So first you should make sure that the java.net Maven repository is listed in your Eclipse Repository View. You can check the configured Maven repositories when you open the Eclipse view "Maven Indexes"

If the java.net Maven repository is not listed there you can add a new maven repository.

Click "Add Index" to add the java.net Maven repository 'http://download.java.net/maven/2/'

It can take some time until the nexus indexer have updated the repository index.

Create a new Project

Now you can create a new Project from the Imixs archetype.

Click "File->New->Project" and select the Maven Project Wizard

Next page in the wizard click next to choose an Maven Archetype from one of the repositories:

The Nexus Catalog provides you with all Archetypes provided from the Maven repository locations. To find the Imixs JSF Sample Archetype enter "org.imixs" in the filter input filed:

select the imixs-workflow-jsf-sample-archetype and klick next.

On the following wizard page you can specify the Group and Artifact ID of your new project and also configure additional project settings. I use "com.mycompany" as a Group Id and "MyWorkflowApp" as the artifact Id.

The Imixs JSF Sample Archetype provides three property values which allows you to configure your project setup. These settings are used to configure the security realm and the database connector which I have configured in Part II. of this tutorial. It is possible to change these settings afterwards but you are much faster if you specify this right properties during the creation process.

Complete the project setup

After all settings are completed click finish to create and setup the new JSF Workflow project. Maven will create a new Multi-Module Project containing all necessary parts of a JEE Application!

Unfortunately there is a bug in the Eclipse Maven plugin that prevents file filtering and so the project folders of the EJB, Web and EAR Moduls stay called e.g. _rootArtifactId_-web. (See MNGECLIPSE-1054). In the 1.0.0 relase of the Eclipse Maven Plugin this bug will be fixed. But I will show which steps are necessary to fix the wrong project paths.

After you have create your workflow application you will see the following eclipse project structure.

 

Looks good but when you open the parent node "MyWorkflowApp" you will see that the subfolders are not correct named. 

 

"__rootArtifactId__" should be replaced in "MyWorkflowApp". But this is currently not done by the Maven Plugin.

So you need to replace the folders manually in "MyWorkflowApp-ear", "MyWorkflowApp-ejb" and "MyWorkflowApp-web"

After that you have to fixup the pom.xml file in the parent project. Open the pom.xml and remove the old named modules listed there with the "__rootArtifactId__" präfix:

 

So thats it. Now you can build your workflow application. Run the maven context command "run as -> maven install"

 

You will the the BUILD SUCCESSFUL message in the console output.

To test this application you can deploy your application in your glassfish server by the application. You can find the new Build in your Eclipse Workspace in "MyWorkflowApp/MyWorkflowApp-ear/target/MyWorkflowApp-ear-0.0.1-SNPSHOT.ear" and also in your local maven repository (~/.m2/)

 

After you have deployed your application you can synchronize your workflow model created in part I. of this tutorial.

Use the SyncType "Web Servcie (Multipass)"

 

Make sure that the WebService enpoint is entered correctly. (You can test the WorkflowModel webserice from the glassfish console)

 

Congratulations you are finished! Now you are ready to run your Imixs web workflow application!

http://localhost:8080/myexample/pages/workflow/workitem.jsf


Sunday Sep 27, 2009

Java.net has approved and published the Imixs Workflow Project

Java.net has finally approved and published the Open Source Project Imixs Workflow.

The project started in the incubator of dev.java.net before three years and evolved its status now into the main projects listed on dev.java.net in the Java Enterprise community.

Project Directory Listing URL: Imixs Workflow
Project Space URL: http://imixs-workflow.dev.java.net

Tuesday Sep 08, 2009

Building a Imixs Workflow Webapp - Part II.

In the first part of my tutorial I explained how you define a business model using the Imixs Workflow Modeler. This part concerns about the setup of your application server on which you can run the workflow application later. I will describe the setup of Suns Application Server Glassfish which is common running a JEE application. But you can also use a different JEE application server.

From the point of view of a workflow management system (WfMS) the application server is responsible for two important things: the authentication of a user and for saving workitems (a running process instance) into a database. As the Imixs JEE Workflow components are based on the JEE5 specification this can be configured outside of our application using the application servers admin console. Next I will describe the two configuration steps.

Setup a Security Realm

To authenticate and authorize users to work with the Workflow application it is necessary to define a Security configuration. This is also called a Security realm. You can use and configure any authentication framework supported by your application server environment. But for testing I use a simple file based security Realm. Follow the steps below to setup a new security realm named "imixsrealm" in your glassfish server:

  1. start admin console -> http://localhost:4848/asadmin   
  2. navigate to  Configuration->Security->realms
  3. add a new file realm named "imixsrealm"
  4. choose the class Name "com.sun.enterprese.security.auth.realm.file.FileRealm"
  5. Set the JAAS Context to "fileRealm"
  6. Set the Key File to a new File name. e.g. "imixskeyfile"
  7. press OK to create the new realm.

 

The name "imixsrealm" will be used by my workflow application to select the security configuration.

One part of the security realm is to authenticate a user who tries to access my application. The other part is to authorize a user and grant access to the workflow application. Therefor each user account needs to be owner of one of the Imixs security Roles defined by the Imixs JEE Workflow System. The security roles are mapped by a application to different access groups. So you need now to define different users assigned to different groups used by your application.

To add or mange a user open the new realm configuration and click on button "manage users"

I add the following test accounts and groups:

UserID  Group  Description 
Manfred  IMIXS-WORKFLOW-Manager
This user will have maximum access 
Eddy
IMIXS-WORKFLOW-Editor
This user can edit allworkitems
Anna
IMIXS-WORKFLOW-Author
This user will be allowed to create workitems and edit his own
Ronny
IMIXS-WORKFLOW-Reader
This user will be only allowd to read workitems

 

Setup a Database connection

The next step is to setup a Database connection which can be used by your workflow application to store the workitems created and modified by users into a database. Again - as the Imixs JEE Workflow depends on the JEE5 specification the application is independent form a specific database vendor. I mostly like the MySQL Database, but you can use any other database system. The JEE database connection is based on the JDBC standard and each connection defined by a server will be named unique by the JNDI Name. In my case my application expects a JDBC ressource with the name "jdbc/workflow-db".

To setup a new Database connection for MySQL in the glassfish server console follow these steps.

  1. start admin console -> http://localhost:4848/asadmin   
  2. navigate to   Application Server  >  Resources  >  JDBC  >  Connection Pools
  3. click "new" to create a new database source
     - name: your database name (e.g. "workflowdb")
     - resource type : javax.sql.DataSource
     - Database Vendor : MySQL
  4. click "next". Now you can configure necessary properties depending on your database setting:
     - DatabaseName: "workflowdb"
     - URL: "jdbc:mysql://localhost:3306/workflowdb"
     - Password: "*****"
     - User: "root"
  5. click "finish" to create the new connection. You can test the connection using the "ping" button in the configuration page. (Note: it is necessary that if you use MySQL place the MySQL jdbc driver (mysql-connector-java-5.1.7-bin.jar) into the folder : [glassfish-install]/domains/domain1/lib/ext/ )

 

Now create a new JDBC Resource with the Name "jdbc/workflow-db"

  1. Navigate to "Application Server  >  Resources  >  JDBC  >  JDBC Resources"
  2. click "new" to create a new resource
     - jndiName: jdbc/workflow-db
     - PoolName: workflowdb (this is the name of the database connection created before)

 

Now that we have setup our application server I am ready to build and deploy my workflow application.

Continue with Part III. ...

Building a Imixs Workflow Webapp - Part I

This Tutorial shows how to build a web based workflow application using the Imixs open source workflow framework. As the Imixs workflow project gives you a powerful technology building a business process management system (BPMS) it is mostly easy to setup a new web application without spending to much time into development. Its time to focus on the business process and your customers needs!

The Imixs Workflow Project is open source and so the project gives you the possibility to customize your workflow management system as you would mind. There is a lot of additional documentation about the different technologies and also a discussion forum where you can ask any question. So don't worry about your plans to develop a strong, scalable and robust workflow management system (WFMS) with Imixs Workflow.

The Tutorial consist of three parts.

  • Part I. - shows the creation of a workflow model. The workflow model is the blueprint where you describe how your business process should work. You can use the Eclipse based graphical Imixs Workflow modeler to develop a Imixs Workflow model.
  • Part II. - concerns about the setup of your application server which is responsible to authenticate users and store workitems (a running process instance) into a database.
  • Part III. - will show you how to build and deploy the web application. This is mostly easy as you can use Maven to setup a scaffold in a few seconds which will provide you with a typical web application project based on the latest JEE/JSF Technology. You can use the scaffold to start further development or just start you own implementation. Its up to you.

The hole tutorial will take less than 15 minutes. So I suggest you to check it out!

Creating a Workflow Model

To start this tutorial I will explain how you can create a new Workflow Model which describes your business process. This is the typical first step in business orientated development. And this is also that part which your customer will be able to follow best as this step is more business orientated and less technical.

The Trouble Ticket Workflow

In this Tutorial I will develop a "Trouble Ticket Workflow System". A trouble ticket system (also called issue tracking system or incident ticket system) is based on a business process that manages and maintains lists of issues, as needed by an organization. Trouble Ticket Systems are commonly used in an organization's customer support call center to create, update, and resolve reported customer issues, or even issues reported by that organization's other employees.

A ticket is the "workitem" managed by your application which contains all necessary informations about the reported customer issue . 

In my example scenario I will design the workflow very simple to demonstrate the principle and basic concepts of the Imixs Workflow:

  1. A customer service operator receives a telephone call, email, or other communication from a customer about a problem. The operator creates a new issue in the Trouble Ticket system. The status of our workitem is now "open"
  2. Next a member of the technician team verifies that the problem is real, and not just perceived. The technician will also ensure that enough information about the problem is obtained from the customer. The technician accepts the ticket or reject it. An accepted Ticket will change the status of the workitem into "in progress".
  3. As work is done on that issue, the system is updated with new data by the technician. Any attempt at fixing the problem should be noted in the issue system.
  4. After the issue has been fully addressed, it is marked as solved in the issue tracking system and the ticket will be closed. Status "closed" 

This is a BPMN diagram from the workflow which shows the process flow:

 

To create this BPMN diagram I use the Eclipse BPMN Modeler which is a nice and easy to use modeling tool based on eclipse.

Using the Imixs Modeler

In the next step you create a technical model of the business process. To create a new Imixs workfow model I use the Eclipse based Imixs Workflow Modeler. The Imixs Workflow Modeler is used to describe the technical flow of a workflow. You can configure a lot of application specific behavior within this tool which will reduce the time for coding the application. The Imixs Workflow Modeler can be installed very easy using the Eclipse Update Manager. If you have not yet installed the Imixs Modeler follow this installation guide.

From the Eclipse IDE you can crate a new Imixs model file to store the workflow model. A Imixs model file has the file extension ".ixm".

You can create you new Model file in the /src/ folder of any eclipse  project. Create a new folder /workflow and create a model file "model.ixm". Or you can use the New Wizard or simply create a empty file "model.ixm".
When you open this file you see the Imixs Workflow Editor:

 

Now you can create a new Process Group called "ticket" and add three Process Entities described in your bpmn business model:

  • new Ticket
  • in process
  • closed

You will find a full description at: how to model a business process on the IX Modeler project Page.

After all you model can look like this:


 

If you don't want to create the model by yourself you can download the complete model file from here.

Now the first Part of our Tutorial is finished. Continue with Part II.

Saturday Jul 25, 2009

Migration to new Imixs Workflow JEE API

If you migrate form the ix-workflow project to the new imixs-workflow project it is not posible to redeploy with the new JEE Implementation into an existing EJB / EAR module. 

So I recommand to follwo these steps:

  1.   backup the entities form you exsiting Imixs Worklfow Application with the new (!) org.imixs.workflow.jee.adminclient.web 1.4.3 using the Export Feature.
  2. Take care about the new persistence unit used in the persistence.xml
    org.imixs.workflow.jee.jpa
  3. Redeploy you new project with the persistence.xml option:
    <property name="toplink.ddl-generation"
                    value="drop-and-create-tables" />

  4. Reimport you backupfile with the new imixs WOrkflow AdminClient Tool

Thursday Jul 16, 2009

New! Imixs Workflow Project

I am proud to announce that we started the new Open Source Workflow Project Imixs-Workflow on dev.java.net. This project arise from the ix-workflow project we developed about for more than 3 years. But the new project is much more easy to use. We developed a bunch of simplifications in the Workflow API so the hole project is now much easier to integreate. I would be happy if you can give me some feedback to that project on the project home page.

I will provide a short video next time to show how easy it is building workflow applications based on the API.

Saturday May 30, 2009

Database Migration Derby -> MySQL

If you have started you workflow project using the build-in Derby Database from Glassfish you maybe can run into a performance problem if you manage a lot and complex of Data. This is because Derby is not so scalable in managing complex SQL statements like other Database Management Systems. In such a case you can easily migrate your workflow system form Derby to MySQL which is much more scalable.

Follow these steps to migrate data in a running system

  1. Start your Derby DB and Glassfish Server
  2. Make sure that your Workflow System is up and running
  3. Switch to the IX JEE Admin Client.
  4. Connect to the EntityPersistenceManager from your Workflow Instance
  5. Start a export using the default EQL Statement. This will export all existing Data of your workflow system into a file
    >SELECT wii FROM Entity wii



    If the export did not succeed a reason can be the HeapSize of your Glassfish Server instance. You can increase the default HeapSize from 512m to 1024m using the Glassfish Admin Console.
    Go to : Applicationserver->JVM Settings -> JVM Options
    and change -Xmx512m into -Xmx1024m

  6. Undeploy your Workflow Instance
  7. Shutdown your Derby Database
  8. Setup a new MySQL Database and create a new JDBC Connection Pool using the Glassfish Console
  9. Now you can switch the JDBC/Ressource of your Workflow System from your Derby Database to your new MySQL Database
  10. Deploy your Workflow Instance again - this will generate the necessary Tables in your new MySQL Database
  11. Optionall : after deplyoment you can setup Entity Index Fields manually if necessary  
  12. Import your Data form the Export File you generated in Step 5.

Thats it!

If the import process fails on MySQL check the following:

PacketTooBigException

If you got the Excepiton:

com.mysql.jdbc.PacketTooBigException: Packet for query is too large

you should change the max_allowed_packet setting in your MySQL server for the import process

  1.  Open your MySQL console
    >mysql -u root -p
  2. Change the max_allowed_packet setting
    >SET GLOBAL max_allowed_packet=3000000000;
  3. Restart your Glassfish Server (not the MySQL Database!)
  4. Reimport your data
  5. Restart you MySQL Server and Glassfish Server to reset the max_allowed_packet settings.

PersistenceException

If you got the Exeption:

javax.persistence.PersistenceException: Exception [TOPLINK-4002] (Oracle TopLink Essentials - 2.0.1 (Build b09d-fcs (12/06/2007))): oracle.toplink.essentials.exceptions.DatabaseException
Internal Exception: com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'DATA' at row 1

MySQL tells you that the BLOB field is to small to store the data. This is because MySQL generates per default a SmallBlob (64K) for your Data Fields in the Entity Table. You can change the Blob type after the deplyoment of your Workflow Instance :

  1. Open your MySQL console
    >mysql -u root -p
  2. Connect to to your Database
    >USE mydatabase;
  3. Change the BLOB Type to LONGBLOB (4GB) or MEDIUMBLOB (16MB)
    >ALTER TABLE Entity CHANGE DATA DATA MEDIUMBLOB NOT NULL;

Sunday Apr 05, 2009

New Version of IX Modelers

The new version of the IX Modeler for Eclipse is now available!

The new relase 2.2.9 of the Basic module and  2.2.6 of the Integration module includes a lot of enhancements of the user interface. The management of Process and Activity properties is now extended by a new property editor concept. All properties are now managed using the "Tabbed Properties View Extension Points". This allows you to extend the IX Workflow Modeler in your Software projectes much faster as you can now use the eclipse standard extention point for tabbed properties.

The new version was tested with Eclipse 3.4.2 for Windows and Linux.

 


Wednesday Jan 21, 2009

Licensing of Imixs IX OpenSource Workflow

As we were often ask about the licensing of of the Imixs IX OpenSource Workflow which is subject to the General Public License (GPL) I want to give you today a short idea how your individual Software project is affected form this license.

Assuming that you plan to develop an individual software system using the Imixs Workflow System you have to take care about the subject of GPL. But since your software project is no workflow management system like the Imixs IX Workflow itself, there is no reason to worry about the GPL.
In contrast if you enhance or modify components of the IX Workflow Implementation or you implement a derived unit you are constrained to leave this code also under GPL.
Our goal is to avoid that someone restrict the purpose of the IX Workflow Software. Everyone is free to use the Imixs IX Workflow as free software in the manner of the Free Software Foundain (http://www.fsf.org/).

So we appreciate everybody who plan to use the IX Workflow in an individual Software Project. You be bound to inform your users and customer that the Imixs IX Workflow is fee software under GPL. This means that he will receive also the source code (of the Imixs IX Workflow) or can get it if he want it. He can change the software or use pieces of it in new free programs.
If you enhance the Imixs IX Workflow you are bound to leave this code again under GPL and share your experience with the community.

So we did not restrict you in your freedom to develop software using the IX Workflow. We also did not restrict your freedom to distribute your software or charge for service if you wish.
Free Software is about to exchange experience and knowledge, not to restrict other people in there freedom to use it.