UCM Admin Training with Jason Stortz
First week of training on UCM Admin down, one week of Site Studio training to go!
Written by klee on January 23rd, 2010Favorite Linux Command
Written by klee on December 31st, 2009find . -name ".svn" -exec rm -rf {} \;
RMOUG 2010 – February 17 – 18, 2010
Written by klee on October 25th, 2009I will be presenting a fun session titled, “ApEx – From the Garage to the Basement”. This session will discuss how entrepreneurs can build a working environment for ApEx development in their basement with an old PC and Internet connection. In the past where companies like HP started in the garage; today, we have developers creating applications using a PC tucked away in the basement.
Hopefully, this presentation will be a fun time for all. Hope to see you there!
Steps taken to increase performance in Moodle using Oracle database
Written by klee on September 29th, 2009This may be a little off topic, but I was on a team to help resolve a performance issue with Moodle using Oracle for the backend database. The following is part of the solution that was found.
Changing the CLOB datatype to VARCHAR2(4000) in the m_config database table provided the most help. The following links were the resources I found to point this out.
https://tracker.moodle.org/browse/MDL-16955
http://moodle.org/mod/forum/discuss.php?d=87509#p389413
Using SQLDeveloper, I performed the following actions to the data after stopping the Apache Web server.
create table m_config_original as (select * from m_config); drop table m_config; CREATE TABLE M_CONFIG ( ID NUMBER(10,0) NOT NULL ENABLE, NAME VARCHAR2(255 BYTE) NOT NULL ENABLE, VALUE VARCHAR2(4000 BYTE) NOT NULL ENABLE ); insert into m_config (select * from m_config_original);
Restart the Apache web server
With this single change, the pages displayed in 2/3 less time based on
the original display time. This was a significant amount – 15 seconds
down to 5 seconds.
Additional Notes:
Before applying the changes to the m_config table, I needed to determine
if the oci8 driver was the main problem. I was able to verify that the
OCI8 driver was not the issue by running the following test page on the
moodle server. Here is the PHP code:
<?php # Sample code for make connection with Oracle Database and send simple DDL,DML and query commands from oci8 extension. # Database instance: fuju # host name : fuju.exzilla.net # lintener port number : 1521 # user : scott # Password : tiger # You can connect to database server from this program without setting tnsnames.ora. # fuju at exizilla dot net, Jan10,2002 # Modified from original of " http://www.php.net/manual/en/function.ocilogon.php " print "<HTML><PRE>"; # Sample connection string, use your own values before testing # $db = "(DESCRIPTION=(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = fuju.exzilla.net)(PORT = 1521)))(CONNECT_DATA=(SID=fuju)))"; $c1 = ocilogon("username","password",$db); $c2 = ocilogon("username","password",$db); function create_table($conn) { $stmt = ociparse($conn,"create table hellotable (hellocol varchar2(64))"); ociexecute($stmt); echo $conn." created hellotable\n\n"; } function drop_table($conn) { $stmt = ociparse($conn,"drop table hellotable"); ociexecute($stmt); echo $conn." dropped hellotable\n\n"; } function insert_data($conn) { $stmt = ociparse($conn,"insert into hellotable values('$conn' || ' ' || to_char(sysdate,'DD-MON-YY HH24:MI:SS'))"); ociexecute($stmt,OCI_DEFAULT); echo $conn." inserted hellotable\n\n"; } function delete_data($conn) { $stmt = ociparse($conn,"delete from hellotable"); ociexecute($stmt,OCI_DEFAULT); echo $conn." deleted hellotable\n\n"; } function commit($conn) { ocicommit($conn); echo $conn." committed\n\n"; } function rollback($conn) { ocirollback($conn); echo $conn." rollback\n\n"; } function select_data($conn) { $stmt = ociparse($conn,"select * from hellotable"); ociexecute($stmt,OCI_DEFAULT); echo $conn."----selecting\n\n"; while (ocifetch($stmt)) echo $conn." <".ociresult($stmt,"TEST").">\n\n"; echo $conn."----done\n\n"; } # start Main program echo "<h3> Start :: Simple oci8 extension functions test </h3><p><hr><p>"; create_table($c1); insert_data($c1); // Insert a row using c1 insert_data($c2); // Insert a row using c2 select_data($c1); // Results of both inserts are returned select_data($c2); rollback($c1); // Rollback using c1 select_data($c1); // Both inserts have been rolled back select_data($c2); insert_data($c2); // Insert a row using c2 commit($c2); // commit using c2 select_data($c1); // result of c2 insert is returned delete_data($c1); // delete all rows in table using c1 select_data($c1); // no rows returned select_data($c2); // no rows returned commit($c1); // commit using c1 select_data($c1); // no rows returned select_data($c2); // no rows returned drop_table($c1); print "</PRE></HTML>"; echo "<hr><h3> End :: Simple oci8 extension functions test </h3>"; ?>
This test confirmed that the OCI8 driver was functioning correctly and
was not the problem.
With this change, performance improved by reducing the time to display pages by 67%!
Using JSTL Exception Handling in JDev 10.1.2 Portlet
Written by klee on June 19th, 2009The following is a portlet I recently updated for Oracle Portal. The dates were not formatting properly, so I added a JSTL catch tag. This also uses choice tags which help when you need an else tag after an if tag.
<%@ taglib uri="http://java.sun.com/jstl/fmt" prefix="fmt"%> <%@ taglib uri="http://java.sun.com/jstl/core" prefix="c"%> <%@ taglib uri="http://xmlns.oracle.com/adf/ui/jsp/adftags" prefix="adf"%> <%@page contentType="text/html; charset=UTF-8"%> <%@page import="oracle.portal.provider.v2.http.HttpCommonConstants"%> <%@page import="oracle.portal.provider.v2.render.PortletRenderRequest"%> <%@page import="oracle.portal.provider.v2.render.http.HttpPortletRendererUtil"%> <%@page import="oracle.portal.provider.v2.url.UrlUtils"%> <adf:uimodelreference model="htdocs_busroutesportlet_BusRoutesPortletShowPageUIModel" /> <jsp:useBean id="now" class="java.util.Date" /> <script type="text/javascript" src="/BusRoutes2009Portlet/scripts/busroutes2009.js"></script> <c:set var="nowdate" scope="page"><fmt:formatDate value="${now}" /></c:set> <c:set var="school" scope="page" value="" /> <% PortletRenderRequest pReq = (PortletRenderRequest) request.getAttribute(HttpCommonConstants.PORTLET_RENDER_REQUEST); String paramNameSchool = "sch"; String sSQLQuery = ""; String paramNameSubmit = "submit"; String qualParamNameSchool = HttpPortletRendererUtil.portletParameter(pReq, paramNameSchool); String qualParamNameSubmit = HttpPortletRendererUtil.portletParameter(pReq, paramNameSubmit); String sSchoolValue = pReq.getQualifiedParameter(paramNameSchool); String formName = UrlUtils.htmlFormName(pReq,"busroutes_form"); pageContext.setAttribute("school",(Object)sSchoolValue); %> <script> var sSch = <%=sSchoolValue%>; </script> <c:set var="sch"><%=sSchoolValue%></c:set> <form name=<%=formName %> method="POST" action="<%= UrlUtils.htmlFormActionLink(pReq,UrlUtils.PAGE_LINK) %>"> <%= UrlUtils.htmlFormHiddenFields(pReq,UrlUtils.PAGE_LINK, formName) %> Select School and press submit to see schedule. Click on column heading to sort.<br /> <br /> School: <select name="<%=qualParamNameSchool%>" id="ctlSchool"> <option value="0" >-- Select a School --</option> <c:forEach var="row" items="${bindings.SchoolsView1.rangeSet}"> <c:choose> <c:when test="${sch == row.Id}"> <option value="<c:out value="${row.Id}"/>" selected="selected"> <c:set var="mapurl" scope="page"> <c:out value="${row.MapUrl}" /> </c:set> <c:set var="websiteurl" scope="page"> <c:out value="${row.WebsiteUrl}" /> </c:set> <c:set var="schooltype" scope="page"> <c:out value="${row.TypeId}" /> </c:set> </c:when> <c:otherwise> <option value="<c:out value="${row.Id}"/>"> </c:otherwise> </c:choose> <c:out value="${row.School}" /> </option> </c:forEach> </select> <br /> <br /> <input type=submit name="<%= qualParamNameSubmit %>" value="submit" /> </form> <br /> <br /> <table border="0" id="urls"> <tbody> <tr> <td> <c:choose> <c:when test="${not empty mapurl}"> <a href="<c:out value="${mapurl}"/>" target="_blank"> <font class="titleorimageid1siteid53"> Bus Route Map </font> </a> </c:when> <c:otherwise> </c:otherwise> </c:choose> </td> <td> </td> <td> <c:choose> <c:when test="${not empty websiteurl}"> <a href="<c:out value="${websiteurl}"/>" target="_blank"> <font class="titleorimageid1siteid53"> School Web Site </font> </a> </c:when> <c:otherwise> </c:otherwise> </c:choose> </td> </tr> </tbody> </table> <br /> <br /> <c:set var="vo" scope="page" value="${bindings.BRView_2009_1.viewObject}" /> <% try { Object o = pageContext.getAttribute("vo"); oracle.jbo.ViewObject vo = (oracle.jbo.ViewObject)o; String sWhereClause = "SCHOOL_ID = " sSchoolValue " "; vo.setWhereClause(sWhereClause); sSQLQuery = vo.getQuery(); vo.executeQuery(); System.out.println("Query: " vo.getQuery()); System.out.println("sSchoolValue: " sSchoolValue); } catch (Exception e) { System.out.println("Error:" e.getMessage()); System.out.println("sSchoolValue = " sSchoolValue); } %> <br /> <br /> <table id="example" class="tablesorter" border="1" width="100%"> <thead> <tr> <th style="text-align: center"><c:out value="Route" /></th> <c:choose> <c:when test="${schooltype == 3}"> <th style="text-align: center"><c:out value="Route Animal" /></th> </c:when> <c:otherwise> <th style="text-align: center"> </th> </c:otherwise> </c:choose> <th><c:out value="Stop" /></th> <th style="text-align: center"><c:out value="AM" /></th> <th style="text-align: center"><c:out value="PM" /></th> <th style="text-align: center"><c:out value="Start Date" /></th> <th style="text-align: center"><c:out value="Stop Date" /></th> </tr> </thead> <tbody> <c:forEach var="Row" items="${bindings.BRView_2009_1.rangeSet}" > <c:catch var="errorvalue"> <fmt:parseDate value="${Row['StartServiceDate']}" var="startdate" pattern="MM-dd-yyyy" /> <fmt:parseDate value="${Row['StopServiceDate']}" var="stopdate" pattern="MM-dd-yyyy" /> </c:catch> <c:if test="${not empty startdate}"> <c:set var="startdatedisplay" scope="page"> <fmt:formatDate value="${startdate}" /> </c:set> </c:if> <c:if test="${not empty stopdate}"> <c:set var="stopdatedisplay" scope="page"> <fmt:formatDate value="${stopdate}" /> </c:set> </c:if> <tr> <td align=center><c:out value="${Row['Route']}" /> </td> <c:choose> <c:when test="${schooltype == 3}"> <td align=center> <img src="someurl.retrieve_image?p_id=<c:out value="${Row['ImageId']}" />" alt="no image" /></td> </c:when> <c:otherwise> <td align=center> </td> </c:otherwise> </c:choose> <td><c:out value="${Row['Stop']}" /> </td> <td align=center><c:out value="${Row['Am']}" /> </td> <td align=center><c:out value="${Row['Pm']}" /> </td> <c:choose> <c:when test="${now ge startdate}"> <td align=center> </td> </c:when> <c:when test="${now lt startdate}"> <td align=center style="color: blue;"> <c:out value="${startdatedisplay}" /> </td> </c:when> <c:otherwise> <td align=center><c:out value="${startdatedisplay}" /> </td> </c:otherwise> </c:choose> <c:choose> <c:when test="${now lt stopdate}"> <td align=center style="color: red;"> <c:out value="${stopdatedisplay}" /> </td> </c:when> <c:otherwise> <td align=center><c:out value="${stopdatedisplay}" /> </td> </c:otherwise> </c:choose> </tr> </c:forEach> </tbody> </table> <br /> <br />
Hello world!
Written by admin on May 17th, 2009Welcome to my new blog. My server crashed a second time, and this time the virtual machine was not recoverable. I will post new information about Oracle UCM and Oracle WCI as I have time. Please enjoy your visit!