Welcome

JBoss JBPM Admin Console-I

Admin console JBPM dağıtımı ile birlikte gelen bir web uygulamasıdır. Jsf-console.war’ı web container’ınıza deploy ettiğinizde çalışması için container’da JbpmDataSource isimli bir JNDI datasource nesnesinin olması gerekmektedir. Ayrıca console uygulamasının mesaj, yetkilendirme gibi kısımlarında kendinize özgü değişiklikler yapmanız pek muhtemeldir. Biz admin console’u kendi uygulamalarımızın içerisinde gömülü biçimde çalıştırmayı tercih ettik. Bu sayede process tanımlarının console vasıtası ile runtimeda istenilen vakitte deploy edilebilmesinin yanında, tanımların hem uygulama tarafından hem de console tarafından aynı anda yönetilebilmesi mümkündür. Admin console’u kendi web uygulamalarımızın içerisinde gömülü olarak çalıştırmak için yaptığımız işlemlerle başlayalım.

Dosyaların ve Dizinlerin Kopyalanması

Jsf-console.war bundle’ı açtığımızda aşağıdaki gibi bir dizin yapısı ile karşılaşırız.


Console’un JSF syafaları ve css dosyası, “app, sa ve ua” dizinlerinde bulunmaktadır. Biz bu üç dizindeki dosyaları ve images dizinini tek bir dizin (jbpm-console) altında topladık. JSF, css, imaj gibi dosyaların tek bir dizin altında toplanması ile birlikte bu dosyalardan diğer dosyalara olan referansların güncellenmesi gerekti. Ayrıca uygulamaların jbpm-console dizini yerine başka bir dizin adı kullanabilmelerine olanak sağlamak amacı ile bir property de uygulama içerisine eklendi.

#jbpm console ayarlari
jbpm.console.base.path=/jbpm-console

Bu sayade JSF içindeki sayaflardan diğer sayfalara referans verilirken url ifadesinin başına jbpm.console.base.path’in değerini veren EL’i ekleyerek JSF sayfalarının dizin değişikliklerinden etkilenmemesini sağladık.

Web.xml’deki Değişiklikler

Bir sonraki adımda jbpm-console’un çalışabilmesi için aşağıdaki tanımlamaların web.xml dosyasına eklenmesi gerekti.

    <listener>
    <listener-class>org.jbpm.web.JbpmConfigurationCloser</listener-class>
</listener>

<servlet>
    <servlet-name>GPD Deployer Servlet</servlet-name>
    <servlet-class>org.jbpm.web.ProcessUploadServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>GPD Deployer Servlet</servlet-name>
    <url-pattern>/upload/*</url-pattern>
</servlet-mapping>

<servlet>
    <servlet-name>Faces Servlet</servlet-name>
    <servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>/jbpm-console/pi/*</url-pattern>
</servlet-mapping>

<servlet-mapping>
    <servlet-name>Faces Servlet</servlet-name>
    <url-pattern>*.jsf</url-pattern>
</servlet-mapping>

Faces-config.xml’deki Değişiklikler

faces-config.xml içerisinde aşağıdaki view-handler ve navigation-handler tanımlarının yapılması gerekiyor.

<view-handler>org.jboss.gravel.QueryPreservingViewHandler</view-handler>

<navigation-handler>org.jboss.gravel.navigation.GravelNavigationHandler</navigation-handler>

QueryPreservingViewHandler içerisinde SWF ile uyumlu çalışabilmesi için küçük bir değişiklik yapmak gerekti. QueryPreservingViewHandler sadece orjinal action URL’de query string mevcut değilse request’deki query string’i URL’e append edecek biçimde değiştirildi.

Jbpm4jsf-config.xml Dosyasının Oluşturulması

WEB-INF dizini altında jbpm4jsf-config.xml dosyasını oluşturmak gerekiyor. Dosyanın içeriği aşağıdaki gibi olmalıdır. Dosyayı jsf-console’un açılmış halindeki WEB-INF dizini altından da alabilirsiniz.

<?xml version="1.0" encoding="UTF-8"?>
    <jbpm4jsf-config xmlns="http://jbpm.org/jbpm4jsf/config">
    <!-- This entry controls whether to map JSF user authentication to
    actor IDs. Set to false if the authentication scheme used by
    the administration console is not related to the set of actors
    that is used by your processes.-->

    <authentication-service>
        <use-jsf-actor>true</use-jsf-actor>
    </authentication-service>
    <!-- This entry facilitates the usage of process image URLs -->
    <process-file-matcher>
        <pattern>^/jbpm-console/pi/(\d+).jpg

lt;/pattern>
        <file-name>processimage.jpg</file-name>
        <content-type>image/jpg</content-type>
    </process-file-matcher>
</jbpm4jsf-config>

JBPM Console’a Erişim Kontrol Dosyasının Oluşturulması

Jsf-console açıldığında WEB-INF dizini altında access.properties dosyası yer alacaktır. JBPM Console bu dosyasdaki tanımlara göre console daki fonksiyonlara kullanıcıların rol bazında erişimlerini yönetmektedir.

<gd:loadProperties path="access.properties" var="access"/>

Dosyayı t_loggedin.xhtml doyası içerisinde aşağıdaki JSF component’i vasıtası ile yüklemektedir. access.properties dosyasının içerisinde console’un fonksiyonlarının karşısına hangi rollerin erişebileceğini yazmak gerekiyor. Örneğin;

# Process definition operations
role.process.deploy=ROLE_ADMIN
role.process.delete=ROLE_ADMIN
role.process.start=

Burada process tanımlarını deploy etmek ve silmek için gerekli arayüze erişim yetkisi sadece ROLE_ADMIN rolüna sahip kullanıcılara verilmiştir. Process tanımından yeni bir process instance başlatmak ise bütün kullanıcılara açılmış bir özelliktir. Eğer bir özelliği bütün kullanıcılara kapatmak isterseniz, bu özelliğin karşısına geçersiz bir rol tanımı girmeniz yeterlidir.

Uygulamalarımızda güvenlik altyapısı olarak Acegi Security Framework’ü kullanıyoruz. Acegi’nin SecurityContextHolderAwareRequestFilter özelliği sayesinde o andaki web request’inin isUserInRole() metod çağırsının sisteme Acegi ile login olmuş kullanıcının rol bilgilerini kullanarak cevap dönmesi sayesinde JBPM console’un sistemimizdeki kimliklendirme ve yetkilendirme altyapısına entegrasyonu için ilave birşey yapmaya gerek kalmadı.

i18n Özelliğinin Ayarlanması

Jsf-console’un WEB-INF/classes dizini altında messages.properties dosyası bulunmaktadır. Bu dosya içerisinden JBPM console’un UI ve kullanıcı mesajları kullanıcıya uygun bir dile çevrilebilir. Dosyayı uygulamanız içerisinde WEB-INF/classes dizini altına kopyalamalısınız.

<f:loadBundle var="msgs" basename="messages"/>

messages.properties dosyası t_base.xhtml içerisinden yüklenmektedir. Console’un farklı dilleri desteklemesi söz konusu ise messages_lang_country.properties formatında desteklenen locale’e uygun versiyonunun oluşturularak uygulamanıza eklenmesi yeterli olacaktır.

Ortak SessionFactory Kullanımı

JBPM Console o anda uygulamanın execution context’i içerisinde default JbpmConfiguration instance’ını kullanarak yeni bir JbpmContext oluşturmaya çalışmaktadır. LocalJbpmConfigurationFactoryBean ile oluşturulan JbpmConfiguration kullanılmadığı için DbPersistenceServiceFactory’nin uygulamanın spring managed SessionFactory nesnesinin dışında yeni bir SessionFactory nesnesi oluşturması söz konusu olmaktadır. Bu problemi aşmak için custom bir DbPersistenceServiceFactory yazılarak spring managed SessionFactory nesnesinin dönülmesi sağlanmıştır. Custom DbPersistenceServiceFactory jbpm.cfg.xml içerisinde persistence service olarak belirtilmelidir.

Bir sonraki yazımda JBPM Console’u incelemeye devam edeceğiz. Örnek bir process’i JBPM GPD ile oluşturup console ile deploy ettikten sonra process’i baştan sona console ile yürüteceğiz.

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

This site uses Akismet to reduce spam. Learn how your comment data is processed.