The following UML Class Diagram documents the main structural concepts in SiteMinder.
26 May 2011
Electronic Records Management
Some points I made while considering whether TIFF or PDF format is more appropriate for the above.
- Need to differentiate the processing for:
- Records “born” electronic – use acrobat distiller to convert to PDF
- Scanned records – use acrobat capture to convert to PDF, use OCR to convert to text
- Paper-based records
- Archival workflow
- Document creation
- Document editing and annotation
- Tagging and metadata capturing
- Store and retrieve
- Print and distribute
- PDF/A is based on PDF Reference 1.4 (Acrobat 5) and has the following constraints
- Self-contained: All fonts used have to be embedded & external content references are disallowed
- Device-independent: Colour must be device-independent and transparency is disallowed
- Self-describing: XMP (eXtensible Metadata Platform) is required
- Unfettered: Encryption and LZW compression are disallowed
- Multimedia, forms, embedded files and JavaScript are disallowed
- PDF over TIFF
- More compact. I.e. smaller file size
- Metadata can be stored in PDF
- More device-independent
To Enable HTTP Compression in IIS
Need to enable it in Web.Config as follows:
<system.webServer><httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files"><scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll"/><dynamicTypes><add mimeType="text/*" enabled="true"/><add mimeType="message/*" enabled="true"/><add mimeType="application/javascript" enabled="true"/><add mimeType="*/*" enabled="false"/></dynamicTypes><staticTypes><add mimeType="text/*" enabled="true"/><add mimeType="message/*" enabled="true"/><add mimeType="application/javascript" enabled="true"/><add mimeType="*/*" enabled="false"/></staticTypes></httpCompression><urlCompression doStaticCompression="true" doDynamicCompression="true"/></system.webServer>
23 May 2011
Oracle WebLogic Class Loader Hierarchy
The detailed order for WebLogic class loading in top-down hierarchy follows:
In order to do this, the FilteringClassLoader mechanism – a classloader that sits between Domain and Application – has to be used. this needs to be specified by the prefer-application-packages or prefer-web-inf XML tags.
If it interests you, the class-loading hierarchy for JBoss can be found here.
- System Classloader
- WebLogic implementation classes
- Classes in the system classpath
- PRE_CLASSPATH and EXT_PRE_CLASSPATH
- Domain Classloader
- classes in the domain directory's lib folder
- Application Classloader
- Java EE shared libraries referenced in weblogic-application.xml
- Modules defined in the application
- Libraries from Java EE library
- Libraries from /APP-INF/lib
- Web Classloader
- Java EE shared libraries referenced in weblogic.xml
- Classes in WEB-INF/classes
- Libraries in WEB-INF/lib
In order to do this, the FilteringClassLoader mechanism – a classloader that sits between Domain and Application – has to be used. this needs to be specified by the prefer-application-packages or prefer-web-inf XML tags.
If it interests you, the class-loading hierarchy for JBoss can be found here.
16 May 2011
Developers' Fears
Tags:
leadership,
management
As developers, we prefer disconnected communication with business analysts, clients, and users. Our comfort zone tends to be one where we can carefully craft our thoughts before responding.
Some common tools that aggravate such disconnect are:
Developers need to change for the betterment of their career.
Some common tools that aggravate such disconnect are:
- IM
- defect-tracking system
Developers need to change for the betterment of their career.
06 May 2011
Apache Web Server Troubleshooting
Tags:
devops,
troubleshoot,
web
How to troubleshoot Apache Web Server?
A few standard commands to know by hard:- To confirm the modules that are or will be loaded in Apache: apachectl –M [-f <conf filename>]
- To check the virtual host load pattern: apachectl –S [-f <conf filename>]
- To test a httpd.conf file: apachectl –t [-f <conf filename>]
- To maintain the http server: apachectl start|stop|restart
- To start with a specified configuration file: apachectl –f <conf filename>
Turn on log filter to debugListen 80ServerName myserver.com:80ServerAdmin admin@myserver.com#ServerRoot "."ServerRoot "/usr/local/apache2"User nobodyGroup nobody#DocumentRoot "..\wwwroot"DocumentRoot "/home/data/html"ErrorLog "logs/basic_apache.log"LogLevel debug#LoadModule log_config_module modules/mod_log_config.dllLoadModule log_config_module modules/mod_log_config.so<IfModule log_config_module>LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Host}i\" \"%{Referer}i\" %a %A" combinedLogFormat "%h %l %u %t \"%r\" %>s %b" commonCustomLog logs/basic_access.log combined</IfModule>
How to troubleshoot virtual directories?
Create a minimalist httpd.conf. Something like:Create the necessary DocumentRoot for each virtual host with files therein for basic troubleshootingListen 80ServerName myserver.com:80ServerAdmin admin@myserver.com#ServerRoot "."ServerRoot "/usr/local/apache2"User nobodyGroup nobody#DocumentRoot "..\wwwroot"DocumentRoot "/home/data/html"ErrorLog "logs/basic_apache.log"LogLevel debug#LoadModule log_config_module modules/mod_log_config.dllLoadModule log_config_module modules/mod_log_config.so<IfModule log_config_module>LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Host}i\" \"%{Referer}i\" %a %A" combinedLogFormat "%h %l %u %t \"%r\" %>s %b" commonCustomLog logs/basic_access.log combined</IfModule>NameVirtualHost *:80<VirtualHost *:80>ServerName vhost1.com#DocumentRoot "..\wwwroot"DocumentRoot "/home/data/html"</VirtualHost><VirtualHost *:80>ServerName vhost2.com#DocumentRoot "..\wwwroot\vhost1"DocumentRoot "/home/data/html/vhost1"</VirtualHost><VirtualHost *:80>ServerName vhost2.com#DocumentRoot "..\wwwroot\vhost2"DocumentRoot "/home/data/html/vhost2"</VirtualHost><VirtualHost *:80>ServerName vhost3.com#DocumentRoot "..\wwwroot\vhost3"DocumentRoot "/home/data/html/vhost3"</VirtualHost>
How to troubleshoot WebLogic plug-in module?
- Turn the proxy parameters to debug mode:
- debug on
- ShowConfigInfo yes
- The debug file by default can be found in /tmp/wl_proxy.log
The HTTP error code thrown by the plug-in depends on the situation. Plug-in will return the HTTP error code 500 in the following conditions:
- Neither
WebLogicClusternorWebLogicPortwas specified in thehttpd.conffile. - Unable to resolve the
WebLogicHostparameter specified in thehttpd.conffile. - Port number specified by
WebLogicPort,in thehttpd.conffile, exceeds 65535. - Unsuccessful in parsing the request while applying the
PathTrimproperty. - The request header is of type Unknown Transfer-Encoding.
- Failed to read the chunked request.
- Encountered an error reading
POSTdata from client. - Failed to open a temporary(temp) file.
- Failed to write
POSTdata to the temp file. - Encounetered an error reading
POSTdata from the temp file. POSTtimed out.- SSL was specified without the parameter
trustedCAFile.
On the other hand, the HTTP error code 503 is returned when:
- The maximum number of retries is exceeded. This value is computed by dividing
ConnectTimeoutSecsbyConnectRetrySecs. IdempotentisOFF.
Personal Experience
I had the privilege of troubleshoot Apache with WL proxy. Strangely, the proxy works with the non-clustered setting (by specifying the WebLogicHost <hostname>) but does not work with the clustered setting (WebLogicCluster <address>)
As far as I’m aware, there is nothing in WebLogic administration parameter setting required for a web server proxy to WLS cluster.
After playing with a couple of parameters (e.g. request timeout, retries, IO timeout) and giving up as nothing works, I finally looked in the wl_proxy.log and discovered the issue! We had used IP address to route traffic to from Apache but the WLS cluster was configured with the hostname. Apparently, the proxy was not able to route traffic in the cluster.
03 May 2011
Oracle JDBC Driver Connection Strings
Need to keep these handy.
At the same time, this site is lovely (http://www.connectionstrings.com/) for accessing Databases (like Oracle) from .NET.
For OCI (or Type 2) drivers:
For Thin (or Type 4) drivers:
At the same time, this site is lovely (http://www.connectionstrings.com/) for accessing Databases (like Oracle) from .NET.
For OCI (or Type 2) drivers:
- jdbc:oracle:oci:@TNS_ALIAS
- jdbc:oracle:oci:@<HOST>:1521:<SID>
- jdbc:oracle:oci@//host:1521/service_name
- jdbc:oracle:oci:@(DESCRIPTION= (ADDRESS=(PROTOCOL=TCP)
(HOST=cluster_alias) (PORT=1521))
(CONNECT_DATA=(SERVICE_NAME=service_name))) - jdbc:oracle:oci:@(DESCRIPTION= (LOAD_BALANCE=on)
(ADDRESS=(PROTOCOL=TCP)(HOST=host1)(PORT=1521))
(ADDRESS=(PROTOCOL=TCP)(HOST=host2)(PORT=1521))
(CONNECT_DATA=(SERVICE_NAME=service_name)))
For Thin (or Type 4) drivers:
- jdbc:oracle:thin:username/password@//host:1521/service_name
- jdbc:oracle:thin@//host:1521/service_name
- jdbc:oracle:thin@//cluster-alias:port/service_name
- jdbc:oracle:thin:@<HOST>:1521:<SID>
- jdbc:oracle:thin:@(DESCRIPTION= (ADDRESS=(PROTOCOL=TCP)
(HOST=cluster_alias) (PORT=1521))
(CONNECT_DATA=(SERVICE_NAME=service_name))) - jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=TCP)(port=1521)(host=host1)))
(connect_data=(INSTANCE_NAME=ORCL)))"; - jdbc:oracle:thin:@(DESCRIPTION=(LOAD_BALANCE=on)
(ADDRESS=(PROTOCOL=TCP)(HOST=host1) (PORT=1521))
(ADDRESS=(PROTOCOL=TCP)(HOST=host2) (PORT=1521))
(CONNECT_DATA=(SERVICE_NAME=service)))
- For Oracle 8, we will need to use the instance name (SID); for 8i or 9i onwards, we should use the SERVICE_NAME parameter instead.
- If there is a list of addresses to load balance or failover to, use the ADDRESS_LIST to state the list. ADDRESS should be used otherwise.
- If Oracle RAC is in used, the last ones above (indicated with LOAD_BALANCE=on) should be used.
In order to set-up the data-source for Oracle RAC within WebLogic, use the following:
- For WLS multi-pool setting:
<url>jdbc:oracle:thin:@//host:1521/service_name</url>
<driver-name>oracle.jdbc.xa.client.OracleXADataSource</driver-name>
- For WLS connection pool setting:
DriverName=oracle.jdbc.OracleDriver
URL=jdbc:oracle:thin:@(DESCRIPTION=(LOAD_BALANCE=on)
(ADDRESS=(PROTOCOL=TCP)(HOST=host1) (PORT=1521))
(ADDRESS=(PROTOCOL=TCP)(HOST=host2) (PORT=1521))
(CONNECT_DATA=(SERVICE_NAME=service)))
Subscribe to:
Posts (Atom)