JADE (programming language): Difference between revisions
Small WP:COPYEDIT WP:EoS clarify. Adds: MOS:COMMENTs, WP:CATEGORY. |
Updated article: removed outdated maintenance tags, updated History section to reflect JADE 2025 as current release, removed Windows Mobile/dial-up references, updated SQL Server reference to modern versions, removed unsourced citation-needed tag, added secondary source citations, improved portability section |
||
| Line 1: | Line 1: | ||
{{Short description|Software development and deployment platform}} | {{Short description|Software development and deployment platform}} | ||
{{About|the end-to-end development environment|the Java middleware|Java Agent Development Framework|the Pug (formerly Jade) Javascript templating engine|Comparison of web template engines}} | {{About|the end-to-end development environment|the Java middleware|Java Agent Development Framework|the Pug (formerly Jade) Javascript templating engine|Comparison of web template engines}} | ||
{{Use dmy dates|date=June 2014}} | {{Use dmy dates|date=June 2014}} | ||
{{Infobox programming language | {{Infobox programming language | ||
| Line 36: | Line 31: | ||
| influenced = | | influenced = | ||
}} | }} | ||
'''JADE''' is a proprietary [[Object-oriented programming|object-oriented]] software development and deployment platform product from the New Zealand-based Jade Software Corporation, first released in 1996.<ref>{{cite web|url=https://www.jadeworld.com/who-we-are/ |title=Jade – Who We Are |publisher=[[Jade Software Corporation]]}}</ref><ref>{{cite web|url=https://www.zdnet.com/article/jade-delivers-version-7-1/|title=Jade Software delivers Jade 7.1|publisher=[[ZDnet]]|access-date=21 December 2019}}</ref> It consists of the JADE programming language, [[integrated development environment]] and [[debugger]], integrated [[application server]] and [[object database]] management system. | '''JADE''' is a proprietary [[Object-oriented programming|object-oriented]] software development and deployment platform product from the New Zealand-based Jade Software Corporation, first released in 1996.<ref>{{cite web|url=https://www.jadeworld.com/who-we-are/ |title=Jade – Who We Are |publisher=[[Jade Software Corporation]]}}</ref><ref>{{cite web|url=https://www.zdnet.com/article/jade-delivers-version-7-1/|title=Jade Software delivers Jade 7.1|publisher=[[ZDnet]]|access-date=21 December 2019}}</ref> It consists of the JADE programming language, [[integrated development environment]] and [[debugger]], integrated [[application server]] and [[object database]] management system. Designed as an end-to-end development environment to allow systems to be coded in one language from the [[database server]] down to the [[client (computing)|clients]], it also provides application programming interfaces ([[API]]s) for other languages, including [[.NET]] framework,<ref name="dotNET">{{cite web|url=https://www.scoop.co.nz/stories/BU0905/S00125.htm|title=Scoop Independent News – JADE 6.3|access-date=21 December 2019}}</ref> [[Java (programming language)|Java]], [[C (programming language)|C]], [[C++]], and [[Web service]]s. The JADE platform is dual-[[Software license|licenced]]. For development, the free limited ''Jade Development Licence'' is provided. For deployment, a [[proprietary software]] licence mandates per-process fees. | ||
Designed as an end-to-end development environment to allow systems to be coded in one language from the [[database server]] down to the [[client (computing)|clients]], it also provides application programming interfaces ([[API]]s) for other languages, including [[.NET]] framework,<ref name="dotNET">{{cite web|url=https://www.scoop.co.nz/stories/BU0905/S00125.htm|title=Scoop Independent News – JADE 6.3|access-date=21 December 2019}}</ref> [[Java (programming language)|Java]], [[C (programming language)|C]], [[C++]], and [[Web service]]s. | |||
The JADE platform is dual-[[Software license|licenced]]. For development, the free limited ''Jade Development Licence'' is provided. For deployment, a [[proprietary software]] licence mandates per-process fees. | |||
==Language== | ==Language== | ||
In [[Syntax (programming languages)|syntax]], JADE is very similar to [[Pascal (programming language)|Pascal]]; its syntax is based on the language [[Modula-2]], which was derived from Pascal. While it includes innovations lacking in Pascal or Modula-2, it lacks certain features of other modern object-oriented languages such as [[C Sharp (programming language)|C#]] and Java.<ref name="obscure">{{Cite news |last=Toady |first=Tim |date=3 June 2009 |title=JADE: Obscure Programming Language of the Month |work=DevTopics |access-date=12 March 2021 |url= https://www.devtopics.com/jade-obscure-programming-language-of-the-month/}}</ref> | In [[Syntax (programming languages)|syntax]], JADE is very similar to [[Pascal (programming language)|Pascal]]; its syntax is based on the language [[Modula-2]], which was derived from Pascal. While it includes innovations lacking in Pascal or Modula-2, it lacks certain features of other modern object-oriented languages such as [[C Sharp (programming language)|C#]] and Java.<ref name="obscure">{{Cite news |last=Toady |first=Tim |date=3 June 2009 |title=JADE: Obscure Programming Language of the Month |work=DevTopics |access-date=12 March 2021 |url= https://www.devtopics.com/jade-obscure-programming-language-of-the-month/}}</ref> JADE is able to import and run [[LINC 4GL]] programs and was initially its core role. | ||
JADE is able to import and run [[LINC 4GL]] programs and was initially its core role. | |||
===Programming model=== | ===Programming model=== | ||
Like all of the other popular programming languages used to create database-driven software, JADE is fully [[Object-oriented programming|object-oriented]]. JADE was designed to have all the most important features of object-oriented programming, but does not support overloading of [[Method (computer programming)|methods]] or [[Operator (computer programming)|operators]], and until Jade 2018, lacked parameterised [[Constructor (object-oriented programming)|constructors]].<ref name="obscure"/> | Like all of the other popular programming languages used to create database-driven software, JADE is fully [[Object-oriented programming|object-oriented]]. JADE was designed to have all the most important features of object-oriented programming, but does not support overloading of [[Method (computer programming)|methods]] or [[Operator (computer programming)|operators]], and until Jade 2018, lacked parameterised [[Constructor (object-oriented programming)|constructors]].<ref name="obscure"/> Classes in JADE are kept together in [[logical schema|schemas]]. Schemas serve the same purpose as [[Java package]]s or [[namespace]]s in .NET, but have a hierarchy, and inherit classes from superschemas. This becomes useful especially when programming using the [[model–view–controller]] methodology, as model classes can be put in one schema, then the controller and view classes can be built on top of the model classes in a subschema. | ||
Classes in JADE are kept together in [[logical schema|schemas]]. Schemas serve the same purpose as [[Java package]]s or [[namespace]]s in .NET, but have a hierarchy, and inherit classes from superschemas. This becomes useful especially when programming using the [[model–view–controller]] methodology, as model classes can be put in one schema, then the controller and view classes can be built on top of the model classes in a subschema. | |||
===Program structure=== | ===Program structure=== | ||
JADE programs are developed using a user interface that allows programmers to visually create [[class (computer science)|classes]] and define their properties and methods. Instead of locating methods in large files, programmers select the method they would like to edit and only the code for that particular method is displayed. Also instead of compiling all the code of a program at once, in JADE, each method is compiled individually as soon as the method is completed, meaning code can be checked immediately. | JADE programs are developed using a user interface that allows programmers to visually create [[class (computer science)|classes]] and define their properties and methods. Instead of locating methods in large files, programmers select the method they would like to edit and only the code for that particular method is displayed. Also instead of compiling all the code of a program at once, in JADE, each method is compiled individually as soon as the method is completed, meaning code can be checked immediately. All the code for a JADE application is stored in its object-oriented database. This allows for multi-user development as the database maintains [[concurrency control]], and with each piece of the code being a separate [[Object (computer science)|object]] in the database, it is often possible to [[recode]] a system while it is live and online as long as the parts of the system being changed are not in use. | ||
All the code for a JADE application is stored in its object-oriented database. This allows for multi-user development as the database maintains [[concurrency control]], and with each piece of the code being a separate [[Object (computer science)|object]] in the database, it is often possible to [[recode]] a system while it is live and online as long as the parts of the system being changed are not in use. | |||
==Features== | ==Features== | ||
| Line 61: | Line 46: | ||
===Object database=== | ===Object database=== | ||
The most striking difference between JADE and other object-oriented programming languages is that its [[object database]] is a native part of its language. For example, when creating an object in JADE, it can be created as transient or persistent. Creating an object as ''transient'' is similar to creating objects in other object-oriented programming languages – the object is simply created in memory, and then lost when the program ends. On the other hand, when an object is created as ''persistent'', when the program ends, the object will still exist and be there the next time the program starts up. So, when an object is ''persistent'' JADE automatically works in the background to store and retrieve the object in the database when necessary. Persistent objects can be distributed across multiple co-operating servers, with JADE automatically handling object caching and cache coherency. | The most striking difference between JADE and other object-oriented programming languages is that its [[object database]] is a native part of its language. For example, when creating an object in JADE, it can be created as transient or persistent. Creating an object as ''transient'' is similar to creating objects in other object-oriented programming languages – the object is simply created in memory, and then lost when the program ends. On the other hand, when an object is created as ''persistent'', when the program ends, the object will still exist and be there the next time the program starts up. So, when an object is ''persistent'' JADE automatically works in the background to store and retrieve the object in the database when necessary. Persistent objects can be distributed across multiple co-operating servers, with JADE automatically handling object caching and cache coherency. There are very few differences between manipulating transient and persistent objects so JADE makes it ''appear'' to the programmer as if all the objects in the entire database were in local memory. Most of the time, JADE's object-oriented database is used in a multi-user system, and so JADE makes it appear to the programmer as if all the objects in the database were stored in shared memory that all users connected to the system can access, even from different computers. With all of the program code centralised on the database server as well the data, all client nodes can be programmed as if they were running on the database server. JADE's database is inherently object-oriented, and [[ACID]]-compliant, and has all of the standard features such as atomic transactions, locking, rollback, crash recovery and the ability to keep one or more [[secondary database server]]s synchronised with the main database for backup, disaster recovery and performance reasons. To interoperate with relational databases for reporting, [[business intelligence]] and [[data warehouse]] purposes, JADE has provided a "Relational Population Service" since 2010 that enables automatically replicating objects from its native object-oriented database to one or more [[relational database]], supporting modern versions of [[Microsoft SQL Server]].<ref name="jadeplatform">{{cite web|url=https://www.jadeplatform.com|title=Jade Platform – A faster, clever way to build software|publisher=Jade Software Corporation|access-date=2 April 2026}}</ref> | ||
There are very few differences between manipulating transient and persistent objects so JADE makes it ''appear'' to the programmer as if all the objects in the entire database were in local memory. Most of the time, JADE's object-oriented database is used in a multi-user system, and so JADE makes it appear to the programmer as if all the objects in the database were stored in shared memory that all users connected to the system can access, even from different computers. | |||
With all of the program code centralised on the database server as well the data, all client nodes can be programmed as if they were running on the database server. | |||
JADE's database is inherently object-oriented, and [[ACID]]-compliant, and has all of the standard features such as atomic transactions, locking, rollback, crash recovery and the ability to keep one or more [[secondary database server]]s synchronised with the main database for backup, disaster recovery and performance reasons. | |||
To interoperate with relational databases for reporting, [[business intelligence]] and [[data warehouse]] purposes JADE | |||
===Three-tier model=== | ===Three-tier model=== | ||
Database-driven software | Database-driven software often uses a [[three-tier (computing)|three-tier]] methodology with applications being split into three tiers – data storage, processing and presentation. In the data storage and processing tiers, JADE systems are a collection of co-operating servers, called [[node (networking)|nodes]], and multiple nodes may be involved in each tier. Each type of node has a different name and all are capable of manipulating objects and executing business logic. A collection of nodes can be deployed across one or several machines. Database servers handle data storage and can also execute business logic, while application servers handle processing. In a three-tier model, presentation clients provide the user interface. JADE also provides a two-tier client that combines the abilities of an application server and presentation client. Traditionally, these three tiers would be created by combining three programs and having them communicate to form one system. Having the different programs separate like this has many advantages, the main one is that the system becomes scalable, that is, raising the power of the system involves simply adding more nodes. Designing a system like this gives the programmer a decision to consider every time they want to code in a particular function. They need to decide whether the function would run best on the database server, application server or presentation client before they begin coding as it will be difficult to change that decision once the functionality is coded into one of the tiers. This is different for JADE applications, as they are coded as one application from end-to-end. When creating a JADE application, the programmer can think as if they were creating a program that will be running on the database server – as if all the data storage, processing and presentation were happening on one computer. When the program runs on three tiers, JADE automatically knows to run all the code by default on the application server, and to send database requests up to the database server and user interface information down to the presentation client. However, it is very easy for the programmer to switch the location at which a particular method is run and move it to a different tier by changing the method signature. Because of this, the decision on where a particular piece of code should run can be made late in the development cycle, and refactoring code to run on different parts of the system ends up being a lot easier because of the way JADE allows end-to-end development of software. | ||
Designing a system like this gives the programmer a decision to consider every time they want to code in a particular function. They need to decide whether the function would run best on the database server, application server or presentation client before they begin coding as it will be difficult to change that decision once the functionality is coded into one of the tiers. | |||
This is different for JADE applications, as they are coded as one application from end-to-end. When creating a JADE application, the programmer can think as if they were creating a program that will be running on the database server – as if all the data storage, processing and presentation were happening on one computer. When the program runs on three tiers, JADE automatically knows to run all the code by default on the application server, and to send database requests up to the database server and user interface information down to the presentation client. However, it is very easy for the programmer to switch the location at which a particular method is run and move it to a different tier by changing the method signature. Because of this, the decision on where a particular piece of code should run can be made late in the development cycle, and refactoring code to run on different parts of the system ends up being a lot easier because of the way JADE allows end-to-end development of software. | |||
===Types of clients=== | ===Types of clients=== | ||
| Line 87: | Line 60: | ||
====JADE Forms==== | ====JADE Forms==== | ||
JADE Forms applications are made up of forms, as the name suggests. Clients need to connect through the JADE Smart [[thin client]] or Standard Client to be able to run applications that use JADE Forms. | JADE Forms applications are made up of forms, as the name suggests. Clients need to connect through the JADE Smart [[thin client]] or Standard Client to be able to run applications that use JADE Forms. The Smart Thin Client works by connecting to an Application Server which generally does all the processing on behalf of the Smart Thin Client, meaning the thin client only needs to be responsible for displaying forms and taking input. This means the computer running the thin client does not have to be a very powerful computer, and it does not require a fast network connection as it is not loading data from the database. This is the reason they are called thin clients, as there is not a heavy requirement on computational power to run these clients. The Standard Client is just the Smart Thin Client combined with the Application Server on one machine. In this case, the node running the client does all of the processing as well as the presentation. Standard clients have greater demands on computational power than thin clients, as they must load data from the database as well as do their own processing. | ||
The Smart Thin Client works by connecting to an Application Server which generally does all the processing on behalf of the Smart Thin Client, meaning the thin client only needs to be responsible for displaying forms and taking input. This means the computer running the thin client does not have to be a very powerful computer, and it does not require a fast network connection as it is not loading data from the database | |||
The Standard Client is just the Smart Thin Client combined with the Application Server on one machine. In this case, the node running the client does all of the processing as well as the presentation. Standard clients have greater demands on computational power than thin clients, as they must load data from the database as well as do their own processing. | |||
The advantages of using JADE Forms include: | The advantages of using JADE Forms include: | ||
| Line 117: | Line 86: | ||
====Interoperability==== | ====Interoperability==== | ||
Along with Web services, JADE can also interface with other programs through language APIs (including .NET, Java, C/C++), DLL calls, ActiveX/COM objects and .NET assemblies. This allows other programs to access objects and execute methods, and can be used to provide a different interface to a JADE application. JADE | Along with Web services, JADE can also interface with other programs through language APIs (including .NET, Java, C/C++), DLL calls, ActiveX/COM objects and .NET assemblies. This allows other programs to access objects and execute methods, and can be used to provide a different interface to a JADE application. JADE supports a Java API, .NET Assembly integration, and an API for [[List of CLI languages|.NET languages]].<ref name="dotNET"/> | ||
===Multilingual abilities=== | ===Multilingual abilities=== | ||
JADE natively supports [[multilingual]] programs.<ref name="Witten 10–23">{{Cite journal |last=Witten |first=Ian H. |last2=Birtwistle |first2=Graham M. |last3=Cleary |first3=John |last4=Hill |first4=David R. |last5=Levinson |first5=Danny |last6=Lomow |first6=Greg |last7=Neal |first7=Radford |last8=Peterson |first8=Murray |last9=Unger |first9=Brian W. |last10=Wyvill |first10=Brian |date=July 1983 |title=Jade: a distributed software prototyping environment |url=https://dl.acm.org/doi/10.1145/850742.850744 |journal=ACM SIGOPS Operating Systems Review |language=en |volume=17 |issue=3 |pages=10–23 |doi=10.1145/850742.850744 |issn=0163-5980|doi-access=free }}</ref> It does this in several ways: | JADE natively supports [[multilingual]] programs.<ref name="Witten 10–23">{{Cite journal |last=Witten |first=Ian H. |last2=Birtwistle |first2=Graham M. |last3=Cleary |first3=John |last4=Hill |first4=David R. |last5=Levinson |first5=Danny |last6=Lomow |first6=Greg |last7=Neal |first7=Radford |last8=Peterson |first8=Murray |last9=Unger |first9=Brian W. |last10=Wyvill |first10=Brian |date=July 1983 |title=Jade: a distributed software prototyping environment |url=https://dl.acm.org/doi/10.1145/850742.850744 |journal=ACM SIGOPS Operating Systems Review |language=en |volume=17 |issue=3 |pages=10–23 |doi=10.1145/850742.850744 |issn=0163-5980|doi-access=free }}</ref> It does this in several ways: | ||
* Strings can be marked as ''translatable'', which means they will | * Strings can be marked as ''translatable'', which means they will change depending on the current language. | ||
* Many versions of the same form can be created to suit each language. This means interfaces can look entirely different from one language to the next. | * Many versions of the same form can be created to suit each language. This means interfaces can look entirely different from one language to the next. | ||
* The developer has methods available to access the current [[Locale (computer software)|locale]] of the system and so they can implement their own language-dependent features. | * The developer has methods available to access the current [[Locale (computer software)|locale]] of the system and so they can implement their own language-dependent features. | ||
JADE will switch to the language it detects on a system automatically, if that language is provided on the system.<ref name="Witten 10–23"/> | JADE will switch to the language it detects on a system automatically, if that language is provided on the system.<ref name="Witten 10–23"/> | ||
===Portability=== | ===Portability=== | ||
{{As of|2025}}, JADE applications run on Windows only; Linux support was ended. JADE | {{As of|2025}}, JADE applications run on Windows only; Linux support was ended. JADE also supports deployment to cloud environments and scales on-premise or in the cloud.<ref name="jadeplatform"/> | ||
==Code examples== | ==Code examples== | ||
| Line 136: | Line 104: | ||
These are JADE [["Hello, World!" program]]s: | These are JADE [["Hello, World!" program]]s: | ||
<!-- In the examples below, all HTML markup should be replaced with Wiki syntaxhighlight markup, as in the article on Modula or Pascal. --> | <!-- In the examples below, all HTML markup should be replaced with Wiki syntaxhighlight markup, as in the article on Modula or Pascal. --> | ||
helloWorld(); | |||
<span style="color: #0000ff">begin</span> | |||
<span style="color: #880088">app</span>.msgBox(<span style="color: #ff0000">"Hello, World!"</span>, <span style="color: #ff0000">"Hello, World!"</span>, <span style="color: #880088">MsgBox_OK_Only</span> + <span style="color: #880088">MsgBox_Information_Icon</span>); | |||
<span style="color: #0000ff">end</span>; | |||
or | or | ||
helloWorld(); | |||
<span style="color: #0000ff">begin</span> | |||
<span style="color: #0000ff">write</span> <span style="color: #ff0000">"Hello, World!"</span>; | |||
<span style="color: #0000ff">end</span>; | |||
==History== | ==History== | ||
JADE was originally conceived by Sir [[Gilbert Simpson]] and is | JADE was originally conceived by Sir [[Gilbert Simpson]] and is developed by the Jade Software Corporation, a New Zealand-based software company founded in 1978.<ref>{{cite web|url=https://www.jadeworld.com/who-we-are/|title=Jade – Who We Are|publisher=Jade Software Corporation|access-date=2 April 2026}}</ref> The first version of JADE was JADE 3, released in September 1996. Subsequent major releases followed a year-based naming convention, with versions including JADE 2018 (which introduced parameterised constructors), JADE 2020, JADE 2022, and JADE 2024. The current stable release is JADE 2025 (version 2025.0.01 R1).<ref name="jadeplatform"/> | ||
The first version of JADE was JADE 3, released September 1996. | |||
The current | |||
==See also== | ==See also== | ||
| Line 168: | Line 129: | ||
==External links== | ==External links== | ||
* {{Official website|www.jadeworld.com}} | * {{Official website|www.jadeworld.com}} | ||
* [https://www. | * [https://www.jadeplatform.com Jade Platform – Developer Centre] | ||
* [https://web.archive.org/web/20060319105508/http://www.enterprisenetworksandservers.com/monthly/art.php?1899 JADE 6.1 delivers data replication to Microsoft SQL Server] | * [https://web.archive.org/web/20060319105508/http://www.enterprisenetworksandservers.com/monthly/art.php?1899 JADE 6.1 delivers data replication to Microsoft SQL Server] | ||