Posts

LBI Error in validating session

After a system outage, or maintenance, or reboot of LBI, you may encounter this “Error in validating session” error message when trying to navigate around LBI.  If you receive this message, the first step is to check the WebSphere systemout.log.  If you are seeing messages such as “Failed to obtain DB connection from data source” and “Could not retrieve datasource via JNDI url”, this could simply mean that the IBM services didn’t come up in the proper order.  The solution is to bring all the services down (order doesn’t matter), then bring them back up in the proper order, ensuring that each one is completely up before you move onto the next one.  That proper order is: Cell Manager, Node Manager, then Application Server.

[9/7/22 13:18:35:153 PDT] 0000009b ErrorLogger   E org.quartz.core.ErrorLogger schedulerError An error occured while marking executed job complete. job= ‘LBIAdmin.133’

org.quartz.JobPersistenceException: Failed to obtain DB connection from data source ‘ejs’: java.sql.SQLException: Could not retrieve datasource via JNDI url ‘java:comp/env/jdbc/LawsonRS’ javax.naming.ConfigurationException: A JNDI operation on a “java:” name cannot be completed because the server runtime is not able to associate the operation’s thread with any J2EE application component.  This condition can occur when the JNDI client using the “java:” name is not executed on the thread of a server application request.  Make sure that a J2EE application does not execute JNDI operations on “java:” names within static code blocks or in threads created by that J2EE application.  Such code does not necessarily run on the thread of a server application request and therefore is not supported by JNDI operations on “java:” names. [See nested exception: java.sql.SQLException: Could not retrieve datasource via JNDI url ‘java:comp/env/jdbc/LawsonRS’ javax.naming.ConfigurationException: A JNDI operation on a “java:” name cannot be completed because the server runtime is not able to associate the operation’s thread with any J2EE application component.  This condition can occur when the JNDI client using the “java:” name is not executed on the thread of a server application request.  Make sure that a J2EE application does not execute JNDI operations on “java:” names within static code blocks or in threads created by that J2EE application.  Such code does not necessarily run on the thread of a server application request and therefore is not supported by JNDI operations on “java:” names.]

at org.quartz.impl.jdbcjobstore.JobStoreSupport.getConnection(JobStoreSupport.java:575)

at org.quartz.impl.jdbcjobstore.JobStoreTX.triggeredJobComplete(JobStoreTX.java:1320)

at org.quartz.core.QuartzScheduler.notifyJobStoreJobComplete(QuartzScheduler.java:1490)

at org.quartz.core.JobRunShell.completeTriggerRetryLoop(JobRunShell.java:392)

at org.quartz.core.JobRunShell.run(JobRunShell.java:276)

at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:520)

* Nested Exception (Underlying Cause) —————

java.sql.SQLException: Could not retrieve datasource via JNDI url ‘java:comp/env/jdbc/LawsonRS’ javax.naming.ConfigurationException: A JNDI operation on a “java:” name cannot be completed because the server runtime is not able to associate the operation’s thread with any J2EE application component.  This condition can occur when the JNDI client using the “java:” name is not executed on the thread of a server application request.  Make sure that a J2EE application does not execute JNDI operations on “java:” names within static code blocks or in threads created by that J2EE application.  Such code does not necessarily run on the thread of a server application request and therefore is not supported by JNDI operations on “java:” names.

at org.quartz.utils.JNDIConnectionProvider.getConnection(JNDIConnectionProvider.java:166)

at org.quartz.utils.DBConnectionManager.getConnection(DBConnectionManager.java:111)

at org.quartz.impl.jdbcjobstore.JobStoreSupport.getConnection(JobStoreSupport.java:553)

at org.quartz.impl.jdbcjobstore.JobStoreTX.triggeredJobComplete(JobStoreTX.java:1320)

at org.quartz.core.QuartzScheduler.notifyJobStoreJobComplete(QuartzScheduler.java:1490)

at org.quartz.core.JobRunShell.completeTriggerRetryLoop(JobRunShell.java:392)

at org.quartz.core.JobRunShell.run(JobRunShell.java:276)

at org.quartz.simpl.SimpleThreadPool$WorkerThread.run(SimpleThreadPool.java:520)

 

How to refresh data for an LBI dashboard report

Typically when you click on an LBI report that’s been setup on the dashboard, it will show you data of the last generated instance.  To add a refresh is incredibly easy.

 

First login to LBI and go to the dashboard you want to modify a report on. When you click it, you’ll see something like:

To allow the report to refresh data, select the plus sign >> Edit

You’ll see a URL field, all you need to do is add &Refresh=True to the end of the URL and click save.

The URL may look something like this:

FSRemote%3Ffsid%3DRS%3ARS-COMPANY%20Reporting%20Services%3A25%26

Now add %Refresh=True at the end of it like below:

FSRemote%3Ffsid%3DRS%3ARS-COMPANY%20Reporting%20Services%3A25%26&Refresh=True

 

Done! Now the report will always pull up the parameters (if any) so you can see the latest data:

If your organization still heavily relies on LBI today, which is harder and harder to find individuals who support it, we recommend organizations look into hiring a Lawson consultant team who offer managed services at a fixed monthly rate.

These Lawson teams have a wider range of expertise and knowledge and are ideal for larger organizations but also are great for smaller ones that don’t need a dedicated Lawson employee on-site that may only be an expert in 2-3 portions of Lawson.

LBI Error – ReportSDKEnterpriseLogonException

Problem: We are not able to view any of the reports in LBI on production.

The error is

ReportSDKEnterpriseLogonException: Unable to log on: Could not connect to server. I have verified IBM and CRAS are running.

Users are getting the following error when opening a LBI Report:

 

You should check the system.out log for errors:

000001dd SystemOut O ERROR – RequestHandlerServlet caught ERSException: Exception starting RAS session: com.crystaldecisions.sdk.occa.report.lib.ReportSDKEnterpriseLogonException: Unable to log on: Could not connect to server USLAWLBI01.care.org. Please check that the server name is correct, and that the server is running.
—- Error code:-2147217397 [CRSDK00000000] Error code name:enterpriseLogonFailed

 

Based on the error from the log, go to CRAS Properties, in Central Configuration Manager and verify  the RAS server name.

If you found out that it was set to localhost, it needs to be changed.

 

Stop RAS, change the server name from localhost to USLAWLBI01.

– Went to Parameters Tab > Server > changed Report directory to * and Add temp directory

Start CRAS

Verify that you can now run the reports

LBI Install Errors

Here is a simple solution for common LBI Install Errors.

 

Problem:

During an LBI install you get this error regarding a trigger name not the same collation as refencing column.

 

Resolution:

Run this query

IF NOT EXISTS (SELECT * FROM dbo.sysobjects WHERE id = object_id(N'[dbo].[EJS_SIMPROP_TRIGGERS]’) and

                OBJECTPROPERTY(id, N’IsUserTable’) = 1)

                CREATE TABLE [dbo].[EJS_SIMPROP_TRIGGERS]

                                ( [SCHED_NAME] NVARCHAR(120) NOT NULL,

                                [TRIGGER_NAME] NVARCHAR(130) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,

                                [TRIGGER_GROUP] NVARCHAR(160) COLLATE SQL_Latin1_General_CP1_CI_AS NOT NULL,

                                [STR_PROP_1] NVARCHAR(512) NULL,

                                [STR_PROP_2] NVARCHAR(512) NULL,

                                [STR_PROP_3] NVARCHAR(512) NULL,

                                [INT_PROP_1] INT NULL,

                                [INT_PROP_2] INT NULL,

                                [LONG_PROP_1] BIGINT NULL,

                                [LONG_PROP_2] BIGINT NULL,

                                [DEC_PROP_1] NUMERIC(13,4) NULL,

                                [DEC_PROP_2] NUMERIC(13,4) NULL,

                                [BOOL_PROP_1] NVARCHAR(2) NULL,

                                [BOOL_PROP_2] NVARCHAR(2) NULL,

                                CONSTRAINT PK_EJS_SIMPROP_TRIG PRIMARY KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP),

                                CONSTRAINT FK_EJS_SIMPROP_TRIG FOREIGN KEY (SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP)

                                REFERENCES EJS_TRIGGERS(SCHED_NAME,TRIGGER_NAME,TRIGGER_GROUP));

 

 

Start your install over and the same error should not repeat.

 

Unable to Authenticate User Lawson After Configuring ADFS

After configuring ADFS, if you attempt to launch LBI and receive the message “(security:3042) Unable to authenticate user”, go to the SystemOut.log to gather more information.  If the error is displayed there with a reference to the username, this is a known issue with LBI and ADFS.  Navigate to the SystemOut.log on the LBI server to gather more information.

 

7/2/19 11:58:30:986 EDT] 00000069 webapp        E com.ibm.ws.webcontainer.webapp.WebApp logServletError SRVE0293E: [Servlet Error]-[GenericServletWrapper]: com.lawson.efs.security.GeneralAuthenticationException: (security:3042) Unable to authenticate user.

 

com.lawson.security.interfaces.GeneralLawsonSecurityException: Event request failed: Could not get identity for user – lawson

 

Stack Trace :

 

com.lawson.lawsec.authen.LSFSecurityAuthenException:Could not get identity for user – lawson

 

If your stack trace looks similar to the above, you will need to create a user in Lawson security where SSOP matches RMID.  This means, that you need a user whose RMID is formatted as their userPrincipalName.  To do this, you must have a service account that can be used for the purpose.  Also, you must load the user details with the loadusers command, as the characters “@” and “.” are not allowed when adding users in LSA.

 

First, have your networking team create a service account for this purpose.  Then, create a loadusers.xml file like this:

<?xml version=”1.0″ encoding=”ISO-8859-1″ ?>

<XML>

<ROLEDATA>

</ROLEDATA>

<USERDATA ProductLine=”LSAPPS”>

<USER ID=”lbirmadmin@company.com” RMID=”lbirmadmin@company.com” Name=”lbirmadmin” FirstName=”lbirmadmin” LastName=”lbirmadmin” Email=”lbirmadmin@company.com” CheckLS=”YES” Role=”SuperAdminRole”/>

</USERDATA>

</XML>

 

Next, on the Lawson server, run the command loadusers -f <full path to your loadusers file>.  In LSA, assign the LBI admins and LBI users groups that your organization uses to this account, and verify that the user has the SuperAdminRole.  In the Framework Services Configuration assistant in LBI, change the RM user to lbirmadmin@company.com and set the password.  This can also be done in the SYSCONFIG table of the EFS database.

 

Restart LBI WebSphere and try the connection again.

 

 

 

 

LBI 3042 error after configuring ADFS

After configuring ADFS, if you attempt to launch LBI and receive the message “(security:3042) Unable to authenticate user”, go to the SystemOut.log to gather more information.  If the error is displayed there without any reference to the user name, it is most likely that you need to update DSP on the LBI server.  To do this, download the latest DSP from the product downloads under Lawson Security.  Stop all the IBM services on the LBI server, then run the jar file and select the option to update your existing DSP.  Once DSP is updated, restart the IBM services.  You should be able to launch LBI now.

 

[12/18/21 14:16:53:783 PST] 000000ce LocalTranCoor E   WLTC0017E: Resources rolled back due to setRollbackOnly() being called.

[12/18/21 14:16:53:784 PST] 000000ce webapp        E com.ibm.ws.webcontainer.webapp.WebApp logServletError SRVE0293E: [Servlet Error]-[ServletNameNotFound]: com.lawson.efs.security.GeneralAuthenticationException: (security:3042) Unable to authenticate user.

at com.lawson.efs.security.authenticationprovider.AbstractSSOAuthenticationProvider.authenticate(AbstractSSOAuthenticationProvider.java:174)

Caused by: com.lawson.lawsec.authen.SecurityAuthenException: Failed to initialize authentication layer. Cause Connection error (inforapp.cosa.private, null). Cause: {2}.

… com.lawson.security.authen.AuthenMessages.Unable to create a connection

Stack Trace :

com.lawson.security.server.LawsonNetException: Unable to create a connection

 

Lawson Business Intelligence Smart Notes – Failed to obtain DB connection from data source

LBI Smart Notes not working (even intermittently) and the SystemOut log is spamming the error below?

Failed to obtain DB connection from data source ‘SNDB’: java.sql.SQLException: Could not retrieve datasource via JNDI url ‘java:comp/env/jdbc/LawsonSN’

 

Below is an easy fix for this as this is typically caused by differing versions of java.

 

First login to your LBI server and locate the InforLawsonBI Install directory typically found on the secondary drive (D drive in our case)

Go to file path:

..\InforLawsonBI\SmartNotification\Smart Notification.ear\lsnwar<Insert version>.war\WEB-INF\classes

Locate and open the quartz.properties file with Notepad or a text editor of your choice.

Edit the line shown below:

Change it to the following:

Save and reboot the LBI server or restart the IBM Webservices.

That’s it!

Creating an LBI Smart Notification Series – Creating a Smart Notification (Part 2)

LBI Smart Notifications are reports that are sent directly to users for reviewing vs a user logging into LBI to manually view a report. In this section we will first start off with an Intro to creating a Smart Notification. See Part 1 titled: “Creating an LBI Smart Notification Series – Creating an InfoSet (Part 1)

 

  1. Login into LBI (admin permission required) >> go to Tools >> Select Smart Notification
  2. In Smart Notification, select Notifications at the top
    • If you have none, it’ll say No Selections (see screenshot), else you’ll notice a list of existing Notifications
  3. To create a new Smart Note, click Add

  4. Smart Notification Wizard will pop-up and starts at step 1 (Select Facts)

    • The Facts section is where you would connect the dataset (or InfoSet) to the notification (this can also be a document among varios other types of data).
    • An InfoSet is most commonly an SQL query or stored Proc that gathers data from a database.
  5. For this example, we will assume you have an InfoSet already created. View your InfoSets by clicking Search

  6. For our example we will be selecting the MonlthyVariance InfoSet and then select Range
  7. At the bottom of the next page choose Select >> Add >> Ok at the very bottom

  8. At the bottom under My Selections you should now see your InfoSet for step 1
  9. Now click Next or select step 2 Conditions
    • Conditions can be added with the Add button. This lets you tailor the data to your liking. This can also be done on the InfoSet side when writing a query or stored proc.
  10. Click Next again or select step 3 Delivery
    • Delivery typically is done through the Device tab which are setup email addresses in Smart Notes (See article titled “How to setup a LBI smart note delivery device”)
    • The Bursting tab is the alternate method. In the Bursting tab select the InfoSet, and the column to burst on which is typically a list of email addresses.
    • Schedule tab is similar to Device, except on a schedule which can be set elsewhere for the Notification.
  11. Click Next again or select Step 4 Related Info
    • Related Info lets you link other LBI reports, shared documents, deploy in a pre-made formatted template among other customizations. This may be covered in more depth in a future article.
  12. Click Next again or select Step 5 Save
    • This is where you Name, describe, set Home Page Group for your Notification.
    • You can also Preview, set Status, and add additional Permissions if needed.
  13. Click Save New Item to create your new notification and view it in the Notifications Tab.

 

Hope this was helpful! Good luck!

Creating an LBI Smart Notification Series – Creating an Info Set (Part 1)

LBI Smart Notifications are reports that are sent directly to users for reviewing vs a user logging into LBI to manually view a report. In this section we will first start off with an Intro to creating an Info Set.

 

  1. Login into LBI (admin permission required) >> go to Tools >> Select Smart Notification
  2. In Smart Notification, select Admin at the top >> Work with InfoSets
  3. Click Add to start creating an InfoSet
  4. InfoSet Wizard should start >> Select the type of Info Set you want
    • Our example will be a Relational Database (JDBC) stored procedure with a predefined Data Source
  5. Click Next or go to Step 2 Define Info Set
    • In this section you will be defining your data depending on what type you select.
    • This data can include defining column data, number/string format etc.
  6. Click Next or go to Step 3 Specify Links
    • This section allows you to add file or class links which is dependent on your organization’s needs and what the notification will be used for.
  7. Click Next or go to Step 4 Save InfoSet
    • In this section you can add a Name, Description, set a group name.
    • Also allows you to add additional access, filter certain content, even categorize or limit the InfoSet.
  8. Once done with Step 4, click Save As New at the bottom to finish your InfoSet

 

That’s it! Smart Notifications and InfoSets have a lot of customizability, most of which aren’t necessary to get it going.

See Part 2 of this series titled “Creating an LBI Smart Notification Series – Creating a Smart Notification (Part 2)” to find out how to add this InfoSet to a new Notification report. Good luck!

How to setup a LBI smart note delivery device

You have a Lawson Business Intelligence Smart Notification report that needs users email devices added to it. In order to create one, follow the steps below.

  1. Login to LBI and go to Tools Dashboard >> Smart Notifications
  2. Go to Personal Settings and select Delivery Devices

  1. Under Delivery Devices at the bottom right click “Add Device”

  1. The General Info is the name of the device while the Delivery Method should be the actual email address of the user.
    1. Note that the default type and template are usually fine for most reports and organizations
  2. Click Add after you’ve filled in the proper info

  1. The delivery device (email address) will be sent a 4-digit confirmation code which you will need to enter here and click “Update”.
    1. You can start adding the email device to notifications before confirming the device.