2010-09-20 24 views
5

Projemizde, Uygulamadaki bazı Öğeler için yapılan değişikliklerin bir tür kaydını tutmamız gereken bir gereksinimimiz var. Uygulama Struts, Spring ve Hibernate tabanlı bir Java Web Uygulamasıdır. Bu durumda ne gibi yaklaşımlar kullanılmıştır?Java Web Uygulamasındaki Varlık Değişiklikleri

  • İlgili tablolardaki tetikleyiciler tek bir fikirdir, ancak kolayca korunamazlar mı? ve belki de işlemlerin bir parçası olmamalıdır (tetikleyiciler başarısız olursa tamam, ancak varlık güncelleme işlemleri başarısız olmamalıdır).
  • AoP'yi bunun için bir kesişen kaygı kaynağı olduğundan kullanın, ancak yalnızca varlık değiştiğinde değerlerin yakalanmasında olduğu gibi çok ayrıntılı olmalıdır. (Tüm düzenlemeler karşılık gelen farklı yöntemlere sahip değildir ... tek bir java Metodu'nda birçok düzenleme gerçekleşir).
  • Hazırda Bekleme Olayı Dinleyicilerini kullanın.

Bu tür etkinlikleri yapmak için başka yaklaşım var mı?

cevap

3

Eğer

Tüm düzenlemeler bunlara karşılık gelen farklı yöntemler yok ... birçok düzenlemeler tek java Yöntem meydana dediğim için

yönteminiz gibi bir argüman almak bile parametresi ve onun ilişkilerini alabilirsiniz, AOP hala iyi bir fikir olabilir.

hazırda keseni uygulama incelemek ve/veya silinmiş veya yüklü, kaydedilen güncellenir önce kalıcı bir nesnenin özelliklerini değiştirmenize olanak verir: Ben kuvvetle bu nice article

hazırda belgelerine kendisi diyor görmek için tavsiye . Bunun için olası bir kullanım, denetim bilgilerinin izlenmesidir.

Ama aynı zamanda

Bir Bahar yönetilen İşlem kullanırsanız birden oturumları potansiyel eş zamanlı

bu önleme kullanacak beri, sessionspecific durumları saklamak olmadığından emin olun diyor oturumFactory.getCurrentSession() kullanarak geçerli Konuya takılmış oturumu alabilirsiniz.

public boolean onSave(Object entity, Serializable id, Object[] state, String[] propertyNames, Type[] types) { 
    if(entity instanceof SomeEntity) { 
     Session session = sessionFactory.getCurrentSession(); 

görün getCurrentSession(), daha sonra küresel bir dinleyici (SessionFactory bağlı) yerine (açılan Oturum bağlı) yerel bir hazırda önleme oluşturmak ve gereken Değilse

, kurulum belgeleri onun Tetikleyiciler hakkında

AuditableInterceptor interceptor = new AuditableInterceptor() 
Session session = sessionFactory.openSession(interceptor); 

/** 
    * do it before processing anything if you use local interceptor 
    */ 
interceptor.setSession(session); 

oturumu, bu DB yönetiminin gibi diğer konularda bağlıdır (DB yönetim erişimi vardır. DBA konuş değilse en iyi bahistir).

+0

Bilgi için teşekkürler Arthur. Basit uygulama için Hazırda Bekleme Olayı Dinleyicisi'ni genişletmeye çalışıyorum. Genel amaçlı açıklama için –

+0

+1. – Bozho

+0

+1 gibi Bozho dedi –

4

JBoss Envers seçmeyi ve sürümleri desteklemeyi destekler - bir göz atın.

+0

İlginç (+1) Bunu başarıyla kullanıyor musunuz? –

+0

@Arhtur - hayır, alas. Ama bunu kullanan ve iyi olduğunu söyleyen insanları biliyorum :) – Bozho

+0

Ve +1 de. Envers burada uygun görünüyor. –

İlgili konular