SlideShare a Scribd company logo
Java: Finding Bugs, Fixing Bugs 
in IBM Domino Designer and XPages 
Julian Robichaux Senior Software Engineer, panagenda 
Paul T. Calhoun Senior Software Engineer, panagenda 
MWLUG 2014
Your Speakers 
• Julian Robichaux 
- Developer at panagenda, an Austrian based IT management 
software provider 
- Purveyor of nsftools.com 
- Writer of open-­‐source (and commercial) software 
- Speaker at Lotusphere since 2006, many LUG and View 
conferences in various countries 
- Doing almost exclusively Java and Eclipse development (often 
Notes related) for the past few years 
- Not as pretty as Paul Calhoun, but still easy on the eyes
Your Speakers 
• Paul T. Calhoun 
- I have been working with Lotus/IBM technologies for the past 25 
years. 
- I have been certified in both Administration and Development on 
every major release of Notes/Domino since release 3. 
- My focus has always been on training and enablement of 
Administrators and Developers, but I also provide mentoring and 
consulting services. 
- Most recently I have been focused on XPages consulting, training 
and enablement. 
- When not working, my passion is spending all my spare time with 
my awesomely wonderful grand-­‐kids. (WARNING: I have 
pictures !)
Agenda 
• Debugging 
- Java Agents 
- XPages 
• Logging 
• Using FindBugs 
• Using JConsole and Dump Analysis 
• Q & A
Debugging Java Agents 
• There are several steps to enable a Java debugger to debug a 
Java agent running on the Notes client: 
- Enable Java debugging on the Notes client. 
- Enable debugging in the agent (compile code with debug info). 
- Add thread sleep commands to the Java agent. 
- Set breakpoints in the Java code. 
- Create a Debug Configuration in the Java Perspective in Domino 
Designer to connect to the Notes client. 
- Add the agent source to the debug configuration. 
- Run the debugger in Domino Designer client. 
- Start the Notes agent to debug. 
- Debug the code as needed. 
• Detach the debugger from Notes.
Enable Debugger 
• Follow these steps to enable remote Java debugging on the 
Notes client: 
- Choose Tools | Java Debugging Preferences from the menu. 
- In the Java Debugging Preferences dialog, choose the appropriate 
types of agents to debug and set the port values. 
- Port values must be unique when enabling debugging for more 
than one type of agent. 
- Click [OK] to save the settings and close the dialog.
Enable Debugger 
• Variables in the NOTES.INI file are added to reflect the port 
settings and agent type selections 
- JavaDebugClientForeground=1 
- JavaDebugClientForegroundPort=8701 
- JavaDebugClientScheduled=1 
- JavaDebugClientScheduledPort=8702 
- JavaDebugClientWebPreview=1 
- JavaDebugClientWebPreviewPort=8703 
! 
• Notes must be restarted for the NOTES.INI changes to take 
effect. Click [OK] when prompted to restart Notes. 
• Exit and restart Notes.
Enable Agent for Debugging 
• Follow these steps to enable debugging for a Java agent: 
- Open the Java agent's Properties. 
- From the Basics tab of the Properties view 
• Enable the 'Compile Java code with debugging information' option. 
• This will add line numbers and information about variables to the 
compiled code to allow the agent to be debugged.
Enable Breakpoints 
• Follow these steps to add breakpoints to an agent: 
- Open the agent in Designer. 
- Breakpoints can be added by either: 
• Right-­‐clicking in the left margin of the code editor and choosing 
• Toggle Breakpoint 
• Double-­‐clicking in the margin next to the code to add/remove the 
breakpoint. 
- The breakpoints are indicated by a blue dots in the bar beside the 
editor margin.
Create Debug Configuration 
• This only has to be done once 
• In Designer: 
- Click the down arrow next to the blue “Debug” icon 
- Choose “Manage Debug Configurations”
Create Debug Configuration 
• In the Debug Configurations Dialog 
- Right Click on “Remote Java Application” 
- Choose “New”
Set Debug Configuration 
• Provide a Name 
• Change Port to Port set in Notes.ini 
- Default is 8701 but can be any open port 
• Click “Apply” and “Close” to save 
• Click “Apply” and “Debug” to start the debugger listening on 
the defined port
Switch to the Debug Perspective 
• If not already in the Debug Perspective a dialog will open 
prompting to switch to that perspective 
- Choose “Yes” 
• Optionally choose “Remember my decision” to suppress this 
dialog from popping up every time
The Debug Perspective
Debugging 
• The Code will stop at the first breakpoint 
• From there you can… 
- Inspect (and change) variables 
- Step through the code using the icons
Stop the Debugger 
• After the debugging session is complete the debugger is still 
“listening” on the open port 
• In the debug perspective make sure to “Disconnect” from the 
listening port to turn debugging off
Debugging Java XPages 
• If XPages make calls to Java Code elements then that Java 
code can be debugged using a similar process to debugging 
agents. 
• In order to debug Java code called by an XPage add the 
following lines to the notes.ini 
- JavaEnableDebug=1 
- JavaDebugOptions=transport=dt_socket,server=y,suspend=n,addr 
ess=<port to listen on> 
• GOTCHA !! 
- If the previous ports are enabled for Java agent debugging then 
“connecting” to the port above will never work 
- Disable the Java Debug Ports and restart your Notes, Designer 
client prior to debugging Java called from XPages 
- Your firewall might block the port
Debug Configuration 
• Create a new Debug Configuration to “listen” on the port 
that was set in the notes.ini file 
• Preview the XPage to start the local web preview 
• Start the debugger
Execute XPage Action 
• Set breakpoints in the Java code to be debugged 
• In the XPage in the browser 
- Execute the action that will call the Java code 
• If not already in the Debug perspective you will be prompted 
to switch to that perspective 
• Step through your code reviewing the variable values at each 
breakpoint 
• Clear breakpoints and resume to end 
• Disconnect from Debugger when done.
WARNING 
DO NOT EVER ENABLE 
DEBUGGING ON A 
PRODUCTION SERVER
Demo
Agenda 
• Debugging 
- Java Agents 
- XPages 
• Logging 
• Using FindBugs 
• Using JConsole and Dump Analysis 
• Q & A
Logging
Logging Basics 
• System.out.println() is NOT logging! 
• Java has native logging classes 
- java.util.logging 
- There are other popular logging frameworks, which we will ignore 
for the sake of brevity 
- The native Java classes work just fine 
• The big picture: 
- Each bit of code can have its own logger, or loggers can be shared 
- Java manages all the different loggers being used 
- The logging level determines the severity of the message 
- Different handlers send messages to the console or to files
Logging Example 
create logger 
log to various 
levels 
easy 
Exception 
handling
Logging Levels 
• Log Levels, in order of highest to lowest: 
- SEVERE – serious failure, horrible stuff 
- WARNING – potential problem 
- INFO – informational, non-­‐technical 
- CONFIG – system/program configuration 
- FINE – simplest trace messages 
- FINER – medium trace messages 
- FINEST – detailed trace messages
Interpreting Levels 
• What level you use for your messages is a matter of personal 
preference. Here’s a general guideline/suggestion: 
- Showstopping issues go to SEVERE 
- Errors your admin (and nosy users) should see go to WARNING 
- Unobtrusive “heartbeat” kinds of messages go to INFO 
- Start and stop messages go to CONFIG 
- Debug info goes to FINE/ER/EST, with FINEST being very tedious 
and verbose 
• These are “trace” levels 
• Generally only enabled for troubleshooting purposes
Log Handlers 
• Typical log handlers write to either the console or a file 
• There are default handlers for different contexts 
- Java agents: Java console (client), server console (server) 
- XPages: server console (server), files (client and server) 
- Plugins: OSGi console, files 
• Handlers also have levels 
- Console normally only displays log messages for SEVERE, 
WARNING, and INFO 
- File logs often display log messages for all levels
Logging Example 
where did 
this one go?
Log Levels and Output 
• Loggers often have a default level of INFO 
• This means that by default, any messages with a level lower 
than INFO will not be logged anywhere 
- So messages at level CONFIG and FINE/ER/EST will never be sent 
to a Handler because the Logger discards them 
• Messages get filtered by the Logger before they are passed to 
the Handler 
- Even a Handler at Level.FINEST will not get any FINE/ER/EST 
messages if the Logger is set to Level.INFO
Adjusting Log Levels 
• Adjusting log levels programmatically 
- setLevel() for Logger and Handler 
- This will cause a SecurityException! 
- You can get around this by editing jvm/lib/security/java.policy 
- permission java.util.logging.LoggingPermission "control" 
• Adjusting log levels with config files 
- Notes agents: {notes}jvmliblogging.properties 
- XPages: {domino}datadominoworkspace.configrcpinstall.properties
Example Log Level Adjustment 
Don’t forget 
the .level!
Logging Quirks in Notes 
• Prior to 8.5.3 FP2, Java logging in Notes worked just fine 
- Although logging in local agents didn’t log anywhere by default 
• In 9.0.0 and 8.5.3 FP2, FP3, and FP4 Java logging gave errors 
- java.security.AccessControlException 
- Add LoggingPermission to jvm/lib/security/java.policy 
• In 9.0.1 and 8.5.3 FP5, Java logging worked again 
- NEW: Local Java agents log to the Java Agent Console by default 
- NEW: if you still need the LoggingPermission so you can set 
custom Handlers or Levels, you also need to add a special 
SecurityPermission 
• http://www-­‐01.ibm.com/support/docview.wss?uid=swg21669594
XPages Log Output 
• XPages logging trace log files 
- Server 8.5.1: none, server console only 
- Server 8.5.2+: {domino}datadominoworkspacelogs 
• SEVERE messages still show up on the console too 
- XPiNC: {notes}dataworkspacelogs 
• Default logger level is WARNING, not INFO 
• Prior to 8.5.3, non-­‐logged XPages exceptions also used to 
show up in the trace logs. Now they are in 
{notes}dataIBM_TECHNICAL_SUPPORTxpages_exc_*.log 
- http://www-­‐01.ibm.com/support/docview.wss?uid=swg1LO66802
Viewing Trace Log Files 
• Trying to view the trace log files as raw XML is… painful 
• A better way is to right-­‐click them in the “logs” folder and 
open them in a browser 
- There is an XSLT file that will format them nicely for you 
• HOWEVER, if the client or server is still running, the XSLT file 
won’t work because the closing XML tag is missing 
- Make a copy, open in a text editor, and add a closing 
</CommonBaseEvents> tag to the end. Then open in a browser. 
- Make sure you open the copy from within the “logs” folder; 
otherwise the XSLT file will not be found 
- Sometimes log messages don’t show up immediately in the log 
files! Everything gets flushed when you shut down the server.
XPages Logging Example
XPages Logging Example
XPages Logging Example
Logging Best Practices 
• Use the same logger for your entire package (maybe even 
your entire library) 
• Most messages should be logged to FINE/ER/EST; don’t 
clutter up the console with INFO messages 
• Log actions, but not every step of a method or every single 
get/set – logging is NOT a replacement for a debugger 
• DO NOT EVER log sensitive data 
- Personal user information, passwords, system “secrets” 
- “No one will ever look at those anyway” is bad security
Agenda 
• Debugging 
- Java Agents 
- XPages 
• Logging 
• Using FindBugs 
• Using JConsole and Dump Analysis 
• Q & A
FindBugs 
• FindBugs is a program that uses static analysis to look for 
bugs in Java code. 
- Current version is 3.x 
• Source and Documentation at 
- http://findbugs.cs.umd.edu/eclipse 
• Latest version of FindBugs CANNOT be installed into DDE 
natively 
- Either install in a stand alone version of Eclipse 
- Use FindBugs for Domino Designer from OpenNTF 
- FYI, This is a version 2.x implementation of FindBugs 
• http://www.openntf.org/main.nsf/project.xsp?r=project/FindBugs 
%20for%20DominoDesigner
FindBugs 
• Available as an Eclipse plug-­‐in, install instructions at 
- http://findbugs.cs.umd.edu/eclipse 
• Agents contained in an NSF are not “readable” during the 
FindBugs analysis. 
- The agent code will need to be exported and imported into Eclipse 
for analysis.
Change FindBugs Properties 
• Change the FindBugs Properties to show all bugs
Running FindBugs 
• In Domino Designer open the Package Explorer view 
- If this view is not in the current perspective, either 
• Switch to the XPages perspective 
• Add it to the current working perspective 
• Right click over the code folder to be analyzed and choose 
“Run FindBugs”
FindBugs Perspective 
• After analyzing code, switch to the FindBugs perspective 
• Or add the Bug Explorer view to the current perspective 
• Remediate the found bugs
Demo
Agenda 
• Debugging 
- Java Agents 
- XPages 
• Logging 
• Using FindBugs 
• Using JConsole and Dump Analysis 
• Q & A
My Notes Client is Slow! 
• Troubleshooting slow performance is tricky 
- How do you define “slow”? 
- How do you know it’s your code and not something else? 
- Task Manager only tells you about high-­‐level processes 
• Much easier to troubleshoot on a client, rather than a server 
- Not disruptive to restart 
- Easy to change parameters 
- Crash at will! 
• Whenever possible, port your Java code to a local Notes 
agent or a local XPage for troubleshooting
A Tale of Two VMs 
• The Notes client actually has two Java VMs for running code 
- Java agents 
- The rest of the Notes client (including local XPages) 
• The VM for Java agents is adjusted with: 
- Notes.ini settings 
- {notes}jvmlib properties files 
• The VM for everything else (on the client) is adjusted with: 
- {notes}frameworkrcpdeployjvm.properties 
- {data}workspace.configrcpinstall.properties
JConsole 
• JConsole is a tool for monitoring performance and resource 
usage in a running JVM 
- http://docs.oracle.com/javase/6/docs/technotes/guides/ 
management/jconsole.html 
• I wrote an article on setting this up for local XPages and 
plugins (non-­‐Java-­‐agents) here: 
- http://www.socialbizug.org/blogs/2ec5d0ed-­‐ 
d04e-­‐4b18-­‐9610-­‐9819fcebca79/entry/ 
using_jconsole_to_monitor_your_ibm_notes_client 
• Quick demo…
JConsole Screenshot
JConsole for Local Java Agents 
• To use JConsole to monitor local Java agents, there’s a trick 
- Add JavaUserOptionsFile to your Notes.ini file: 
• JavaUserOptionsFile=c:IBMNotesjava.options.txt 
- In your Java options file add these lines: 
• -­‐Dcom.sun.management.jmxremote.port=9876 
-­‐Dcom.sun.management.jmxremote.ssl=false 
-­‐Dcom.sun.management.jmxremote.authenticate=false 
• Connect JConsole to the jmxremote.port you defined 
- This port won’t be active until AFTER you run a Java agent 
- Make sure nothing else is using that port 
- Make sure the firewall allows that port to be used
JavaUserOptionsFile
Analyzing Dump Files 
• If your Notes client (or Domino server) crashes due to a Java 
problem, it will usually generate a core dump file 
- default location is workspacelogs 
- Just a text file 
- Shows what threads were running, system info, etc. 
• IBM Thread and Memory Dump Analyzer does a good job of 
parsing the core dump file for you 
- https://www.ibm.com/developerworks/community/groups/ 
service/html/communityview?communityUuid=2245aa39-­‐ 
fa5c-­‐4475-­‐b891-­‐14c205f7333c 
- run like this: java -Xmx500m -jar jca455.jar
IBM Memory Dump Analyzer
Heap Dumps 
• Heap Dumps are a snapshot of the JVM threads and 
processes at a specific point in time, while it’s running 
- Like a slice of what you see in JConsole 
• Used for: 
- Tracking down memory leaks 
- Finding high-­‐memory-­‐use objects (and arrays) 
- Finding objects that are unexpectedly still in memory 
• IBM Heap Analyzer is a nice tool for viewing the information 
- https://www.ibm.com/developerworks/community/alphaworks/tech/ 
heapanalyzer 
- http://www-­‐01.ibm.com/support/docview.wss?uid=swg27006624&aid=1
How to Generate a Heap Dump 
• Generating a Heap Dump file (no crash required!) 
- Domino XPages 
• tell http xsp heap dump 
• XPages Toolbox ( http://www.openntf.org/p/XPages%20Toolbox ) 
- Notes Client (from a command prompt) 
• notesframeworkrcprcplauncher.exe -­‐com.ibm.rcp.core.logger#dump heap -­‐dumps heapdump 
• writes to {data}workspacelogsheapdump.###.phd by default 
• You can also do a core (thread) dump with: 
• notesframeworkrcprcplauncher.exe -­‐com.ibm.rcp.core.logger#dump threads -­‐dumps javacore 
- Java Agent 
• com.ibm.jvm.Dump.HeapDump(); 
• writes to {notes}frameworkheapdump.###.phd
IBM Heap Analyzer Screenshot
IBM Heap Analyzer Screenshot
IBM Heap Analyzer Screenshot 
2318 Notes Documents 
2318 Notes Items 
1 Notes View 
1 Notes Database 
1 Notes Session 
1 ??? 
——————————— 
4640 NotesWeakReferences
Agenda 
• Debugging 
- Java Agents 
- XPages 
• Logging 
• Using FindBugs 
• Using JConsole and Dump Analysis 
• Q & A
Q & A 
Questions? 
Anyone?
THANK YOU 
Julian Robichaux 
panagenda 
jrobichaux@panagenda.com 
MWLUG 2014 
Paul Calhoun 
panagenda 
paul.calhoun@panagenda.com

More Related Content

What's hot

Utilizing the OpenNTF Domino API
Utilizing the OpenNTF Domino APIUtilizing the OpenNTF Domino API
Utilizing the OpenNTF Domino API
Oliver Busse
 
RNUG - Dirty Secrets of the Notes Client
RNUG - Dirty Secrets of the Notes ClientRNUG - Dirty Secrets of the Notes Client
RNUG - Dirty Secrets of the Notes Client
Christoph Adler
 
CollabSphere SC 103 : Domino on the Web : Yes, It's (Probably) Hackable
CollabSphere SC 103 : Domino on the Web : Yes, It's (Probably) HackableCollabSphere SC 103 : Domino on the Web : Yes, It's (Probably) Hackable
CollabSphere SC 103 : Domino on the Web : Yes, It's (Probably) Hackable
Darren Duke
 
April, 2021 OpenNTF Webinar - Domino Administration Best Practices
April, 2021 OpenNTF Webinar - Domino Administration Best PracticesApril, 2021 OpenNTF Webinar - Domino Administration Best Practices
April, 2021 OpenNTF Webinar - Domino Administration Best Practices
Howard Greenberg
 
IBM Domino / IBM Notes Performance Tuning
IBM Domino / IBM Notes Performance Tuning IBM Domino / IBM Notes Performance Tuning
IBM Domino / IBM Notes Performance Tuning
Vladislav Tatarincev
 
Domino OSGi Development
Domino OSGi DevelopmentDomino OSGi Development
Domino OSGi Development
Paul Fiore
 
Domino Server Health - Monitoring and Managing
 Domino Server Health - Monitoring and Managing Domino Server Health - Monitoring and Managing
Domino Server Health - Monitoring and Managing
Gabriella Davis
 
Power BI Report Server: a Deep Dive for SQL PASS Vancouver
Power BI Report Server: a Deep Dive for SQL PASS VancouverPower BI Report Server: a Deep Dive for SQL PASS Vancouver
Power BI Report Server: a Deep Dive for SQL PASS Vancouver
Luca Gualtieri
 
60 Admin Tips
60 Admin Tips60 Admin Tips
60 Admin Tips
Gabriella Davis
 
Compact, Compress, De-Duplicate (DAOS)
Compact, Compress, De-Duplicate (DAOS)Compact, Compress, De-Duplicate (DAOS)
Compact, Compress, De-Duplicate (DAOS)
Ulrich Krause
 
Selenium introduction
Selenium introductionSelenium introduction
Selenium introduction
Deepak Kumar Digar
 
Life In The FastLane: Full Speed XPages
Life In The FastLane: Full Speed XPagesLife In The FastLane: Full Speed XPages
Life In The FastLane: Full Speed XPages
Ulrich Krause
 
AWS CLOUD 2018- Amazon DynamoDB기반 글로벌 서비스 개발 방법 (김준형 솔루션즈 아키텍트)
AWS CLOUD 2018- Amazon DynamoDB기반 글로벌 서비스 개발 방법 (김준형 솔루션즈 아키텍트)AWS CLOUD 2018- Amazon DynamoDB기반 글로벌 서비스 개발 방법 (김준형 솔루션즈 아키텍트)
AWS CLOUD 2018- Amazon DynamoDB기반 글로벌 서비스 개발 방법 (김준형 솔루션즈 아키텍트)
Amazon Web Services Korea
 
Java for XPages Development
Java for XPages DevelopmentJava for XPages Development
Java for XPages Development
Teamstudio
 
RNUG - HCL Notes V11 Performance Boost
RNUG - HCL Notes V11 Performance BoostRNUG - HCL Notes V11 Performance Boost
RNUG - HCL Notes V11 Performance Boost
Christoph Adler
 
HTTP - The Other Face Of Domino
HTTP - The Other Face Of DominoHTTP - The Other Face Of Domino
HTTP - The Other Face Of Domino
Gabriella Davis
 
BP204 - Take a REST and put your data to work with APIs!
BP204 - Take a REST and put your data to work with APIs!BP204 - Take a REST and put your data to work with APIs!
BP204 - Take a REST and put your data to work with APIs!
Craig Schumann
 
Webinar: Selenium WebDriver - Automation Uncomplicated
Webinar: Selenium WebDriver - Automation UncomplicatedWebinar: Selenium WebDriver - Automation Uncomplicated
Webinar: Selenium WebDriver - Automation Uncomplicated
Edureka!
 
Connect2016 AD1387 Integrate with XPages and Java
Connect2016 AD1387 Integrate with XPages and JavaConnect2016 AD1387 Integrate with XPages and Java
Connect2016 AD1387 Integrate with XPages and Java
Julian Robichaux
 
Speed up your XPages Application performance
Speed up your XPages Application performanceSpeed up your XPages Application performance
Speed up your XPages Application performance
Maarga Systems
 

What's hot (20)

Utilizing the OpenNTF Domino API
Utilizing the OpenNTF Domino APIUtilizing the OpenNTF Domino API
Utilizing the OpenNTF Domino API
 
RNUG - Dirty Secrets of the Notes Client
RNUG - Dirty Secrets of the Notes ClientRNUG - Dirty Secrets of the Notes Client
RNUG - Dirty Secrets of the Notes Client
 
CollabSphere SC 103 : Domino on the Web : Yes, It's (Probably) Hackable
CollabSphere SC 103 : Domino on the Web : Yes, It's (Probably) HackableCollabSphere SC 103 : Domino on the Web : Yes, It's (Probably) Hackable
CollabSphere SC 103 : Domino on the Web : Yes, It's (Probably) Hackable
 
April, 2021 OpenNTF Webinar - Domino Administration Best Practices
April, 2021 OpenNTF Webinar - Domino Administration Best PracticesApril, 2021 OpenNTF Webinar - Domino Administration Best Practices
April, 2021 OpenNTF Webinar - Domino Administration Best Practices
 
IBM Domino / IBM Notes Performance Tuning
IBM Domino / IBM Notes Performance Tuning IBM Domino / IBM Notes Performance Tuning
IBM Domino / IBM Notes Performance Tuning
 
Domino OSGi Development
Domino OSGi DevelopmentDomino OSGi Development
Domino OSGi Development
 
Domino Server Health - Monitoring and Managing
 Domino Server Health - Monitoring and Managing Domino Server Health - Monitoring and Managing
Domino Server Health - Monitoring and Managing
 
Power BI Report Server: a Deep Dive for SQL PASS Vancouver
Power BI Report Server: a Deep Dive for SQL PASS VancouverPower BI Report Server: a Deep Dive for SQL PASS Vancouver
Power BI Report Server: a Deep Dive for SQL PASS Vancouver
 
60 Admin Tips
60 Admin Tips60 Admin Tips
60 Admin Tips
 
Compact, Compress, De-Duplicate (DAOS)
Compact, Compress, De-Duplicate (DAOS)Compact, Compress, De-Duplicate (DAOS)
Compact, Compress, De-Duplicate (DAOS)
 
Selenium introduction
Selenium introductionSelenium introduction
Selenium introduction
 
Life In The FastLane: Full Speed XPages
Life In The FastLane: Full Speed XPagesLife In The FastLane: Full Speed XPages
Life In The FastLane: Full Speed XPages
 
AWS CLOUD 2018- Amazon DynamoDB기반 글로벌 서비스 개발 방법 (김준형 솔루션즈 아키텍트)
AWS CLOUD 2018- Amazon DynamoDB기반 글로벌 서비스 개발 방법 (김준형 솔루션즈 아키텍트)AWS CLOUD 2018- Amazon DynamoDB기반 글로벌 서비스 개발 방법 (김준형 솔루션즈 아키텍트)
AWS CLOUD 2018- Amazon DynamoDB기반 글로벌 서비스 개발 방법 (김준형 솔루션즈 아키텍트)
 
Java for XPages Development
Java for XPages DevelopmentJava for XPages Development
Java for XPages Development
 
RNUG - HCL Notes V11 Performance Boost
RNUG - HCL Notes V11 Performance BoostRNUG - HCL Notes V11 Performance Boost
RNUG - HCL Notes V11 Performance Boost
 
HTTP - The Other Face Of Domino
HTTP - The Other Face Of DominoHTTP - The Other Face Of Domino
HTTP - The Other Face Of Domino
 
BP204 - Take a REST and put your data to work with APIs!
BP204 - Take a REST and put your data to work with APIs!BP204 - Take a REST and put your data to work with APIs!
BP204 - Take a REST and put your data to work with APIs!
 
Webinar: Selenium WebDriver - Automation Uncomplicated
Webinar: Selenium WebDriver - Automation UncomplicatedWebinar: Selenium WebDriver - Automation Uncomplicated
Webinar: Selenium WebDriver - Automation Uncomplicated
 
Connect2016 AD1387 Integrate with XPages and Java
Connect2016 AD1387 Integrate with XPages and JavaConnect2016 AD1387 Integrate with XPages and Java
Connect2016 AD1387 Integrate with XPages and Java
 
Speed up your XPages Application performance
Speed up your XPages Application performanceSpeed up your XPages Application performance
Speed up your XPages Application performance
 

Viewers also liked

Logging library migrations - A case study for the Apache Software Foundation ...
Logging library migrations - A case study for the Apache Software Foundation ...Logging library migrations - A case study for the Apache Software Foundation ...
Logging library migrations - A case study for the Apache Software Foundation ...
corpaulbezemer
 
SCAM 2014 - A few notes from the Program Chairs
SCAM 2014 - A few notes from the Program ChairsSCAM 2014 - A few notes from the Program Chairs
SCAM 2014 - A few notes from the Program Chairs
Rocco Oliveto
 
ICSME2014
ICSME2014ICSME2014
ICSME2014
swy351
 
Introduction to logging in django
Introduction to logging in djangoIntroduction to logging in django
Introduction to logging in django
Siva Arunachalam
 
Logging Application Behavior to MongoDB
Logging Application Behavior to MongoDBLogging Application Behavior to MongoDB
Logging Application Behavior to MongoDB
Robert Stewart
 
Log Engineering: Towards Systematic Log Mining to Support the Development of ...
Log Engineering: Towards Systematic Log Mining to Support the Development of ...Log Engineering: Towards Systematic Log Mining to Support the Development of ...
Log Engineering: Towards Systematic Log Mining to Support the Development of ...
SAIL_QU
 

Viewers also liked (6)

Logging library migrations - A case study for the Apache Software Foundation ...
Logging library migrations - A case study for the Apache Software Foundation ...Logging library migrations - A case study for the Apache Software Foundation ...
Logging library migrations - A case study for the Apache Software Foundation ...
 
SCAM 2014 - A few notes from the Program Chairs
SCAM 2014 - A few notes from the Program ChairsSCAM 2014 - A few notes from the Program Chairs
SCAM 2014 - A few notes from the Program Chairs
 
ICSME2014
ICSME2014ICSME2014
ICSME2014
 
Introduction to logging in django
Introduction to logging in djangoIntroduction to logging in django
Introduction to logging in django
 
Logging Application Behavior to MongoDB
Logging Application Behavior to MongoDBLogging Application Behavior to MongoDB
Logging Application Behavior to MongoDB
 
Log Engineering: Towards Systematic Log Mining to Support the Development of ...
Log Engineering: Towards Systematic Log Mining to Support the Development of ...Log Engineering: Towards Systematic Log Mining to Support the Development of ...
Log Engineering: Towards Systematic Log Mining to Support the Development of ...
 

Similar to Java: Finding Bugs, Fixing Bugs in IBM Domino Designer and XPages

Java developer trainee implementation and import
Java developer trainee implementation and importJava developer trainee implementation and import
Java developer trainee implementation and import
iamluqman0403
 
Connect 2014 JMP101: Java for XPages Development
Connect 2014 JMP101: Java for XPages DevelopmentConnect 2014 JMP101: Java for XPages Development
Connect 2014 JMP101: Java for XPages Development
panagenda
 
debugging and testing
debugging and testingdebugging and testing
debugging and testing
Sevajothi Crafts
 
Compilers and interpreters
Compilers and interpretersCompilers and interpreters
Compilers and interpreters
RAJU KATHI
 
DevOps, A brief introduction to Vagrant & Ansible
DevOps, A brief introduction to Vagrant & AnsibleDevOps, A brief introduction to Vagrant & Ansible
DevOps, A brief introduction to Vagrant & Ansible
Arnaud LEMAIRE
 
FITC - Here Be Dragons: Advanced JavaScript Debugging
FITC - Here Be Dragons: Advanced JavaScript DebuggingFITC - Here Be Dragons: Advanced JavaScript Debugging
FITC - Here Be Dragons: Advanced JavaScript Debugging
Rami Sayar
 
Here Be Dragons – Advanced JavaScript Debugging
Here Be Dragons – Advanced JavaScript DebuggingHere Be Dragons – Advanced JavaScript Debugging
Here Be Dragons – Advanced JavaScript Debugging
FITC
 
Chelberg ptcuser 2010
Chelberg ptcuser 2010Chelberg ptcuser 2010
Chelberg ptcuser 2010
Clay Helberg
 
Java Chapter 2 Overview.ppt
Java Chapter 2 Overview.pptJava Chapter 2 Overview.ppt
Java Chapter 2 Overview.ppt
MiltonMolla1
 
Java Chapter 2 Overview.ppt
Java Chapter 2 Overview.pptJava Chapter 2 Overview.ppt
Java Chapter 2 Overview.ppt
MiltonMolla1
 
CNIT 126 8: Debugging
CNIT 126 8: DebuggingCNIT 126 8: Debugging
CNIT 126 8: Debugging
Sam Bowne
 
PHP - Introduction to PHP Bugs - Debugging
PHP -  Introduction to  PHP Bugs - DebuggingPHP -  Introduction to  PHP Bugs - Debugging
PHP - Introduction to PHP Bugs - Debugging
Vibrant Technologies & Computers
 
Topic production code
Topic production codeTopic production code
Topic production code
Kavi Kumar
 
CNIT 126: 8: Debugging
CNIT 126: 8: DebuggingCNIT 126: 8: Debugging
CNIT 126: 8: Debugging
Sam Bowne
 
Practical Malware Analysis: Ch 8: Debugging
Practical Malware Analysis: Ch 8: Debugging Practical Malware Analysis: Ch 8: Debugging
Practical Malware Analysis: Ch 8: Debugging
Sam Bowne
 
Java Code Quality Tools
Java Code Quality ToolsJava Code Quality Tools
Java Code Quality Tools
Anju ML
 
Android course session 1 ( intoduction to java )
Android course session 1 ( intoduction to java )Android course session 1 ( intoduction to java )
Android course session 1 ( intoduction to java )
Keroles M.Yakoub
 
debugging (1).ppt
debugging (1).pptdebugging (1).ppt
debugging (1).ppt
jerlinS1
 
An important characteristic of a test suite that is computed by a dynamic ana...
An important characteristic of a test suite that is computed by a dynamic ana...An important characteristic of a test suite that is computed by a dynamic ana...
An important characteristic of a test suite that is computed by a dynamic ana...
jeyasrig
 
Debugging webOS applications
Debugging webOS applicationsDebugging webOS applications
Debugging webOS applications
fpatton
 

Similar to Java: Finding Bugs, Fixing Bugs in IBM Domino Designer and XPages (20)

Java developer trainee implementation and import
Java developer trainee implementation and importJava developer trainee implementation and import
Java developer trainee implementation and import
 
Connect 2014 JMP101: Java for XPages Development
Connect 2014 JMP101: Java for XPages DevelopmentConnect 2014 JMP101: Java for XPages Development
Connect 2014 JMP101: Java for XPages Development
 
debugging and testing
debugging and testingdebugging and testing
debugging and testing
 
Compilers and interpreters
Compilers and interpretersCompilers and interpreters
Compilers and interpreters
 
DevOps, A brief introduction to Vagrant & Ansible
DevOps, A brief introduction to Vagrant & AnsibleDevOps, A brief introduction to Vagrant & Ansible
DevOps, A brief introduction to Vagrant & Ansible
 
FITC - Here Be Dragons: Advanced JavaScript Debugging
FITC - Here Be Dragons: Advanced JavaScript DebuggingFITC - Here Be Dragons: Advanced JavaScript Debugging
FITC - Here Be Dragons: Advanced JavaScript Debugging
 
Here Be Dragons – Advanced JavaScript Debugging
Here Be Dragons – Advanced JavaScript DebuggingHere Be Dragons – Advanced JavaScript Debugging
Here Be Dragons – Advanced JavaScript Debugging
 
Chelberg ptcuser 2010
Chelberg ptcuser 2010Chelberg ptcuser 2010
Chelberg ptcuser 2010
 
Java Chapter 2 Overview.ppt
Java Chapter 2 Overview.pptJava Chapter 2 Overview.ppt
Java Chapter 2 Overview.ppt
 
Java Chapter 2 Overview.ppt
Java Chapter 2 Overview.pptJava Chapter 2 Overview.ppt
Java Chapter 2 Overview.ppt
 
CNIT 126 8: Debugging
CNIT 126 8: DebuggingCNIT 126 8: Debugging
CNIT 126 8: Debugging
 
PHP - Introduction to PHP Bugs - Debugging
PHP -  Introduction to  PHP Bugs - DebuggingPHP -  Introduction to  PHP Bugs - Debugging
PHP - Introduction to PHP Bugs - Debugging
 
Topic production code
Topic production codeTopic production code
Topic production code
 
CNIT 126: 8: Debugging
CNIT 126: 8: DebuggingCNIT 126: 8: Debugging
CNIT 126: 8: Debugging
 
Practical Malware Analysis: Ch 8: Debugging
Practical Malware Analysis: Ch 8: Debugging Practical Malware Analysis: Ch 8: Debugging
Practical Malware Analysis: Ch 8: Debugging
 
Java Code Quality Tools
Java Code Quality ToolsJava Code Quality Tools
Java Code Quality Tools
 
Android course session 1 ( intoduction to java )
Android course session 1 ( intoduction to java )Android course session 1 ( intoduction to java )
Android course session 1 ( intoduction to java )
 
debugging (1).ppt
debugging (1).pptdebugging (1).ppt
debugging (1).ppt
 
An important characteristic of a test suite that is computed by a dynamic ana...
An important characteristic of a test suite that is computed by a dynamic ana...An important characteristic of a test suite that is computed by a dynamic ana...
An important characteristic of a test suite that is computed by a dynamic ana...
 
Debugging webOS applications
Debugging webOS applicationsDebugging webOS applications
Debugging webOS applications
 

More from panagenda

HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
panagenda
 
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUHCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
panagenda
 
Easier, Faster, and More Powerful – Notes Document Properties Reimagined
Easier, Faster, and More Powerful – Notes Document Properties ReimaginedEasier, Faster, and More Powerful – Notes Document Properties Reimagined
Easier, Faster, and More Powerful – Notes Document Properties Reimagined
panagenda
 
Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...
Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...
Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...
panagenda
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 
De05_panagenda_Prepare-Applications-for-64-bit-Clients.pdf
De05_panagenda_Prepare-Applications-for-64-bit-Clients.pdfDe05_panagenda_Prepare-Applications-for-64-bit-Clients.pdf
De05_panagenda_Prepare-Applications-for-64-bit-Clients.pdf
panagenda
 
Co01_panagenda_NotesDomino-Licensing-Understand-and-Optimize-DLAU-results-wit...
Co01_panagenda_NotesDomino-Licensing-Understand-and-Optimize-DLAU-results-wit...Co01_panagenda_NotesDomino-Licensing-Understand-and-Optimize-DLAU-results-wit...
Co01_panagenda_NotesDomino-Licensing-Understand-and-Optimize-DLAU-results-wit...
panagenda
 
Ad01_Navigating-HCL-Notes-14-Upgrades_A-Comprehensive-Guide-for-Conquering-Ch...
Ad01_Navigating-HCL-Notes-14-Upgrades_A-Comprehensive-Guide-for-Conquering-Ch...Ad01_Navigating-HCL-Notes-14-Upgrades_A-Comprehensive-Guide-for-Conquering-Ch...
Ad01_Navigating-HCL-Notes-14-Upgrades_A-Comprehensive-Guide-for-Conquering-Ch...
panagenda
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
panagenda
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
panagenda
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
panagenda
 
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
panagenda
 
Why you need monitoring to keep your Microsoft 365 journey successful
Why you need monitoring to keep your Microsoft 365 journey successfulWhy you need monitoring to keep your Microsoft 365 journey successful
Why you need monitoring to keep your Microsoft 365 journey successful
panagenda
 
Developer Special: How to Prepare Applications for Notes 64-bit Clients
Developer Special: How to Prepare Applications for Notes 64-bit ClientsDeveloper Special: How to Prepare Applications for Notes 64-bit Clients
Developer Special: How to Prepare Applications for Notes 64-bit Clients
panagenda
 
Everything You Need to Know About HCL Notes 14
Everything You Need to Know About HCL Notes 14Everything You Need to Know About HCL Notes 14
Everything You Need to Know About HCL Notes 14
panagenda
 
Alles was Sie über HCL Notes 14 wissen müssen
Alles was Sie über HCL Notes 14 wissen müssenAlles was Sie über HCL Notes 14 wissen müssen
Alles was Sie über HCL Notes 14 wissen müssen
panagenda
 
Workshop: HCL Notes 14 Upgrades einfach gemacht – von A bis Z
Workshop: HCL Notes 14 Upgrades einfach gemacht – von A bis ZWorkshop: HCL Notes 14 Upgrades einfach gemacht – von A bis Z
Workshop: HCL Notes 14 Upgrades einfach gemacht – von A bis Z
panagenda
 
How to Perform HCL Notes 14 Upgrades Smoothly
How to Perform HCL Notes 14 Upgrades SmoothlyHow to Perform HCL Notes 14 Upgrades Smoothly
How to Perform HCL Notes 14 Upgrades Smoothly
panagenda
 
The Ultimate Administrator’s Guide to HCL Nomad Web
The Ultimate Administrator’s Guide to HCL Nomad WebThe Ultimate Administrator’s Guide to HCL Nomad Web
The Ultimate Administrator’s Guide to HCL Nomad Web
panagenda
 
Die ultimative Anleitung für HCL Nomad Web Administratoren
Die ultimative Anleitung für HCL Nomad Web AdministratorenDie ultimative Anleitung für HCL Nomad Web Administratoren
Die ultimative Anleitung für HCL Nomad Web Administratoren
panagenda
 

More from panagenda (20)

HCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAUHCL Notes and Domino License Cost Reduction in the World of DLAU
HCL Notes and Domino License Cost Reduction in the World of DLAU
 
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAUHCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
HCL Notes und Domino Lizenzkostenreduzierung in der Welt von DLAU
 
Easier, Faster, and More Powerful – Notes Document Properties Reimagined
Easier, Faster, and More Powerful – Notes Document Properties ReimaginedEasier, Faster, and More Powerful – Notes Document Properties Reimagined
Easier, Faster, and More Powerful – Notes Document Properties Reimagined
 
Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...
Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...
Easier, Faster, and More Powerful – Alles Neu macht der Mai -Wir durchleuchte...
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
De05_panagenda_Prepare-Applications-for-64-bit-Clients.pdf
De05_panagenda_Prepare-Applications-for-64-bit-Clients.pdfDe05_panagenda_Prepare-Applications-for-64-bit-Clients.pdf
De05_panagenda_Prepare-Applications-for-64-bit-Clients.pdf
 
Co01_panagenda_NotesDomino-Licensing-Understand-and-Optimize-DLAU-results-wit...
Co01_panagenda_NotesDomino-Licensing-Understand-and-Optimize-DLAU-results-wit...Co01_panagenda_NotesDomino-Licensing-Understand-and-Optimize-DLAU-results-wit...
Co01_panagenda_NotesDomino-Licensing-Understand-and-Optimize-DLAU-results-wit...
 
Ad01_Navigating-HCL-Notes-14-Upgrades_A-Comprehensive-Guide-for-Conquering-Ch...
Ad01_Navigating-HCL-Notes-14-Upgrades_A-Comprehensive-Guide-for-Conquering-Ch...Ad01_Navigating-HCL-Notes-14-Upgrades_A-Comprehensive-Guide-for-Conquering-Ch...
Ad01_Navigating-HCL-Notes-14-Upgrades_A-Comprehensive-Guide-for-Conquering-Ch...
 
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
W01_panagenda_Navigating-the-Future-with-The-Hitchhikers-Guide-to-Notes-and-D...
 
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better StrongerModern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
Modern Roaming for Notes and Nomad – Cheaper Faster Better Stronger
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
 
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
Why device, WIFI, and ISP insights are crucial to supporting remote Microsoft...
 
Why you need monitoring to keep your Microsoft 365 journey successful
Why you need monitoring to keep your Microsoft 365 journey successfulWhy you need monitoring to keep your Microsoft 365 journey successful
Why you need monitoring to keep your Microsoft 365 journey successful
 
Developer Special: How to Prepare Applications for Notes 64-bit Clients
Developer Special: How to Prepare Applications for Notes 64-bit ClientsDeveloper Special: How to Prepare Applications for Notes 64-bit Clients
Developer Special: How to Prepare Applications for Notes 64-bit Clients
 
Everything You Need to Know About HCL Notes 14
Everything You Need to Know About HCL Notes 14Everything You Need to Know About HCL Notes 14
Everything You Need to Know About HCL Notes 14
 
Alles was Sie über HCL Notes 14 wissen müssen
Alles was Sie über HCL Notes 14 wissen müssenAlles was Sie über HCL Notes 14 wissen müssen
Alles was Sie über HCL Notes 14 wissen müssen
 
Workshop: HCL Notes 14 Upgrades einfach gemacht – von A bis Z
Workshop: HCL Notes 14 Upgrades einfach gemacht – von A bis ZWorkshop: HCL Notes 14 Upgrades einfach gemacht – von A bis Z
Workshop: HCL Notes 14 Upgrades einfach gemacht – von A bis Z
 
How to Perform HCL Notes 14 Upgrades Smoothly
How to Perform HCL Notes 14 Upgrades SmoothlyHow to Perform HCL Notes 14 Upgrades Smoothly
How to Perform HCL Notes 14 Upgrades Smoothly
 
The Ultimate Administrator’s Guide to HCL Nomad Web
The Ultimate Administrator’s Guide to HCL Nomad WebThe Ultimate Administrator’s Guide to HCL Nomad Web
The Ultimate Administrator’s Guide to HCL Nomad Web
 
Die ultimative Anleitung für HCL Nomad Web Administratoren
Die ultimative Anleitung für HCL Nomad Web AdministratorenDie ultimative Anleitung für HCL Nomad Web Administratoren
Die ultimative Anleitung für HCL Nomad Web Administratoren
 

Recently uploaded

Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfUnlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Malak Abu Hammad
 
AI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdf
AI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdfAI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdf
AI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdf
Techgropse Pvt.Ltd.
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
innovationoecd
 
Things to Consider When Choosing a Website Developer for your Website | FODUU
Things to Consider When Choosing a Website Developer for your Website | FODUUThings to Consider When Choosing a Website Developer for your Website | FODUU
Things to Consider When Choosing a Website Developer for your Website | FODUU
FODUU
 
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success StoryDriving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Safe Software
 
Full-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalizationFull-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalization
Zilliz
 
UI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentationUI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentation
Wouter Lemaire
 
Best 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERPBest 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERP
Pixlogix Infotech
 
GenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizationsGenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizations
kumardaparthi1024
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
Matthew Sinclair
 
CAKE: Sharing Slices of Confidential Data on Blockchain
CAKE: Sharing Slices of Confidential Data on BlockchainCAKE: Sharing Slices of Confidential Data on Blockchain
CAKE: Sharing Slices of Confidential Data on Blockchain
Claudio Di Ciccio
 
Choosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptxChoosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptx
Brandon Minnick, MBA
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
Octavian Nadolu
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
Quotidiano Piemontese
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
Daiki Mogmet Ito
 
Taking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdfTaking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdf
ssuserfac0301
 
Building Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and MilvusBuilding Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and Milvus
Zilliz
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
Aftab Hussain
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
danishmna97
 

Recently uploaded (20)

Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfUnlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
 
AI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdf
AI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdfAI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdf
AI-Powered Food Delivery Transforming App Development in Saudi Arabia.pdf
 
Presentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of GermanyPresentation of the OECD Artificial Intelligence Review of Germany
Presentation of the OECD Artificial Intelligence Review of Germany
 
Things to Consider When Choosing a Website Developer for your Website | FODUU
Things to Consider When Choosing a Website Developer for your Website | FODUUThings to Consider When Choosing a Website Developer for your Website | FODUU
Things to Consider When Choosing a Website Developer for your Website | FODUU
 
Driving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success StoryDriving Business Innovation: Latest Generative AI Advancements & Success Story
Driving Business Innovation: Latest Generative AI Advancements & Success Story
 
Full-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalizationFull-RAG: A modern architecture for hyper-personalization
Full-RAG: A modern architecture for hyper-personalization
 
UI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentationUI5 Controls simplified - UI5con2024 presentation
UI5 Controls simplified - UI5con2024 presentation
 
Best 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERPBest 20 SEO Techniques To Improve Website Visibility In SERP
Best 20 SEO Techniques To Improve Website Visibility In SERP
 
GenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizationsGenAI Pilot Implementation in the organizations
GenAI Pilot Implementation in the organizations
 
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
 
CAKE: Sharing Slices of Confidential Data on Blockchain
CAKE: Sharing Slices of Confidential Data on BlockchainCAKE: Sharing Slices of Confidential Data on Blockchain
CAKE: Sharing Slices of Confidential Data on Blockchain
 
Choosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptxChoosing The Best AWS Service For Your Website + API.pptx
Choosing The Best AWS Service For Your Website + API.pptx
 
Artificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopmentArtificial Intelligence for XMLDevelopment
Artificial Intelligence for XMLDevelopment
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
 
How to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For FlutterHow to use Firebase Data Connect For Flutter
How to use Firebase Data Connect For Flutter
 
Taking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdfTaking AI to the Next Level in Manufacturing.pdf
Taking AI to the Next Level in Manufacturing.pdf
 
Building Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and MilvusBuilding Production Ready Search Pipelines with Spark and Milvus
Building Production Ready Search Pipelines with Spark and Milvus
 
Removing Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software FuzzingRemoving Uninteresting Bytes in Software Fuzzing
Removing Uninteresting Bytes in Software Fuzzing
 
How to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptxHow to Get CNIC Information System with Paksim Ga.pptx
How to Get CNIC Information System with Paksim Ga.pptx
 

Java: Finding Bugs, Fixing Bugs in IBM Domino Designer and XPages

  • 1. Java: Finding Bugs, Fixing Bugs in IBM Domino Designer and XPages Julian Robichaux Senior Software Engineer, panagenda Paul T. Calhoun Senior Software Engineer, panagenda MWLUG 2014
  • 2. Your Speakers • Julian Robichaux - Developer at panagenda, an Austrian based IT management software provider - Purveyor of nsftools.com - Writer of open-­‐source (and commercial) software - Speaker at Lotusphere since 2006, many LUG and View conferences in various countries - Doing almost exclusively Java and Eclipse development (often Notes related) for the past few years - Not as pretty as Paul Calhoun, but still easy on the eyes
  • 3. Your Speakers • Paul T. Calhoun - I have been working with Lotus/IBM technologies for the past 25 years. - I have been certified in both Administration and Development on every major release of Notes/Domino since release 3. - My focus has always been on training and enablement of Administrators and Developers, but I also provide mentoring and consulting services. - Most recently I have been focused on XPages consulting, training and enablement. - When not working, my passion is spending all my spare time with my awesomely wonderful grand-­‐kids. (WARNING: I have pictures !)
  • 4. Agenda • Debugging - Java Agents - XPages • Logging • Using FindBugs • Using JConsole and Dump Analysis • Q & A
  • 5. Debugging Java Agents • There are several steps to enable a Java debugger to debug a Java agent running on the Notes client: - Enable Java debugging on the Notes client. - Enable debugging in the agent (compile code with debug info). - Add thread sleep commands to the Java agent. - Set breakpoints in the Java code. - Create a Debug Configuration in the Java Perspective in Domino Designer to connect to the Notes client. - Add the agent source to the debug configuration. - Run the debugger in Domino Designer client. - Start the Notes agent to debug. - Debug the code as needed. • Detach the debugger from Notes.
  • 6. Enable Debugger • Follow these steps to enable remote Java debugging on the Notes client: - Choose Tools | Java Debugging Preferences from the menu. - In the Java Debugging Preferences dialog, choose the appropriate types of agents to debug and set the port values. - Port values must be unique when enabling debugging for more than one type of agent. - Click [OK] to save the settings and close the dialog.
  • 7. Enable Debugger • Variables in the NOTES.INI file are added to reflect the port settings and agent type selections - JavaDebugClientForeground=1 - JavaDebugClientForegroundPort=8701 - JavaDebugClientScheduled=1 - JavaDebugClientScheduledPort=8702 - JavaDebugClientWebPreview=1 - JavaDebugClientWebPreviewPort=8703 ! • Notes must be restarted for the NOTES.INI changes to take effect. Click [OK] when prompted to restart Notes. • Exit and restart Notes.
  • 8. Enable Agent for Debugging • Follow these steps to enable debugging for a Java agent: - Open the Java agent's Properties. - From the Basics tab of the Properties view • Enable the 'Compile Java code with debugging information' option. • This will add line numbers and information about variables to the compiled code to allow the agent to be debugged.
  • 9. Enable Breakpoints • Follow these steps to add breakpoints to an agent: - Open the agent in Designer. - Breakpoints can be added by either: • Right-­‐clicking in the left margin of the code editor and choosing • Toggle Breakpoint • Double-­‐clicking in the margin next to the code to add/remove the breakpoint. - The breakpoints are indicated by a blue dots in the bar beside the editor margin.
  • 10. Create Debug Configuration • This only has to be done once • In Designer: - Click the down arrow next to the blue “Debug” icon - Choose “Manage Debug Configurations”
  • 11. Create Debug Configuration • In the Debug Configurations Dialog - Right Click on “Remote Java Application” - Choose “New”
  • 12. Set Debug Configuration • Provide a Name • Change Port to Port set in Notes.ini - Default is 8701 but can be any open port • Click “Apply” and “Close” to save • Click “Apply” and “Debug” to start the debugger listening on the defined port
  • 13. Switch to the Debug Perspective • If not already in the Debug Perspective a dialog will open prompting to switch to that perspective - Choose “Yes” • Optionally choose “Remember my decision” to suppress this dialog from popping up every time
  • 15. Debugging • The Code will stop at the first breakpoint • From there you can… - Inspect (and change) variables - Step through the code using the icons
  • 16. Stop the Debugger • After the debugging session is complete the debugger is still “listening” on the open port • In the debug perspective make sure to “Disconnect” from the listening port to turn debugging off
  • 17. Debugging Java XPages • If XPages make calls to Java Code elements then that Java code can be debugged using a similar process to debugging agents. • In order to debug Java code called by an XPage add the following lines to the notes.ini - JavaEnableDebug=1 - JavaDebugOptions=transport=dt_socket,server=y,suspend=n,addr ess=<port to listen on> • GOTCHA !! - If the previous ports are enabled for Java agent debugging then “connecting” to the port above will never work - Disable the Java Debug Ports and restart your Notes, Designer client prior to debugging Java called from XPages - Your firewall might block the port
  • 18. Debug Configuration • Create a new Debug Configuration to “listen” on the port that was set in the notes.ini file • Preview the XPage to start the local web preview • Start the debugger
  • 19. Execute XPage Action • Set breakpoints in the Java code to be debugged • In the XPage in the browser - Execute the action that will call the Java code • If not already in the Debug perspective you will be prompted to switch to that perspective • Step through your code reviewing the variable values at each breakpoint • Clear breakpoints and resume to end • Disconnect from Debugger when done.
  • 20. WARNING DO NOT EVER ENABLE DEBUGGING ON A PRODUCTION SERVER
  • 21. Demo
  • 22. Agenda • Debugging - Java Agents - XPages • Logging • Using FindBugs • Using JConsole and Dump Analysis • Q & A
  • 24. Logging Basics • System.out.println() is NOT logging! • Java has native logging classes - java.util.logging - There are other popular logging frameworks, which we will ignore for the sake of brevity - The native Java classes work just fine • The big picture: - Each bit of code can have its own logger, or loggers can be shared - Java manages all the different loggers being used - The logging level determines the severity of the message - Different handlers send messages to the console or to files
  • 25. Logging Example create logger log to various levels easy Exception handling
  • 26. Logging Levels • Log Levels, in order of highest to lowest: - SEVERE – serious failure, horrible stuff - WARNING – potential problem - INFO – informational, non-­‐technical - CONFIG – system/program configuration - FINE – simplest trace messages - FINER – medium trace messages - FINEST – detailed trace messages
  • 27. Interpreting Levels • What level you use for your messages is a matter of personal preference. Here’s a general guideline/suggestion: - Showstopping issues go to SEVERE - Errors your admin (and nosy users) should see go to WARNING - Unobtrusive “heartbeat” kinds of messages go to INFO - Start and stop messages go to CONFIG - Debug info goes to FINE/ER/EST, with FINEST being very tedious and verbose • These are “trace” levels • Generally only enabled for troubleshooting purposes
  • 28. Log Handlers • Typical log handlers write to either the console or a file • There are default handlers for different contexts - Java agents: Java console (client), server console (server) - XPages: server console (server), files (client and server) - Plugins: OSGi console, files • Handlers also have levels - Console normally only displays log messages for SEVERE, WARNING, and INFO - File logs often display log messages for all levels
  • 29. Logging Example where did this one go?
  • 30. Log Levels and Output • Loggers often have a default level of INFO • This means that by default, any messages with a level lower than INFO will not be logged anywhere - So messages at level CONFIG and FINE/ER/EST will never be sent to a Handler because the Logger discards them • Messages get filtered by the Logger before they are passed to the Handler - Even a Handler at Level.FINEST will not get any FINE/ER/EST messages if the Logger is set to Level.INFO
  • 31. Adjusting Log Levels • Adjusting log levels programmatically - setLevel() for Logger and Handler - This will cause a SecurityException! - You can get around this by editing jvm/lib/security/java.policy - permission java.util.logging.LoggingPermission "control" • Adjusting log levels with config files - Notes agents: {notes}jvmliblogging.properties - XPages: {domino}datadominoworkspace.configrcpinstall.properties
  • 32. Example Log Level Adjustment Don’t forget the .level!
  • 33. Logging Quirks in Notes • Prior to 8.5.3 FP2, Java logging in Notes worked just fine - Although logging in local agents didn’t log anywhere by default • In 9.0.0 and 8.5.3 FP2, FP3, and FP4 Java logging gave errors - java.security.AccessControlException - Add LoggingPermission to jvm/lib/security/java.policy • In 9.0.1 and 8.5.3 FP5, Java logging worked again - NEW: Local Java agents log to the Java Agent Console by default - NEW: if you still need the LoggingPermission so you can set custom Handlers or Levels, you also need to add a special SecurityPermission • http://www-­‐01.ibm.com/support/docview.wss?uid=swg21669594
  • 34. XPages Log Output • XPages logging trace log files - Server 8.5.1: none, server console only - Server 8.5.2+: {domino}datadominoworkspacelogs • SEVERE messages still show up on the console too - XPiNC: {notes}dataworkspacelogs • Default logger level is WARNING, not INFO • Prior to 8.5.3, non-­‐logged XPages exceptions also used to show up in the trace logs. Now they are in {notes}dataIBM_TECHNICAL_SUPPORTxpages_exc_*.log - http://www-­‐01.ibm.com/support/docview.wss?uid=swg1LO66802
  • 35. Viewing Trace Log Files • Trying to view the trace log files as raw XML is… painful • A better way is to right-­‐click them in the “logs” folder and open them in a browser - There is an XSLT file that will format them nicely for you • HOWEVER, if the client or server is still running, the XSLT file won’t work because the closing XML tag is missing - Make a copy, open in a text editor, and add a closing </CommonBaseEvents> tag to the end. Then open in a browser. - Make sure you open the copy from within the “logs” folder; otherwise the XSLT file will not be found - Sometimes log messages don’t show up immediately in the log files! Everything gets flushed when you shut down the server.
  • 39. Logging Best Practices • Use the same logger for your entire package (maybe even your entire library) • Most messages should be logged to FINE/ER/EST; don’t clutter up the console with INFO messages • Log actions, but not every step of a method or every single get/set – logging is NOT a replacement for a debugger • DO NOT EVER log sensitive data - Personal user information, passwords, system “secrets” - “No one will ever look at those anyway” is bad security
  • 40. Agenda • Debugging - Java Agents - XPages • Logging • Using FindBugs • Using JConsole and Dump Analysis • Q & A
  • 41. FindBugs • FindBugs is a program that uses static analysis to look for bugs in Java code. - Current version is 3.x • Source and Documentation at - http://findbugs.cs.umd.edu/eclipse • Latest version of FindBugs CANNOT be installed into DDE natively - Either install in a stand alone version of Eclipse - Use FindBugs for Domino Designer from OpenNTF - FYI, This is a version 2.x implementation of FindBugs • http://www.openntf.org/main.nsf/project.xsp?r=project/FindBugs %20for%20DominoDesigner
  • 42. FindBugs • Available as an Eclipse plug-­‐in, install instructions at - http://findbugs.cs.umd.edu/eclipse • Agents contained in an NSF are not “readable” during the FindBugs analysis. - The agent code will need to be exported and imported into Eclipse for analysis.
  • 43. Change FindBugs Properties • Change the FindBugs Properties to show all bugs
  • 44. Running FindBugs • In Domino Designer open the Package Explorer view - If this view is not in the current perspective, either • Switch to the XPages perspective • Add it to the current working perspective • Right click over the code folder to be analyzed and choose “Run FindBugs”
  • 45. FindBugs Perspective • After analyzing code, switch to the FindBugs perspective • Or add the Bug Explorer view to the current perspective • Remediate the found bugs
  • 46. Demo
  • 47. Agenda • Debugging - Java Agents - XPages • Logging • Using FindBugs • Using JConsole and Dump Analysis • Q & A
  • 48. My Notes Client is Slow! • Troubleshooting slow performance is tricky - How do you define “slow”? - How do you know it’s your code and not something else? - Task Manager only tells you about high-­‐level processes • Much easier to troubleshoot on a client, rather than a server - Not disruptive to restart - Easy to change parameters - Crash at will! • Whenever possible, port your Java code to a local Notes agent or a local XPage for troubleshooting
  • 49. A Tale of Two VMs • The Notes client actually has two Java VMs for running code - Java agents - The rest of the Notes client (including local XPages) • The VM for Java agents is adjusted with: - Notes.ini settings - {notes}jvmlib properties files • The VM for everything else (on the client) is adjusted with: - {notes}frameworkrcpdeployjvm.properties - {data}workspace.configrcpinstall.properties
  • 50. JConsole • JConsole is a tool for monitoring performance and resource usage in a running JVM - http://docs.oracle.com/javase/6/docs/technotes/guides/ management/jconsole.html • I wrote an article on setting this up for local XPages and plugins (non-­‐Java-­‐agents) here: - http://www.socialbizug.org/blogs/2ec5d0ed-­‐ d04e-­‐4b18-­‐9610-­‐9819fcebca79/entry/ using_jconsole_to_monitor_your_ibm_notes_client • Quick demo…
  • 52. JConsole for Local Java Agents • To use JConsole to monitor local Java agents, there’s a trick - Add JavaUserOptionsFile to your Notes.ini file: • JavaUserOptionsFile=c:IBMNotesjava.options.txt - In your Java options file add these lines: • -­‐Dcom.sun.management.jmxremote.port=9876 -­‐Dcom.sun.management.jmxremote.ssl=false -­‐Dcom.sun.management.jmxremote.authenticate=false • Connect JConsole to the jmxremote.port you defined - This port won’t be active until AFTER you run a Java agent - Make sure nothing else is using that port - Make sure the firewall allows that port to be used
  • 54. Analyzing Dump Files • If your Notes client (or Domino server) crashes due to a Java problem, it will usually generate a core dump file - default location is workspacelogs - Just a text file - Shows what threads were running, system info, etc. • IBM Thread and Memory Dump Analyzer does a good job of parsing the core dump file for you - https://www.ibm.com/developerworks/community/groups/ service/html/communityview?communityUuid=2245aa39-­‐ fa5c-­‐4475-­‐b891-­‐14c205f7333c - run like this: java -Xmx500m -jar jca455.jar
  • 55. IBM Memory Dump Analyzer
  • 56. Heap Dumps • Heap Dumps are a snapshot of the JVM threads and processes at a specific point in time, while it’s running - Like a slice of what you see in JConsole • Used for: - Tracking down memory leaks - Finding high-­‐memory-­‐use objects (and arrays) - Finding objects that are unexpectedly still in memory • IBM Heap Analyzer is a nice tool for viewing the information - https://www.ibm.com/developerworks/community/alphaworks/tech/ heapanalyzer - http://www-­‐01.ibm.com/support/docview.wss?uid=swg27006624&aid=1
  • 57. How to Generate a Heap Dump • Generating a Heap Dump file (no crash required!) - Domino XPages • tell http xsp heap dump • XPages Toolbox ( http://www.openntf.org/p/XPages%20Toolbox ) - Notes Client (from a command prompt) • notesframeworkrcprcplauncher.exe -­‐com.ibm.rcp.core.logger#dump heap -­‐dumps heapdump • writes to {data}workspacelogsheapdump.###.phd by default • You can also do a core (thread) dump with: • notesframeworkrcprcplauncher.exe -­‐com.ibm.rcp.core.logger#dump threads -­‐dumps javacore - Java Agent • com.ibm.jvm.Dump.HeapDump(); • writes to {notes}frameworkheapdump.###.phd
  • 58. IBM Heap Analyzer Screenshot
  • 59. IBM Heap Analyzer Screenshot
  • 60. IBM Heap Analyzer Screenshot 2318 Notes Documents 2318 Notes Items 1 Notes View 1 Notes Database 1 Notes Session 1 ??? ——————————— 4640 NotesWeakReferences
  • 61. Agenda • Debugging - Java Agents - XPages • Logging • Using FindBugs • Using JConsole and Dump Analysis • Q & A
  • 62. Q & A Questions? Anyone?
  • 63. THANK YOU Julian Robichaux panagenda jrobichaux@panagenda.com MWLUG 2014 Paul Calhoun panagenda paul.calhoun@panagenda.com