Forums

Home » Liferay Portal » česky a slovensky

Combination View Flat View Tree View
Threads [ Previous | Next ]
toggle
Karel Teniska
Globálni uložistě uživatele
September 14, 2012 1:32 AM
Answer

Karel Teniska

Rank: Junior Member

Posts: 68

Join Date: June 26, 2012

Recent Posts

Ahoj všeci. Mam založene vlakno na anglickem foru:

http://www.liferay.com/community/forums/-/message_boards/message/16402214

A řeším jak rozhcodit globální uložiště uživatele v ramci jedne session. POtzřebuju se k session dostat odkudkoliv. Ale nechce to šlapat:0(

Pomocí EXT pluginu přepisuju

LoginAction

1
2HttpSession session = PortalSessionThreadLocal.getHttpSession();
3session.setAttribute("ATTR1", "TEST");


1
2HttpSession session = PortalSessionThreadLocal.getHttpSession();
3System.out.println("DEBUG: PRITN SESSION = " +  (String)session.getAttribute("ATTR1")); <- NullPointerException


Nevíte pro tam nic nemám? Docela mi hoři koudel u zadku , moc by mi to pomohlo emoticon(
Karel Teniska
RE: Globálni uložistě uživatele
September 14, 2012 2:19 AM
Answer

Karel Teniska

Rank: Junior Member

Posts: 68

Join Date: June 26, 2012

Recent Posts

Tak jsem že když volám toto:

1
2HttpSession session = PortalSessionThreadLocal.getHttpSession();


ve třídě PortalLDAPUtil konkretně v metodě getContext tak mi onu session 8x vrati a po 9 je NULL.

Nevite někdo co se s tou session muze stat? :0(
Jiri Splichal
RE: Globálni uložistě uživatele
September 14, 2012 3:03 AM
Answer

Jiri Splichal

Rank: New Member

Posts: 15

Join Date: September 27, 2010

Recent Posts

Ahoj, taky moc nechápu proč používáš PortalSessionThreadLocal... Ale jinak session se může měnit např. po loginu, pokud máš zapnutý anti phishing. vyloguj si session ID pro porovnani, pripadne debugovani taky neni spatna moznost jak to podrobne prozkoumat co se ti tam deje :-)
Karel Teniska
RE: Globálni uložistě uživatele
September 14, 2012 3:06 AM
Answer

Karel Teniska

Rank: Junior Member

Posts: 68

Join Date: June 26, 2012

Recent Posts

Proč to použivám? Jak se jinak dostanu třeba z PortalLDAPUtil k session? Když nemám k dispozici request objekt?

Mma pocit jakoby ty operace kde vyuziva onu funkci getContext spusti vjinem vlakne a opro tam pak ta session neni.
Jiri Splichal
RE: Globálni uložistě uživatele
September 14, 2012 3:18 AM
Answer

Jiri Splichal

Rank: New Member

Posts: 15

Join Date: September 27, 2010

Recent Posts

A proč potřebuješ v util třídě na týhle servis úrovni k sešně? máš nějaký zásadná důvod = neni lepší si to navrhnout nějak jinak, a k session uživatele přistupovat někde na logičtějším místě? (kde se k ní taky normálně dostaneš?). Klidně to můžem probrat mejlem...
Tomas Polesovsky
RE: Globálni uložistě uživatele
September 14, 2012 3:19 AM
Answer

Tomas Polesovsky

LIFERAY STAFF

Rank: Liferay Master

Posts: 597

Join Date: February 13, 2009

Recent Posts

Ahoj Petře,

omlouvam se, asi jsem úplně nepochopil tvůj problém, čeho se vlastně snažíš dosáhnout?

Import z LDAPu může běžet samostatně ve vlákně, nezávisle na tom, zdali se někdo přihlašuje nebo ne. Není inicováno žádným uživatelem.
Karel Teniska
RE: Globálni uložistě uživatele
September 14, 2012 3:34 AM
Answer

Karel Teniska

Rank: Junior Member

Posts: 68

Join Date: June 26, 2012

Recent Posts

Nic se neděje, problém je v tom že "ohýbám" liferay a to tim způsobem, že každá organizace v liferay ma v LDAPu svou větev, čili je nutno jak při loginu , tak i exportu směrovat liferay pokažde jinak do jiné větve. Tak jsem si udělal ono mé sprasené uložiště kde jsem si ukladal informaci o aktuálním uživateli a na zakladě této informace ohybal. Vše pracovalo perfektně než jsem nezkusili pracovat z Liferay vice lidi najednou. Tehdy jsem přišel na svuj fatálni omyl založený na neznalosti JAVY (progamuju v ni 2 mesice) respektive Liferay a J2EE. Jak jsme řekl vše fungovalo v pohodě když jsem měl ono "globalni uložiště" implementováno výše uvedeným způsobem, avšak vše zhořelo. Nyni se pokouším o něco jiného. Snad to bude k něčemu. Ale i tak by mi pomohlo něco jako je uživatelská session na kterou si mužu šahnout odkudkoliv. Rozsitili se mi oči když jsi mi napsal o té třídě , ale vzápěti opět mrtvý bod.

Nechce se mi věřit že by to nikdo před tím ještě neřešil :0(
Tomas Polesovsky
RE: Globálni uložistě uživatele
September 14, 2012 3:51 AM
Answer

Tomas Polesovsky

LIFERAY STAFF

Rank: Liferay Master

Posts: 597

Join Date: February 13, 2009

Recent Posts

Já bych to řešil tak, že bych uživateli vytvořit custom atribut (expando), ve kterém by bylo jeho umístění v LDAPu.

Při přihlášení, když se importují údaje o uživateli z LDAPu, tak bych to sesynchronizoval. A když budeš exportovat uživatele, načteš si to jeho umístění z databáze.

Bohužel nevím, jako verzi LIferaye používáš, takže ti asi více neporadím.

-- tom
Karel Teniska
RE: Globálni uložistě uživatele
September 14, 2012 4:05 AM
Answer

Karel Teniska

Rank: Junior Member

Posts: 68

Join Date: June 26, 2012

Recent Posts

Určitě dobrá myšlenka , ale bohužel situace je složitější :0(

Nevim na základě čeho bych se třeba do db dostal z oné PortalPDAPUtil abych ji řekl kam má exportovat, nebo spíš jaký context má vratit exporteru. Mimo to situace je ejště složitější tím že Liferay konsoliduju s dalšími systémy. Například organizace a administrátory daných organizaci nevytvářím v Liferay přímo ale skrze webové služby pomocí synchronizačního jobu který je napojeny na CRM systém. Pak tam mám portlety, které zprostředkovávají SSO do jiných systému. No je to zkrátka velice veselé :0(

Ale i tak děkuji moc za rady. Snad bude fungovat to co mam rozdělané. Jak ne tak jud na rekvalifikaci na pekaře a budu mit klid.
Jiri Splichal
RE: Globálni uložistě uživatele
September 14, 2012 4:10 AM
Answer

Jiri Splichal

Rank: New Member

Posts: 15

Join Date: September 27, 2010

Recent Posts

Taky hlasuju pro expando atribut uzivatele, pouzivam to taky timhle zpusobem pro rozliseni zdroje uzivatelu. Akorat misto prepisovani LdapUtily, si spis pisu vlastni synchronizacni modul, ale to je z tohodle pohledu celkem jedno.
Karel Teniska
RE: Globálni uložistě uživatele
September 14, 2012 4:22 AM
Answer

Karel Teniska

Rank: Junior Member

Posts: 68

Join Date: June 26, 2012

Recent Posts

No abych se přiznal jsme už nahlodaným když o tom přemýšlím tak by mi to možná do te maškarády zapadlo.

Nechci byt pohodlný , ale jak jsme psal hoři mi u zadku časově, bylo by moc troufalé požádat o postup implementace uživatelského atributu Vámi uvedeným způsobem , nebo kousek kodu.? V podstatě princip mam ted stejný, jen mám vytvořene nějake separe uložiště v paměti. Ale Vámi deklarované řešení je zcela určitě čistější.

Jinak ještě prosím dotaz na zkušenější. Když si vytvořim ěnjaký ten "registr" tak musím nějake obsluhovat přistup? Čili když mi tam poleze x uživatelů , něco jako kritickou sekci či něco podobného?

Děkuji moc za rady
Artur Linhart
RE: Globálni uložistě uživatele
September 14, 2012 11:25 PM
Answer

Artur Linhart

Rank: Expert

Posts: 458

Join Date: September 13, 2007

Recent Posts

Google je Tvůj přítel ;-)
Orientoval bych se také podle zdrojáků např. třídy ExpandoColumnLocalServiceUtil (popř. ExpandoTableLocalServiceUtil)
Ohledně expando atributů je asi dobré pohledat někde ve wiki, třeba tady. Z toho Tě asi bude nejvíc zajímat tahle řádka:
1user.getExpandoBridge().setAttribute("company-name", "My Company");

ExpandoBridge má i metody pro přidání sloupečku....
K tomu, kdy a jak je dobré vytvořit expando sloupečky se něco málo říká třeba v tomhle threadu...
Artur Linhart
RE: Globálni uložistě uživatele
September 14, 2012 11:52 PM
Answer

Artur Linhart

Rank: Expert

Posts: 458

Join Date: September 13, 2007

Recent Posts

Ještě k té obsluze přístupu a konfliktům - když se podíváš do zdroje
portal-impl\src\com\liferay\portlet\expando\model\impl\ExpandoBridgeImpl.java
tak uvidíš, že se při nastavování hodnoty volá ExpandoValueLocalServiceUtil.addValue
takže aniž bych šel moc do hloubky tak mi připadá, že "poslední commit vítězí" ale to je celkem irelevantní vzhledem k tomu, že ten atribut u každého uživatele budeš nastavovat "jednou za rok" - rozhodně mi připadá, že je konfliktní potenciál o několik řádů menší, než např. při updatování přímo základních atributů entity "User". Takže bych konflikty asi nijak neřešil...

Obecně, pokud je atributů příliš, nebo obsahují příliš dat (tzn jejich data by mohla vypadávat z keší) a/nebo přistupuje se k nim příliš často (třeba mnohokrát v každém requestu) tak se z hlediska výkonu spíš vyplatí uvažovat např. o extra entitě čímž se ušetří nějaké dotazy, dá se regulovat kolik má být instancí dané entity v keši druhé úrovně a tak.

Sám sice nemám s expando atributy z výkonového hlediska až tak moc moc zkušeností a nevím kde přesně se láme ta výhodnost toho či onoho ale takhle od zeleného stolu mi přijde že ani jedna z těch podmínek co jsem psal v předchozím odstavci není myslím u tohoto použití splněna a proto není třeba si s tímhle snad tolik lámat hlavu.
Ondřej Životský
RE: Globálni uložistě uživatele
September 15, 2012 2:11 PM
Answer

Ondřej Životský

Rank: Junior Member

Posts: 28

Join Date: March 11, 2011

Recent Posts

Přesně....

Jen drobnost - při používání ExpandoBridge se kontrolují oprávnění na Expando sloupce. Takže je třeba je správně nastavit nebo přistupovat přímo přes Expando*LocalServiceUtil. Někdy bývá problém u automatických JOBů (Synchronizace, ...), protože v novém vlákně v ThreadLocal není žádný uživatel, takže se oprávnění berou jako pro Guesta.