10. července 2008

Verzování entit - JBoss Envers

Sledování historie změn není nijak výjimečný požadavek, a proto mě i celkem překvapuje, že na tomto poli nejsou (nebo jsem nenašel) skoro žádné open-source projekty, které by toto řešily. Jeden jsem však našel a jmenuje se JBoss Envers.

Nemá cenu opisovat, to co je uvedeno na webu projektu, jen bych zase uvedl pár poznámek.

Envers potřebuje pro svoji práci Hibernate a Hibernate Entity Manager.

Nyní se projekt nachází ve verzi 1.0.0.Beta2 - kromě verzování atributů entit zvládá základní vazby typu @OneToOne, @OneToMany a @ManyToOne. Zatím neumí (mělo by být ve verzi 1.1.0) takové vazby, kde je automaticky vytvořena vazební tabulka (join table), tedy např. @ManyToMany, ale mohou to být třeba i vazby @OneToMany. Do jisté míry to lze obejít tak, že si vytvořím vlastní vazební entitu a tím pak budu mít pouze vazby @OneToMany nebo @ManyToOne.

Velice příjemné je, že lze vytvořit ANT task, který umí generovat datové schéma včetně tabulek pro verzování a pro evidenci revizí.


Další zdroje:

7. července 2008

Spam: nabídka spolupráce

Dneska budu trochu spamovat a využiji svůj blog pro nabídku pracovní spolupráce. Od srpna začínám působit na volné noze a rád bych vám touto cestou nabídl spolupráci při vývoji softwaru.

Základní informace o mé osobě naleznete na LinkedIn a v případě zájmu mě můžete kontaktovat přímo na adrese pjuza zavináč seznam.cz.

Možná se hned ptáte proč? Těch důvodů je více a od každého něco: touha si to zkusit, nezávislost, možnost vyzkoušení více projektů a prostředí a samozřejmě také snaha o větší peníze. Sám jsem zvědavý, jaké budu mít pocity třeba za rok, ale každopádně jsem nyní rád, že jsem se už rozhodl.

6. července 2008

NTLM a Spring security

Ještě před pár dny jsem skoro nevěděl, co to je NTLM a dnes tento autentifikační protokol používám v mé aplikaci.
Našel jsem na jednom blogu parádní článek, kde je víceméně vše podstatné k implementaci pomocí Spring security řečeno. Nemá cenu se tedy opakovat, spíše bych přidal některé moje poznámky a doplnění:

  • autor článku místo ukázky zřetězení filtrů (Virtual filter chain resp. FilterChainProxy) znovu vložil již dříve uvedený kus kódu. Zde bych to tedy napravil. Pořadí filtrů není libovolné, je nutné si dát pozor na to, že filtr NtlmProcessingFilter musí být za filtrem ExceptionTranslationFilter. Já osobně jsem použil toto zřetězení:
    /ntlm/**=httpSessionContextIntegrationFilter,logoutFilter,ntlmExceptionTranslationFilter,ntlmFilter,filterInvocationInterceptor

  • druhá věc, na kterou je potřeba si dát pozor je ta, že filtr NtlmProcessingFilter slouží pouze pro autentifikaci, nikoliv pro autorizaci uživatelů. Je zde potřeba myslet na to, že při načítání UserDetails pomocí UserDetailsService musí být hodnota uživatelského hesla prázdná. Pro testovací účely si načítám informace o uživatelích z properties souboru (InMemoryDaoImpl), kde mám tento řádek (pozice pro heslo není vyplněna):
    pjuza=,ROLE_ANALYST, ROLE_READER

  • V článku jsem nepochopil autorovu implementaci UserDetailsAuthenticationProvider. Já jsem nic podobného dělat nemusel. Jediné co jsem musel nakonfigurovat pro NTLM byly filtry NtlmProcessingFilter, ExceptionTranslationFilter a musel jsem tyto filtry přidat do FilterChainProxy.

  • NTLM je oficiálně až ve Spring security. Nicméně i v Acegi security lze využít NTLM, viz článek Acegi Security and NTLM.


Další zdroje k implementaci NTLM: