The JADE Open Framework is a rapid application development (RAD) tool for the J2EE (Java 2 Enterprise Edition). Its purpose is to allow Java developers to create high quality, consistent and maintainable database driven web applications and web sites quickly and easily.
For more information see The JADE Home Page
You can download JADE from Source Forge
JADE will run in any J2EE compliant container and with most of the popular database management systems. In addition, we have integrated JADE with best-of-breed development and deployment tools: Dreamweaver, IntelliJ IDEA, Tomcat and MySQL to create a full-featured, open WYSIWYG development environment for creating web applications.
JADE has actually been around for quite some time. It was started several years ago as a toolbox for an Enterprise Java consulting practice. At the time we wanted to start building Java web applications for our corporate customers, but there wasn't much out there in the way of tools that wasn't vaporware. Some tools were starting to emerge, but they were poorly designed, loaded with bugs and completely proprietary. The J2EE spec was in flux at version 0.8 and IBM had a different one from Sun so we decided to stay away from that until the dust settled. The servlet spec looked pretty solid, but there wasn't enough there to really do an application (unless you like having a million System.out.printlns). We decided to build a class library of components similar to the Java AWT only for web applications. That worked out well and we were off and running.
Early on we stayed away from JSPs even after the spec firmed up because we really hated mixing Java code with HTML in-line. That is until they came out with custom tag libraries. We saw this as an opportunity to improve the JADE a lot. Any AWT or Swing programmer knows that creating a bunch of components and laying them out on a page takes quite a bit of code and that was true with JADE as well since it followed the same model. It's much easier to code a page in HTML with tags than with Java code. So we built a JSP tag library wrapper around our GUI components. That improved our productivity dramatically. But then we went a step further. We realized that potentially building a GUI painter that generated tags was much easier than a GUI painter that generated code. Somebody even noticed that the HTML design tool Dreamweaver, could be customized to work with custom tag libraries. We jumped on this and a couple of months later we had a WSYWYG drag and drop environment for our tag library. Now we started to get really, really productive.
Until that point, we were using IBM Visual Age Java for our development environment. Although it has many flaws, we considered it the best tool in a pretty pathetic field of offerings by the various Java vendors. But then IBM pretty much abandoned it for their Websphere Studio product, which we weren't particularly impressed with. It amazed us because we thought that VA Java was the only good piece of software they had in the Java / web space and they dropped it in favor of all their other stuff, which we hated. So we went shopping around for another environment and we were once again disappointed by how pathetic the offerings were. One of our developers came across IntelliJ IDEA and really liked it, but it didn't do web applications. So we combined IntelliJ with Tomcat, JADE, Dreamweaver and some homegrown utilities. Now we had a really great environment for writing the Java code, a really great WYSYWG painter for the JSPs, and a solid foundation to code from all integrated together. We started cranking out web code like it was Visual Basic. But unlike VB code, our code is built on a solid OO foundation, uses open standards and is vendor neutral.
We didn't actually ever plan on releasing JADE to the public. It was our secret weapon. But then, one of our clients asked us why we weren't using Struts by Apache. We didn't have an answer so we looked into it and found that to write the same program in Struts it takes about twice as much code as with JADE. And a lot of the extra code is of the mindless, tedious variety, which we really hate. Also to get the same functionality with Struts that is built into JADE you have to integrate and learn a whole bunch of different open source tools, all by different developers. And after all that, you end up having to code the GUI in notepad. It didn't sound too productive to us. We started thinking that we might have something here.
Then one day we went to a Microsoft.Net Studio demo. Our first impression was surprise because it looks a lot like JADE (not really surprising when you think about it because a lot of the concepts underlying both are the same). Next we were upset because it looks better then any tool that any Java vendor has come up with (at least at the demo). We figured that Microsoft understands a fundamental truth that the Java vendors don't: If you make something easy to use, people will use it. We figured that if the Java world doesn't get their act together in a hurry, Microsoft would start to win the hearts and minds of web developers and that would be it for Java. Having no desire to become Microsoft programmers we decided to release JADE as open source and at least do our small part in keeping Microsoft from taking over the rest of the world. And we actually do have something that even Microsoft doesn't. Like Dot Net Studio JADE provides everything you need to build web applications, but uses open standards, best-of-breed tools from different vendors and is open source and free of charge.
For more information see The JADE Home Page
You can download JADE from Source Forge
How would it compare to WebWork?
Had a chance to visit the project web site and took a look at the JADE "in action" videos to get a feel for the tool. I have to say I was impressed with some of the capabilities I saw. Needless to say, I've been itching for some sort of tool that will automate alot of the coding tasks required with your standard MVC architectured web site.
My question is: Are there any plans to integrate the tool with another IDE? In particular, the "Model" and "Control" parts independent of the Dreamweaver? Personally, I use the open source IDE eclipse and would love this functionality.
We are planning on integrating with Eclipse. We took a look at it and it looked promising but it has quite a few bugs. We thought we would wait a bit and see if they get it more stable before we do the integration.
One of our clients didn't want to wait for us and got JADE running in Eclipse and they seem pretty happy with it. In our experience, it doesn't work too well in Windows NT which we mostly use. I think our client uses Windows 2000 which is probably why they are happy with it.
The only thing you really lose by using an environment other than IntelliJ (besides their great U/I) is some of the items on the tools menu (Generate Model, Generate Controller and stuff like that). All that stuff can be run through a command line utility called IDETool anyway. All we do from IntelliJ is call out to the command line tool.
We've gotten JADE to work from VA Java, Visual Cafe and Borland JBuilder as well, but we thought these tools weren't as nice as IntelliJ so we didn't include integration with them "out of the box". Also, they are way too expensive.
I downloaded and tried to install. I downloaded and installed Intellij Idea 2.6 trial version sucessfully. But
JADE install always fails saying it needs Idea 2.6.
A bunch of people have had problems with the IntelliJ install.
One issue is that IntelliJ has two installs. One is a zip file and the other is an exe program. You need to install the exe version.
Another fellow had a problem with the IntelliJ install where he thought it worked, but it didn't because it got confused somehow with the JDK version. It needs JDK 1.3 and he had a JDK 1.4 on his PC which conflicted with the install. His resolution is at:
The way the install program determines where IDEA is installed via the following registry entry:
It should have a value like
If it does not, you could try tricking the install by creating this entry in the registry, and specifying the IDEA 2.6 path, then re-running the JADE install.
I downloaded and installed Intellij Idea 2.6 trial version sucessfully. But JADE install always fails saying it needs Idea 2.6.
Same as above, I downloaded dreamweaver, intellij 2.6 and installed Tomcat, but the Jade install process is still failing as it cannot find the intellij component.
I've also read the thread about the different JDK's and eliminated that problem, but I'm still no closer to getting the product to work. Is it possible to download Jade on it's own and configure it by hand?
PS. I'm trying the install on a Win2k machine with JDK1.3.1
The JADE install uses a registry key:
To figure out where IntelliJ is installed.
It should have a value like
If the IntelliJ install program didn't put it in for some reason (or if you used the zip version of the install instead of the exe version), you can get our install to run by putting in the key via regedit and pointing it to the directory where IntelliJ is installed.
If that doesn't work, send an email to jade at salmonllc dot com and one of our guys will try to help you individually.
How will this JADE framework work with Websphere
Studio Application Developer that is gradually replaceing
VAJ as developemnt tool. I understand that IBM also has its own implementation of JADE Framework for J2EE.What is the basic diffrence between IBM's implementation and your implementation of JADE excepting that yours is open source.
They aren't the same thing. We didn't even know IBM had a product called JADE or we would have picked a different name.
We had some trouble getting our JADE to run in Websphere Studio, mostly because of bugs, but that was the first released version if Websphere studio and maybe they fixed the bugs since then.
That is too bad. I was so happy that IBM released JADE as open source. You might want to consider using a different name for your framework to avoid confusion, since JADE is commonly used in IBM shops.
Cool product! Are you considering integration with Netbeans or do you know of anyone who is using it with netbeans? It would save potential users in having to invest in Dreamweaver and IntelliJ.
Also for those interested there is another similar tool called codecharge studio.....generates JSP, Servlet, PHP, ASP etc based solutions. It's worth a look, it includes a built in HTML editor amongst other things. www.codecharge.com
Will it work withour IntelliJ / Dreamweaver ?
We have used several IDEs with JADE. There are people activly using it with IntelliJ, VA Java and Eclipse. In the past we tried it out with JBuilder and Visual Cafe and it did run, but there was some problem that made us drop the tools.
We don't have an alternative for Dreamweaver because we haven't found anything else out there with that functionality, but if you don't require visual editing of the JSPs (something we consider esential), you can use any text editor.
Also you should be able to deploy JADE to any J2EE container, although different ones have different quirks or bugs that generally need to be worked through. So far, we've deployed JADE to Tomcat, Websphere, Weblogic and Silverstream.
Great to hear that there does exist a JADE integration with Eclipse. Has this version been released to the world? If so, do you know where I can find it?
Thanks for the help.
One of our customers installed JADE with Eclipse. Here are the instructions they sent me, but I haven't tried it myself. We are going to formalize this, add it to our install and add some extra tools like we did in IntelliJ over the next couple of weeks. In the mean time:
1. Download Eclipse version 2.0
2. Extract Eclipse to c:\eclipse
3. Download Sysdeo Tomcat Launcher Plugin (http://www.sysdeo.com/eclipse/tomcatPlugin.html
4. Install plugin to eclipse plugins folder
5. Create a new Java Project called JADE.
6. On the settings window choose “Use the project as source folder”
7. On the Libraries tab, add activation.jar, mail.jar, servlet.jar and jasper-runtime.jar from your Tomcat installation as External jars. This is done to resolve dependencies in the framework
8. Create new Tomcat project (eg Test) in Eclipse, using plugin for settings
9. Allow Eclipse to create an extry in Tomcat’s server.xml. The workdir is where the compiled JSPs are.
<Context path="/test" docBase="C:/eclipse/workspace/Test"
10. Click OK to create the folder structure for the web application. You should have the following folders:
a. WEB-INF/src -- java files go here.
b. Work/ -- jsps and images, and org.apache.jsp.work package for java source of compiled jsp pages. You may have to refresh from local on this package to see new compiles.
c. WEB-INF -- taglibs and web.xml
d. WEB-INF/classes -- default location for compiled jsps and classes. Updated every time a file in the WEB-INF/src directory is compiled.
e. WEB-INF/lib -- jar files for the application
11. Import JSPs and source code into Work/ and WEB-INF/src.
12. Right click on the Project and go to Properties. On Java Build Path, add the Framework Project, the path to external jars (JDBC drivers).
13. Go to Workbench->Preferences->Tomcat and set location and version of Tomcat. Add Framework and other Projects to Tomcat’s classpath. Under Tomcat->JVM settings, set the –D server.root variable under “Append to JVM Parameters”
14. You should now be able to use the Tomcat icons to start and stop the server.
15. Go to http://localhost:8080/test/work/yourpage.jsp
Is it possible to make a comparison between Struts and this framework? If yes, what are pros and cons?
Is it possible to make a comparison between Struts and >this framework? If yes, what are pros and cons?
I was looking at your documentation (briefly) and am unable to determine how this could be used as a front end to an EJB backed system. You seem to have your own query builder, etc. which would not allow me to hook it into a session bean with value object type pattern.
Your customer examples all seem to be JSP/Servlet based, with no mention of EJBs.
Is this the case?
We have a class called a BeanDataStore which will allow you to attach any bean or collection of beans to a JADE GUI page. This should work with Entity EJB's or with Session Beans using the value object design pattern.
It's a bit more code than if you run a query directly. Also with a Bean datastore you have to code a controller. Controllers are optional for simple pages that get data directly from a database.
When you create a datasource, you can specify a model for it, which can be a bean among other things. The framework will look through the bean for public get and set methods and let you automatically bind it to the GUI. When you update the BeanDataStore, it will persist the changes back to the beans, whereas with a regular DataStore it will persist back to the database. Then bean then becomes responsible for persisting the data back to the database by whatever means it uses (which is why you have to do more code).
Take a look at page 30 "Building a Datastore from a Bean" in the JADE user guide for more info.
The integration is nice and I like the AWT model for building jsp. But taking fast look at the code, I notice the jspcontroller's doGet, doPost are synchronized and they are store in user session. So every user session will get there own instance of jspcontroller. Would this be a problem in a weblogic cluster since the session have to be replicated across machines?
The only cluster we've ever had to deploy it with was using hardware to do the clustering. That was for a 1 million hit per day web site (www.fujifilm.com). It uses two Weblogic servers and the load balancing is done by a router.
Otherwise we've been fine with one server. It might work with software based clustering, but we haven't tried it so I can't say for sure.
There are numerous thing I find disterbing with a quick review of the source code.
1. the heavy use of "synchronized" (113 times most with lock)
2. the over use of Session
3. This is one that truely is concering: the use of threads in a web container.
While I think the goal of this framework is great and the IDE tools are very good, the items listed above make this framework dangerous to use. The creating threads under a container is problematic and should be avoided. The reason you use a container is for it to manage the resources to be server all users attached to it. When you create your own threads the container can not manage its resources properly.
The problem with session is the most containers keep session in RAM. Thus, the more users the more ram needed. Also, when some leaves the site what is in session stays in session until that session times out. This makes your site ripe for a denial of service attack.
Finally, the synchronized keyword should be use sparingly. Not sure why any system would need 113 synchronized code blocks.
There are other problems I see: use of absolute paths instead of relitive to the application, embeded html in none jsp-tag classes, etc.
Can someone explain why these design decisions were made?
Use of synchronized keyword
A lot of the synchronized stuff is to keep different processes from hitting shared resources at the same time and stepping on each other. It is used on pieces of code that aren't long running and so locks haven't been a problem.
Pretty much every place else we do synchronized code is a result of some bug we came across with browser/container interaction. We found that with some containers under load (10 - 20 page hits per second) we were sometimes getting unstable and unpredicatable results. Things that you wouldn't think would happen, like the same browser running the same page multiple times concurrently were happening and making the whole container unstable. We synchronized it so if the same browser hit the same page at the same time, the requests would be queued instead of concurent. It doesn't effect other users, just the one with the buggy browser and made the whole server more stable.
>Overuse of session
We do make heavy use of the user session. It's the main drawback of the approach we are using. We need to maintain handles to all our GUI components so that state is remembered from page hit to page hit and we have to store that somewhere. We made that decision early on because we wanted functionality similar to the AWT. We figured that memory is very inexpensive compared to just about everything in the enterprise development and our clients wouldn't complain. That being said, memory use hasn't been too bad. An average server requires 512 mb. Some of the bigger applications with several thousand concurrent users we've needed as much as 2 gb. So far nobody has complained. Your point about denial of service attacks is well taken, but most of the industry has that problem to one degree or another, not just us. Also, you can elect not to store a particular page on the session if you don't need to remember any state for that page.
Most of the core classes don't spawn threads.
We have a scheduler that must have one. It keeps running in the background and runs scheduled tasks at intervals. We have a message logging class that also spawns one thread that makes sure the log file doesn't get too big.
We have a datastore object that can retreve database data in a thread. That is more for Swing applications where you want to start to display the data before it has all returned to the client. By default it is turned off for server apps because it doesn't provide any value there.
We have a class called PageRunThread, where if a query will take so long to run that the browser will time out, we can configure the browser to keep requesting the page over and over again and the page can put up a percent complete indicator that changes on each hit. The thread manages a running process across several page hits and keeps everything in sync. It is rarely used, but a thread is required for this functionality and containers don't give you.
We have a couple of other utility classes where a thread speeds stuff up for a client. For example we have a mail class where your program can send an email. It launches the send mail in a thread because then the client can continue processing without waiting for the mail server to respond. After the mail is sent, the thread terminates. This is in utility classes that is rairly used and you can always call the java mail api directly.
So after that long answer, the short answer is we use threads where we need the functionality to do a task, or where we can improve response time. And generally whether or not you use a new thread for a particular task is optional.
I am exciting after I completed your tutorial, but I am disappoint when I am going to change the tomcat by weblogic. I did not find out any instruction for other application server through your user guide. Does the jade support tomcat only?
It should work with any servlet/JSP container including Weblogic. So far we have deployed JADE applications to Tomcat 4, Websphere 3.5, Silverstream and Weblogic 6.1. We have a site built in JADE getting over a million hits per day on Weblogic 6.1 at http://www.fujifilm.com
. That one was developed with Tomcat 3 but deployed to Weblogic 6. The framework has a lot of code to smooth out the inconsistencies between all these different engines so we didn't have any problems developing in one and deploying to the other.
We tried integrating with Weblogic as a development option in addition to Tomcat and there is some code in JADE that will allow that now, but we ran into some problems and we pretty much abandoned it so it's undocumented. The web application redeploy on-the-fly doesn't really work in Weblogic 6 and it takes too long to restart the server. So any time you change some code you have to wait around 30 seconds to test it. We couldn't find a work around and felt this took the "rapid" out of "rapid application development" so we stopped there. We found that Weblogic generally makes for a better production environment than Tomcat, however. It seems to run faster once it starts and appears more stable under heavy load.
Hi , All !
JADE , thanks for your interesting framework
Some question :
>The framework has a lot of code to smooth out the >inconsistencies between all these different engines
What do you mean ? Please , clarify the "inconsistencies between all these different engines" and code that you use "to smooth out the inconsistencies "
>The web application redeploy on-the-fly doesn't really >work in Weblogic 6 and it takes too long to restart the >server
Did you try using Eclipse 2.0 with JDK 1.4 "hot compilation" mode?
Does this mode solve the problem ?
And another question :
Are there any problems with "JADE and Weblogic" yet ?
Is there any maillist or newsgroups about it?
Is there any maillist or newsgroups about it?
We set up both on Source Forge. So far nobody has used them, but we monitor them each day just in case. We would prefer that people use those so there will be a central place for JADE info and a developer community can form up, but it is up to the developers and not us.
The framework has a lot of code to smooth out the >inconsistencies between all these different engines
We found that most of the J2EE containers are more or less compatible, but each one has different quirks. Whenever we find one, we put in some code to work around the quirk and then we retest in the other environments to make sure it still works. Because of this, if you use JADE it will probably be easier to switch your app to a different container without any modification because the bug fixes are in the framework and not your web app.
For example a body tag in Weblogic has to look like this:
<jade:tag></jade:tag> or it throws an error. A body tag in Tomcat 3 can look like the above or it can look like <jade:tag/> if there isn't a body. An empty body tag in Tomcat 4 that looks like <jade:tag></jade:tag> may not work right, however because it won't call the doAfterBody method of an empty body tag any more. It presents a dilema because no matter what you do, it doesn't work somewhere.
We put some code in Dreamweaver that flags it as an error if you have an empty body tag in the form <jade:tag/> because there is no work around for that in Weblogic. Dreamweaver will make you do it as <jade:tag></jade:tag>. For Tomcat 4 we put in some code so if the body tag is empty it calls the doAfterBody for you since the engine doesn't anymore. It always worked correctly in Tomcat 3 so we just made sure that it still worked.
There are a bunch of pain-in-the-neck issues like this that we have fixes for in the framework.
> Did you try using Eclipse 2.0 with JDK 1.4 "hot >compilation" mode? Does this mode solve the problem ?
We are working on Eclipse integration now. One of our clients tried it and said it worked, but we haven't done it yet so I can't guarantee it. Stay tuned for that.
> Are there any problems with "JADE and Weblogic" yet ?
None that we know of that we haven't already fixed. I think that Weblogic is actually the best deployment platform for JADE out there.
> ... We are working on Eclipse integration now ...
> ...Stay tuned for that ...
Thanks a lot , Dan,
I(We) will stay tuned
First I appreciate your team realeasing this great tool under the GPL license and second I have a few questions regarding intergration with Eclipse 2.0.
1. How soon do you plan to have the Eclipse 2.0 intergration done?
2 Will it have the same visual drag and drop features as Dreamweaver?
3. Where will all news and information regarding Eclipse intergration be located?
4. Will the Eclipse intergration be a standard plugin?
Hot swapping with JADE for the most part works fine with JDK 1.4 and Eclipse 2.0. I've had a few instances where it could not replace the code but could not determine if it was a JDK, Eclipse, or JADE issue. I hardly ever have to restart Tomcat using this configuration.
Dan, could you please provide us with more information on the way you address security in JADE.
could you please provide us with more information on the >way you address security in JADE.
We don't do much in the way of security beyond what is in the J2EE container. Typically for a web app that requires security beyond the container we code it manually.
1) Put on the session whether or not the user is logged in.
2) If they aren't and they go to a secure page, redirect them to a login page first.
It's pretty easy to code and generally it is all coded once in a base controller.
I suppose I could add a section to the user guide with some examples if people think it's an issue.
??? I am very depressed that I try in vain for tens of times
installing the JADE!The problem is the intaller repeats installation of Tomcat4.0.It seems to have fallen into a
endless loop.(After installing Tomcat successfully,the intaller force me to install it again and again!)So,I can't finish the installation of JADE Framework.Why???
PS:I installed the JADE according to the installation guide.
You must install tomcat in a path with no spaces. i.e something like c:\tomcat40 and not c:\program files\apache tomcat.
This is due to a limitation in IntelliJ in which only paths without spaces can be in the classpath.
I have noticed the problem you mentioned about the spaces.
So,I install it to a path like "c:/tomcat4.0" etc.But,the issue is still there.How can I work it out?
After tomcat is installed there should be a registry enty with the path of tomcat.
The registry entry is
HKEY_LOCAL_MACHINE\Apache\Apache Tomcat 4.0
The default value of this should be the path c:\Tomcat4.0 which you specified, if it has spaces in it, it will have problems. I have not tried it with a . in the Path. I do not think that would cause a problem though.
Hope this helps.
I find out where the problem lies at last!It is just what you mentioned about the spaces.I installed the Tomcat at the path:C:\Tomcat 4.0.Unfortunately,I didn't notice the space between Tomcat and 4.0 because it really difficult to
take notice of it at a glance.
Thank you,Fred! You are great!
I've installed everything that required and seem to be success. but when i use DreamweaverMx for develope it doesn't generate the right view for me eventhough I try with your suggession in the document .
It show "Error Tag page not found in Library ."
what should i do ?????????
Are you connected to the Internet when you're developing? Try changing the reference in taglib.tld to
or somewhere else on your server, then go to the Sun link and copy the web-jsptaglibrary_1_1.dtd file to your server.
Thanks you so much ..