Introduction to SproutCore
Mike Subelsky discusses the SproutCore JavaScript framework, desktop vs browser development, key/value observeration, data bindings, demos, SproutCore features and API, and example SproutCore apps.
Tracking change and innovation in the enterprise software development community
Posted by Werner Schuster on Aug 16, 2007
Object Relational Mapping (ORM) is a big topic with OOP languages. As soon as some data needs to be persisted, the question of how to store it comes up. One popular ORM solution in the Java world now gets support in JRuby. Kicked off by a blog post by JRuby team member Ola Bini, the ActiveHibernate project aims to make Hibernate available for JRuby developers. We talked to Johan Andries, consultant at AE, who is implementing ActiveHibernate.We have developers in mind that want the productivity and other advantages of Rails, but that already have invested in a Java domain model or for some reason need more than Active Record. Examples are composite keys, legacy databases, prepared statements, complex class hierarchy mappings or Hibernate's first and second level cache. To make that possible we will have to provide an interface that follows the active record pattern without compromising access to the full power of Hibernate.
Initial focus was on mapping Ruby objects. Charles Nutter suggested that existing Java classes should be kept in mind as well. At its bare minimum you can write pure Ruby classes with attribute accessors and create the usual Hibernate mapping files by hand. There are already some tests in the Subversion repository showing just that. Working with the XML mapping files directly is obviously not very Ruby-like, so a DSL is underway.
There are two DSL-like things we can (and will) do. One form embeds the mapping information in the Ruby class definition. Ola Bini (who else?) has sent me a patch with some (meta)programming magic, which allows to write things like this:
class Project
include Hibernate
table_name = "PROJECTS" #optional
primary_key_accessor :id, :long
# column names are optional
hattr_accessor :date, :timestamp, :START_DATE
hattr_accessor :name, :string
hattr_accessor :complexity, :double
hattr_accessor :size, :long
hattr_accessor :on_schedule, :boolean
end
By including the Hibernate module (as opposed to inheriting from a framework base class), the Hibernate mapping is generated and configured automatically. Utility class methods (like "save" and "find") and accessor methods for the mapped properties are also added. Please note that this is a first working draft and we still welcome suggestions. This code will be in the repository real soon.Johan explains what would be involved for a port of ActiveHibernate to .NET, IronRuby and NHibernate:
The other form keeps the mapping info separate from the Ruby (or Java) classes to keep these completely peristence ignorant. No work has been done on that yet.
The IronRuby/NHibernate combination seems like the most natural candidate. IronRuby is still in pre-alpha, but from what I have seen it will be possible to do something equivalent to the JRuby Java extension we did for Activehibernate. The NHibernate part, however, will be harder. NHibernate 1.2 is based on Hibernate 2, with a lot of Hibernate 3 goodies ported back. Unfortunately ActiveHibernate is based on new Hibernate 3 features (e.g. tuplizers, added to H3 to support dynamic maps and XML serialization) that haven't been ported to NHibernate (yet?). So it all depends on the roadmap for NHibernate. Anyway, it will be possible to share almost all the Ruby code that makes up ActiveHibernate (in the case we'd do a port).
ActiveHibernate is something I do in the evening, but I guess we should have something really usable and complete within one or two months time. Of course, it could go much faster if other people join in with ideas and patches (like Ola already did). People can already check out the code on http://code.google.com/p/activehibernate There's a readme file and a Rakefile, so that you can build and run the tests without much hassle. (But please keep in mind it is still early days.)Johan also blogs about the progress of ActiveHibernate.
Agile Development: A Manager's Roadmap for Success
Designing a Scalable Twitter with Space-Based Architecture
Agile Practices to Improve Project Management Organization (PMO) Effectiveness
Evolving the key/value Programming Model to a higher level (Presentation)
Mike Subelsky discusses the SproutCore JavaScript framework, desktop vs browser development, key/value observeration, data bindings, demos, SproutCore features and API, and example SproutCore apps.
Christian Dupuis discusses the SpringSource Tool Suite (STS), STS features, demos of STS, Groovy/Grails, Spring 3.0, REST, Spring Roo, Cloud Foundry, tc Server, dm Server, VMWare, and the STS roadmap.
Chris Richardson discusses cloud computing, local vs cloud-based machines, deploying a Java application to Cloud Foundry, Cloud Foundry vs other clouds, and the future of enterprise Java development.
Neal Gafter explains why Microsoft has introduced dynamic typing in C# 4.0, what it is useful for, what is DLR, and why they have chosen the dynamic type instead of other possible solutions.
Jeff briefly reviews the different ways that software is currently built and then describes how to create and use user personas to design and build software that has a better user experience.
In a reprise of her ACM Turing Award lecture, Barbara Liskov discusses the invention of abstract data types, the CLU programming language, the Liskov Substitution Principle, and future challenges.
Brion Vibber discusses the challenges of working with user communities, social bottlenecks, scalability of software vs communities, new approaches to scaling communities, and remaining challenges.
John Resig touches three JavaScript issues: performance measuring, creating games and performing distributed testing.
2 comments
Watch Thread Reply