SlideShare une entreprise Scribd logo
1  sur  147
Télécharger pour lire hors ligne
WEBLOGIC CONSOLE
CUSTOMIZATION
An introduction to customizing and extending the Weblogic Console
1
• The Future Group

–TFG is a strong ICT entrepreneurs collective,
consisting of several partnerships. The largest
network of exclusively linked independent experts in
the Netherlands. Consists of 9 different collectives
each with its own specific knowledge area.

• Peter van Nes

– Partner within TFG and focussed on Oracle
technologies. Main expertise on Oracle middleware
(SOA, IDM, Weblogic, FMW) and Java.

2
ABOUT
• Rebrand

– Match Weblogic Console to the Corporate Identity

• Differentiate

– Dynamically adjust Look And Feel (LAF) to
environment (DTAP)

– Adjust Look And Feel to WL Role

• Extending with new functionality
3
REASONS TO CUSTOMIZE
• Extension point

–Location in Admin Console where content can be
replaced or added

• UI Control

–Has a unique label

–Each labeled UI Control is an Extension point
4
EXTENSION POINTS
• Provided by WebLogic Portal framework

– Supports (limited) extension of Weblogic Console

– No support for 

• personalization (although we will see otherwise)

• interaction management

• content management

• etc.
5
WEBLOGIC CONSOLE
• Extensions are safe!

• Can be enabled/disabled anytime

– Preferences > Extensions 

• Are merged with console.app in-memory
6
WEBLOGIC CONSOLE
– Open Preferences

– Tab extensions

– Select Show
Definition Labels
SHOW UI CONTROL LABELS
7
EXTENSION POINTS
– Open Preferences

– Tab extensions

– Select Show
Definition Labels
SHOW UI CONTROL LABELS
7
EXTENSION POINTS
– Open Preferences

– Tab extensions

– Select Show
Definition Labels
SHOW UI CONTROL LABELS
7
EXTENSION POINTS
– Open Preferences

– Tab extensions

– Select Show
Definition Labels
SHOW UI CONTROL LABELS
7
EXTENSION POINTS
8
UI CONTROL HIERARCHY
8
UI CONTROL HIERARCHY
DESKTOP
– top level UI hierarchy
DESKTOP
8
UI CONTROL HIERARCHY
DESKTOP
– top level UI hierarchy
DESKTOP
LOOK AND FEEL
– images

– CSS

– XML files
LOOK AND FEEL
8
UI CONTROL HIERARCHY
DESKTOP
– top level UI hierarchy
DESKTOP
LOOK AND FEEL
– images

– CSS

– XML files
LOOK AND FEEL
BOOK
– pages

– books

– menu control
BOOK
8
UI CONTROL HIERARCHY
DESKTOP
LOOK AND FEEL BOOK
PAGE
– layout

– portlets

– books
PAGE
8
UI CONTROL HIERARCHY
DESKTOP
LOOK AND FEEL BOOK
PAGE
– layout

– portlets

– books
PAGE
LAYOUT
– placeholders

LAYOUT
8
UI CONTROL HIERARCHY
DESKTOP
LOOK AND FEEL BOOK
PAGE
– layout

– portlets

– books
PAGE
LAYOUT
– placeholders

LAYOUT
PLACEHOLDER
– portlets

– books
PLACEHOLDER
8
UI CONTROL HIERARCHY
DESKTOP
LOOK AND FEEL BOOK
PAGE
LAYOUT
PLACEHOLDER
PORTLET
– Content

PORTLET
• Start with laftemplate.zip

– located at 

${wl.home}/server/lib/console-ext/templates/

– Specific for a Weblogic version

– Initial set of Look and Feel files

– Extract to working directory

• Create netuix-extension.xml

– Copy to WEB-INF folder

– Modify netuix-extension.xml

– Oracle published version is incorrect!
9
BUILDING A NEW LOOK AND FEEL
.
├── css
├── errors
├── framework
├── images
├── javascript
├── layouts
├── login
└── WEB-INF
LAFTEMPLATE
• netuix-extension.xml

• Modify provider-info elements

• title

• version

• description

• author

• support-url

• All optional, not influencing functionality
10
BUILDING A NEW LOOK AND FEEL
<provider-info>

<title>Reddipped 11g LAF</title>

<version>1.0</version>

<description>A customized look and feel for WLS 11g Weblogic Console</description>

<author>Peter van Nes</author>

<support-url>http://www.reddipped.com/</support-url>

</provider-info>
• netuix-extension.xml

• Modify desktop-extension elements

• attribute title, skin and attribute

• value same as extension name and war-file

• attribute definitionLabel and markupName

• Any value, not used
11
BUILDING A NEW LOOK AND FEEL
<desktop-extension>

<look-and-feel-content title="MyFirstLAF"

definitionLabel="MyFirstLAF"

markupName="myLookAndFeel"

skin="MyFirstLAF"

skin-path="framework/skins"

skeleton="MyFirstLAF"

skeleton-path="framework/skeletons"

default-window-icon="window-icon.gif"

default-window-icon-path="images/"/>

</desktop-extension>
12
BUILDING A NEW LOOK AND FEEL
• Compile jsp files

• Create tmp folder

• Copy from ${wl_home}/server/lib/consoleapp/
webapp

• .jar, .tld, .jsp files and web.xml 

• Keep directory structure from laf working
directory!

• Copy from working directory

• .jsp files and .java classes (optional)
.
├── errors
├── framework
│   ├── features
│   └── skeletons
│   ├── default
│   │   └── wlsworkspace
│   └── MyFirstLAF
├── layouts
├── login
└── WEB-INF
└── lib
JSP COMPILE DIR
13
BUILDING A NEW LOOK AND FEEL
• Setup classpath, all jars in

• ${wl.home}/server/lib

• ${wl.home}/server/lib/consoleapp/APP-INF/lib

• ${wl.home}/server/lib/consoleapp/webapp/WEB-
INF/lib
.
├── errors
├── framework
│   ├── features
│   └── skeletons
│   ├── default
│   │   └── wlsworkspace
│   └── MyFirstLAF
├── layouts
├── login
└── WEB-INF
└── lib
JSP COMPILE DIR
14
BUILDING A NEW LOOK AND FEEL
• Compile jsp files

• Execute wlappc

• wlappc source="{tmpdir}"
keepgenerated="true" classPath=“{classpath}”

• Copy compiled classes to laf working directory

• Create Look And Feel WAR

• jar -cf {laf name} {laf working dir}
.
├── errors
├── framework
│   ├── features
│   └── skeletons
├── layouts
├── login
└── WEB-INF
├── classes
│ └── jsp_ext
└── lib
JSP COMPILE DIR
.
├── css
├── errors
├── framework
├── images
├── javascript
├── layouts
├── login
└── WEB-INF
└── classes
└── jsp_ext
LAF WORKING DIR
15
BUILDING A NEW LOOK AND FEEL
• build.laf.xml

• Ant build file to build look and feel war-file

• Contains all necessary targets to build and compile

• targets

• laf.project.initialize

• laf.build

• laf.deploy

• other supporting targets
.
├── errors
├── framework
│   ├── features
│   └── skeletons
├── layouts
├── login
└── WEB-INF
├── classes
│ └── jsp_ext
└── lib
JSP COMPILE DIR
.
├── css
├── errors
├── framework
├── images
├── javascript
├── layouts
├── login
└── WEB-INF
└── classes
└── jsp_ext
LAF WORKING DIR
• Setup Weblogic Domain

• Configure Netbeans

• Setup Look And Feel Project

• Customize Look And Feel

• Deploy and Test customization
16
LAB 1
• Learn from the code

• Dynamic HTML

– Java Server Pages (JSP) 

– Java Standard Tag Library (JSTL)

– Javascript

• JD-GUI is your friend!
17
MORE COMPLEX CUSTOMIZATIONS
18
MORE COMPLEX CUSTOMIZATIONS
• Goal: Dynamic LAF based on environment

• Recognize environment based on domain name

• Dynamic color LAF login page border

• Dynamic toolbar color
18
MORE COMPLEX CUSTOMIZATIONS
• Goal: Dynamic LAF based on environment

• Recognize environment based on domain name

• Dynamic color LAF login page border

• Dynamic toolbar color
• How to get the domain name ?

• Explore MBeanUtils

– Imported with import attribute in page directive of
LoginForm.jsp

– Find jar with ‘grep -Ri “com/bea/console/utils/
MBeanUtils” *’.

19
MORE COMPLEX CUSTOMIZATIONS
• Use JD GUI to decompile console.jar

• Expand MBeanUtils class to show all methods 

• getDomainName

• Returns String containing domain name

• getDomainRuntimeMBeanServerConnection

• Returns MBeanServerConnection

• Enables you to access Runtime MBeans

• MBean Reference

• Weblogic Server MBean Reference
20
MORE COMPLEX CUSTOMIZATIONS
• WL Server contains MBeans to

configure, monitor and manage

Weblogic Server resources

• Attributes

– Set / Read values

• Operations

– Execute actions
21
MBEANS AND JMX
• Organized into

– Runtime MBeans

•Info about runtime state of server and resource

•Non persistent, volatile 

– Configuration Means

• Representation of config xml files

• Accessed through JMX (Java Management Extension)
22
MBEANS AND JMX
• Registered in an MBean server

– Domain Runtime MBean Server

•Domain-wide services

– Runtime MBean Server

•Service instance
23
MBEANS AND JMX
• Lab 2

– Retrieve domain name

– Make login page border color dependent on
domain name

– Domain name convention [DTAP]_{domain name}

•Test domain : T_MyDomain

•Production domain : P_MyDomain

– Make toolbar color depend on domain name

• Lab 3

– Using MBeans 

– List Managed Servers and state on login page

24
LAB 2 & 3
• Webserver

• JSONP format
MESSAGE SOURCE
• jQuery vTicker

• AngularJS
EXTENSION
25
LAB 4
CALLBACK([
{“MSG”:”Some customers in domain OBIEE_1 ….”}
]};
LAB
• Broadcasting

messages to admins
BEEHIVE PAGE FLOW
STRUTS ACTION
26
ADDING PORTLETS
NETUIX-EXTENSION.XML



SOME.PORTLET
JAVA SERVER PAGE (JSP)
• Extends
console.portal

• Adds Portlet to
desktop 

• (sub)Tab to
ContentBook
Defines data to load Adds business and
navigation logic
<page-extension>
<page-location>
<parent-label-location
label="page"/>
<page-insertion-point
layout-location="1"
placeholder-position="0"/>
</page-location>
<portlet-content
content-uri=“demo.portlet"
title="Demo title"
orientation="top" default-
minimized="false"
instance-label="demo-
portlet"/>
</page-extension>
27
ADDING PORTLETS TO THE DESKTOP
NETUIX-EXTENSION.XML
<page-extension>
<page-location>
<parent-label-location
label="page"/>
<page-insertion-point
layout-location="1"
placeholder-position="0"/>
</page-location>
<portlet-content
content-uri=“demo.portlet"
title="Demo title"
orientation="top" default-
minimized="false"
instance-label="demo-
portlet"/>
</page-extension>
27
ADDING PORTLETS TO THE DESKTOP
NETUIX-EXTENSION.XML
LAYOUT
LOCATION
0
<page-extension>
<page-location>
<parent-label-location
label="page"/>
<page-insertion-point
layout-location="1"
placeholder-position="0"/>
</page-location>
<portlet-content
content-uri=“demo.portlet"
title="Demo title"
orientation="top" default-
minimized="false"
instance-label="demo-
portlet"/>
</page-extension>
27
ADDING PORTLETS TO THE DESKTOP
NETUIX-EXTENSION.XML
LAYOUT
LOCATION
0
LAYOUT
LOCATION
1
<page-extension>
<page-location>
<parent-label-location
label="page"/>
<page-insertion-point
layout-location="1"
placeholder-position="0"/>
</page-location>
<portlet-content
content-uri=“demo.portlet"
title="Demo title"
orientation="top" default-
minimized="false"
instance-label="demo-
portlet"/>
</page-extension>
27
ADDING PORTLETS TO THE DESKTOP
NETUIX-EXTENSION.XML
LAYOUT
LOCATION
0
LAYOUT
LOCATION
1
<page-extension>
<page-location>
<parent-label-location
label="page"/>
<page-insertion-point
layout-location="1"
placeholder-position="0"/>
</page-location>
<portlet-content
content-uri=“demo.portlet"
title="Demo title"
orientation="top" default-
minimized="false"
instance-label="demo-
portlet"/>
</page-extension>
27
ADDING PORTLETS TO THE DESKTOP
NETUIX-EXTENSION.XML
LAYOUT
LOCATION
0
LAYOUT
LOCATION
1
PLACEHOLDER
POSITION 0
<page-extension>
<page-location>
<parent-label-location
label="page"/>
<page-insertion-point
layout-location="1"
placeholder-position="0"/>
</page-location>
<portlet-content
content-uri=“demo.portlet"
title="Demo title"
orientation="top" default-
minimized="false"
instance-label="demo-
portlet"/>
</page-extension>
27
ADDING PORTLETS TO THE DESKTOP
NETUIX-EXTENSION.XML
LAYOUT
LOCATION
0
LAYOUT
LOCATION
1
PLACEHOLDER
POSITION 0
PLACEHOLDER
POSITION 1
<page-extension>
<page-location>
<parent-label-location
label="page"/>
<page-insertion-point
layout-location="1"
placeholder-position="0"/>
</page-location>
<portlet-content
content-uri=“demo.portlet"
title="Demo title"
orientation="top" default-
minimized="false"
instance-label="demo-
portlet"/>
</page-extension>
27
ADDING PORTLETS TO THE DESKTOP
NETUIX-EXTENSION.XML
LAYOUT
LOCATION
0
LAYOUT
LOCATION
1
PLACEHOLDER
POSITION 0
PLACEHOLDER
POSITION 1
PLACEHOLDER
POSITION 2
<page-extension>
<page-location>
<parent-label-location
label="page"/>
<page-insertion-point
layout-location="1"
placeholder-position="0"/>
</page-location>
<portlet-content
content-uri=“demo.portlet"
title="Demo title"
orientation="top" default-
minimized="false"
instance-label="demo-
portlet"/>
</page-extension>
27
ADDING PORTLETS TO THE DESKTOP
NETUIX-EXTENSION.XML
LAYOUT
LOCATION
0
LAYOUT
LOCATION
1
27
ADDING PORTLETS TO THE DESKTOP
NETUIX-EXTENSION.XML
LAYOUT
LOCATION
0
LAYOUT
LOCATION
1
<page-extension>
<page-location>
<parent-label-location
label="page"/>
<page-insertion-point
layout-location="0"
placeholder-position="0"/>
</page-location>
<portlet-content
content-uri=“demo.portlet"
title="Demo title"
orientation="top" default-
minimized="false"
instance-label="demo-
portlet"/>
</page-extension>
DEMO.PORTLET
<netuix:portlet
definitionLabel=“DemoPortlet”
title=“DemoPortlet"
presentationClass="">
<netuix:titlebar/>
<netuix:content>
<netuix:jspContent
contentUri="/jspext/demo.jsp"/>
</netuix:content>
</netuix:portlet>
28
PORTLET STYLES
DEMO.PORTLET
<netuix:portlet
definitionLabel=“DemoPortlet”
title=“DemoPortlet"
presentationClass="">
<netuix:titlebar/>
<netuix:content>
<netuix:jspContent
contentUri="/jspext/demo.jsp"/>
</netuix:content>
</netuix:portlet>
28
PORTLET STYLES
DEMO.PORTLET
28
PORTLET STYLES
<netuix:portlet
definitionLabel=“DemoPortlet”
title=“DemoPortlet"
presentationClass="wlsc-frame">
<netuix:titlebar/>
<netuix:content>
<netuix:jspContent
contentUri="/jspext/demo.jsp"/>
</netuix:content>
</netuix:portlet>
DEMO.PORTLET
28
PORTLET STYLES
<netuix:portlet
definitionLabel=“DemoPortlet”
title=“DemoPortlet"
presentationClass="wlsc-layout-cell">
<netuix:titlebar/>
<netuix:content>
<netuix:jspContent
contentUri="/jspext/demo.jsp"/>
</netuix:content>
</netuix:portlet>
DEMO.PORTLET
28
PORTLET STYLES
<netuix:portlet
definitionLabel=“DemoPortlet”
title=“DemoPortlet"
presentationClass="wlsc-frame">
<!— <netuix:titlebar/> —>
<netuix:content>
<netuix:jspContent
contentUri="/jspext/demo.jsp"/>
</netuix:content>
</netuix:portlet>
DEMO.PORTLET
28
PORTLET STYLES
<netuix:portlet
definitionLabel=“DemoPortlet”
title=“DemoPortlet"
presentationClass="wlsc-frame">
<netuix:titlebar>
<netuix:minimize/>
<netuix:maximize/>
</netuix:titlebar>
<netuix:content>
<netuix:jspContent
<book-extension>
<book-location>
<parent-label-location
label="CoreDomainConfigGenera
lBook"/>
<book-insertion-point 

action="append"/>
</book-location>
<book-content content-uri=“/
controls/demo.book”/>
</book-extension>
29
ADDING PORTLETS AS A TAB OF CONTENTBOOK
NETUIX-EXTENSION.XML
<book-extension>
<book-location>
<parent-label-location
label="CoreDomainConfigGenera
lBook"/>
<book-insertion-point 

action="append"/>
</book-location>
<book-content content-uri=“/
controls/demo.book”/>
</book-extension>
29
ADDING PORTLETS AS A TAB OF CONTENTBOOK
NETUIX-EXTENSION.XML
<book-extension>
<book-location>
<parent-label-location
label="CoreDomainConfigGenera
lBook"/>
<book-insertion-point 

action="append"/>
</book-location>
<book-content content-uri=“/
controls/demo.book”/>
</book-extension>
29
ADDING PORTLETS AS A TAB OF CONTENTBOOK
NETUIX-EXTENSION.XML
<book-extension>
<book-location>
<parent-label-location
label="CoreDomainConfigGenera
lBook"/>
<book-insertion-point 

action="append"/>
</book-location>
<book-content content-uri=“/
controls/demo.book”/>
</book-extension>
29
ADDING PORTLETS AS A TAB OF CONTENTBOOK
NETUIX-EXTENSION.XML
30
ADDING TAB WITHOUT SUBTABS
<netuix:page markupName="page"
markupType="Page"
definitionLabel="DomainDemoPage1"
title="Demo Tab 1"
presentationClass="page-content">
<netuix:meta
name="skeleton-resource-bundle"
content="Bundle"/>
<netuix:content>
<netuix:portletInstance
markupType=“Portlet"
instanceLabel="demoportlet"
contentUri="/portlets/demo.portlet"/>
</netuix:content>
</netuix:page>
DEMO.BOOK
– definitionLabel

– instanceLabel
UNIQUENESS
30
ADDING TAB WITHOUT SUBTABS
<netuix:page markupName="page"
markupType="Page"
definitionLabel="DomainDemoPage1"
title="Demo Tab 1"
presentationClass="page-content">
<netuix:meta
name="skeleton-resource-bundle"
content="Bundle"/>
<netuix:content>
<netuix:portletInstance
markupType=“Portlet"
instanceLabel="demoportlet"
contentUri="/portlets/demo.portlet"/>
</netuix:content>
</netuix:page>
DEMO.BOOK
– definitionLabel

– instanceLabel
UNIQUENESS
30
ADDING TAB WITHOUT SUBTABS
<netuix:page markupName="page"
markupType="Page"
definitionLabel="DomainDemoPage1"
title="Demo Tab 1"
presentationClass="page-content">
<netuix:meta
name="skeleton-resource-bundle"
content="Bundle"/>
<netuix:content>
<netuix:portletInstance
markupType=“Portlet"
instanceLabel="demoportlet"
contentUri="/portlets/demo.portlet"/>
</netuix:content>
</netuix:page>
DEMO.BOOK
– definitionLabel

– instanceLabel
UNIQUENESS
30
ADDING TAB WITHOUT SUBTABS
<netuix:page markupName="page"
markupType="Page"
definitionLabel="DomainDemoPage1"
title="Demo Tab 1"
presentationClass="page-content">
<netuix:meta
name="skeleton-resource-bundle"
content="Bundle"/>
<netuix:content>
<netuix:portletInstance
markupType=“Portlet"
instanceLabel="demoportlet"
contentUri="/portlets/demo.portlet"/>
</netuix:content>
</netuix:page>
DEMO.BOOK
– definitionLabel

– instanceLabel
UNIQUENESS
30
ADDING TAB WITHOUT SUBTABS
<netuix:page markupName="page"
markupType="Page"
definitionLabel="DomainDemoPage1"
title="Demo Tab 1"
presentationClass="page-content">
<netuix:meta
name="skeleton-resource-bundle"
content="Bundle"/>
<netuix:content>
<netuix:portletInstance
markupType=“Portlet"
instanceLabel="demoportlet"
contentUri="/portlets/demo.portlet"/>
</netuix:content>
</netuix:page>
DEMO.BOOK
– definitionLabel

– instanceLabel
UNIQUENESS
30
ADDING TAB WITHOUT SUBTABS
<netuix:page markupName="page"
markupType="Page"
definitionLabel="DomainDemoPage1"
title="Demo Tab 1"
presentationClass="page-content">
<netuix:meta
name="skeleton-resource-bundle"
content="Bundle"/>
<netuix:content>
<netuix:portletInstance
markupType=“Portlet"
instanceLabel="demoportlet"
contentUri="/portlets/demo.portlet"/>
</netuix:content>
</netuix:page>
DEMO.BOOK
– definitionLabel

– instanceLabel
UNIQUENESS
31
ADDING PORTLETS AS (SUB-)TABS
<netuix:book
markupName=“book"
markupType=“Book”
definitionLabel=“domainDemoSubTabs"
title="Demo Tab 2">
<netuix:singleLevelMenu
markupType=“Menu”
markupName=“singleLevelMenu"
presentationClass=“multi-level1”/>
<netuix:meta
name=“skeleton-resource-bundle"
content="Bundle"/>
<netuix:content>
<netuix:page markupName=“page"
….
</netuix:page>
<netuix:page markupName=“page"
….
</netuix:page>
</netuix:content>
</netuix:book>
DEMO.BOOK
31
ADDING PORTLETS AS (SUB-)TABS
<netuix:book
markupName=“book"
markupType=“Book”
definitionLabel=“domainDemoSubTabs"
title="Demo Tab 2">
<netuix:singleLevelMenu
markupType=“Menu”
markupName=“singleLevelMenu"
presentationClass=“multi-level1”/>
<netuix:meta
name=“skeleton-resource-bundle"
content="Bundle"/>
<netuix:content>
<netuix:page markupName=“page"
….
</netuix:page>
<netuix:page markupName=“page"
….
</netuix:page>
</netuix:content>
</netuix:book>
DEMO.BOOK
31
ADDING PORTLETS AS (SUB-)TABS
<netuix:book
markupName=“book"
markupType=“Book”
definitionLabel=“domainDemoSubTabs"
title="Demo Tab 2">
<netuix:singleLevelMenu
markupType=“Menu”
markupName=“singleLevelMenu"
presentationClass=“multi-level1”/>
<netuix:meta
name=“skeleton-resource-bundle"
content="Bundle"/>
<netuix:content>
<netuix:page markupName=“page"
….
</netuix:page>
<netuix:page markupName=“page"
….
</netuix:page>
</netuix:content>
</netuix:book>
DEMO.BOOK
31
ADDING PORTLETS AS (SUB-)TABS
<netuix:book
markupName=“book"
markupType=“Book”
definitionLabel=“domainDemoSubTabs"
title="Demo Tab 2">
<netuix:singleLevelMenu
markupType=“Menu”
markupName=“singleLevelMenu"
presentationClass=“multi-level1”/>
<netuix:meta
name=“skeleton-resource-bundle"
content="Bundle"/>
<netuix:content>
<netuix:page markupName=“page"
….
</netuix:page>
<netuix:page markupName=“page"
….
</netuix:page>
</netuix:content>
</netuix:book>
DEMO.BOOK
31
ADDING PORTLETS AS (SUB-)TABS
<netuix:book
markupName=“book"
markupType=“Book”
definitionLabel=“domainDemoSubTabs"
title="Demo Tab 2">
<netuix:singleLevelMenu
markupType=“Menu”
markupName=“singleLevelMenu"
presentationClass=“multi-level1”/>
<netuix:meta
name=“skeleton-resource-bundle"
content="Bundle"/>
<netuix:content>
<netuix:page markupName=“page"
….
</netuix:page>
<netuix:page markupName=“page"
….
</netuix:page>
</netuix:content>
</netuix:book>
DEMO.BOOK
THIS IS A BOOK !
31
ADDING PORTLETS AS (SUB-)TABS
<netuix:book
markupName=“book"
markupType=“Book”
definitionLabel=“domainDemoSubTabs"
title="Demo Tab 2">
<netuix:singleLevelMenu
markupType=“Menu”
markupName=“singleLevelMenu"
presentationClass=“multi-level1”/>
<netuix:meta
name=“skeleton-resource-bundle"
content="Bundle"/>
<netuix:content>
<netuix:page markupName=“page"
….
</netuix:page>
<netuix:page markupName=“page"
….
</netuix:page>
</netuix:content>
</netuix:book>
DEMO.BOOK
31
ADDING PORTLETS AS (SUB-)TABS
<netuix:book
markupName=“book"
markupType=“Book”
definitionLabel=“domainDemoSubTabs"
title="Demo Tab 2">
<netuix:singleLevelMenu
markupType=“Menu”
markupName=“singleLevelMenu"
presentationClass=“multi-level1”/>
<netuix:meta
name=“skeleton-resource-bundle"
content="Bundle"/>
<netuix:content>
<netuix:page markupName=“page"
….
</netuix:page>
<netuix:page markupName=“page"
….
</netuix:page>
</netuix:content>
</netuix:book>
DEMO.BOOK
‘ SKELETONURI=“SINGLELEVELMENU_CHILDREN.JSP" ‘ IS DEPRECATED.

USE PRESENTATIONCLASS ATTRIBUTE WITH VALUE MULTI-LEVEL1
31
ADDING PORTLETS AS (SUB-)TABS
<netuix:book
markupName=“book"
markupType=“Book”
definitionLabel=“domainDemoSubTabs"
title="Demo Tab 2">
<netuix:singleLevelMenu
markupType=“Menu”
markupName=“singleLevelMenu"
presentationClass=“multi-level1”/>
<netuix:meta
name=“skeleton-resource-bundle"
content="Bundle"/>
<netuix:content>
<netuix:page markupName=“page"
….
</netuix:page>
<netuix:page markupName=“page"
….
</netuix:page>
</netuix:content>
</netuix:book>
DEMO.BOOK
31
ADDING PORTLETS AS (SUB-)TABS
DEMO.BOOK
<netuix:book
…
<netuix:content>
<netuix:page markupName=“page"
markupType=“Page"
definitionLabel=“domainDemoSubPage2_1"
title="Demo Sub Tab 1”
presentationClass="page-content">
<netuix:meta
name=“skeleton-resource-bundle"
content="Bundle"/>
<netuix:content>
<netuix:portletInstance
markupType=“Portlet”
instanceLabel=“demoportlet2_1"
contentUri="/portlets/demo.portlet"/>
</netuix:content>
</netuix:page>
<netuix:page markupName="page"
markupType=“Page"
definitionLabel=“domainDemoSubPage2_2"
title="Demo Sub Tab 2”
…
</netuix:page>
</netuix:content>
</netuix:book>
31
ADDING PORTLETS AS (SUB-)TABS
DEMO.BOOK
<netuix:book
…
<netuix:content>
<netuix:page markupName=“page"
markupType=“Page"
definitionLabel=“domainDemoSubPage2_1"
title="Demo Sub Tab 1”
presentationClass="page-content">
<netuix:meta
name=“skeleton-resource-bundle"
content="Bundle"/>
<netuix:content>
<netuix:portletInstance
markupType=“Portlet”
instanceLabel=“demoportlet2_1"
contentUri="/portlets/demo.portlet"/>
</netuix:content>
</netuix:page>
<netuix:page markupName="page"
markupType=“Page"
definitionLabel=“domainDemoSubPage2_2"
title="Demo Sub Tab 2”
…
</netuix:page>
</netuix:content>
</netuix:book>
31
ADDING PORTLETS AS (SUB-)TABS
DEMO.BOOK
<netuix:book
…
<netuix:content>
<netuix:page markupName=“page"
markupType=“Page"
definitionLabel=“domainDemoSubPage2_1"
title="Demo Sub Tab 1”
presentationClass="page-content">
<netuix:meta
name=“skeleton-resource-bundle"
content="Bundle"/>
<netuix:content>
<netuix:portletInstance
markupType=“Portlet”
instanceLabel=“demoportlet2_1"
contentUri="/portlets/demo.portlet"/>
</netuix:content>
</netuix:page>
<netuix:page markupName="page"
markupType=“Page"
definitionLabel=“domainDemoSubPage2_2"
title="Demo Sub Tab 2”
…
</netuix:page>
</netuix:content>
</netuix:book>
31
ADDING PORTLETS AS (SUB-)TABS
DEMO.BOOK
<netuix:book
…
<netuix:content>
<netuix:page markupName=“page"
markupType=“Page"
definitionLabel=“domainDemoSubPage2_1"
title="Demo Sub Tab 1”
presentationClass="page-content">
<netuix:meta
name=“skeleton-resource-bundle"
content="Bundle"/>
<netuix:content>
<netuix:portletInstance
markupType=“Portlet”
instanceLabel=“demoportlet2_1"
contentUri="/portlets/demo.portlet"/>
</netuix:content>
</netuix:page>
<netuix:page markupName="page"
markupType=“Page"
definitionLabel=“domainDemoSubPage2_2"
title="Demo Sub Tab 2”
…
</netuix:page>
</netuix:content>
</netuix:book>
31
ADDING PORTLETS AS (SUB-)TABS
DEMO.BOOK
<netuix:book
…
<netuix:content>
<netuix:page markupName=“page"
markupType=“Page"
definitionLabel=“domainDemoSubPage2_1"
title="Demo Sub Tab 1”
presentationClass="page-content">
<netuix:meta
name=“skeleton-resource-bundle"
content="Bundle"/>
<netuix:content>
<netuix:portletInstance
markupType=“Portlet”
instanceLabel=“demoportlet2_1"
contentUri="/portlets/demo.portlet"/>
</netuix:content>
</netuix:page>
<netuix:page markupName="page"
markupType=“Page"
definitionLabel=“domainDemoSubPage2_2"
title="Demo Sub Tab 2”
…
</netuix:page>
</netuix:content>
</netuix:book>
LAYOUTS
32
PAGE LAYOUTS
onecolumnflow
LAYOUTS
32
PAGE LAYOUTS
singlecolumnLayout
onecolumnflow
LAYOUTS
32
PAGE LAYOUTS
singlecolumnLayout
twoColumnLayout
onecolumnflow
LAYOUTS
32
PAGE LAYOUTS
singlecolumnLayout
threeColumnLayout
twoColumnLayout
onecolumnflow
LAYOUTS
32
PAGE LAYOUTS
singlecolumnLayout
threeColumnLayout
fourColumnLayout
twoColumnLayout
<netuix:gridLayout columns="2"
markupType="Layout"
markupName="twoColumnLayout">
<netuix:placeholder
flow="vertical"
usingFlow="true"
width=“30%"
markupType="Placeholder"
markupName="twoColumn_left">
<netuix:portletInstance markupType=“Portlet"
instanceLabel="demoportlet"
contentUri="/portlets/demo.portlet"/>
</netuix:placeholder>
<netuix:placeholder …

…
</netuix:placeholder>
</netuix:gridLayout>
33
PAGE LAYOUTS gridlayout

markupname
columns
placeholder

markupnames
oneColumnFlowLayout n/a oneColumnFlow_center
singleColumnLayout 1 singleColumn_columnOne
twoColumnLayout 2 twoColumn_left,twoColumn_right
threeColumnLayout 3
threeColumn_left,threeColumn_center,

threeColumn_right
fourColumnLayout 4
fourColumn_left, fourColumn_leftCenter,

fourColumn_rightCenter, fourColumn_right
Example layouts;

{weblogic.home}/lib/consoleapp/webapp/framework/markup/layout
34
ADDING NODES TO DOMAINSTRUCTURE
• Add backingFile attribute

•Java backing class name

•Added to Book or Page

• Create backing Class

•Initialized by backingFile
attribute

•Passes pagebacking
context and page URL

STEPS




BOOK FILE



<netuix:page markupName="page" markupType=“Page"
definitionLabel="DomainDemoPage1"
title="Demo Tab 1"
presentationClass=“page-content"
backingFile=“com.reddipped.DemoNavTreeExtension">
<netuix:meta name="skeleton-resource-bundle"
content=“Bundle"/>
<netuix:content>
…
35
ADDING NODES TO DOMAINSTRUCTURE
com.reddipped.DemoNavTreeExtension
public NavTreeExtensionEvent getTreeExtension(PageBackingContext ppCtx, String extensionUrl
PageBackingContext
markupName
markupType
title
definitionLabel
String
http://localhost:7002/console/console.portal?_nfpb=true&amp;_pageLabel=DomainDemoPage1
NavTreePortlet




BOOK FILE



<netuix:page markupName="page" markupType=“Page"
definitionLabel="DomainDemoPage1"
title="Demo Tab 1"
presentationClass=“page-content"
backingFile=“com.reddipped.DemoNavTreeExtension">
<netuix:meta name="skeleton-resource-bundle"
content=“Bundle"/>
<netuix:content>
…
35
ADDING NODES TO DOMAINSTRUCTURE
com.reddipped.DemoNavTreeExtension
public NavTreeExtensionEvent getTreeExtension(PageBackingContext ppCtx, String extensionUrl
PageBackingContext
markupName
markupType
title
definitionLabel
String
http://localhost:7002/console/console.portal?_nfpb=true&amp;_pageLabel=DomainDemoPage1
NavTreePortlet




BOOK FILE



<netuix:page markupName="page" markupType=“Page"
definitionLabel="DomainDemoPage1"
title="Demo Tab 1"
presentationClass=“page-content"
backingFile=“com.reddipped.DemoNavTreeExtension">
<netuix:meta name="skeleton-resource-bundle"
content=“Bundle"/>
<netuix:content>
…
35
ADDING NODES TO DOMAINSTRUCTURE
com.reddipped.DemoNavTreeExtension
public NavTreeExtensionEvent getTreeExtension(PageBackingContext ppCtx, String extensionUrl
PageBackingContext
markupName
markupType
title
definitionLabel
String
http://localhost:7002/console/console.portal?_nfpb=true&amp;_pageLabel=DomainDemoPage1
NavTreePortlet




BOOK FILE



<netuix:page markupName="page" markupType=“Page"
definitionLabel="DomainDemoPage1"
title="Demo Tab 1"
presentationClass=“page-content"
backingFile=“com.reddipped.DemoNavTreeExtension">
<netuix:meta name="skeleton-resource-bundle"
content=“Bundle"/>
<netuix:content>
…
35
ADDING NODES TO DOMAINSTRUCTURE
com.reddipped.DemoNavTreeExtension
public NavTreeExtensionEvent getTreeExtension(PageBackingContext ppCtx, String extensionUrl
PageBackingContext
markupName
markupType
title
definitionLabel
String
http://localhost:7002/console/console.portal?_nfpb=true&amp;_pageLabel=DomainDemoPage1
NavTreePortlet
public class DemoNavTreeExtension extends NavTreeExtensionBacking {
public NavTreeExtensionEvent getTreeExtension(PageBackingContext ppCtx,
String extensionUrl){


// Construct the first TreeNode

TreeNode firstLevelNode = new TreeNode("myFirstLevelNode","Demo","") ;
// Add the Page as a child node to the first node
// based on backing context
TreeNode secondLevelNode1 = new TreeNode(ppCtx.getDefinitionLabel(),
ppCtx.getTitle(),extensionUrl,firstLevelNode);
// Add TreeExtension to root of DomainStructure
NavTreeExtensionEvent evt =
new NavTreeExtensionEvent(“/",firstLevelNode,

NavTreeExtensionEvent.APPEND_ACTION);
36
ADDING NODES TO DOMAINSTRUCTURE
public class DemoNavTreeExtension extends NavTreeExtensionBacking {
public NavTreeExtensionEvent getTreeExtension(PageBackingContext ppCtx,
String extensionUrl){


// Construct the first TreeNode

TreeNode firstLevelNode = new TreeNode("myFirstLevelNode","Demo","") ;
// Add the Page as a child node to the first node
// based on backing context
TreeNode secondLevelNode1 = new TreeNode(ppCtx.getDefinitionLabel(),
ppCtx.getTitle(),extensionUrl,firstLevelNode);
// Add TreeExtension to root of DomainStructure
NavTreeExtensionEvent evt =
new NavTreeExtensionEvent(“/",firstLevelNode,

NavTreeExtensionEvent.APPEND_ACTION);
36
ADDING NODES TO DOMAINSTRUCTURE
public class DemoNavTreeExtension extends NavTreeExtensionBacking {
public NavTreeExtensionEvent getTreeExtension(PageBackingContext ppCtx,
String extensionUrl){


// Construct the first TreeNode

TreeNode firstLevelNode = new TreeNode("myFirstLevelNode","Demo","") ;
// Add the Page as a child node to the first node
// based on backing context
TreeNode secondLevelNode1 = new TreeNode(ppCtx.getDefinitionLabel(),
ppCtx.getTitle(),extensionUrl,firstLevelNode);
// Add TreeExtension to root of DomainStructure
NavTreeExtensionEvent evt =
new NavTreeExtensionEvent(“/",firstLevelNode,

NavTreeExtensionEvent.APPEND_ACTION);
36
ADDING NODES TO DOMAINSTRUCTURE
public class DemoNavTreeExtension extends NavTreeExtensionBacking {
public NavTreeExtensionEvent getTreeExtension(PageBackingContext ppCtx,
String extensionUrl){


// Construct the first TreeNode

TreeNode firstLevelNode = new TreeNode("myFirstLevelNode","Demo","") ;
// Add the Page as a child node to the first node
// based on backing context
TreeNode secondLevelNode1 = new TreeNode(ppCtx.getDefinitionLabel(),
ppCtx.getTitle(),extensionUrl,firstLevelNode);
// Add TreeExtension to root of DomainStructure
NavTreeExtensionEvent evt =
new NavTreeExtensionEvent(“/",firstLevelNode,

NavTreeExtensionEvent.APPEND_ACTION);
36
ADDING NODES TO DOMAINSTRUCTURE
public class DemoNavTreeExtension extends NavTreeExtensionBacking {
public NavTreeExtensionEvent getTreeExtension(PageBackingContext ppCtx,
String extensionUrl){


// Construct the first TreeNode

TreeNode firstLevelNode = new TreeNode("myFirstLevelNode","Demo","") ;
// Add the Page as a child node to the first node
// based on backing context
TreeNode secondLevelNode1 = new TreeNode(ppCtx.getDefinitionLabel(),
ppCtx.getTitle(),extensionUrl,firstLevelNode);
// Add TreeExtension to root of DomainStructure
NavTreeExtensionEvent evt =
new NavTreeExtensionEvent(“/",firstLevelNode,

NavTreeExtensionEvent.APPEND_ACTION);
36
ADDING NODES TO DOMAINSTRUCTURE
36
ADDING NODES TO DOMAINSTRUCTURE
public class DemoNavTreeExtension extends NavTreeExtensionBacking {
public NavTreeExtensionEvent getTreeExtension(PageBackingContext ppCtx,
String extensionUrl){


// Construct the first TreeNode

TreeNode firstLevelNode = new TreeNode("myFirstLevelNode","Demo","") ;
// Add the Page as a child node to the first node
// based on backing context
TreeNode secondLevelNode1 = new TreeNode(ppCtx.getDefinitionLabel(),
ppCtx.getTitle(),extensionUrl,firstLevelNode);
// Add TreeExtension to root of DomainStructure
NavTreeExtensionEvent evt =
new NavTreeExtensionEvent(“/Environment",firstLevelNode,
NavTreeExtensionEvent.APPEND_ACTION);
public class DemoNavTreeExtension extends NavTreeExtensionBacking {
public NavTreeExtensionEvent getTreeExtension(PageBackingContext ppCtx,
String extensionUrl){


// Construct the first TreeNode

TreeNode firstLevelNode = new TreeNode("myFirstLevelNode","Demo","") ;
// Add the Page as a child node to the first node
// based on backing context
TreeNode secondLevelNode1 = new TreeNode(ppCtx.getDefinitionLabel(),
ppCtx.getTitle(),extensionUrl,firstLevelNode);

// Add additional pages using a hardcoded definitionLabel, title and url
TreeNode secondLevelNode2 = new TreeNode(“domainDemoSubPage2_1",
"Demo Sub Tab 1","/console/console.portal?
_nfpb=true&_pageLabel=domainDemoSubPage2_1",firstLevelNode);
TreeNode secondLevelNode3 = new TreeNode("domainDemoSubPage2_2",
"Demo Sub Tab 2”,"/console/console.portal?
_nfpb=true&_pageLabel=domainDemoSubPage2_2",firstLevelNode
37
ADDING NODES TO DOMAINSTRUCTURE
public class DemoNavTreeExtension extends NavTreeExtensionBacking {
public NavTreeExtensionEvent getTreeExtension(PageBackingContext ppCtx,
String extensionUrl){


// Construct the first TreeNode

TreeNode firstLevelNode = new TreeNode("myFirstLevelNode","Demo","") ;
// Add the Page as a child node to the first node
// based on backing context
TreeNode secondLevelNode1 = new TreeNode(ppCtx.getDefinitionLabel(),
ppCtx.getTitle(),extensionUrl,firstLevelNode);

// Add additional pages using a hardcoded definitionLabel, title and url
TreeNode secondLevelNode2 = new TreeNode(“domainDemoSubPage2_1",
"Demo Sub Tab 1","/console/console.portal?
_nfpb=true&_pageLabel=domainDemoSubPage2_1",firstLevelNode);
TreeNode secondLevelNode3 = new TreeNode("domainDemoSubPage2_2",
"Demo Sub Tab 2”,"/console/console.portal?
_nfpb=true&_pageLabel=domainDemoSubPage2_2",firstLevelNode
37
ADDING NODES TO DOMAINSTRUCTURE
NavTreeExtensionEvent evt = new NavTreeExtensionEvent(“/Environment”,
firstLevelNode,
NavTreeExtensionEvent.INSERT_ACTION);
NavTreeExtensionEvent evt = new NavTreeExtensionEvent(“/Environmet”,
firstLevelNode,
NavTreeExtensionEvent.APPEND_ACTION);
NavTreeExtensionEvent evt = new NavTreeExtensionEvent(“/Environment”,
firstLevelNode,
NavTreeExtensionEvent.REPLACE_ACTION);
38
ADDING NODES TO DOMAINSTRUCTURE
NavTreeExtensionEvent evt = new NavTreeExtensionEvent(“/Environment”,
firstLevelNode,
NavTreeExtensionEvent.INSERT_ACTION);
NavTreeExtensionEvent evt = new NavTreeExtensionEvent(“/Environmet”,
firstLevelNode,
NavTreeExtensionEvent.APPEND_ACTION);
NavTreeExtensionEvent evt = new NavTreeExtensionEvent(“/Environment”,
firstLevelNode,
NavTreeExtensionEvent.REPLACE_ACTION);
38
ADDING NODES TO DOMAINSTRUCTURE
NavTreeExtensionEvent evt = new NavTreeExtensionEvent(“/Environment”,
firstLevelNode,
NavTreeExtensionEvent.INSERT_ACTION);
NavTreeExtensionEvent evt = new NavTreeExtensionEvent(“/Environmet”,
firstLevelNode,
NavTreeExtensionEvent.APPEND_ACTION);
NavTreeExtensionEvent evt = new NavTreeExtensionEvent(“/Environment”,
firstLevelNode,
NavTreeExtensionEvent.REPLACE_ACTION);
38
ADDING NODES TO DOMAINSTRUCTURE
• Webserver

• JSONP format
MESSAGE SOURCE
• jQuery vTicker

• AngularJS
EXTENSION
39
LAB5
JSON_CALLBACK({
"P_MyDomain":{
"Description":"Development domain for Oracle FMW Technical team",
LAB
• Adding support info
pages based on
domain name
40
LAB6
LAB
• Add a tab

• Add a node to
Domain Structure
• System Statistics Graphs

• Show real-time system information in WL Console

• Historical view over last 15 minutes

• CPU load/#CPU

• Heapsize allocation

• Loaded classes

• All Managed Servers in one view
41
MORE ADVANCED EXTENSION
• System Statistics Graphs

• Show real-time system information in WL Console

• Historical view over last 15 minutes

• CPU load/#CPU

• Heapsize allocation

• Loaded classes

• All Managed Servers in one view
41
MORE ADVANCED EXTENSION
• Data collection

– MXBean SysStats

• SimpleType Attributes

– NumCPUs

– Architecture

– CPULoadAverage

• ArrayType Attributes

– AvgCPULoadHistory

– LoadedClassesHistory

– HeapUsageHistory
42
MORE ADVANCED EXTENSION
43
MORE ADVANCED EXTENSION
SysStats
ATTRIBUTES
OPERATIONS
CPULoadAverage
AvgCPULoadHistory
takeAvgCPULoadHistorySample
AvgCPULoadHistory
Time Value
124232 1.4
124292 1.1
43
MORE ADVANCED EXTENSION
SysStats
ATTRIBUTES
OPERATIONS
CPULoadAverage
AvgCPULoadHistory
takeAvgCPULoadHistorySample
1.2
AvgCPULoadHistory
Time Value
124232 1.4
124292 1.1
43
MORE ADVANCED EXTENSION
SysStats
ATTRIBUTES
OPERATIONS
CPULoadAverage
AvgCPULoadHistory
takeAvgCPULoadHistorySample
1.2
AvgCPULoadHistory
Time Value
124232 1.4
124292 1.1
43
MORE ADVANCED EXTENSION
SysStats
ATTRIBUTES
OPERATIONS
CPULoadAverage
AvgCPULoadHistory
takeAvgCPULoadHistorySample
1.2
AvgCPULoadHistory-
Time Value
124232 1.4
124292 1.1
124352 1.2
SysStats.ear
SysStats.war
44
MORE ADVANCED EXTENSION
SysStats
<listener-class>SystemInfoCollectorExecutor</listener-class>
web.xml
public class SystemInfoCollectorExecutor {
public void contextInitialized(ServletContextEvent sce) {
systemInfoCollectorHandle = scheduler.scheduleAtFixedRate(new
SystemInfoCollector(), 1, 1, TimeUnit.MINUTES);
public class SystemInfoCollector implements Runnable {
OperationsAttributes
SysStats.ear has Java
EE Module
SystStats.war
SysStats.war includes
listener class
Class executed by
scheduler invokes Take
operations on SysStats
MXBean.
Listener class initiates
scheduler on context
initalization
SysStats.ear
SysStats.war
44
MORE ADVANCED EXTENSION
SysStats
<listener-class>SystemInfoCollectorExecutor</listener-class>
web.xml
public class SystemInfoCollectorExecutor {
public void contextInitialized(ServletContextEvent sce) {
systemInfoCollectorHandle = scheduler.scheduleAtFixedRate(new
SystemInfoCollector(), 1, 1, TimeUnit.MINUTES);
public class SystemInfoCollector implements Runnable {
OperationsAttributes
SysStats.ear has Java
EE Module
SystStats.war
SysStats.war includes
listener class
Class executed by
scheduler invokes Take
operations on SysStats
MXBean.
Listener class initiates
scheduler on context
initalization
SysStats.ear
SysStats.war
44
MORE ADVANCED EXTENSION
SysStats
<listener-class>SystemInfoCollectorExecutor</listener-class>
web.xml
public class SystemInfoCollectorExecutor {
public void contextInitialized(ServletContextEvent sce) {
systemInfoCollectorHandle = scheduler.scheduleAtFixedRate(new
SystemInfoCollector(), 1, 1, TimeUnit.MINUTES);
public class SystemInfoCollector implements Runnable {
OperationsAttributes
SysStats.ear has Java
EE Module
SystStats.war
SysStats.war includes
listener class
Class executed by
scheduler invokes Take
operations on SysStats
MXBean.
Listener class initiates
scheduler on context
initalization
SysStats.ear
SysStats.war
44
MORE ADVANCED EXTENSION
SysStats
<listener-class>SystemInfoCollectorExecutor</listener-class>
web.xml
public class SystemInfoCollectorExecutor {
public void contextInitialized(ServletContextEvent sce) {
systemInfoCollectorHandle = scheduler.scheduleAtFixedRate(new
SystemInfoCollector(), 1, 1, TimeUnit.MINUTES);
public class SystemInfoCollector implements Runnable {
OperationsAttributes
SysStats.ear has Java
EE Module
SystStats.war
SysStats.war includes
listener class
Class executed by
scheduler invokes Take
operations on SysStats
MXBean.
Listener class initiates
scheduler on context
initalization
45
LAB7A
LAB
• Deploy SysStats.ear

• Explore the SystStats
MXBean
• Data presentation

•Chart.js for graphs

•HTML 5 based

•Require JSON datastructure

•BXSlider for sliding multiple graphs 

• 3 different graphs

• CPU load/#CPU

• Heapsize allocation

• Loaded classes
46
MORE ADVANCED EXTENSION
47
MORE ADVANCED EXTENSION
• CPU Load

•#Processes running or
runnable

•Differs from CPU
Utilization

•Better indication user wait
time

• Graph

•CPU Load/CPUs

•Load per CPU

•15 min. timeframe

•One layer per Server

•Consolidate view

•Easy to detect anomalies
CPU LOAD/#CPU
48
MORE ADVANCED EXTENSION
MEMORY POOL
48
MORE ADVANCED EXTENSION
MEMORY POOL
HEAP
48
MORE ADVANCED EXTENSION
MEMORY POOL
HEAP NON-HEAP
48
MORE ADVANCED EXTENSION
MEMORY POOL
HEAP NON-HEAP
EDEN SPACE
48
MORE ADVANCED EXTENSION
MEMORY POOL
HEAP NON-HEAP
EDEN SPACE
SURVIVOR
SPACE
48
MORE ADVANCED EXTENSION
MEMORY POOL
HEAP NON-HEAP
EDEN SPACE
SURVIVOR
SPACE
TENURED
48
MORE ADVANCED EXTENSION
MEMORY POOL
HEAP NON-HEAP
EDEN SPACE
SURVIVOR
SPACE
TENURED
PERM GEN
48
MORE ADVANCED EXTENSION
MEMORY POOL
HEAP NON-HEAP
EDEN SPACE
SURVIVOR
SPACE
TENURED
PERM GEN
CODE CACHE
49
MORE ADVANCED EXTENSION
MEMORY POOL
49
MORE ADVANCED EXTENSION
MEMORY POOL
HEAP
49
MORE ADVANCED EXTENSION
MEMORY POOL
HEAP NON-HEAP
49
MORE ADVANCED EXTENSION
MEMORY POOL
HEAP NON-HEAP
EDEN SPACEMemory Pool
49
MORE ADVANCED EXTENSION
MEMORY POOL
HEAP NON-HEAP
EDEN SPACE
SURVIVOR
SPACEMemory Pool
Memory Pool
49
MORE ADVANCED EXTENSION
MEMORY POOL
HEAP NON-HEAP
EDEN SPACE
SURVIVOR
SPACE
PERM GENMemory Pool
Memory Pool
Memory Pool
50
MORE ADVANCED EXTENSION
Memory Pool
Maximum
Init
Used
Committed
50
MORE ADVANCED EXTENSION
Memory Pool
Maximum
Init
Used
Committed
HEAP
51
MORE ADVANCED EXTENSION
Memory Pool
Maximum
Init
Used
Committed
Maximum
Init
Used
Committed
Maximum
Init
Used
Committed
Memory Pool
Memory Pool
HEAP
51
MORE ADVANCED EXTENSION
Memory Pool
Maximum
Init
Used
Committed
Maximum
Init
Used
Committed
Maximum
Init
Used
Committed
Memory Pool
Memory Pool
USED
COMMITTED - USED
HEAP
51
MORE ADVANCED EXTENSION
Memory Pool
Maximum
Init
Used
Committed
Maximum
Init
Used
Committed
Maximum
Init
Used
Committed
Memory Pool
Memory Pool
USED
COMMITTED - USED
USED
COMMITTED - USED
HEAP
51
MORE ADVANCED EXTENSION
Memory Pool
Maximum
Init
Used
Committed
Maximum
Init
Used
Committed
Maximum
Init
Used
Committed
Memory Pool
Memory Pool
USED
COMMITTED - USED
USED
COMMITTED - USED
USED
COMMITTED - USED
52
MORE ADVANCED EXTENSION
• Experimental view

•Free %, not allocated
heap

•Committed not used,
committed - used

•Used,

used heap

HEAPSIZE ALLOCATION
53
MORE ADVANCED EXTENSION
• Classes are loaded in
permanent generation

LOADED CLASSES
54
MORE ADVANCED EXTENSION
HTTP://…/JChartJSONObjects?chartType=cpuLoadRadarChart
web.xml
<servlet>
<servlet-name>JChartJSONObjects</servlet-name>
<servlet-class>com.reddipped.controller.json.JChartJSONObjects</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>JChartJSONObjects</servlet-name>
<url-pattern>/JChartJSONObjects</url-pattern>
</servlet-mapping>
SysStats
JChartJSONHelper
JChartJSONObjects
54
MORE ADVANCED EXTENSION
HTTP://…/JChartJSONObjects?chartType=cpuLoadRadarChart
web.xml
<servlet>
<servlet-name>JChartJSONObjects</servlet-name>
<servlet-class>com.reddipped.controller.json.JChartJSONObjects</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>JChartJSONObjects</servlet-name>
<url-pattern>/JChartJSONObjects</url-pattern>
</servlet-mapping>
SysStats
JChartJSONHelper
JChartJSONObjects
54
MORE ADVANCED EXTENSION
HTTP://…/JChartJSONObjects?chartType=cpuLoadRadarChart
web.xml
<servlet>
<servlet-name>JChartJSONObjects</servlet-name>
<servlet-class>com.reddipped.controller.json.JChartJSONObjects</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>JChartJSONObjects</servlet-name>
<url-pattern>/JChartJSONObjects</url-pattern>
</servlet-mapping>
SysStats
JChartJSONHelper
JChartJSONObjects
54
MORE ADVANCED EXTENSION
HTTP://…/JChartJSONObjects?chartType=cpuLoadRadarChart
web.xml
<servlet>
<servlet-name>JChartJSONObjects</servlet-name>
<servlet-class>com.reddipped.controller.json.JChartJSONObjects</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>JChartJSONObjects</servlet-name>
<url-pattern>/JChartJSONObjects</url-pattern>
</servlet-mapping>
SysStats
MBean Server Connection
JChartJSONHelper
JChartJSONObjects
54
MORE ADVANCED EXTENSION
HTTP://…/JChartJSONObjects?chartType=cpuLoadRadarChart
web.xml
<servlet>
<servlet-name>JChartJSONObjects</servlet-name>
<servlet-class>com.reddipped.controller.json.JChartJSONObjects</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>JChartJSONObjects</servlet-name>
<url-pattern>/JChartJSONObjects</url-pattern>
</servlet-mapping>
SysStats
MBean Server Connection
JChartJSONHelper
JChartJSONObjects
JSON
54
MORE ADVANCED EXTENSION
HTTP://…/JChartJSONObjects?chartType=cpuLoadRadarChart
{“labels":
["10:08","10:09","10:10","10:11","10:12","10:13","10:14","10:15","10:16","10:
17","10:18","10:19","10:20","10:21","10:22","10:23"],
“datasets”:[
{"label":"myserver2",
“fillColor":"rgba(165,222,11,0.2)",
“strokeColor":"rgba(165,222,11,1)",
“pointColor":"rgba(165,222,11,1)",
“pointStrokeColor":"#fff",
“pointHighlightFill":"#fff",
“pointHighlightStroke":"rgba(165,222,11,1)",
“data":
[0.06,0.18000000000000005,0.030000000000000027,0.020000000000000018,0.77,0.
19999999999999998,0.56,0.6200000000000001,1.2000000000000002,0.48,0.69,0.05
0000000000000044,0.06,0.13999999999999999,0.68,0.9]},
{"label":"myserver3","fillColor":"rgba(199,193,1,0.2)","strokeColor":"rgba(
199,193,1,1)","pointColor":"rgba(199,193,1,1)","pointStrokeColor":"#fff","p
ointHighlightFill":"#fff","pointHighlightStroke":"rgba(199,193,1,1)","data"
:
[0.35,0.35000000000000003,0.27,0.45000000000000007,0.47000000000000003,0.76
,0.34,0.1399999999999999,0.8200000000000001,0.38,0.07999999999999996,0.4300
0000000000005,0.5900000000000001,0.31,0.18,0.05000000000000002]},
{“label":"myserver",
“fillColor":"rgba(227,158,3,0.2)",
“strokeColor":"rgba(227,158,3,1)",
“pointColor":"rgba(227,158,3,1)",
“pointStrokeColor":"#fff",
“pointHighlightFill":"#fff",
SysStats
MBean Server Connection
JChartJSONHelper
JChartJSONObjects
JSON
55
MORE ADVANCED EXTENSION
55
MORE ADVANCED EXTENSION
56
LAB7B
LAB
• Add Java Classes

• JChartJSONObjects

• JChartJSONHelper

• Create WLC Ext.

• Add Book

• Add JSP
TUTORIALSPOINT JAVA SERVER PAGES
57
USEFULL WEBSITES
DEVELOPING ENTERPRISE JAVABEANS, VERSION 2.1, FOR ORACLE
EXTENDING THE ADMINISTRATION CONSOLE FOR ORACLE WEBLOGIC SERVER
WEBLOGIC SERVER MBEAN REFERENCE
W3SCHOOLS ANGULARJS
CODESCHOOL SHAPING UP WITH ANGULARJS
BXSLIDER THE RESPONSIVE JQUERY CONTENT SLIDER
CHART.JS
TYPOGRAPHY
TUTORIALSPOINT JAVA SERVER PAGES
57
USEFULL WEBSITES
DRIVE

HOME 

SAFELY

www.reddipped.com
58
@petervannes

Contenu connexe

Tendances

Pabug Presentation Final
Pabug Presentation   FinalPabug Presentation   Final
Pabug Presentation Final
Melissa Miller
 

Tendances (20)

Laravel 5.4
Laravel 5.4 Laravel 5.4
Laravel 5.4
 
Laravel ppt
Laravel pptLaravel ppt
Laravel ppt
 
Getting started with laravel
Getting started with laravelGetting started with laravel
Getting started with laravel
 
Installing OpenCart 3 module
Installing OpenCart 3 moduleInstalling OpenCart 3 module
Installing OpenCart 3 module
 
Spring In Alfresco Ecm
Spring In Alfresco EcmSpring In Alfresco Ecm
Spring In Alfresco Ecm
 
MVCL pattern, web flow, code flow, request and response in OpenCart
MVCL pattern, web flow, code flow, request and response in OpenCartMVCL pattern, web flow, code flow, request and response in OpenCart
MVCL pattern, web flow, code flow, request and response in OpenCart
 
Database table schema explained of Opencart
Database table schema explained of OpencartDatabase table schema explained of Opencart
Database table schema explained of Opencart
 
Social Connections 12 - IBM Connections Adminblast
Social Connections 12 - IBM Connections AdminblastSocial Connections 12 - IBM Connections Adminblast
Social Connections 12 - IBM Connections Adminblast
 
What Is Hobo ?
What Is Hobo ?What Is Hobo ?
What Is Hobo ?
 
Unleashing the Power: A Lap Around PowerShell 3.0
Unleashing the Power: A Lap Around PowerShell 3.0Unleashing the Power: A Lap Around PowerShell 3.0
Unleashing the Power: A Lap Around PowerShell 3.0
 
SHOW102 XPages: Still No Experience Necessary IBM Connect 2014
SHOW102 XPages: Still No Experience Necessary IBM Connect 2014SHOW102 XPages: Still No Experience Necessary IBM Connect 2014
SHOW102 XPages: Still No Experience Necessary IBM Connect 2014
 
Laravel development (Laravel History, Environment Setup & Laravel Installatio...
Laravel development (Laravel History, Environment Setup & Laravel Installatio...Laravel development (Laravel History, Environment Setup & Laravel Installatio...
Laravel development (Laravel History, Environment Setup & Laravel Installatio...
 
NLOUG 2017- Oracle WebCenter Portal 12c Performance
NLOUG 2017- Oracle WebCenter Portal 12c PerformanceNLOUG 2017- Oracle WebCenter Portal 12c Performance
NLOUG 2017- Oracle WebCenter Portal 12c Performance
 
Cfml features modern_coding
Cfml features modern_codingCfml features modern_coding
Cfml features modern_coding
 
Laravel Introduction
Laravel IntroductionLaravel Introduction
Laravel Introduction
 
Yes, It's Number One it's TOTP!
Yes, It's Number One it's TOTP!Yes, It's Number One it's TOTP!
Yes, It's Number One it's TOTP!
 
ColdFusion Fw1 (FrameWork1) introduction
ColdFusion Fw1 (FrameWork1) introductionColdFusion Fw1 (FrameWork1) introduction
ColdFusion Fw1 (FrameWork1) introduction
 
Laravel presentation
Laravel presentationLaravel presentation
Laravel presentation
 
CHANGELOG.txt
CHANGELOG.txtCHANGELOG.txt
CHANGELOG.txt
 
Pabug Presentation Final
Pabug Presentation   FinalPabug Presentation   Final
Pabug Presentation Final
 

Similaire à Weblogic Console Customization

One daytalk hbraun_oct2011
One daytalk hbraun_oct2011One daytalk hbraun_oct2011
One daytalk hbraun_oct2011
hbraun
 
UKLUG 2012 - XPages, Beyond the basics
UKLUG 2012 - XPages, Beyond the basicsUKLUG 2012 - XPages, Beyond the basics
UKLUG 2012 - XPages, Beyond the basics
Ulrich Krause
 
WebObjects Developer Tools
WebObjects Developer ToolsWebObjects Developer Tools
WebObjects Developer Tools
WO Community
 
Developing Portlets
Developing PortletsDeveloping Portlets
Developing Portlets
sydeburn
 
Weblogic server-overview-weblogic-scripting-tool0-1228252752844434-9
Weblogic server-overview-weblogic-scripting-tool0-1228252752844434-9Weblogic server-overview-weblogic-scripting-tool0-1228252752844434-9
Weblogic server-overview-weblogic-scripting-tool0-1228252752844434-9
Bhaskar Naik
 
PowerShellForDBDevelopers
PowerShellForDBDevelopersPowerShellForDBDevelopers
PowerShellForDBDevelopers
Bryan Cafferky
 
symfony_from_scratch
symfony_from_scratchsymfony_from_scratch
symfony_from_scratch
tutorialsruby
 
symfony_from_scratch
symfony_from_scratchsymfony_from_scratch
symfony_from_scratch
tutorialsruby
 

Similaire à Weblogic Console Customization (20)

One daytalk hbraun_oct2011
One daytalk hbraun_oct2011One daytalk hbraun_oct2011
One daytalk hbraun_oct2011
 
UKLUG 2012 - XPages, Beyond the basics
UKLUG 2012 - XPages, Beyond the basicsUKLUG 2012 - XPages, Beyond the basics
UKLUG 2012 - XPages, Beyond the basics
 
ITB2017 - Keynote
ITB2017 - KeynoteITB2017 - Keynote
ITB2017 - Keynote
 
Grails patterns and practices
Grails patterns and practicesGrails patterns and practices
Grails patterns and practices
 
WebObjects Developer Tools
WebObjects Developer ToolsWebObjects Developer Tools
WebObjects Developer Tools
 
WebLogic Scripting Tool Overview
WebLogic Scripting Tool OverviewWebLogic Scripting Tool Overview
WebLogic Scripting Tool Overview
 
Developing Portlets
Developing PortletsDeveloping Portlets
Developing Portlets
 
Drupal case study: Behind the scenes of website of University of Tartu
Drupal case study: Behind the scenes of website of University of TartuDrupal case study: Behind the scenes of website of University of Tartu
Drupal case study: Behind the scenes of website of University of Tartu
 
Weblogic server-overview-weblogic-scripting-tool0-1228252752844434-9
Weblogic server-overview-weblogic-scripting-tool0-1228252752844434-9Weblogic server-overview-weblogic-scripting-tool0-1228252752844434-9
Weblogic server-overview-weblogic-scripting-tool0-1228252752844434-9
 
DotNet MVC and webpack + Babel + react
DotNet MVC and webpack + Babel + reactDotNet MVC and webpack + Babel + react
DotNet MVC and webpack + Babel + react
 
Upgrading to Alfresco 6
Upgrading to Alfresco 6Upgrading to Alfresco 6
Upgrading to Alfresco 6
 
Why Drupal?
Why Drupal?Why Drupal?
Why Drupal?
 
StorageOS, Storage for Containers Shouldn't Be Annoying at Container Camp UK
StorageOS, Storage for Containers Shouldn't Be Annoying at Container Camp UKStorageOS, Storage for Containers Shouldn't Be Annoying at Container Camp UK
StorageOS, Storage for Containers Shouldn't Be Annoying at Container Camp UK
 
PowerShellForDBDevelopers
PowerShellForDBDevelopersPowerShellForDBDevelopers
PowerShellForDBDevelopers
 
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
 
symfony_from_scratch
symfony_from_scratchsymfony_from_scratch
symfony_from_scratch
 
symfony_from_scratch
symfony_from_scratchsymfony_from_scratch
symfony_from_scratch
 
Getting Started with Rails on GlassFish (Hands-on Lab) - Spark IT 2010
Getting Started with Rails on GlassFish (Hands-on Lab) - Spark IT 2010Getting Started with Rails on GlassFish (Hands-on Lab) - Spark IT 2010
Getting Started with Rails on GlassFish (Hands-on Lab) - Spark IT 2010
 
No Docker? No Problem: Automating installation and config with Ansible
No Docker? No Problem: Automating installation and config with AnsibleNo Docker? No Problem: Automating installation and config with Ansible
No Docker? No Problem: Automating installation and config with Ansible
 
BP-9 Share Customization Best Practices
BP-9 Share Customization Best PracticesBP-9 Share Customization Best Practices
BP-9 Share Customization Best Practices
 

Dernier

EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
Earley Information Science
 

Dernier (20)

Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024Finology Group – Insurtech Innovation Award 2024
Finology Group – Insurtech Innovation Award 2024
 
Advantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your BusinessAdvantages of Hiring UIUX Design Service Providers for Your Business
Advantages of Hiring UIUX Design Service Providers for Your Business
 
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
Raspberry Pi 5: Challenges and Solutions in Bringing up an OpenGL/Vulkan Driv...
 
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
Bajaj Allianz Life Insurance Company - Insurer Innovation Award 2024
 
Automating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps ScriptAutomating Google Workspace (GWS) & more with Apps Script
Automating Google Workspace (GWS) & more with Apps Script
 
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men08448380779 Call Girls In Greater Kailash - I Women Seeking Men
08448380779 Call Girls In Greater Kailash - I Women Seeking Men
 
08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men08448380779 Call Girls In Civil Lines Women Seeking Men
08448380779 Call Girls In Civil Lines Women Seeking Men
 
A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)A Domino Admins Adventures (Engage 2024)
A Domino Admins Adventures (Engage 2024)
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptxEIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
EIS-Webinar-Prompt-Knowledge-Eng-2024-04-08.pptx
 
Boost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdfBoost Fertility New Invention Ups Success Rates.pdf
Boost Fertility New Invention Ups Success Rates.pdf
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
Real Time Object Detection Using Open CV
Real Time Object Detection Using Open CVReal Time Object Detection Using Open CV
Real Time Object Detection Using Open CV
 
GenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day PresentationGenCyber Cyber Security Day Presentation
GenCyber Cyber Security Day Presentation
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Exploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone ProcessorsExploring the Future Potential of AI-Enabled Smartphone Processors
Exploring the Future Potential of AI-Enabled Smartphone Processors
 
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...Workshop - Best of Both Worlds_ Combine  KG and Vector search for  enhanced R...
Workshop - Best of Both Worlds_ Combine KG and Vector search for enhanced R...
 
Scaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organizationScaling API-first – The story of a global engineering organization
Scaling API-first – The story of a global engineering organization
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
Mastering MySQL Database Architecture: Deep Dive into MySQL Shell and MySQL R...
 

Weblogic Console Customization