Category Archives: wps

Changing course slightly towards BRMS with BPM


With the IBM Certified Application Developer – WebSphere ILOG JRules V7.0 certificate and working with IBM WebSphere Business Process Management (WebSphere BPM) runtime and development environments on a daily basis, I thought I’d give BRMS and BPM a try with the products like IBM WebSphere Process Server (WPS) 7, IBM WebSphere Integration Developer (WID) 7 and IBM WebSphere ILOG JRules 7.

There’re a couple of cases where they meet business requirements very easily (and likely better than the other tandems) and so the course of the blog has changed slightly with focus on three products – ILOG JRules, WID and WPS – rather than one. I’m working with these products almost every day (on projects as a WebSphere consultant and/or as a course instructor) so it’d let me share the findings hoping there’re others out there who benefit from them too. There’s yet another idea to find some spare cycles and learn/compare with their open source alternatives – JBoss Rules (aka Drools) and Apache ODE (possibly JBoss jBPM, but I’m rather interested in WS-BPEL engines and am not sure if jBPM supports it).

Just to let you appreciate the “beauty” of IBM WebSphere Integration Developer 7, which is a integrated development environment (IDE) for IBM WebSphere Process Server, I’ve just stumbled upon a solution for my recent problem with installing it atop 64-bit Red Hat Enterprise Linux 5.5. When you delete saved files for rollback, WID7 refuses to work – Business Integration perspective and view is not available after deleting saved files for rollback. The solution is quite simple – do not remove the files. Do less to do more and you’ll be fine – isn’t it a nice solution?! 🙂

Advertisements

Przyłączenie węzła (federacja) za pomocą addNode i DoNotDoAddNodeException oraz Upload retry limit exceeded for file


Podczas tworzenia profilu zarządzanego (ang. managed profile) poleceniem managedprofiles istnieje możliwość przyłączenia (federacja) do zarządcy środowiskiem Dmgr (ang. deployment manager). Najpierw tworzony jest sam profil (katalog konfiguracyjny), a następnie rozpoczyna się proces przyłączania. Parametrem, który kontroluje, czy wykonać proces przyłączenia jest -dmgrHost. Jeśli istnieje przyłączanie odbędzie się w ramach tworzenia profilu. Pełne polecenie do utworzenia profilu zarządzanego IBM WebSphere Process Server (WPS) to:

./bin/manageprofiles.sh -create -templatePath /opt/IBM/WebSphere/ProcServer/profileTemplates/managed.wbiserver -profileName Fabric01 -nodeName fabricNode02 -enableAdminSecurity true -adminUserName admin -adminPassword password -dbDelayConfig true -dbName wpsdb -dbHostName 10.10.10.144 -dbServerPort 1521 -dbType oracle10g -dbDriverType oracle_thin -dbJDBCClasspath /opt/IBM/WebSphere/ProcServer/oracleDriver -dmgrHost 10.10.10.141 -dmgrPort 8879 -dmgrAdminUserName admin -dmgrAdminPassword password

Nie jestem pewien, czy wszystkie parametry są konieczne, ale kluczem są parametry -create, -templatePath i wspomniany dmgrHost.

Niestety, ostatnim razem przy zestawianiu środowiska klastrowego WPSa 6.2 spotkałem się z następującym wyjątkiem: ADMU0111E: Program exiting with error: com.ibm.ws.management.tools.DoNotDoAddNodeException. Rozwiązaniem była synchronizacja zegarów na obu serwerach – Dmgr i węzła. A skąd ten wniosek? Wiadomo, że nie z samego wyjątku 🙂

Na zakończenie managedprofiles dostałem komunikat o jakimś błędzie i że odpowiedzi mam szukać w /opt/IBM/WebSphere/ProcServer/logs/manageprofiles/Fabric01_create.log. A tam:


<record>
<date>2009-09-03T19:52:57</date>
<millis>1252025577787</millis>
<sequence>10002</sequence>
<logger>com.ibm.ws.install.configmanager.actionengine.ant.utils.ANTLogToCmtLogAdapter</logger>
<level>WARNING</level>
<class>com.ibm.ws.install.configmanager.logging.LogUtils</class>
<method>logException</method>
<thread>10</thread>
<message>/opt/IBM/WebSphere/ProcServer/profileTemplates/managed.wbiserver/actions/executeManagedProfileSetup.ant:235: exec returned: 255
at org.apache.tools.ant.taskdefs.ExecTask.runExecute(ExecTask.java:591)
at org.apache.tools.ant.taskdefs.ExecTask.runExec(ExecTask.java:617)
at org.apache.tools.ant.taskdefs.ExecTask.execute(ExecTask.java:452)
at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:275)
at org.apache.tools.ant.Task.perform(Task.java:364)
at org.apache.tools.ant.Target.execute(Target.java:341)
at org.apache.tools.ant.Target.performTasks(Target.java:369)
at org.apache.tools.ant.Project.executeSortedTargets(Project.java:1216)
at org.apache.tools.ant.Project.executeTarget(Project.java:1185)
at org.apache.tools.ant.helper.DefaultExecutor.executeTargets(DefaultExecutor.java:40)
at org.apache.tools.ant.Project.executeTargets(Project.java:1068)
at com.ibm.ws.install.configmanager.actionengine.ant.utils.InProcessAntRunner.runBuild(InProcessAntRunner.java:785)
at com.ibm.ws.install.configmanager.actionengine.ant.utils.InProcessAntRunner.start(InProcessAntRunner.java:234)
at com.ibm.ws.install.configmanager.actionengine.ANTAction.executeActionUsingAnInProcessANTCall(ANTAction.java:94)
at com.ibm.ws.install.configmanager.actionengine.ANTAction.executeAction(ANTAction.java:41)
at com.ibm.ws.install.configmanager.ConfigManager.executeAllActionsFound(ConfigManager.java:828)
at com.ibm.ws.install.configmanager.ConfigManager.executeActions(ConfigManager.java:547)
at com.ibm.ws.install.configmanager.ConfigManager.launch(ConfigManager.java:322)
at com.ibm.ws.install.configmanager.launcher.Launcher.mainForInProcessCMTCallers(Launcher.java:65)
at com.ibm.wsspi.profile.WSProfile.doAugment(WSProfile.java:707)
at com.ibm.wsspi.profile.WSProfile.stackCreate(WSProfile.java:332)
at com.ibm.wsspi.profile.WSProfile.create(WSProfile.java:171)
at com.ibm.ws.profile.cli.WSProfileCLICreateProfileInvoker.executeWSProfileAccordingToMode(WSProfileCLICreateProfileInvoker.java:86)
at com.ibm.ws.profile.cli.WSProfileCLIModeInvoker.invokeWSProfile(WSProfileCLIModeInvoker.java:211)
at com.ibm.wsspi.profile.WSProfileCLI.invokeWSProfile(WSProfileCLI.java:283)
at com.ibm.wsspi.profile.WSProfileCLI.main(WSProfileCLI.java:60)
</message>
</record>

i dalej w /opt/IBM/WebSphere/ProcServer/profileTemplates/managed.wbiserver/actions/executeManagedProfileSetup.ant na linii 235:

<target name="runAddNodeWithoutPortsFileWithUsernamePassword"
description="Runs the addNode utility to federate the profile without ports file."
if="RUN_WITHOUT_PORTFILE_WITH_USERPASSWORD" unless="hasBeenFederated">
<wscmtlog>Enter runAddNodeWithoutPortsFileWithUsernamePassword, username=${dmgrAdminUserName}, password=***** </wscmtlog>
<echo message="Federating to ${dmgrHost}:${dmgrPort} -username ${dmgrAdminUserName} -password ******, the output will be recorded in: ${profilePath}/logs/runAddNode.log"/>
<echo message="The federateLaterProcServer check was resolved to ${federateLaterProcServer}"/>

<exec executable="${ADDNODE_EXECUTABLE}" failonerror="true"
output="${profilePath}/logs/runAddNode.log">
<arg value="${dmgrHost}"/>
<arg value="${dmgrPort}"/>
<arg value="-username" />
<arg value="${dmgrAdminUserName}" />
<arg value="-password" />
<arg value="${dmgrAdminPassword}" />
<env key="WAS_USER_SCRIPT" value="${profilePath}/bin/${setupCmdLineName}"/>
<env key="PROFILE_CONFIG_ACTION" value="true"/>
<env key="Path" path="${WAS_HOME}${separatorFile}bin"/>
</exec>
<wscmtlog>Node was federated from runAddNodeWithoutPortsFileWithUsernamePassword </wscmtlog>
<property name="hasBeenFederated" value="true"/>
</target>

Stamtąd już rzut oka na /opt/IBM/WebSphere/ProcServer/profiles/Fabric01/logs/addNode.log i mam powód:

[9/3/09 19:52:57:074 CDT] 0000000a AdminTool E ADMU0111E: Program exiting with error: com.ibm.ws.management.tools.DoNotDoAddNodeException
at com.ibm.ws.management.tools.NodeFederationUtility.failAddNodeBecauseClocksNotInSync(NodeFederationUtility.java:1577)
at com.ibm.ws.management.tools.NodeFederationUtility.doCheckIfAddNodeIsOkToRun(NodeFederationUtility.java:1348)
at com.ibm.ws.management.tools.NodeFederationUtility.runTool(NodeFederationUtility.java:499)
at com.ibm.ws.management.tools.AdminTool.executeUtility(AdminTool.java:264)
at com.ibm.ws.management.tools.NodeFederationUtility.main(NodeFederationUtility.java:264)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:618)
at com.ibm.wsspi.bootstrap.WSLauncher.launchMain(WSLauncher.java:183)
at com.ibm.wsspi.bootstrap.WSLauncher.main(WSLauncher.java:90)
at com.ibm.wsspi.bootstrap.WSLauncher.run(WSLauncher.java:72)
at org.eclipse.core.internal.runtime.PlatformActivator$1.run(PlatformActivator.java:78)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.runApplication(EclipseAppLauncher.java:92)
at org.eclipse.core.runtime.internal.adaptor.EclipseAppLauncher.start(EclipseAppLauncher.java:68)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:400)
at org.eclipse.core.runtime.adaptor.EclipseStarter.run(EclipseStarter.java:177)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:79)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:618)
at org.eclipse.core.launcher.Main.invokeFramework(Main.java:336)
at org.eclipse.core.launcher.Main.basicRun(Main.java:280)
at org.eclipse.core.launcher.Main.run(Main.java:977)
at com.ibm.wsspi.bootstrap.WSPreLauncher.launchEclipse(WSPreLauncher.java:329)
at com.ibm.wsspi.bootstrap.WSPreLauncher.main(WSPreLauncher.java:92)

Szczególnie ta linia z at com.ibm.ws.management.tools.NodeFederationUtility.failAddNodeBecauseClocksNotInSync(NodeFederationUtility.java:1577). Wygląda na rozsynchronizowane czasy na obu serwerach. I faktycznie:

bash-3.2# date
Thu Sep 3 20:02:27 CDT 2009

bash-3.2# date
Thu Sep 3 13:02:48 CDT 2009

Po nastawieniu zegarów wszystko poszło dalej gładko. Więcej w addNode command best practices (niestety nie mogę znaleźć odpowiedniej strony w dokumentacji do wersji 6.2).

CWTKE0062W: Virtual Member Manager (VMM) entity… i Human Task Manager (HTM)


Podczas wdrażania bardzo prostego procesu biznesowego z wyłącznie pojedynczym zadaniem (ang. human task) WPS 6.2.0.1 zgłosił komunikat:

[8/25/09 19:13:38:851 CEST] 000000c4 HTM           W   CWTKE0062W: Virtual Member Manager (VMM) entity ‘uid=jacek,o=defaultWIMFileBasedRealm’ has no attribute with the name ‘isAbsent’ and type ‘String’.

Owe pojedyncze zadanie zawierało przypisanie roli Potential Owners do użytkownika jacek, którego zdefiniowałem w domyślnym repozytorium użytkowników (ustawienie Federated repositories w Security > Secure administration, applications, and infrastructure).

Samo wyszukanie frazy “CWTKE0062W” w Google wskazało na CWTKE0062W: Virtual Member Manager (VMM) entity ”{0}” has no attribute with the name ”{1}” and type ”{2}”, ale już “no attribute with the name ‘isAbsent’ and type ‘String'” było bardziej owocne. Pojawiła się dokumentacja PDF do Business Process Choreographera (głównej funkcjonalności WPSa) oraz odnośnik do dokumentu Troubleshooting people assignment, a tam wyjaśnienie przy “StaffPlugin.VMMEntityAttributeNotFound”:

If no substitution attributes (isAbsent or substitutes) are found when reading, an attempt is made to initialize the attributes. If no substitution attributes are found when writing or updating, an exception is generated.

Wnioskuję, że po prostu brakuje atrybutu (zgodnie z komunikatem :)), który wskazuje HTM (=Human Task Manager’owi) na możliwość podstawienia/zastępstwa w razie nieobecności danego delikwenta. W My Substitutes w BPC Explorer’ze jest możliwość ustawienia tego parametru (pozycja w menu poziomym), ale bez wsparcia przez repozytorium użytkowników i to na niewiele się zdaje. Bardziej produkcyjne rozwiązanie to po prostu zdefiniowanie parametru w LDAP, np. Microsoft Active Directry i temat z głowy…teoretycznie, bo nie testowałem. Jak już się dorobię środowiska WPS/WBSF z LDAP pewnie poinformuję o wynikach dochodzenia.

p.s. Na koniec pisania tego wpisu pojawił mi się ciekawy błąd w WBSFie, kiedy wchodzę w Users and Groups > Manage Users lub Manage Groups w jego konsoli administracyjnej:
[8/25/09 21:22:53:889 CEST] 000018e9 SecurityServi W SecurityServiceImpl isWindowModeAllowed can't find userRoles information
[8/25/09 21:22:53:889 CEST] 000018e9 ElementRender W com.ibm.isclite.runtime.aggregation.tags.ElementRenderTag doStarttag() user does not have permissions for view mode
[8/25/09 21:23:04:836 CEST] 000018ea SecurityServi E SecurityServiceImpl getPortletsForMode security.xml does not exist
[8/25/09 21:23:04:836 CEST] 000018ea NavigationAct E NavigationAction getSecurityPtltModeInfo calls security service
com.ibm.isclite.datastore.DatastoreException: SecurityServiceImpl.getPortletsForMode>>ibm-topology-security.xml does not exists
at com.ibm.isclite.service.security.SecurityServiceImpl.getPortletsForMode(SecurityServiceImpl.java:152)
at com.ibm.isclite.runtime.action.NavigationAction.getSecurityPtltModeInfo(NavigationAction.java:385)
at com.ibm.isclite.runtime.action.NavigationAction.execute(NavigationAction.java:323)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:484)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:274)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1486)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:510)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:743)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1149)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1084)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:145)
at com.ibm.ws.console.core.servlet.WSCUrlFilter.setUpCommandAssistence(WSCUrlFilter.java:792)
at com.ibm.ws.console.core.servlet.WSCUrlFilter.continueStoringTaskState(WSCUrlFilter.java:363)
at com.ibm.ws.console.core.servlet.WSCUrlFilter.doFilter(WSCUrlFilter.java:229)
at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:190)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:130)
at com.ibm.ws.webcontainer.filter.WebAppFilterChain._doFilter(WebAppFilterChain.java:87)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:832)
at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:679)
at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:587)
at com.ibm.ws.wswebcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:481)
at com.ibm.ws.webcontainer.servlet.CacheServletWrapper.handleRequest(CacheServletWrapper.java:90)
at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:748)
at com.ibm.ws.wswebcontainer.WebContainer.handleRequest(WebContainer.java:1466)
at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:119)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:458)
at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:387)
at com.ibm.ws.http.channel.inbound.impl.HttpICLReadCallback.complete(HttpICLReadCallback.java:102)
at com.ibm.ws.ssl.channel.impl.SSLReadServiceContext$SSLReadCompletedCallback.complete(SSLReadServiceContext.java:1818)
at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165)
at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217)
at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161)
at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:136)
at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:196)
at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:792)
at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:881)
at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1473)
Caused by: org.eclipse.emf.ecore.resource.impl.ResourceSetImpl$1$DiagnosticWrappedException: org.eclipse.emf.ecore.xmi.ClassNotFoundException: Class 'ibm-portal-security' not found. (file:/E:/WID62/WID62/pf/WBSFabric/config/cells/wbsfCell/applications/isclite.ear/deployments/isclite/WIMPortlet.war/WEB-INF/ibm-portal-security.xml, 5, 289)
at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.handleDemandLoadException(ResourceSetImpl.java:307)
at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.demandLoadHelper(ResourceSetImpl.java:268)
at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.getResource(ResourceSetImpl.java:390)
at com.ibm.isclite.service.security.SecurityServiceImpl.getPortletsForMode(SecurityServiceImpl.java:147)
... 37 more
Caused by: org.eclipse.emf.ecore.xmi.ClassNotFoundException: Class 'ibm-portal-security' not found. (file:/E:/WID62/WID62/pf/WBSFabric/config/cells/wbsfCell/applications/isclite.ear/deployments/isclite/WIMPortlet.war/WEB-INF/ibm-portal-security.xml, 5, 289)
at org.eclipse.emf.ecore.xmi.impl.XMLHandler.validateCreateObjectFromFactory(XMLHandler.java:1999)
at org.eclipse.emf.ecore.xmi.impl.XMLHandler.createObjectByType(XMLHandler.java:1176)
at org.eclipse.emf.ecore.xmi.impl.XMLHandler.createTopObject(XMLHandler.java:1245)
at org.eclipse.emf.ecore.xmi.impl.XMLHandler.processElement(XMLHandler.java:883)
at org.eclipse.emf.ecore.xmi.impl.XMLHandler.startElement(XMLHandler.java:866)
at org.eclipse.emf.ecore.xmi.impl.XMLHandler.startElement(XMLHandler.java:633)
at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown Source)
at org.apache.xerces.impl.dtd.XMLDTDValidator.startElement(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanStartElement(Unknown Source)
at org.apache.xerces.impl.XMLDocumentScannerImpl$ContentDispatcher.scanRootElementHook(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
at org.apache.xerces.jaxp.SAXParserImpl.parse(Unknown Source)
at org.eclipse.emf.ecore.xmi.impl.XMLLoadImpl.load(XMLLoadImpl.java:179)
at org.eclipse.emf.ecore.xmi.impl.XMLResourceImpl.doLoad(XMLResourceImpl.java:179)
at org.eclipse.emf.ecore.resource.impl.ResourceImpl.load(ResourceImpl.java:1094)
at org.eclipse.emf.ecore.resource.impl.ResourceImpl.load(ResourceImpl.java:900)
at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.demandLoad(ResourceSetImpl.java:249)
at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.demandLoadHelper(ResourceSetImpl.java:264)
... 39 more

[8/25/09 21:23:04:836 CEST] 000018ea SecurityServi W SecurityServiceImpl isWindowModeAllowed can't find userRoles information
[8/25/09 21:23:04:836 CEST] 000018ea ElementRender W com.ibm.isclite.runtime.aggregation.tags.ElementRenderTag doStarttag() user does not have permissions for view mode

Aktualizacja oprogramowania – RAD/RSA 7.0.0.7 oraz WID/WPS 6.1.2


Kilka dni temu przyszło mi do głowy, aby zaktualizować oprogramowanie IBM Rational Application Developer i IBM Rational Software Architect do wersji 7.0.0.7 oraz IBM WebSphere Integration Developer i IBM WebSphere Process Server do wersji 6.1.2. Pierwsze doświadczenia okropne, gdyż swego czasu postanowiłem zaktualizować WPSa, który przychodzi z WIDem własnoręcznie za pomocą Update Installera, co kompletnie zepsuło śledzenie instalacji przez Update Installera, którym zainstalowałem WIDa. Ostatecznie jestem zmuszony do ponownej instalacji całości oprogramowania.

Na innym komputerze już byłem ostrożniejszy i wszystkie aktualizacje WID/WPS oraz RAD/RSA wykonywałem już z pomocą IBM Installation Manager. Kilka paneli wyboru aktualizacji

Po dobrych kilku godzinach całość oprogramowania już miałem na najwyższej możliwej wersji.

Jeszcze nie doświadczyłem dobroci pracy znajnowszym oprogramowaniem, ale z pewnością zebrane doświadczenia przydadzą się klientom, kiedy zapytają Czy warto?.