|
MoreMotion, java tabanlı açık kaynak kodlu(API) bir web uygulama çatısıdır.
MoreMotion uygulama çatısının Java tabanlı diğer uygulama çatılarından en önemli farkı dinamik sayfaların JSP veya JSF teknolojisi ile değil, XSL teknolojisi ile üretiliyor olmasıdır.
XSL teknolojisi dinamik sayfaları oluşturma işleminde sunucu üzerindeki programlara olan bağımlılığı azaltır. Sunucu programları tarafından sağlanan XML yapısındaki veriler sayfa üzerinde çeşitli şekillerde biçimlendirilebilir.
Örneğin aynı verinin bir karma kutu içinde ve bir tablo içinde gösterilmesi için ayrı JS* kodları gerekir iken aynı Java sınıfı tarafından sağlanan XML verisi basit XSL talimatları ile aşağıdaki gibi şekillendirilebilir.
Veri:
|
<root>
<urunler>
<item>
<NO>12</NO>
<AD>Dizüstü Bilgisayar</AD>
</item>
<item>
<NO>37</NO>
<AD>Renkli Yazıcı</AD>
</item>
</urunler>
</root> |
XSL Kodu:
|
<!-- Karma Kutu -->
<select name="combobox1" class="c3">
<xsl:for-each select="/root/urunler/item">
<option value="{NO}"><xsl:value-of select="AD"/></option>
</xsl:for-each>
</select>
<!-- Tablo -->
<table cellspacing="0" cellpadding="0" width="100%">
<xsl:for-each select="/root/urunler/item">
<tr>
<td <xsl:value-of select="NO"/></td>
<td><xsl:value-of select="AD"/></td>
</tr>
</xsl:for-each>
</table> |
MoreMotion, sayfaların XSL ile üretilmesini organize etmenin dışında başka üst düzey hizmetler de sunar.
Sayfalar tarafından ihtiyaç duyulan verilerin elde edilmesi için konfigüre edildiği şekilde veri servisi sınıflarını harekete geçirir ve elde edilen verileri XML yapısına dönüştürür. MoreMotion paketi içinde yer alan ve MoreMotion gibi açık kaynak kodlu olan veri servisleri bir uygulamanın pek çok ihtiyacı karşılamaktadır.
Yukarıda ki örnekte kullanılan "urunler" verisini bir ilişkisel veritabanını sorgulayarak elde etmek için aşağıdaki gibi bir konfigürasyon tanımı yapmak yeterlidir.
|
<jdbcConnection name="SuperStore">
<driver>org.gjt.mm.mysql.Driver</driver>
<dburl>jdbc:mysql://localhost:3306/SuperStoreDB</dburl>
<user>root</user>
<password>mmsa</password>
</jdbcConnection>
<dataSource name="urunler">
<class>org.moremotion.mmcomp.reldb.ReldbQueryDataService</class>
<conn>SuperStore</conn>
<query>SELECT * FROM urunler</query>
</dataSource> |
MoreMotion, konfigürasyon tanımlamalarında kullanılabilen ve bu şekilde parametrelerin dinamik olarak belirlenebilmesini sağlayan MScript adlı bir dili destekler.
MScript, aşağıda örneklendiği gibi parametre değerleri içinde gömülü olarak kullanılarak, değerlerin istek parametrelerine, oturum değişkenlerine veya sistem parametrelerine göre dinamik olarak belirlenebilmesini sağlar.
|
<dataSource name="urunler">
...
<query>
SELECT * FROM urunler
@doif(KAT_NO != '')
WHERE KAT_NO = @vof(KAT_NO)
@doend()
</query>
</dataSource> |
Sağlanan fonksiyonlara ilave olarak MoreMotion API (Programla Arayüzü) ile yeni fonksiyonlar tanımlanabilir.
MoreMotion, kapsamlı iş mantığı içeren uygulamaların kolaylıkla inşa edilebilmesi için İşlem Yönetimi desteği verir. MVC kavramını gerçekleyen MoreMotion İşlem Yönetimi, iş mantığının İşlem adı verilen küçük ve anlamlı parçalara ayrılmasını ve konfigürasyon üzerinden yönetilmesini öngörür.
Bu noktada diğer MVC gerçeklemelerinden bir adım daha öne giderek İşlem sınıflarını kulanıcı arayüzlerinden bağımsız kılar ve işlemlerin MScript ile dinamik olarak yönetilebilmesini sağlar.
Bir işlem sadece kendisine verilen kayıtları işlemekten sorumludur. Kayıtların kulanıcı arayüzünden mi geldiği yoksa üst işlem tarafından mı sağlandığı İşlem sınıfı tarafından bilinmez.
Aşağıdaki örnekte bir işlem şablonu bir sorgulama işlemini çağırmakta ve çağrılan işlemin döndürdüğü her bir kayıt için Eposta gönderen bir işlem harekete geçirilmektedir.
|
<process name="AnkaraMusterileri">
<conn>SuperStore</conn>
<class>org.moremotion.mmcomp.reldb.ReldbQueryProcess</class>
<query>SELECT * FROM musteriler WHERE SEHIR_KODU = '06' </query>
</process>
<process name="EPostaGonder">
<class>org.moremotion.mmcomp.mailer.TextMailProcess</class>
<smtpAccount>siteAdmin</smtpAccount>
<to>@vof(EPOSTA)</to>
<subject>Bilgilendirme...</subject>
<message>
Sayın @vof(AD),
.....
</message>
</process>
<processTemplate name="AnkaraMusterileriniBilgilendir">
<callQueryProcess name="AnkaraMusterileri">
<calProcess name="EPostaGonder"/>
</callQueryProcess>
</processTemplate> |
İşlem şablonlarını kullanıcı komutlarına göre harekete geçirmek için, aşağıda örneklendiği gibi, sayfalar üzerinde "MoreMotion Face" Javascript fonksiyonları kullanılır.
|
<form mo:type="ProcessForm">
<input type="button" mo:type="Command"
onclick="PMgr.getEnclosingForm().submit('AnkaraMusterileriniBilgilendir')"
/>
</form> |
MoreMotion'ın java tabanlı ve uygulama sunucusu üzerinde çalışan çatısı, ön yüzde güçlü javascript fonksiyonları ile desteklenir. "MoreMotion Face" adı verilen bu javascript çatısı tümüyle Ajax uyumludur ve sağladığı programlama arayüz fonksiyonları ile özel geliştirmelere olanak sağlar.
"MoreMotion Face" tarafından sağlanan zengin Ajax fonksiyonları sayesinde çok defa hiç ilave Java ve Javascript kodu yazmadan işlemler harekete geçirilebilir ve sayfanın istenilen bölümleri veri kaynakları tarafından sağlanan veriler ile yenilenebilir.
|
<td onclick="AjaxMgr.refreshAreas({...})">Yenile</td> |
Daha önce "mmExec" adıyla MoreMotion Advanced Suite paketinin bir parçası olarak ve ticari lisans beraberinde kullanılmakta olan MoreMotion, artık bağımsız ve açık kaynak kodlu bir yazılım haline gelmiştir.
MoreMotion hakkında daha fazla bilgi için http://www.moremotion.org sitesini ziyaret edebilirsiniz.
|