Infoblazer LLC is pleased to release the XX Framework
under the LGPL open source license. Version 1.0 is available for immediate download.
The XX framework is a configurable, XML-centric implementation of the MVC development paradigm that incorporates simple and commonly used patterns of development. The framework promotes a use case oriented development approach.
A key goal of the framework project is to generate fully functioning web applications that use an open J2EE/XML/XSL approach that can easily be modified and enhanced.
The framework currently includes full automation functionality, where HTML form fields can be mapped directly to database fields for display or update without additional coding. XML files are used for configuration and XSL is used for display. Open source tools such as Hibernate and Castor are also utilized.
Some benefits of the framework are:
- Simple to use.
- Built around open web standards, including J2EE, XHTML, XML, XSL, and CSS.
- Built-in, configurable data caching and thread pooling for optimal performance.
- Integrates with web services or native java classes.
- Uses a Portal-based approach to page design, allowing easy compartmentalization of functionality.
The framework is licensed under the LGPL, and is hosted at Sourceforge.com
I think that your framework has some things in common with OpenXava
How do you can compare XXFramework with OpenXava?
I didn’t expect the new release to get posted so quickly, but I’ll try to answer some of the questions already posted.
The most obvious question, which I certainly expected (and thanks for asking) is, why another (MVC) framework?
The quick answer is, I didn’t like anything that I found out there.
The XX Framework is the culmination of my approach to Java development for the past 7 years or so. Much of the approach has changed in that time, from a completely XML focused, service oriented approach to more of a combined XML service/Object oriented approach. On many occasions (usually for new projects) I would examine the emerging frameworks. None of them ever clicked with me and seemed to involve too much configuration and coding for what I needed to get done. My philosophy is to code something only once and (,more recently anyway,) configure it with XML. I’ve been doing XSL as the display component of my apps for some time, so the framework was heavily built around XML. I eventually was able to accomplish more and more of this, and generalize all the application CRUD into XML configuration.
Regarding some similarities with existing frameworks, I was told recently that XX is similar, in goals at least, to Ruby on Rails. I am not very familiar with that project and much prefer Java anyway. But my goal is to have something in Java that is as quick and dirty as Ruby , Perl, or PHP, but with the sophistication of a Java solution. Java projects shouldn’t take months or years to implement. I believe that Struts and Tapestry are very a similar type of framework, but XX is built around XSL transformation of XML for all the display. XX seems much simpler, but of course I built it. Not begin an expert in other frameworks, I’d greatly welcome any comments regarding similarities, etc.
Regarding the killer feature, I am extremely happy with the CRUD automation component (that doesn’t sound right). Anyway, using the XML foundation, I am able to map an HTML field, via its hierarchical XML field name, to the Hibernate component and persist or read the information. I am really not aware of another framework that does this. I was most inspired by Ironspeed’s application generator for .net, but I felt that involved too much custom programming, to implement anything significant. XX involves customization, but it is done in the XML/XSL layer, which I feel more comfortable with, being more open, text based, and modifiable. In the future, I would like to do complete app generation, as much of the apps I’ve built have shown great similarities, and since the similarities are in the XML/XSL, this should be easy to generate.
There may very well be something that does exactly what XX does and better. As Holmes said, “there is nothing new under the sun. It has all been done before”. Or at least someone said that. Anyway, XX has been successful in building the apps I needed to build and I would hold them up in functionality , maintainability, and development speed to what I’ve seen in Struts or others. I am sure the other frameworks do some things much better, but we are comparing a one man effort with mature, team, sponsored projects. I would love to get some people who see things as I do on board with the project and build something really usable.
Thanks so much for taking the time to comment.
Thanks for extensive reply. CRUD automation/generation is indeed something that would be very useful. At least it will silence the rails-fanboys for a while:-)
I know about one more project trying to accomplish this, it's called Trails (there's bene posting on that tool online). Maybe you can take a look at it for inspiration?
Does anybody has realized that the CRUD approach is so RELATIONAL? Why people is not creating UI frameworks for a rich OO models? Why just the only conceived operations for an object domain are CRUD operations? Frameworks like Ruby On Rails just bring the old 4GL idea on a web environment, any of you agreed?. May be I should start my own framework.
I'd be interested in some of your ideas on this issue.
From my point of view, as long as relational databases are the best thing going (and I think they still are), I am going to need to do relational CRUD. Object Oriented mapping tools, like Hibernate, certainly make this nicer.
I agree all applicationa are heavilly relational. And I believe a framework must be build against Object Model not table concept. An object has simple properties and relations (1-N, N-1, 1-1, aggregations, M-N ...) which translates to references or collections in java world. Why there is no decent Swing and Web framework with data bindings for such data models (There was a Scope framework but it kind of died). Why do we insist on CRUD view of the world is beyond my comprehension. Even in VisualStudio 2005 Microsoft of all companies now provide data bindings for Object models - simple properties, aggregations, collections which let developer to bind them to various rich GUI controls
I don't really follow why CRUD and Object Models are mutually exclusive. I Create, Retrieve, Update , and Delete objects when programming against an Object model. I think anything Hibernate based, such as XX framework, would satisfy your OO criteria. I agree Microsoft has always been ahead of things on the GUI binding side of things.
firstly, I strongly agree with the fact that CRUD in java takes wayyyy toooo looonnnggg....
And for tons of apps (yes, even enterprise apps), CRUD is a large component.
That said - I'm not as stressed about it as I used to be, because I always use a generic crud action or managed bean (depending on whether I am using struts or JSF).
If you have a generic crud class that does your main CRUD stuff, but also supports lookups and foreign key relationships (lists), then normally it is just a matter of laying out your new page. (and of course ensuring you have hibernate properly configured).
I do of course allow the presentation tier to use the same POJO that hibernate is persisting.
Doesn't everybody do this???
I agree with what you are saying. I think my approach in the XX framework is to automate what you appear to be doing in a somwhat manual (although reusable) manner.
The XX presentation tier is base on XSL transformation of the hibernate POJO's, represented as XML. Does that make sense?
How are you presenting your POJO's?
I'm presenting the POJOs with JSF components these days. (if that is how you mean).
I have the [pipe dream|hope] that eventually the JSF editors will be as powerful in a wysiwyg sense as the VS.NET editor.
I had a quick scan through your intro - does the CRUD support relationships? (i.e. can it generate the many to many and many to one parts of the presentation?)
Yes, the XX Crud implementation supports relationships by way of Hibernate. The framework populates the apps POJO's (or a graph of POJO's) and hibernate does the rest from there.
I can't speak much about JFS, since I have been using XSL for presentation for a long time now. I think what tapestry does in this respects is pretty nice, but I feel the XX approach of a more standards based XSL layer is nice as well. By judiciously using CSS, which I admittedly am only beginning to do, the XSL layer becomes much more straight forward.
I agree with what you are saying. I think my approach in the XX framework is to automate what you appear to be doing in a somwhat manual (although reusable) manner.The XX presentation tier is base on XSL transformation of the hibernate POJO's, represented as XML. Does that make sense?How are you presenting your POJO's?Dave
Depends. We've got a framework based on Struts, Spring, and Hibernate. The create, update, and delete portions of the CRUD are done via some code we have that extends the Spring Hibernate template. I've added a "Read" via a particular convention that allows it to be reusable without any coding of the methods.
So, by using Xdoclet for mapping our POJOs, we get free CRUD ops by simply implementing a DAO interface that:
1)contains constants that reference the hibernate property files that defines HQL statements for non-standard CRUD
2)methods using Hibernates QBE and QBC for searching
3)does what you need interfaces to do, namely, allow you to mock and change implementation
I think at this point, the difference is that I am trying to build things around an Object Oriented Hibernate model, while in OpenXava, the data model is behind the scenes. I imagine you can get to that model, modify the gui, etc. I think OpenXava is very similar to Iron Speed (http://www.ironspeed.com/
). The problem I had with that is that customization still appeared to be cumbersone. Optimal J (http://www.compuware.com/products/optimalj/
) tried to do the same thing years back, but I found customization much too unweildy. Plus, being Struts/EJB based, there were just TOO many files generated. I would be interested in how easy it is to modify the look, feel, and flow up OpenXava.
OpenXava definitely seems similar to some of the ideas I had for future phases of XX, namely gui generation. I am not there yet, so right now, XX is just at the point of CRUD based around a custom built XSL based view.
Thanks for pointing this one out.
I'm trying cut down the (ab)use of the "XML-programming" and thay came with this?
If this "welcome to the world of XML programming" stuff continues, we will start "coding" more XML then coding Java!
That's why I use www.mentaframework.org - a MVC Framework without xml. This is REALLY simple!
some people hate XML (as you) some people hate annotations.
I don't hate annotations,
but I love XML, I'm sorry.
The important in a framework is not if uses XML or annotation, but if is it simple and powerful at same time.
What persistence engine uses XXFramework? Hibernate, CMP2, EJB3
The persistence component of XX uses Hibernate.
It can integrate with EJB's or any other Java code, but it becomes a very light wrapper in that case.
I love XML as well.
Thanks for the comment.
I think you figured it out, I like XML. Actually, I'd like XX to create applications automatically, through a GUI of some sort. But then, the XML would just be moved out of view. It would certainly still be there as a data represenation of the applicaiton, as many tools (Office!) are now movings towards. Until then, I guess I need to write the XML myselft.
In general, I prefer a declarative (XML, XSL) to a procedural approach and the more I can move things in this direction , the more successfull I fee I am.
I'll check out the framework you recommend.
I think you figured it out, I like XML. Actually, I'd like XX to create applications automatically, through a GUI of some sort. But then, the XML would just be moved out of view. It would certainly still be there as a data represenation of the applicaiton, as many tools (Office!) are now movings towards. Until then, I guess I need to write the XML myselft.In general, I prefer a declarative (XML, XSL) to a procedural approach and the more I can move things in this direction , the more successfull I fee I am.I'll check out the framework you recommend.ThanksDavid Moskowitz
XML is good for representing hierarquical data, and if you don't have do edit it manually or it's contents. I friend of mine used XML for representating 3D starships in his games and it worked pretty well. But when you start "programming" in XML, is became very ugly.
You cannot compile XML, you will only know if there is an error when you run the application (ok, you have the DTD, but it is not so precise as the Java compiler). You need to learn another "language", because each web framework has it own xml implementation, in many cases, this implementation is very complex. You cannot debug a XML file. It's not so easy to represent certains objects in XML.
XML complicates the learning. When I started to study MVC and web frameworks, the use of XML was very confusing.
Aynway, we have opinions and opinions... This is my opinion.
I respect your opinion.
I just found the alternatives to XML to be much worse. Guess it depends on how cumbersome the XML implementation is.
Tools like XML Spy make it much easier to work with XML, and do debuggin as well.
Also, by keeping the documents/transformations small and semantically meaningfull, you can break down the tasks nicely, which I believe helps in development and debugging.
I respect your opinion.I just found the alternatives to XML to be much worse.
Alternatives like... programming in Java?
MS Word is written in C++, but I don't really want to write C++ code to create a document. That example is a bit extreme, but I don't mind creating an xml configuration file and have data inserts, etc, handled automatically for me.
That is why I like Hibernate, which maps from Java business objects to database. The XX framework maps from HTML forms to Java business objects, then tells hibernate what to do with the BO's.
I guess I wouldn't mind creating a fully functioning Java app without writing any Java.
Yes.MS Word is written in C++, but I don't really want to write C++ code to create a document. That example is a bit extreme, but I don't mind creating an xml configuration file and have data inserts, etc, handled automatically for me.That is why I like Hibernate, which maps from Java business objects to database. The XX framework maps from HTML forms to Java business objects, then tells hibernate what to do with the BO's.I guess I wouldn't mind creating a fully functioning Java app without writing any Java. Dave
Wow... that was a realy unhappy example. MS Word is a end-user product, not a framework. It's totaly different.
I did not understand what is so wrong with Java code! Why "program" in XML ("declarative programming")?
As w3 site says: "Originally designed to meet the challenges of large-scale electronic publishing, XML is also playing an increasingly important role in the exchange of a wide variety of data on the Web and elsewhere." XML is ok while dearling with certains types of data. But it's not so ok when in use XML to program. That's why I preffer Mentawai.
I did not understand what is so wrong with Java code!
Java code is great. The XX framework is written in Java. I will check out the framework you recommend (but I need to run upstairs and watch 24 now).
Are you also saying that a framework like Hibernate is too declarative and XML focused?
Different tastes I guess.
Thanks for the comments and will check out Mentawai.
Java code is great. The XX framework is written in Java. I will check out the framework you recommend (but I need to run upstairs and watch 24 now).Are you also saying that a framework like Hibernate is too declarative and XML focused?Different tastes I guess.Thanks for the comments and will check out Mentawai.Dave
Well, I prefer XDoclet and Annotations rather than XML when using Hibernate...
Wow, this is a code for a HelloWorld, I'm afraid of a
more complex model. =P
Document resultDocument = DocumentHelper.createDocument();
Can you debug on XML? No.
On Java you can.
Can you use Eclipse refactoring tools on XML?
No. On Java you can.
So.. I'm sorry pal, I go for http://www.mentaframework.org
Wow, this is a code for a HelloWorld, I'm afraid of amore complex model. =P Document resultDocument = DocumentHelper.createDocument(); resultDocument.addElement("say_hello"); resultDocument.getRootElement().addElement("greeting").addText("Hello World");return resultDocument.asXML();Can you debug on XML? No. On Java you can.Can you use Eclipse refactoring tools on XML? No. On Java you can.So.. I'm sorry pal, I go for http://www.mentaframework.org !
Sorry, I am not really sure the point you are trying to make.
The code you quote is from one of my Hello World examples, in this case, to illustrate a simple XML/XSL transformation. I am using the simplest method possible to generate a full XML document, without using any helper classes that might confuse things. The document in this case just represents some hierarchical data that could come from a DB.
In reality, I probably wouldn't want to print hello world to the screen. If I did, I certainly wouldn't need an XML transformation to do it.
Using XX I could
-simply hardcode it in an HTML or jsp page
-read it from disk
-Load it from another web page
-Read it from a database
- or simply: return ("Hello World");
probably several more variations as well, all without the Java code you quote.
You cannot compile XML...
XSL, BPEL, and o:XML are all XML processing languages that have compilers. So when you say XML can't be compiled, which XML dialect are you thinking of?
Congratulations with the 1.0 version of your project.
A question, why should I choose to use this framework while there's already a plethora of mvc frameworks around? What is the killer feature of your framwork that we have been missing out on in tapestry/jsf/spring mvc/webwork ?
My philosophy is to code something only once and (,more recently anyway,) configure it with XML. I’ve been doing XSL as the display component of my apps for some time, so the framework was heavily built around XML.
So, we have another MVC framework, however, I have the distinct feeling that at least hardware vendors will be salivating when they hear that applications are being built using this framework.
Congratulations though, I know how fulfilling it is to write something that feels 'just right' for one's use. I bet it was an extremely good learning experience too.
Keep up the good work and dont let anyone discourage you.
So, we have another MVC framework, however, I have the distinct feeling that at least hardware vendors will be salivating when they hear that applications are being built using this framework.
I think you are very perceptive, regarding performance penalties of an abstracted approach like Hibernate or an XSL approach like my framework. There is always the option to back out and write more customized routines where and when necessary. I haven't really had a problem with this yet. I also believe in "avoiding premature optimization", so I'd rather come up with what I feel is an elegant solution first, then optimize. I've tried enable XML caching, and I believ Hibernate has some caching as well, but I haven't benchmarked it yet.
With regards to XM/XSL, I've done a lot with this in the past using a Microsoft platform, and have found the performance of their parser excellent, but I still prefer Java to .net overall. I am waiting for Java technology to catch up in this respect.
I think your framework is a part of Jdon Framework, Jdon Framework use Struts as its MVC, and above it, abastract the CRUD development paradigm in a XML configuration.http://jdon.dev.java.net/
No comment from Cameron Purdy yet... :o)
I glad to see implementation of xml-centric framework.
You have my support on this.
We also are trying to generate fully functional applications but based on already existings frameworks like jsf.
Main our approach - from xml based model to generate code and related resources using xslt based template engine(our own kind).
Xml is preferred choise because xml is easy to generate and model.
Probably using xslt added to your framework some kind of functionality programming.
I'm really busy now but maybe in near future I will try to participate in your project. Anyway I have one suggestion how to expand your framework.
Probably you know about the Birt report framework (http://www.eclipse.org/birt/phoenix
). The most important thing in the framework is that birt reports use xml based model to render output.
What do you think about idea to integrate birt reports with your framework? I mean you could use their engine to have access to report's model and create report viewer based on your framework. Implementation of the birt report viewer is really complicate. It's wonderful opportunity to prove your framework is rock :)
In case you take challenge I'm ready to help you with that.
For example I could help with some detail explanations how to implemented and used the Birt report viewer and the birt engine. CRUD and reports that somethings. Think about it!
My e-mail: vladperl at hotmail.com
I am not familiar with the reporting framework. Let's continue this discussion further on the XX Framework website forums.
Since this post is about to get bumped from the main news page, I'd like to thank everyone for their feedback and for taking a look at the framework.
I definitely would like to look at some of the alternatives mentioned, as comparison or to get some good ideas from. In what I've seen, I definitely think the XX approach is valid, useful, and different enough from what is out there to be viable.
One recurring objection I hear is that many are fed up with XML configuration overkill. That is valid. However, at this moment I prefer XML configuration to code based configuration, which I think is less maintainable. I would rather use standardized XML, then some sort of new or existing 3 or 4GL language that people would need to learn how to apply.
Even so, I will, and have, tried to avoid XML and file overload. I think in the future, I would like to move XX more towards automatic generation of applications, but keeping an open, standards based foundation, that (hopefully) will be easy to modify.
I welcome everyone to continue providing feedback on the http://www.xxframework.org