From Sin categoría

Shared Disk for your Pods: PersistentVolumes for Oracle Kubernetes Engine (OKE) Implemented as NFS File Storage in Oracle Cloud Infrastructure (OCI)


When you deploy in k8s a pod depending in persistent volume attached to block storage (for example this post), the volume created is mounted on a specific node. If that node fails or is stopped, the pods running on it fail when trying to be created in other node according to the replication policies they have, because other nodes do not have the disk mounted.

Oracle Cloud Infrastructure (OCI) File Systems are shared storage that you can easily expose/attach to your pods for those use cases where shared persistent data is needed.

Of course, you can still mount the disk in each node, but this is not a good approach because we have a better way to achieve it.

So, let’s get started

Go to OCI dashboard, create a new File System and a new Export called /myexport. Click on the mount target link and take note of the File System IP address.

 

This slideshow requires JavaScript.

Download and deploy the following yaml, it creates:

  • a persistentVolume
  • a persistentVolumeClaim
  • a deployment with 3 replicas of a container image with nginx in it
  • a service with public IP and LoadBalancer with round-robin policy
kubectl apply -f k8spod2nfs.yaml

Get a list of the pods and “ssh” to one of them

kubectl get pods
NAME READY STATUS RESTARTS AGE
k8spod2nfs-xxx 1/1 Running 0 99s
k8spod2nfs-yyy 1/1 Running 0 99s
k8spod2nfs-zzz 1/1 Running 0 99s
kubectl exec -it k8spod2nfs-xxx bash

Go to /usr/share/nginx/html directory and create or edit a file called index.html

cd /usr/share/nginx/html/

echo hola > index.html

You can also “ssh” to other pod and verify that you see the same file

Now get the list of services and grab the public IP of the k8spod2nfs service

kubectl get services
NAME TYPE CLUSTER-IP EXTERNAL-IP PORT(S) AGE
k8spod2nfs LoadBalancer 10.96.128.9 x.y.z.t 80:31014/TCP 10m
kubernetes ClusterIP 10.96.0.1 <none> 443/TCP 7d4h

Go to http://yourserviceip in your browser:

k8spod2nfs

Change the content of the index.html file:

echo adios >> index.html

Go to http://yourserviceip in your browser again, the data changes

k8spod2nfs1

Delete all pods of the k8spod2nfs deployment and wait until at lest one of them are recreated again:

kubectl delete pod -l app=k8spod2nfs

Go to http://yourserviceip in your browser again, the data is still in there!

Delete the deployment and create it again:

kubectl delete -f k8spod2nfs.yaml

kubectl apply -f k8spod2nfs.yaml

Wait until al least one of the ñods are ready and go to http://yourserviceip in your browser again, the data is still in there!

As you can see, the data is shared across all pods and is persistent! (unless you delete it or destroy the OCI FIleSystem)

Hope it helps! 🙂

 

 

 

ADAPTIVE CASE MANAGEMENT MODELING


ACM can feet in those use cases where “standard” BMP can’t describe precisely the business problem. An ACM notation (CMMN) modeling is under work and in the meantime it is published we need to provide tools that could help Customers to make life easyer. My experiences around this field are disperse but I’m compiling here a short list of common tasks and tools I’ve utilized:

– Activities are almost always well defined tasks that can be modeled with BPM

– We are not using sub-cases, the relationships between cases and dependencies are implemented using what the engine offers for that matter

– Here you are a short bunch of shapes I’ve created with my Grafio(tm) app for modeling a real use case

acm2

– And here we are an initial draft modeling real use case:

acm1
– My Customer is using WcPortal for user interface therefore we are designing custom UI for dealing with the case activities life-cycle(start/stop/suspend/resume…) and relationships between cases:

ORANGE SB HERCULES OPCION 1
Enjoy 😉

WCPortal 12c | PortalSharedLibrary | ADFBC TaskFlow issue: javax.naming.NameNotFoundException: While trying to look up comp/env/jdbc/xxxx


 

I’ve got this error with a taskflow that uses ADFBC:

<Jan 15, 2016 3:06:50 PM CET> <Error> <oracle.webcenter.webcenterapp.internal.view.error.WCErrorHandlerImpl>
<BEA-000000> <getDisplayMessage Called=javax.naming.NameNotFoundException
javax.naming.NameNotFoundException: While trying to look up comp/env/jdbc/HERCULESDS in 
/app/webapp/webcenter/949491555.; remaining name 'comp/env/jdbc/HERCULESDS'
        at weblogic.jndi.internal.BasicNamingNode.newNameNotFoundException(BasicNamingNode.java:1224)
        at weblogic.jndi.internal.ApplicationNamingNode.lookup(ApplicationNamingNode.java:144)
        at weblogic.jndi.internal.WLEventContextImpl.lookup(WLEventContextImpl.java:307)

This SOLUTION worked for me:

Edit bc4j.cfg and put the name of the datasource equal to the jndi name of the datasource created in WLS:

<?xml version = '1.0' encoding = 'UTF-8'?>
<BC4JConfig version="11.1" xmlns="http://xmlns.oracle.com/bc4j/configuration">
   <AppModuleConfigBag ApplicationName="extension.portal.orange.am.AppModuleCompomentes">
      <AppModuleConfig name="AppModuleLocal" jbo.project="extension.portal.PortalExtension"
                       ApplicationName="extension.portal.orange.am.AppModuleCompomentes" DeployPlatform="LOCAL">
         <Database jbo.TypeMapEntries="OracleApps"/>
         <Security AppModuleJndiName="extension.portal.orange.am.AppModuleCompomentes"/>
         <Custom ns0:JDBCDataSource="jdbc/HERCULESDS" xmlns:ns0="http://xmlns.oracle.com/bc4j/configuration"/>
      </AppModuleConfig>
      <AppModuleConfig name="AppModuleShared" jbo.project="extension.portal.PortalExtension"
                       ApplicationName="extension.portal.orange.am.AppModuleCompomentes" DeployPlatform="LOCAL">
         <AM-Pooling jbo.ampool.maxpoolsize="1" jbo.ampool.isuseexclusive="false"/>
         <Database jbo.TypeMapEntries="OracleApps"/>
         <Security AppModuleJndiName="extension.portal.orange.am.AppModuleCompomentes"/>
         <Custom ns0:JDBCDataSource="jdbc/HERCULESDS" xmlns:ns0="http://xmlns.oracle.com/bc4j/configuration"/>
      </AppModuleConfig>
   </AppModuleConfigBag>
</BC4JConfig>

;-)

Cannot load /u01/wls_plugin/lib/mod_wl_24.so into server: libopmnsecure.so: cannot open shared object file: No such file or directory


I’ve configured weblogic proxy plugin 12c for linux according to documentation but I run into “Cannot load /u01/wls_plugin/lib/mod_wl_24.so into server: libopmnsecure.so: cannot open shared object file: No such file or directory”

The error:

[root@localhost ~]# apachectl restart
Job for httpd.service failed. See ‘systemctl status httpd.service’ and ‘journalctl -xn’ for details.

My settings:

[root@localhost ~]# vi /etc/httpd/conf.d/whatever.conf

LoadModule weblogic_module /u01/wls_plugin/lib/mod_wl_24.so
<Location /whatever>
WLSRequest On
SetHandler weblogic-handler
PathTrim /whatever
PathPrepend /whatever
WebLogicHost 192.168.1.39
WebLogicPort 8888
</Location>

LD_LIBRARY_PATH=/u01/wls_plugin/lib

This solution worked for me:

[root@localhost ~]# vi /etc/ld.so.conf

include ld.so.conf.d/*.conf
/u01/wls_plugin/lib

[root@localhost ~]# ldconfig

[root@localhost ~]# apachectl restart

😉

 

Improve your Java Application Detecting Oracle RAC FAN Events


Grab a RAC environment and configure a service, ons and so on…

Create a java Project with your preferred tool and add the simplefan.jar library you can find here and add a java Class.

Run the java class and be a bad boy with the RAC env (start/stop services|instances, generate load…) and see what happens…

If you need a productive implementation for you web application let me know.

Enjoy 😉

 

WebCenter Sites 12c Install & Quick Review


For this quick review, just for testing purposes, I have installed & configured WCSites 12c in an existing ORACLE_HOME and DOMAIN_HOME in wich I have previously installed WCContent 12c and WCPortal12c (all in 12.2.1) but I recommend to create a new fresh domain.

Now WCSites is installed as any other ORCL FMW software:

  • Install jdk
  • Install wls
  • Install wcsites
  • Execute rcu
  • Config the domain (config.sh)

Aditional configuration:

Execute:

$DOMAIN_HOME/wcsites/bin/grant-opss-permission.sh (*)

Open a browser tab, go to http://sites-host:sites-port/sites/sitesconfig and follow up instructions. Here you are the screenshots:

This slideshow requires JavaScript.

Configure LDAP(optional):

http://sites-host:sites-port/ldapconfig (you can revert the configuration with the same url)

This slideshow requires JavaScript.

Small issue:

Add at the bottom of $MW_HOME/wcportal/common/lib/ESAPI.properties

Validator.Redirect=^.*$

TEST IT

Go to http://sites-host:sites-port/sites , log in as fwadmin and browse the Samples site, you will find util information regarding new features for developers.

wcsites-samples1

In addition the “classic” Avisports” site is included as well if you install the examples.

wcsites-samples2

NEW FEATURES

WebCenter Sites can leverage a database to store its shared file system using the Java Nonblocking I/O (NIO) API. This eliminates the need for a network file share in a clustered environment and allows file locking to be handled by a Coherence cache. Out of the box, WebCenter Sites defaults to a disk-based shared file system (local or network). To move the shared file system to a database, complete the steps in this topic. Steps for reverting the process are also provided.

Very interesting developer features such as MVC Framework, REST, … here and more

FEATURES DEPRECATED

  • WebCenter Sites Gadgets and Gadget Server
  • WebCenter Sites Native authentication in Community/Gadgets
  • WebCenter Sites Analytics 2.5
  • WebCenter Sites Content Integration Platform – EMC Documentum
  • WebCenter Sites Content Integration Platform Filesystem
  • WebCenter Sites Content Integration Platform Sharepoint
  • WebCenter Sites Janrain Integration
  • WebCenter Sites Netomat Mobility Server
  • SOAP-based web services
  • Page Debugger

Enjoy 😉

(*) I have an small issue that I fixed this way:

#!/bin/bash

#/u01/Middleware/Oracle_Home/oracle_common/common/bin/wlst.sh /u01/Middleware/Oracle_Home/user_projects/domains/wcc/wcsites/bin/grant-opss-permission.py $1 $2

/u01/Middleware/Oracle_Home/oracle_common/common/bin/wlst.sh /u01/Middleware/domains/wcc/wcsites/bin/grant-opss-permission.py $1 $2