12 Ekim 2010 Salı

JBPM 4.4 ile MySQL

JBPM 4.4 ile çalışırken veritabanınızı HSQL'den MySQL'e çevirirseniz. "jbpm.hibernate.cfg.xml" dosyanızı değiştirmeniz gerekir.

Eğer gerekli değişikliği yaptıktan sonra şu hatayı alıyorsanız:

SEVERE: Cannot delete or update a parent row: a foreign key constraint fails (`jbpm4`.`jbpm4_execution`, CONSTRAINT `FK_EXEC_INSTANCE` FOREIGN KEY (`INSTANCE_`) REFERENCES `jbpm4_execution` (`DBID_`))


Yapmanız gereken "jbpm.hibernate.cfg.xml" dosyasındaki "MySQLDialect" ifadesini "MySQLInnoDBDialect" ile değiştirmektir. Nihai dosya şöyle birşey olmalıdır:


Değişen dosyanın içeriği şöyle olmalıdır:


<?xml version="1.0" encoding="utf-8"?>

<!DOCTYPE hibernate-configuration PUBLIC
"-//Hibernate/Hibernate Configuration DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd">

<hibernate-configuration>
<session-factory>

<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/jbpm4</property>
<property name="hibernate.connection.username">jboss</property>
<property name="hibernate.connection.password">jboss</property>
<property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect</property>
<property name="hibernate.format_sql">true</property>
<!-- property name="hibernate.show_sql">true</property-->


<mapping resource="jbpm.repository.hbm.xml" />
<mapping resource="jbpm.execution.hbm.xml" />
<mapping resource="jbpm.history.hbm.xml" />
<mapping resource="jbpm.task.hbm.xml" />
<mapping resource="jbpm.identity.hbm.xml" />

</session-factory>
</hibernate-configuration>






9 Ekim 2010 Cumartesi

Evrak Takip Sistemi (ETS) nedir? Dijital Arşiv (DA) nedir? Doküman Yönetim Sistemi (DYS) nedir? Ne değildir?

Evrak Takip Sistemi (ETS) bir kuruma dışarıdan gelen ve kurumdan dışarıya gönderilen resmi yazışmaların kayıtlarının bir veritabanında saklanarak ihtiyaç halinde o dokümanlara fiziksel olarak erişmeyi kolaylaştırmak için kullanılan uygulamadır. Evrakların kendileri dijital ortamda saklanmaz sadece geliş-gönderiliş zamanı, geldiği-gittiği kurum, teslim alan-eden kişinin kim olduğu, elle verilen numarası ve fiziksel olarak hangi dosyada, hangi klasörde, hangi depoda saklandığı gibi künye bilgileri –biz buna meta data deriz- saklanır. Bunu bir kütüphane otomasyonu gibi düşünebilirsiniz. Yazılım, aradığınız kitabın hangi rafta olduğu ya da şu an mevcut olup olmadığı bilgisine erişim maksadıyla kullanılır. Kitabın kendisini –içeriğini- size ekranda göstermez. İçerikte bazı kelimeleri arama imkanı vermez.

Dijital Arşiv Sistemleri ETS’den bir adım öteye giderek indekslenen dokümanları dijital ortama aktararak saklama ve bunlara erişim imkanı veren sistemlerdir. Kağıda basılı (hard copy) belgelerin tarayıcılar vasıtasıyla taranarak elektronik ortama aktarılması esasına dayanır. Aktarılan belgeler çoğu kez, hem fiziksel hem dijital ortamda saklanır. Yani kağıt ortamı tamamen kaldırılmaz. Bunun kamilen olabilmesi için ilişkide bulunan tüm kurumların ıslak imza ile aynı hukuki geçerlilikte olan dijital imzalı elektronik dokümanlarla haberleşmesi gerekir.

Dijital İmza

Ülkemizde Dijital İmza konusunun hukuki-teknik altyapısı tam oluşmamıştır. Elektronik İmza kanunda değişmesi gereken noktalar için çalışma yapılmaktadır. Dijital imzayla bir belgeyi imzalamak o belgenin imzalandığı andan itibaren değişmediğini garanti altına almak demektir. Dijital imzayla imzalanan bir belgenin parmak izi (hash) bilgisi çıkarılır. Bu doküman içinde bir nokta bile değişse hash bilgisi bozulmuş olacağından imzası geçersiz olur. Dijital imzanın bir görevi de imzalayan kişiyi belirlemektir. Bunun için kişilerin ellerinde akıllı kartlar olmalı ve bir pin numarası girerek imzalama işlemi tamamlanmalıdır. Kanunda eksik olan konu zaman damgası konusudur. Dijital imza sertifikaları belli zaman aralıkları için verilmektedir. Belgenin imzalandığı anda imzalayan kişinin sertifikasının geçerli olması için bir zaman sertifika otoritesinin (CA) güvenilirliğini tanıdığı bir zaman sunucusundan (time server) zaman bilgisi güvenli yoldan alınmalıdır. Yani offline durumda yapılan dijital imzanın hukuki geçerliliği yoktur zira kişiler bilgisayarlarının saatini geri alarak sertifikaları expire etmiş olsa bile imzalamayı gerçekleştirebilirler. Bazı dijital imza sağlayıcıları time server sorguları için para charge ediyorlar. Yani her imza için (kuruşlar mertebesinde de olsa) ek para istiyorlar.

Elektronik imza konusunda sahanın derin bir cehaleti söz konusudur. Veritabanındaki alanların ya da canlı -on the fly- oluşturulan raporların imzalanması diye bir şey söz konusu değildir. Bir PDF’i bir Word belgesini, bir jpg resmi imzalayabilirsiniz. Yani elinizde dijital bir doküman olmalıdır.

Repository

Dijital Arşiv sistemleri çeşitli formattaki evrakı (resim ya da yazı) iki şekilde saklar. Kimisi depolama ortamı (repository) olarak Oracle gibi ilişkisel veritabanlarını, kimi de dosya sistemlerini kullanır. Bir de google gibi evrak indeksleme konusunda korkunç bir hıza ve yatay genişlemeye ihtiyaç duyan yazılım şirketlerinin kendileri için geliştirdikleri (GFS-Google File System veya NoSQL) gibi yüksel performanslı sistemler, alt yapılar vardır. Veritabanını kullanmayı tercih edenlerin sistemlerin yüksek doküman sirkülasyonu olan kurumlarda arşivlenen dosyaların sayısı hızla arttığı için ciddi performans problemleriyle karşılaştıkları bilinmektedir.

OCR (Optical Character Recognition – Optik Karakter Tanıma)

DA sistemleri dijitize edilen içeriği aranabilir halde sunmak için OCR ismi verilen teknolojiyi kullanır. Tarayıcılarda taradığımız yazıların bilgisayar için aslında manzara resminden farkı yoktur. O reim içinde yazılanların text haline getirilmesi için ek bir çabaya ihtiyaç vardır. Gelişmiş matematiksel algoritmalarla resim şeklinde taranan dosyaların içindeki harfleri tanır, kelimelere, cümlelere çevirir ve sonra indeksler. Bu özel bir uzmanlık alanıdır ve bizim yapacağımız bir iş, yazacağımız bir bileşen değildir. Bu bileşeni bu işi kendine uzmanlık alanı olarak seçen firmalardan birinden ücreti mukabili alıp kullanırız.


İndeksleme

İndeksleme işi de oldukça kompleks matematik algoritmalar gerektirir. Zira kullanıcı herhangi bir kelime içinde geçebilecek herhangi üç harfle de arama yapabilir, bir cümle ile de. Arana kelimelerin metin içinde birbirleriyle uzaklığının hesaplanması isabetli sonuçlar döndürmek için gereklidir. Örneğin “dijital arşiv” ifadesini arayan birisine döndürülen sonuçlarda dijital ve arşiv kelimelerinin ardı ardına ve en sık geçtiği dokümanlar en başta, daha seyrek geçtiği dokümanlar daha sonra, bu iki kelimenin arasında başka kelimelerin girdiği dokümanlar daha sonra, bu iki kelimenin aynı anda bulunduğu ama yakın olmadıkları dokümanlar daha sonra, bu iki ifadeden birinin geçtiği dokümanlar da en sonda getirilmelidir. Profesyonel sistemlerde aramaların çabuk cevap dönebilmesi için bu işlemler arama yapıldığı anda yapılmaz. Arka planda indeksleme motoru çalışıp her muhtemel ifade için akıllı algoritmalarla sonuçlar hazırlar. Mesela siz Google’da bir şey aradığınızda eğer o arama ilk defa yapılacak olsaydı milyarlarca dokümanın tek tek açılıp bakılması belki aylar sürerdi. Ama sorgularımıza mili saniyeler içinde cevap alıyoruz. Dijital arşiv sistemlerini kafanızda sanal kütüphaneler şeklinde canlandırabilirsiniz.



Şifreleme-Encryption

Dijital arşiv sistemlerinde arşive erişim yetki mekanizmasıyla olsa da dosyaların gerçekten arşivlendiği yerlere (mesela dosya sunucusu olan makineye) fiziksel erişim sağlayanların belgelere erişmemeleri için dosyaların şifrelenerek (encryption) saklanmaları gerekir. Böylelikle kötü niyetli bir kişi dosyalara erişse bile içeriklerine bakamayacaktır.


Doküman Yönetim Sistemleri (DYS)

DYS’ler şu ana kadar anlattıklarımız arasında en gelişmiş sistemlerdir. DA kabiliyetlerinin yanı sıra versiyon yönetimi, dinamik iş akışları, dinamik iş kuralları, raporlama, dış ERP sistemleriyle entegrasyon gibi ek özellikler sunarlar. Bu özelliklerin nerdeyse her biri için sayfalarca açıklama gerekeceğinden buraya almıyorum. Dijital Arşivi bir kargo şirketinin ana deposu gibi düşünürseniz DYS’yi bu kargo şirketinin tümü gibi düşünebilirsiniz. Hangi belge (kargo) sisteme nasıl girecek, kim karşılayacak, kim taşıyacak, nereye taşıyacak, nerede ne şekilde saklanacak, hedefine nasıl ulaştırılacak, alıcı yerinde bulunamazsa ne yapılacak, bütün bunların takibini müşteriler nasıl yapacak gibi her konu DYS’lerde düşünülmek zorundadır. Legacy sistemlerle entegrasyon da başka önemli bir husustur. Yetkilendirmeyi ya da insan kaynağının izin durumlarını mevcut ERP otomasyonu ile entegre olarak halletmek. Mevcut yapı ile bilgi alışverişi yapmak mümkün olmalıdır. Dünyada tek işi DYS yazmak olan firmalar var. Satış rakamları milyon dolarlar mertebelerinde.


Şimdi kabaca bir dijital arşiv modulünden (dikkat DYS'den değil) beklenen özellikleri listeleyelim:

  • Gelen-Giden Evrak Kaydı
  • Yetkilendirme
  • Tarama
  • Taranan Resmin Üzerinde Manipülasyon yapabilme
  • Yüksek boyutlu dosyaların sorunsuz transferi ve depolanması
  • Dosya sunucusu kullanımı
  • İstenen başka bir sunucunun dosya sunucusu yapılabilmesi
  • Dosya sunucusunda dosyaların binary olarak saklanması
  • Dosyaların meta taglarının kendi üstlerinde saklanması
  • Arşiv indeksinin dosyalar üzerinde yeniden oluşturulabilmesi
  • Dış bir veritabanına ihtiyaç bulunmaması
  • Versiyonlama
  • Elektronik imza
  • Elektronik imzalı dokümanlar için viewer
  • Repository ile güvenli (encrypted) iletişim
  • Transaction desteği – rollback imkanı
  • Text tabanlı dosyalarda full-text arama kabiliyeti
  • OCR ve indeksleme
  • Basit bir loglama ve log takibi mekanizması
  • Modül seviyesinde (iç) yetkilendirme
  • Versiyon yönetimi
Salih Cenap Baydar

4 Temmuz 2010 Pazar

6 Şubat 2010 Cumartesi

Motivasyon üzerine...

4 Şubat 2010 Perşembe

jsf action call problemi

Sebebini bilemediğim bir şekilde bazen(her zaman değil) bir jsf sayfasındaki objeye bind edilmiş bir action çağırılmıyor. Bunun için hiç bir exception yakalıyamıyor ve hiç bir mesaj ya da stacktrace görüntüleyemiyor olmam da çok ilginç. Birtakım araştırmalarımdan sonra sorunun jsf sayfasındaki alanların managed bean e map edilememesinden kaynaklanıyor olabileceğini okudum. Oysa ki sayfadaki objelerin binding attribute ları doğru bir şekilde manage bean deki karşılıklarına set edilmişti.

Daha sonra çağırılamayan action ın bind edildiği objenin 'immadiate' property sini 'true' yapınca action call sorunu çözüldü ama bu seferde sayfadaki diğer alanlarda sorun çıkmaya başladı. Bu sefer manage edebildiğim exception lar sayesinde bulduğum sorunlu alanların 'immadiate' property lerini 'true' yaptım.

Sorun şimdilik çözüme kavuştu ama sorunsuz çalışan bir uygulamada hiçbirşey değişmeden bu sorunun ortaya çıkması çok ilginç. Ne sorunu tanımlayabildim ne de çözümü anlayabildim.

Bunun jsf de bir bug olduğu yorumlanıyor: http://jan-so.blogspot.com/2008/02/jsf-does-not-call-action-in-managed.html