15 Temmuz 2017 Cumartesi

IBM BPM - Windows Servis Olarak Kaydetmek

Merhabalar,


IBM BPM uygulamasının start ve stop işlemlerini windows bir makinede servis olarak kaydetmenin nasıl olduğunu inceliyor olacağız.

Öncelikle bu ortamı start ve stop edebileceğiniz bir kaç bilgi paylaşmak istiyorum.

Eğer express kurulum için konuşmak gerekirse(diğer tüm versiyon ve paketler için gerekli bilgileri IBM'in offical sitesinden bulabilirsiniz.)


  • Command promta girdikten sonra IBM'in kurulu olduğu dizine gidilip örneğin E:\IBM\BPM\v8.5\bin klasörüne girilir.
    • Start işlemi için 
    • BPMConfig.exe-start -profile Profil Adı -de Deployment Env Adı
    • Örnek ->BPMConfig.exe -start -profile Server1Profile -de ProcessCenter

    • Stop işlemi için 
    • ./BPMConfig.sh -stop -profile Profil Adı-de Deployment Env Adı -username BPM CELL USER -password BPM CELL USER PAROLASI
    • Örnek ->./BPMConfig.sh -stop -profile Server1Profile -de ProcessCenter -username bpmadmin -password xxxxxxxxxxxx
  • Bir diğer yöntem Quick Start ortamından stop ve start işlemlerini sağlamak.


IBM BPM ortamını windows servis olarak kaydetmek için yapmamız gereken ise aşağıdaki adımları takip etmek

  • Was ortamına girilir.  https://hostname:port/ibm/console/logon.jsp
  • Servers->Application Servers bölümünden serverı seçtikten sonra "Start components as needed" seçilmesi gereklidir.Bu işlemden sonra Was ortamının restart edilmesi gereklidir.
  • Cmd üzerinden IBM BPM'in kurulu olduğu dizine gidilir.
  • cd E:\IBM\BPM\v8.5\bin
  • WASService.exe -add "Profil Adı" -serverName "Server Adı" -profilePath "Profilin kurulu olduğu dizin" -startType automatic -restart false  -stopArgs "-username Bpm Cell userı -password Bpm Cell user Parolası"
  • WASService.exe -add "Server1Profile" -serverName "server1" -profilePath "E:\IBM\BPM\v8.5\profiles\Server1Profile" -startType automatic -restart false  -stopArgs "-username bpmadmin -password xxxxxxxxxxxx"




6 Haziran 2016 Pazartesi

IBM BPM JSONCREATOR TOOLKİT

IBM BPM üzerinde bir proje geliştirme sırasında BPM objelerinden JSON verisine döndürmem gerekti.Hazır bir kaç toolkit kullansam da elimin de daha esnek olabilmesi açısından bu işi yapan bir java class'ı implement edip bunu jar haline getirdikten sonra bir toolkit olarak paketledim.

Paketi derleyebilmeniz için psclnt.jar ve svrcoreclnt.jar jarlarını projenize dahil etmeniz gerekmektedir.Bu jarların güncel hallerini IBM BPM'in kurulu olduğu dizinde arayarak bulabilirsiniz.

JAR paketlerken bu jarları paketinizin içine dahil etmenize gerek yoktur

Ekteki  kodu inceleyebilrisiniz.

5 Mayıs 2016 Perşembe

IBM BPM- SİSTEMDEKİ TÜM AÇIK İŞLER

Süreç yönetimizi sisteminizde kullanılan tüm iş adımları tüm fonksiyonlarını modellemeyi , izlenebilir ,sürdürebilir hale getirmeyi amaçlar.

Süreç yönetimi artık bir lüks değil zorunluluk haline gelmiştir.BPM toolları sizin işe gitmenizi değil,işin size gelmesini tek bir ortamdan tüm işlerinizi erişebilmenizi hedefler.Maili kağıtla gelip giden tüm işleri ortadan kaldırmayı hedefler.

Esas paylaşmak istediğim bilgiye gelirsek;

IBM BPM veritabanına erişmeyi önermez,Dışarı açılabilecek tüm işlemler için özellikle rest api ,web servis ve bpm üzerinde bulunan javascript metotlar ile erişmeyi önerir.

Ancak çalıştığım bir projede sistemdeki tüm açık işleri ve kim yada kimlere assign edildiklerini  bulmam gerekti.

Hızlı sonuca erişmem gerektiği için dbye bağlanıp bir rapor çıkarmak zorunda kaldım.

Sql db2 kurulu bir bpm server üzerinden çalıştırılmıştır.Ufak değişikliklerle Oracle yada Mssql üzerinde çalıştırabilir hale getirebilir.

SELECT
    task.task_id        AS taskid,
    task.close_datetime AS task_tamamlanma_tarihi,
    task.rcvd_datetime  AS task_olusma_tarihi,
    task.activity_name  AS task_activity_name ,
    task.subject        AS task_konu,
    task.GROUP_ID as group_id,
    instance.bpd_instance_id,
    instance.instance_name      surecadi,
    instance.create_datetime AS surec_olusma_tarihi ,
    instance.execution_status ,
    instance.close_datetime AS surec_kapanma_tarihi,
    instance.last_modified_datetime,
    grup.kullanicisicil
FROM
    db2admin.lsw_bpd_instance instance ,
    DB2ADMIN.LSW_TASK task ,
      (
SELECT

grupkisi.group_id group_id,
LISTAGG(kisi.user_id, ', ') WITHIN GROUP(ORDER BY kisi.user_id) as kisibilgisi,
LISTAGG(kisi.user_name, ', ') WITHIN GROUP(ORDER BY kisi.user_name) as kullanicisicil
-- LISTAGG(kisi.full_name, ', ') WITHIN GROUP(ORDER BY kisi.full_name) as kullanici_adi

 FROM
    db2admin.LSW_USR_XREF kisi,
    db2admin.LSW_USR_GRP_MEM_XREF grupkisi  WHERE kisi.user_id=grupkisi.user_id group by  grupkisi.group_id ) grup
WHERE
    task.bpd_instance_id=instance.bpd_instance_id

AND instance.execution_status=1
AND task.close_by IS NULL
AND task.user_id<0 o:p="">
and task.group_id=grup.group_id
union all

select
task.task_id as taskid,task.close_datetime as task_tamamlanma_tarihi,task.rcvd_datetime as task_olusma_tarihi,task.activity_name as task_activity_name
,task.subject as task_konu,kisi.user_id as kullid,

instance.bpd_instance_id,instance.instance_name surecadi,
  instance.create_datetime as surec_olusma_tarihi ,instance.execution_status ,instance.close_datetime as surec_kapanma_tarihi,instance.last_modified_datetime,
  kisi.user_name
  from db2admin.lsw_bpd_instance instance , DB2ADMIN.LSW_TASK task , db2admin.LSW_USR_XREF kisi where task.bpd_instance_id=instance.bpd_instance_id

 and instance.execution_status=1  and task.close_by is null and task.user_id>0

and task.user_id=kisi.user_id and task.EXECUTION_STATUS!=1

14 Mart 2015 Cumartesi

IBM BPM Process Designer Beyaz Ekran (Blank) Problemi

IBM BPM Process Center ortamı süreç geliştirebilmek, deploy edebilmek, debug, ve optimizasyon gibi işlemleri için developerlara Eclipse tabanlı bir geliştirme ortamı  olarak Proccess Designer sunuyor.

Bu ortam eclipse gibi görünmese de temel özelliklerini Eclipse üzerinden alıyor.(IBM zaten nerdeyse hemen hemen her ürünü zaten eclipse tabanlı).

Ancak Process Designer üzerinden login olduktan sonra bazen sizi Process Center ekranında uygulamalar listelenmesi gerekirken bazen sizi bomboş bir sayfa karşılayabiliyor bazen.


Konu ile ilgili olarak Internet Explorer üzerinden çeşitli ayarların yapılması gerektiği söylensede çoğu kişiye çözüm olamayabiliyor. Konu ise bilgisayarınızda çalıştıralacak javaw dosyasının bilgisayarınızca engellenmesi aslında.

Yapmanız gereken bir kaç adım var aslında..

  1. C:\IBM\ProcessDesigner\v8.5\AppClient\java\jre\bin\ klasoru(Process Designer'ın kurulu olduğu dizin) altında javaw exe sinin adını değiştirmek.Akılda kalması adına ben "javawpd" yapıyorum.
  2. Bu değişiklikten sonra Process Designer'ın konfigürasyon dosyası olan bölümde bir değişiklik yapmamız gerekiyor. C:\IBM\ProcessDesigner\v8.5\eclipse.ini dosyasını açtıktan sonra  aşağıda kırmızı ile işaretlediğim bölümü javaw.exe 'den javawpd.exe olarak değiştirmek.
-install
file:.
-configuration
configuration
-name
IBM BPM
-nl
en
-consoleLog
-dir
ltr
-clean
-vm
./AppClient/java/jre/bin/javawpd.exe
-vmargs
-Xms128m
-Xmx512m
-XX:PermSize=128m
-XX:MaxPermSize=128m
-Djavax.net.ssl.trustStoreType=PKCS12
-Djavax.net.ssl.trustStore=./etc/trust.p12
-Djavax.net.ssl.trustStorePassword=WebAS
-Dcom.ibm.CORBA.ConfigURL="file:resources/sas.client.props"
-Dcom.ibm.CORBA.FragmentSize="0"
-Dcom.ibm.SSL.ConfigURL="file:resources/ssl.client.props"
-Djava.security.auth.login.config="file:resources/wsjaas_client.conf"
-Djava.naming.factory.initial=com.ibm.websphere.naming.WsnInitialContextFactory
-Dcom.ibm.bpm.processcenter.url=http://10.0.1.2:9080
-Djava.ext.dirs="./AppClient/java/jre/lib/ext;./AppClient/lib;./AppClient/plugins"
-Dcom.lombardisoftware.core.TWEnvironment.environmentName=AUTHORING_ENVIRONMENT
-DentityExpansionLimit=2147483647
-Djdk.lang.Process.allowAmbigousCommands=true
-Duser.language=en
-Duser.country=
-Duser.variant=




Process Designer'ı kapatıp açıktan sonra bu sorun ortadan kalkacaktır.

9 Mart 2015 Pazartesi

64 bit ortamda 32 bit WAS koşturmak

64 bit bir işletim sistemi üzerine 32 bitlik bir WAS kurmak zorunda kalırsanız

Admin Console'a ve deploy ettiğiniz uygulamaya erişemediğinizi farkedeceksiniz.(Geliştirme ortamınızın da bu opsiyonun disable olduğunuda göreceksiniz.)

Bunun sebebi 64 bit ortama kurulduğunda WAS kendisini ipv6 ortamda çalıştırmaya çalışıyor.

Ancak yarattığımız profile ipv4 ile çalışabilirsin dendiğinde bu sorun ortadan kalkıyor.

Bu sorunu ortadan kaldırabilmek için

WAS_ROOT -> WAS ortamın kurulu olduğu dizin

yourProfile -> run etmeye çalıştığınız profilin adı 

WAS_ROOT/profiles/yourProfile/bin/setupCmdLine.bat   dosyasını admin yetkileriyle açtıktan sonra


SET IBM_JAVA_OPTIONS="-Djava.net.preferIPv4Stack=true" 


satırı eklenmeli.

WAS stop start edildikten sonra bu sorunun ortadan kalktığını göreceksiniz.

3 Şubat 2014 Pazartesi

Web Uygulamalarının Deployment Kabusuna Son

Merhabalar,

 Web uygulamaları geliştirenlerin en büyük kabusudur deployment yapmak.

Kodda yaptığınız değişiklikleri görebilmeniz için uygulamınızı publish etmeniz ve bunu beklemeniz gerekmektedir(Bu size bir kahve molası için zaman tanısa da vaktinizin bir çoğunu beklemek ile geçirir)


Hot deployment destekleyen (server instance) jvm'ler metotlar içinde yapılan değişiklikleri deploy etmenize olanak sağlasa her durum için çözüm oluyor malesef.Örneğin JSF kullanılan bir uygulamada managed bean ya da bir action eklediğinizde yaptığınız değişikleri göremiyorsunuz.

Bu tarzda sıkıntıları aşabilmek içim  yaklaşık olarak 40 framework için  desteği bulunan JREBEL'i kullanmanızı önerebilirim.

Resmi web sitesine

http://zeroturnaround.com/software/jrebel/ adresinden erişebilirsiniz.


Lisanslı kullanabileceğiniz gibi facebook, twitter gibi sosyal ağlarla ücretsiz olarak kullanmanıza olanak veren ücretsiz sürüme sahiptir. (Zaman zaman sizin adınıza tweet atabilir :) yada paylaşımda bulunabilir.)

Ücretsiz kullanım için jrebel'e üye olmanız ve plugini çalıştığınız ortama kurmanız gerekmektedir.
Eclipse'e kurmada hiç bir sıkıntı yaşamadığımı özellikle belirtmek isterim..

Plugin kurulduktan sonra jrebel'in online sitesinden aldığınız license code bilgisini jrebel config center bölümünüze girmeniz yeterli. Bundan sonra kullanacağınız server instanceları ve uygulamaları JREBEL'e belirtmeniz yeterli.(Jrebel, Uygulamanızda rebel.xml dosyası oluşturmaktadır. Hangi paket yada klasör içerisindeki dosyaların otomatik olarak redeploy edileceği bilgisi bu file içerinde saklanmaktadır. Yani istediğiniz file,istediğiniz package, istediğiniz web content klasörünü belirtebiliyorunuz.)

Tek dezanantajı ise bu işlemi belirli periyotlarla yapmanız. Ama zamandan kazandığınız miktarı düşünürseniz bu işlem çok da önemli değil.

Web uygulaması geliştirelenlerin jrebel'i kullanmasını şiddetle tavsiye ediyorum.

 


31 Ocak 2014 Cuma

Hibernate Left Join Referans Problemi

 Hibernate ile ilgili bugün rastladığım bir durumu paylaşmak istiyorum..
Var olan bir tablomdaki iki kolon üzerinden aynı tabloya left join yaptığımda Hibernate bu sonuçları kendi modellerime dönüştürdüğünde gelen verilerde bir sıkıntı olduğunu farkettim.

İkinci left joinimden gelen veri null olarak gelmeliydi.Ancak ilk tablom ile aynı instance id de kayıt geliyordu.


Çalıştırdığım sql bu şekildeydi.


SELECT entry.*,createuser.*, updateuser.* FROM BLOG.ENTRY entry 
LEFT JOIN BLOG.BLOGUSER createuser ON entry.crtuserid=createuser.userid
LEFT JOIN BLOG.BLOGUSER updateuser ON entry.upduserid=updateuser.userid

Bunun için 
Hibernate ile select işlemi için SQLQuery kullanmıştım.Öncelikle kullandığınız tablolara alias vermeli ve sqlquery nesnenize eklemelisiniz.

SQLQuery query= em.createSqlQuery(hql);
query.addEntity("entry", Entry.class);
query.addEntity("createuser", Bloguser.class);
query.addEntity("updateuser", Bloguser.class);

Ancak bu değişikliklerde gelen verinin düzenlenmesine yetmedi.
Araştırmalarımda aynı tablo üzerine yapan left joinlerde select edilen veriler için  braces yani süslü parantez kullanılması öneriliyordu.
 
Sqlimin select kolonlarını braces ile sarmaladıktan sonra istediğim sonucu elde edebildim.
 

SELECT {entry.*},{createuser.*},{ updateuser.*} FROM BLOG.ENTRY entry 
LEFT JOIN BLOG.BLOGUSER createuser ON entry.crtuserid=createuser.userid
LEFT JOIN BLOG.BLOGUSER updateuser ON entry.upduserid=updateuser.userid