Posted by
Adam Heath-2 on
Jun 28, 2006; 1:21am
URL: http://ofbiz.116.s1.nabble.com/using-confluence-as-the-official-ofbiz-org-site-tp168937p168942.html
David E. Jones wrote:
>> Um, this seems bad. Using non-free software for a free software
>> project? Wouldn't this be equally bad, now that ofbiz is an apache
>> project?
>
> David Welton answered this pretty well. Here again I like a pragmatic
> approach. I'm all for open source software, when it's available and a
> tenable option. I'll be the first to admit that OFBiz, for example, is
> not the solution for all problems.
Yeah, he did.
> I'd love to use OFBiz-based stuff instead of commercial things (even
> open source based commercial things like the Atlassian products, of
> which Jira actually even uses parts of OFBiz), but we just don't have
> the functionality on the business/applications level in these areas nor
> the resources to build them out, especially not within the time frame we
> need them (like immediate and ongoing...).
Well, if you recall, last summer during the OfBiz User's Conference, we
were displaying some wiki based software. We're fast approaching the 1
year mark on it's birth, and we haven't sat still with it's development.
Right now, I am rewriting the basic framework in it, extracting it out
of OfBiz proper, and making it a stand-alone project. Said project will
be under either a BSD or ASF license; we haven't fully decided.
Main features:
* commons-vfs for generic file access
* implemented filesystems:
* COW(Copy-On-Write). Used for quick templating/extension.
Changing a file contents is supported, as are deletes. Multiple
parents are supported(a single directory can have multiple parent
directories it inherits from). Also, if a parent directory is
also COWed, then it can still walk all that. Directory listings
function as expected.
* flat. Attributes of files are stored in a foo@ directory, one
file per attribute. This sits on top of COW, so overriding a
single attribute is simple.
* SVN. Uses libsvnjava-hl, for automatic revision control of file
modifications. The actual SVN filesystem itself uses a generic
revision control API, so in theory other systems could be plugged
in.
* BSF, with compilation support
* Existing BSF engines were rewritten, to support dynamic class-based
source loading. This includes the ability to load from File,
String, URL, and FileObject(commons-vfs). The BSF API uses an
Object as the source, so this was a straight-forward extension.
* The new implementations also compile the source, for a large
speedup.
* python(jython), java(janino), php(quercus), javascript(rhino), and
ruby(jruby) all exist in this new framework.
* Only one extension to BSF has been made: apply allows for optionally
specifying the type of the named arguments
* A template engine, based on the BSF API
* freemarker and velocity are plugged into this system
* A macro can be written in any template language, and included in
any
template language.
* Macros can have both parameters, and bodies.
* A resource can be in any language; it's parent template that it is
included into can then be in another language. Named sections can
also be written in any language.
For example, /foo has a template set to /templates/bar.
/templates/bar then has a template of /templates/baz. /foo is a
velocity file. bar could be an event(which could be written in
java/python/php/ruby/javascript), that changes the text based on
permissions, time-of-day, or phases of the moon. Like maybe
changing the color, css, or switching left/right sides of a div.
Then, once the event had made it's decision, the baz template would
be used to wrapped it's output.
* A resource can be a bit of text, interpeted as a template, or a bit of
code, that is run when it is requested.
* Code-based resources include standard events, and something we call a
filter(bad name). A filter can do whatever kind of processing it
wants with the rest of the path that comes after it. For example:
/category/10000/0/20/summary
This would show category 10000, starting and page 0, show 20 items per
page, and show the summary of the products. What is nice about this
approach, is it makes for very nice entries in access logs.
* Since a resource can be either code or text, the template engine also
works with that. A named section, parent template, or macro can
actual be a bit of code, that does complex processing. Again, and
example may be the easiest way to describe this.
freemarker:
<tr>
<td>
<@TemplateMerge name="/category/10000/0/20/summary"/>
</td>
<tr>
* Most code(with the exception of the very low-level commons-vfs
filesystems, and the single servlet) is runtime changeable. You can
edit the actual dispatcher code at runtime, and the classloader will
be recycled.
* A runtime controllable(by having events run, or even editting the
dispatcher java file itself), allows one to have very complex
request->site mapping. One can do the normal host->site mapping, but
could also do something based on time-of-day.
* Something that could be done with this system, is a nice use of the
COW feature, and the above site mapping. There could be a base
directory, that contained all the code for a site. Then, when a
request comes, a COWed directory that inherits from the code base
could be selected, based on the user's locale, and possibly a geo-ip
lookup.
As a framework, is it very extensible. However, as with most projects,
it has reach a point where it has accumulated cruft; both in the form of
poorly implemented features, and backwards compatibility. This is the
reason I am currently reworking it to be standalone, and a separately
released project.
However, the existing code-base has been put to quite a bit of testing.
An example of both the framework, and the ofbiz integration, is at
http://checkmark.heart.org.