SlideShare ist ein Scribd-Unternehmen logo
1 von 43
Downloaden Sie, um offline zu lesen
Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services
Database Applications Lifecycle
Management
Marcelo F. Ochoa
Oracle Ace Member
Fac. Cs. Exactas - UNICEN
Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services
What is ALM?
Application lifecycle management (ALM) is the
marriage of business management to software en-
gineering made possible by tools that facilitate and
integrate requirements management, architecture,
coding, testing, tracking, and release management.
Source Wikipedia
Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services
ALM Areas
Governance
Development
Operations
Idea Deployment End of Life
Source What is ALM--Chappell.pdf
Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services
ALM: Development
Governance
Development
Operations
Idea Deployment End of Life
SDLC, v1 SDLC, v2SDLC, v1
Maintenance
Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services
ALM Tools
Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services
Server Side Components
● PL/SQL
● Packages
● Procedures and Functions
● Triggers
● Object types
● Tables, Indexes and other
● XMLDB repository objects
● Java Code
● Package implementations
● Procedure and Function Implementations
● Trigger implementations
● Object Type implementations
● Common libraries
Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services
SCM tools
● Popular SCMs are integrated on all IDEs
● JDeveloper includes by default
● CVS (password based or public-private key based)
● SVN
● Dimension
● Perforce
● Team System VCS
● SQLDeveloper is based on JDeveloper core so it
enables similar list of SCM tools support
● Oracle Team Productivity Center is a good add-in
for free
● ALM tool requires that everybody on dev. team use JDeveloper
Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services
JDeveloper SCM tool in action
Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services
JDeveloper SCM tool in action
Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services
Oracle Team Productivity
● Simple
● Free
● Integrated with JDeveloper
● Ready to use connectors:
● Bugzilla – defect tracking system
● JIRA – bug tracking, issue tracking and project management
● Microsoft Project Server – task management
● Tasks – built in Task repository to create and track team tasks
● Support hierarchies of teams and users
● Messaging with the team using XMPP
● Extensible framework and sample connector
Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services
Team Productivity Center - login
Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services
Team Productivity Center - admin
Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services
Team Productivity Center
my tasks
Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services
Team Productivity Center
my bugs
Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services
Design Tools
● JDeveloper
● Benefits
● Is good from the developer point of views
● Covers most of design objects required by developers
● Provides reverse engineering of schema objects
● Has a two way editor (Class Diagram <-> Java Source)
● Drawbacks
● Is not a powerful UML tool
● Is not possible to create live documents with diagram embedded
● Does not include all UML diagrams
Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services
Sample JDeveloper Design tools
Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services
Development tools
● Editing tool support
● Code insight
● Code completion
● Refactoring
● Code assist
● Live code auditing
● Quick JavaDoc
● Debugger
● Profiling
● JUnit, Maven integration
● Database
● Forward and reverse modeling
● DB browsing and manipulation
● Execution, auto-trace and explain-plan
Important: For Java server side compile always using $ORACLE_HOME/jdk
Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services
Compile, build, deploy
● Most of the IDE does this task
graphically
● Is good for novel developers
● Can do typical tasks
● Not good for off-shoring development
● Not good for cloud computing scenery
● Command line tools solved above problems
● Can do almost all tasks
● DBA and Sys admin loves this during deploy
● Is good for remote deployment
● Only a text terminal is necessary to run
● Ant and Maven are the kind of these tools
Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services
Ant
● Tool designed to replace old tools such as make
● Multi-platform – Java based
● Extensible
● Tons of tasks to do everything you need
● Cover all the steps during:
● Compile
● Build
● Test
● Release management
● Deploy
● Also you can work with PLSQL and SQL*Plus
Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services
Ant commons tasks
● Define your ORACLE_HOME
● Using SQL*Plus
● Other Oracle's external tools (using tasks)
● loadjava, dropjava
● NCOMP (10g)
● Retro-translator (JDK 1.5 Libraries running in 10g)
<property name="env" environment="env" value="env"/>
<property name="ORACLE_HOME" value="${env.ORACLE_HOME}"/>
<property name="SQLPlus" value="sqlplus"/>
.....
<target name="create-lucene-role">
<exec executable="${ORACLE_HOME}/bin/${SQLPlus}" dir="./db" failonerror="true">
<arg value="${dba.usr}/${dba.pwd}@${db.str} as sysdba"/>
<arg value="@create-lucene-role"/>
</exec>
</target>
Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services
Ant examples
● Uploading Log4J to the RDBMS
● NCOMPing 10g code (Java -> assembler)
<target name="load-extra-libs" depends="get-junit-jar,get-codec-jar">
<loadjava-with-public-synonym
login="${db.usr}/${db.pwd}@${db.str}"
file="lib/junit-3.8.2.jar"/>
<loadjava-with-public-synonym
login="${db.usr}/${db.pwd}@${db.str}"
file="lib/commons-codec-1.4.jar"/>
</target>
<target name="ncomp-runtime-retrotranslator-sys-code"
description="NCOMP Retrotranslator Runtime Java code - translate Java to assembler" >
<delete file="exact_class_list.txt" />
<delete file="*ClassListAndTCDumper.java" />
<ncomp
login="${dba.usr}/${dba.pwd}@${db.str}"
file="bin/bcel-5.2.jar"
dir="tmp"
libName="bcel_ncomp_odi" />
.....
</target>
Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services
Maven
● Ant superset
● A project management framework
● Based on a Project Object Model (POM)
● Provided compile, test, assemble, install
● Maven's principles:
● Convention over configuration
● Standard directory layout for projects
● A single Maven producing a single output
● Standard naming convention
● Declarative execution (POM)
● Reuse build logic (plugins)
● Coherence organization of dependencies
● You can not build a component if the test stage fails
● If there isn't a plugin for your need Ant tasks can do
the job
Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services
Maven's project example
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/maven-v4_0_0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.noelios.restlet.test</groupId>
<artifactId>com.noelios.restlet.test.xdb</artifactId>
<packaging>jar</packaging>
<version>1.2-SNAPSHOT</version>
<name>com.noelios.restlet.test.xdb</name>
<url>http://maven.restlet.org/</url>
<repositories>.....</repositories>
<dependencies>
<dependency>
<groupId>oracle</groupId>
<artifactId>ojdbc5</artifactId>
<version>11.1.0</version>
</dependency>....
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>1.5</source>
<target>1.5</target>
<debug>true</debug>
</configuration>
</plugin>...
</plugins>
</build>...
</project>
Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services
Maven's local repository
Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services
Testing, testing, testing...
● Include testing from the early
stage of the project
● Do client side test
● Do server side test
● PL/SQL code
● Server side (requires code installed at server side):
● SQLDeveloper
● utPLSQL
● PLUTO
● Client side (no server side requirements)
● SQLUnit (can be integrated with continuous integration servers)
● Ad-hoc (SQL files executed using SQL*Plus)
● Java Code
● JUnit
● Client Side
● Server Side
● Using real server side JDBC drivers
● Closed Security Manager
● Real OJVM memory manager
Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services
Server side JUnit
● Installing JUnit
● Permission to use JUnit at server side
● Runner classes:
● junit.runner.OJVMTestSuiteLoader
● junit.textui.OJVMRunner
● junit.textui.XMLPrinter
<target name="load-extra-libs" depends="get-junit-jar,get-codec-jar">
<loadjava-with-public-synonym
login="${db.usr}/${db.pwd}@${db.str}"
file="lib/junit-3.8.2.jar"/>
<loadjava-with-public-synonym
login="${db.usr}/${db.pwd}@${db.str}"
file="lib/commons-codec-1.4.jar"/>
</target>
dbms_java.grant_permission('SCOTT','SYS:java.io.FilePermission', '/junit.properties', 'read' );
dbms_java.grant_permission('SCOTT','SYS:java.lang.RuntimePermission', 'getClassLoader', '' );
dbms_java.grant_permission('SCOTT','SYS:java.lang.RuntimePermission', 'accessDeclaredMembers', '' );
Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services
Server side JUnit, running tests
● Define regression tests
● Running the test
create table lucene_regresion_tests (
method_or_class CHAR(1),
class_name VARCHAR2(400),
elapsed_time NUMBER(6,3),
result_status VARCHAR2(32),
result_count NUMBER,
failure_count NUMBER,
error_count NUMBER,
error_msg CLOB
)
insert into lucene_regresion_tests values ('c','org.apache.lucene.store.TestWindowsMMap',0.0,'-',0,0,0,'');
declare
result XMLType;
begin
for c in (select * from lucene_regresion_tests
where class_name like 'org.apache.lucene.%'
order by class_name) loop
result := XMLType(OJVMRunnerAsString(c.method_or_class,c.class_name));
commit;
update lucene_regresion_tests
set elapsed_time = result.extract('/junitreport/time/text()').getNumberVal(),
result_status = result.extract('/junitreport/result/@status').getStringVal(),
result_count = result.extract('/junitreport/result/@run_count').getNumberVal(),
failure_count = result.extract('/junitreport/result/failures/@failure_count').getNumberVal(),
error_count = result.extract('/junitreport/result/failures/@error_count').getNumberVal(),
error_msg = result.extract('/*').getClobVal()
where class_name = c.class_name;
commit;
end loop;
end;
Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services
SQLUnit (PL/SQL Testing)
● Define an Ant task
● Calling a test suite
<taskdef name="sqlunit" classname="net.sourceforge.sqlunit.ant.SqlunitTask">
<classpath>
<fileset dir="bin">
<include name="jdom-1.0.jar" />
<include name="log4j-1.2.16.jar" />
<include name="xercesImpl-2.9.1.jar" />
<include name="sqlunit-5.0.jar" />
</fileset>
</classpath>
</taskdef>
<target name="test-odi" description="Run Test on Domain Index functionality"
depends="init">
<sqlunit haltOnFailure="false" debug="false" logformat="default"
logfile="../../build/contrib/odi/test/sqlunit-test-odi.txt">
<fileset dir="db">
<include name="test*.xml" />
</fileset>
</sqlunit>
</target>
Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services
SQLUnit (test suite example)
<sqlunit>
<connection extern="db/sqlunit.properties" />
<setup>
<include file="db/schemaSourceSmall.sql" />
</setup>
<test name="Optimize index">
<call>
<stmt>{call LuceneDomainIndex.optimize(?)}</stmt>
<param id="1" type="VARCHAR">SOURCE_SMALL_LIDX</param>
</call>
<result/>
</test>
<test name="Count for type">
<call>
<stmt>{call
declare
cn NUMBER;
begin
select count(*) into cn from test_source_small where lcontains(text,?)>0;
if cn &lt; 60 then
raise_application_error(-20101, 'Expected less than 60 rows found: ' || cn);
end if;
end
}</stmt>
<param id="1" type="VARCHAR" inout="in">type</param>
</call>
<result/>
</test>
....
<teardown>
<sql>
<stmt>drop table test_source_small</stmt>
</sql>
</teardown>
</sqlunit>
Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services
Continuous integration
● Agile development requires short cycles
● Typically an Integration server talks with the SCM
server and does daily a compile,test,build pro-
cess
● Using Hudson CI
● Easy to execute: java -jar hudson.war
● Easy to configure using a web browser
● User friendly
● Multiple executions options
● Jobs triggering
● Multiple Notifications options
● Auto testing (Nunit, JUnit, Maven)
● Extensible +150 plugins
Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services
Hudson examples
Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services
Hudson examples
Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services
Hudson examples
Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services
Debugging
● Client side debugging
● Server side debugging
● Attaching to JPDA
● Listening for JPDA
java -client -agentlib:jdwp=transport=dt_socket,server=y,address=<port> <other Java options>
YourMainClass <program arguments>
SQL> grant DEBUG CONNECT SESSION, DEBUG ANY PROCEDURE, JAVADEBUGPRIV to SCOTT;
preparedstatement = this.conn
.prepareCall("{ call dbms_debug_jdwp.connect_tcp(?,?) }");
preparedstatement.setString(1, "localhost");
preparedstatement.setInt(2, 4000);
preparedstatement.execute();
preparedstatement = this.conn
.prepareCall("{ call dbms_debug_jdwp.disconnect }");
preparedstatement.execute();
Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services
Logging
● Two options are for server side Java Code
● JDK Java Util Logging API
● Simple
● Included by default into the OJVM
● No extra jars
● Only one grant to use by regular users
Apache Log4J
● Powerful
● Requires log4j.jar uploaded
● Minimum grant required
dbms_java.grant_permission('SCOTT','SYS:java.util.logging.LoggingPermission', 'control', '' );
dbms_java.grant_permission( 'LOGROLE', 'SYS:java.lang.RuntimePermission', 'getClassLoader', '' );
dbms_java.grant_permission( 'LOGROLE', 'SYS:java.io.FilePermission', 'log/a.log', 'write' );
dbms_java.grant_permission( 'LOGROLE', 'SYS:java.io.FilePermission', 'log/b.log', 'write' );
loadjava -u JLIB_SCHEMA/JLIB_SCHEMA -r -v -s -g PUBLIC log4j-1.8.2.jar
loadjava -u JLIB_SCHEMA/JLIB_SCHEMA -r -v -g PUBLIC log4j.properties
Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services
Log4J complex example
● Using Log4J to get unified logging
● Components:
● Server Side logging
● Middle tier application logging
● Unix syslogd
/etc/sysconfig/syslogd
/etc/rsyslog.conf
# See syslogd(8) for more details
SYSLOGD_OPTIONS="-r"
# $AllowedSender - specifies which remote systems are allowed to send syslog messages to rsyslogd
# --------------
$AllowedSender UDP, 127.0.0.1, 192.0.2.0/24
Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services
Log4J complex example
grants
log4j.properties:
# A1 should be a ConsoleAppender.
log4j.appender.A1=org.apache.log4j.ConsoleAppender
# A1's layout is a PatternLayout
log4j.appender.A1.layout=org.apache.log4j.PatternLayout
log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n
# Set options for appender named "A2".
# Appender "A2" will be a SyslogAppender
log4j.appender.A2=org.apache.log4j.net.SyslogAppender
log4j.appender.A2.SyslogHost=localhost
# Only warnings or above will be logged for the logger "SECURITY.access".
# Output will go to A1.
log4j.logger.SECURITY.access=WARN
# uncomment this if you want DBPrism debugging
log4j.logger.com.prism=DEBUG,A2
log4j.additivity.com.prism=false
dbms_java.grant_permission( 'CMSUSERROLE', 'SYS:java.net.SocketPermission', 'localhost', 'resolve' );
dbms_java.grant_permission( 'CMSUSERROLE', 'SYS:java.net.SocketPermission', 'localhost:1024-', 'listen,resolve' );
dbms_java.grant_permission( 'CMSUSERROLE', 'SYS:java.net.SocketPermission', 'loghost:514', 'connect,resolve' );
Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services
Release management
● Always use release number on jar-files
● Follow Maven default three-digit
convention (e.g. 2.0.44)
● loadjava tool extract all .class from
jar and the relation with the
version is missing
● PL/SQL procedures and packages have no release
number inside the RDBMS.
● Try to use a dev. environment with same:
● Architecture
● OS version
● RDBMS version
as the production environment
Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services
Backup, Restore
Upgrade, Downgrade
● Traditional backup-restore are not useful with
server side code
● A full backup will not work to downgrade an application
● Storing only code in one schema can be an option to use
traditional backup-restore tools
● XMLDB repository objects requires a custom backup
● A set of classes uploaded with loadjava can be
downgraded using:
● dropjava myapp-jar-1.1.0.jar
● loadjava myapp-jar-1.0.0.jar
but you need a repository like Maven to keep track all jar
version-ed
● If you need to know which version of PLSQL code is
currently used you could use SCM keywords such
as
● $Revision$, $Log$, $Author$, $Date$
Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services
Summary
● From the developer perspective ALM requires us
● Choose the right tool for the precise job
● Use SCM to keep the changes of everything
● Develop, test and deploy using command line tools
● Follow release number for libraries
● Integrate logging to follow the application running
● Go Agile using CI
● Automatize all test
Remember:
● Write a test case is not a waste of time, a test is a time-
saving machine
Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services
Q & A
Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services
Links
Wikipedia information about ALM
Oracle JDeveloper
Oracle Team Productivity Center
Apache Ant
Apache Maven
JUnit
SQLUnit
Hudson CI
Log4J
Lucene Domain Index
Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services
Thank You

Weitere ähnliche Inhalte

Was ist angesagt?

Was ist angesagt? (8)

DevOps:建造開發維運的跨界之橋 (@ C.C. Agile #37)
DevOps:建造開發維運的跨界之橋 (@ C.C. Agile #37)DevOps:建造開發維運的跨界之橋 (@ C.C. Agile #37)
DevOps:建造開發維運的跨界之橋 (@ C.C. Agile #37)
 
Migrating Beyond Java 8
Migrating Beyond Java 8Migrating Beyond Java 8
Migrating Beyond Java 8
 
Testing Java Web Apps With Selenium
Testing Java Web Apps With SeleniumTesting Java Web Apps With Selenium
Testing Java Web Apps With Selenium
 
Continuous delivery of your legacy application
Continuous delivery of your legacy applicationContinuous delivery of your legacy application
Continuous delivery of your legacy application
 
30 Skills to Master to Become a Senior Software Engineer
30 Skills to Master to Become a Senior Software Engineer30 Skills to Master to Become a Senior Software Engineer
30 Skills to Master to Become a Senior Software Engineer
 
Presentation 1 open source tools in continuous integration environment v1.0
Presentation 1   open source tools in continuous integration environment v1.0Presentation 1   open source tools in continuous integration environment v1.0
Presentation 1 open source tools in continuous integration environment v1.0
 
Reusable Build Scripts for Managed Package Development (October 14, 2014)
Reusable Build Scripts for Managed Package Development (October 14, 2014)Reusable Build Scripts for Managed Package Development (October 14, 2014)
Reusable Build Scripts for Managed Package Development (October 14, 2014)
 
Optimizing deployment & dev ops with tfs 2013
Optimizing deployment & dev ops with tfs 2013Optimizing deployment & dev ops with tfs 2013
Optimizing deployment & dev ops with tfs 2013
 

Ähnlich wie Database Applications Lifecycle Management

Testing and DevOps Culture: Lessons Learned
Testing and DevOps Culture: Lessons LearnedTesting and DevOps Culture: Lessons Learned
Testing and DevOps Culture: Lessons Learned
LB Denker
 
DevOps for TYPO3 Teams and Projects
DevOps for TYPO3 Teams and ProjectsDevOps for TYPO3 Teams and Projects
DevOps for TYPO3 Teams and Projects
Fedir RYKHTIK
 

Ähnlich wie Database Applications Lifecycle Management (20)

Devops
DevopsDevops
Devops
 
Selenium for everyone
Selenium for everyoneSelenium for everyone
Selenium for everyone
 
The QA/Testing Process
The QA/Testing ProcessThe QA/Testing Process
The QA/Testing Process
 
Devops with Python by Yaniv Cohen DevopShift
Devops with Python by Yaniv Cohen DevopShiftDevops with Python by Yaniv Cohen DevopShift
Devops with Python by Yaniv Cohen DevopShift
 
Testing and DevOps Culture: Lessons Learned
Testing and DevOps Culture: Lessons LearnedTesting and DevOps Culture: Lessons Learned
Testing and DevOps Culture: Lessons Learned
 
Session on evaluation of DevSecOps
Session on evaluation of DevSecOpsSession on evaluation of DevSecOps
Session on evaluation of DevSecOps
 
The FN Project by Maximilian Jerg
The FN Project by Maximilian JergThe FN Project by Maximilian Jerg
The FN Project by Maximilian Jerg
 
Dev ops ci-ap-is-oh-my_security-gone-agile_ut-austin
Dev ops ci-ap-is-oh-my_security-gone-agile_ut-austinDev ops ci-ap-is-oh-my_security-gone-agile_ut-austin
Dev ops ci-ap-is-oh-my_security-gone-agile_ut-austin
 
µServices Architecture @ EPAM WOW 2015
µServices Architecture @ EPAM WOW 2015µServices Architecture @ EPAM WOW 2015
µServices Architecture @ EPAM WOW 2015
 
Viktor Turskyi "Effective NodeJS Application Development"
Viktor Turskyi "Effective NodeJS Application Development"Viktor Turskyi "Effective NodeJS Application Development"
Viktor Turskyi "Effective NodeJS Application Development"
 
Keeping up with PHP
Keeping up with PHPKeeping up with PHP
Keeping up with PHP
 
Using AWS Well Architectured Framework for Software Architecture Evaluations ...
Using AWS Well Architectured Framework for Software Architecture Evaluations ...Using AWS Well Architectured Framework for Software Architecture Evaluations ...
Using AWS Well Architectured Framework for Software Architecture Evaluations ...
 
Microservices Architecture
Microservices ArchitectureMicroservices Architecture
Microservices Architecture
 
DevOps for TYPO3 Teams and Projects
DevOps for TYPO3 Teams and ProjectsDevOps for TYPO3 Teams and Projects
DevOps for TYPO3 Teams and Projects
 
WinOps Conf 2016 - Jeffrey Snover - The DevOpsification of Windows Server
WinOps Conf 2016 - Jeffrey Snover - The DevOpsification of Windows ServerWinOps Conf 2016 - Jeffrey Snover - The DevOpsification of Windows Server
WinOps Conf 2016 - Jeffrey Snover - The DevOpsification of Windows Server
 
SDLC & DevOps Transformation with Agile
SDLC & DevOps Transformation with AgileSDLC & DevOps Transformation with Agile
SDLC & DevOps Transformation with Agile
 
ADDO_2020-Driving-Digital-Transformation-through-CloudOps-and-SRE.pdf
ADDO_2020-Driving-Digital-Transformation-through-CloudOps-and-SRE.pdfADDO_2020-Driving-Digital-Transformation-through-CloudOps-and-SRE.pdf
ADDO_2020-Driving-Digital-Transformation-through-CloudOps-and-SRE.pdf
 
Near real-time anomaly detection at Lyft
Near real-time anomaly detection at LyftNear real-time anomaly detection at Lyft
Near real-time anomaly detection at Lyft
 
Slide DevSecOps Microservices
Slide DevSecOps Microservices Slide DevSecOps Microservices
Slide DevSecOps Microservices
 
Continuous Integration for OpenVMS with Jenkins
Continuous Integration for OpenVMS with JenkinsContinuous Integration for OpenVMS with Jenkins
Continuous Integration for OpenVMS with Jenkins
 

Kürzlich hochgeladen

CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
masabamasaba
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
masabamasaba
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
VictorSzoltysek
 

Kürzlich hochgeladen (20)

%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa%in tembisa+277-882-255-28 abortion pills for sale in tembisa
%in tembisa+277-882-255-28 abortion pills for sale in tembisa
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdfPayment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
Payment Gateway Testing Simplified_ A Step-by-Step Guide for Beginners.pdf
 
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
Crypto Cloud Review - How To Earn Up To $500 Per DAY Of Bitcoin 100% On AutoP...
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
OpenChain - The Ramifications of ISO/IEC 5230 and ISO/IEC 18974 for Legal Pro...
 
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...
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
%+27788225528 love spells in Colorado Springs Psychic Readings, Attraction sp...
 
Announcing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK SoftwareAnnouncing Codolex 2.0 from GDK Software
Announcing Codolex 2.0 from GDK Software
 
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
%+27788225528 love spells in new york Psychic Readings, Attraction spells,Bri...
 
10 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 202410 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 2024
 
%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand%in Midrand+277-882-255-28 abortion pills for sale in midrand
%in Midrand+277-882-255-28 abortion pills for sale in midrand
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students8257 interfacing 2 in microprocessor for btech students
8257 interfacing 2 in microprocessor for btech students
 
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
%in Stilfontein+277-882-255-28 abortion pills for sale in Stilfontein
 
%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...
%+27788225528 love spells in Vancouver Psychic Readings, Attraction spells,Br...
 
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdfThe Top App Development Trends Shaping the Industry in 2024-25 .pdf
The Top App Development Trends Shaping the Industry in 2024-25 .pdf
 

Database Applications Lifecycle Management

  • 1. Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services Database Applications Lifecycle Management Marcelo F. Ochoa Oracle Ace Member Fac. Cs. Exactas - UNICEN
  • 2. Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services What is ALM? Application lifecycle management (ALM) is the marriage of business management to software en- gineering made possible by tools that facilitate and integrate requirements management, architecture, coding, testing, tracking, and release management. Source Wikipedia
  • 3. Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services ALM Areas Governance Development Operations Idea Deployment End of Life Source What is ALM--Chappell.pdf
  • 4. Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services ALM: Development Governance Development Operations Idea Deployment End of Life SDLC, v1 SDLC, v2SDLC, v1 Maintenance
  • 5. Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services ALM Tools
  • 6. Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services Server Side Components ● PL/SQL ● Packages ● Procedures and Functions ● Triggers ● Object types ● Tables, Indexes and other ● XMLDB repository objects ● Java Code ● Package implementations ● Procedure and Function Implementations ● Trigger implementations ● Object Type implementations ● Common libraries
  • 7. Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services SCM tools ● Popular SCMs are integrated on all IDEs ● JDeveloper includes by default ● CVS (password based or public-private key based) ● SVN ● Dimension ● Perforce ● Team System VCS ● SQLDeveloper is based on JDeveloper core so it enables similar list of SCM tools support ● Oracle Team Productivity Center is a good add-in for free ● ALM tool requires that everybody on dev. team use JDeveloper
  • 8. Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services JDeveloper SCM tool in action
  • 9. Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services JDeveloper SCM tool in action
  • 10. Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services Oracle Team Productivity ● Simple ● Free ● Integrated with JDeveloper ● Ready to use connectors: ● Bugzilla – defect tracking system ● JIRA – bug tracking, issue tracking and project management ● Microsoft Project Server – task management ● Tasks – built in Task repository to create and track team tasks ● Support hierarchies of teams and users ● Messaging with the team using XMPP ● Extensible framework and sample connector
  • 11. Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services Team Productivity Center - login
  • 12. Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services Team Productivity Center - admin
  • 13. Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services Team Productivity Center my tasks
  • 14. Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services Team Productivity Center my bugs
  • 15. Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services Design Tools ● JDeveloper ● Benefits ● Is good from the developer point of views ● Covers most of design objects required by developers ● Provides reverse engineering of schema objects ● Has a two way editor (Class Diagram <-> Java Source) ● Drawbacks ● Is not a powerful UML tool ● Is not possible to create live documents with diagram embedded ● Does not include all UML diagrams
  • 16. Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services Sample JDeveloper Design tools
  • 17. Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services Development tools ● Editing tool support ● Code insight ● Code completion ● Refactoring ● Code assist ● Live code auditing ● Quick JavaDoc ● Debugger ● Profiling ● JUnit, Maven integration ● Database ● Forward and reverse modeling ● DB browsing and manipulation ● Execution, auto-trace and explain-plan Important: For Java server side compile always using $ORACLE_HOME/jdk
  • 18. Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services Compile, build, deploy ● Most of the IDE does this task graphically ● Is good for novel developers ● Can do typical tasks ● Not good for off-shoring development ● Not good for cloud computing scenery ● Command line tools solved above problems ● Can do almost all tasks ● DBA and Sys admin loves this during deploy ● Is good for remote deployment ● Only a text terminal is necessary to run ● Ant and Maven are the kind of these tools
  • 19. Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services Ant ● Tool designed to replace old tools such as make ● Multi-platform – Java based ● Extensible ● Tons of tasks to do everything you need ● Cover all the steps during: ● Compile ● Build ● Test ● Release management ● Deploy ● Also you can work with PLSQL and SQL*Plus
  • 20. Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services Ant commons tasks ● Define your ORACLE_HOME ● Using SQL*Plus ● Other Oracle's external tools (using tasks) ● loadjava, dropjava ● NCOMP (10g) ● Retro-translator (JDK 1.5 Libraries running in 10g) <property name="env" environment="env" value="env"/> <property name="ORACLE_HOME" value="${env.ORACLE_HOME}"/> <property name="SQLPlus" value="sqlplus"/> ..... <target name="create-lucene-role"> <exec executable="${ORACLE_HOME}/bin/${SQLPlus}" dir="./db" failonerror="true"> <arg value="${dba.usr}/${dba.pwd}@${db.str} as sysdba"/> <arg value="@create-lucene-role"/> </exec> </target>
  • 21. Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services Ant examples ● Uploading Log4J to the RDBMS ● NCOMPing 10g code (Java -> assembler) <target name="load-extra-libs" depends="get-junit-jar,get-codec-jar"> <loadjava-with-public-synonym login="${db.usr}/${db.pwd}@${db.str}" file="lib/junit-3.8.2.jar"/> <loadjava-with-public-synonym login="${db.usr}/${db.pwd}@${db.str}" file="lib/commons-codec-1.4.jar"/> </target> <target name="ncomp-runtime-retrotranslator-sys-code" description="NCOMP Retrotranslator Runtime Java code - translate Java to assembler" > <delete file="exact_class_list.txt" /> <delete file="*ClassListAndTCDumper.java" /> <ncomp login="${dba.usr}/${dba.pwd}@${db.str}" file="bin/bcel-5.2.jar" dir="tmp" libName="bcel_ncomp_odi" /> ..... </target>
  • 22. Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services Maven ● Ant superset ● A project management framework ● Based on a Project Object Model (POM) ● Provided compile, test, assemble, install ● Maven's principles: ● Convention over configuration ● Standard directory layout for projects ● A single Maven producing a single output ● Standard naming convention ● Declarative execution (POM) ● Reuse build logic (plugins) ● Coherence organization of dependencies ● You can not build a component if the test stage fails ● If there isn't a plugin for your need Ant tasks can do the job
  • 23. Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services Maven's project example <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.noelios.restlet.test</groupId> <artifactId>com.noelios.restlet.test.xdb</artifactId> <packaging>jar</packaging> <version>1.2-SNAPSHOT</version> <name>com.noelios.restlet.test.xdb</name> <url>http://maven.restlet.org/</url> <repositories>.....</repositories> <dependencies> <dependency> <groupId>oracle</groupId> <artifactId>ojdbc5</artifactId> <version>11.1.0</version> </dependency>.... </dependencies> <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.5</source> <target>1.5</target> <debug>true</debug> </configuration> </plugin>... </plugins> </build>... </project>
  • 24. Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services Maven's local repository
  • 25. Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services Testing, testing, testing... ● Include testing from the early stage of the project ● Do client side test ● Do server side test ● PL/SQL code ● Server side (requires code installed at server side): ● SQLDeveloper ● utPLSQL ● PLUTO ● Client side (no server side requirements) ● SQLUnit (can be integrated with continuous integration servers) ● Ad-hoc (SQL files executed using SQL*Plus) ● Java Code ● JUnit ● Client Side ● Server Side ● Using real server side JDBC drivers ● Closed Security Manager ● Real OJVM memory manager
  • 26. Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services Server side JUnit ● Installing JUnit ● Permission to use JUnit at server side ● Runner classes: ● junit.runner.OJVMTestSuiteLoader ● junit.textui.OJVMRunner ● junit.textui.XMLPrinter <target name="load-extra-libs" depends="get-junit-jar,get-codec-jar"> <loadjava-with-public-synonym login="${db.usr}/${db.pwd}@${db.str}" file="lib/junit-3.8.2.jar"/> <loadjava-with-public-synonym login="${db.usr}/${db.pwd}@${db.str}" file="lib/commons-codec-1.4.jar"/> </target> dbms_java.grant_permission('SCOTT','SYS:java.io.FilePermission', '/junit.properties', 'read' ); dbms_java.grant_permission('SCOTT','SYS:java.lang.RuntimePermission', 'getClassLoader', '' ); dbms_java.grant_permission('SCOTT','SYS:java.lang.RuntimePermission', 'accessDeclaredMembers', '' );
  • 27. Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services Server side JUnit, running tests ● Define regression tests ● Running the test create table lucene_regresion_tests ( method_or_class CHAR(1), class_name VARCHAR2(400), elapsed_time NUMBER(6,3), result_status VARCHAR2(32), result_count NUMBER, failure_count NUMBER, error_count NUMBER, error_msg CLOB ) insert into lucene_regresion_tests values ('c','org.apache.lucene.store.TestWindowsMMap',0.0,'-',0,0,0,''); declare result XMLType; begin for c in (select * from lucene_regresion_tests where class_name like 'org.apache.lucene.%' order by class_name) loop result := XMLType(OJVMRunnerAsString(c.method_or_class,c.class_name)); commit; update lucene_regresion_tests set elapsed_time = result.extract('/junitreport/time/text()').getNumberVal(), result_status = result.extract('/junitreport/result/@status').getStringVal(), result_count = result.extract('/junitreport/result/@run_count').getNumberVal(), failure_count = result.extract('/junitreport/result/failures/@failure_count').getNumberVal(), error_count = result.extract('/junitreport/result/failures/@error_count').getNumberVal(), error_msg = result.extract('/*').getClobVal() where class_name = c.class_name; commit; end loop; end;
  • 28. Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services SQLUnit (PL/SQL Testing) ● Define an Ant task ● Calling a test suite <taskdef name="sqlunit" classname="net.sourceforge.sqlunit.ant.SqlunitTask"> <classpath> <fileset dir="bin"> <include name="jdom-1.0.jar" /> <include name="log4j-1.2.16.jar" /> <include name="xercesImpl-2.9.1.jar" /> <include name="sqlunit-5.0.jar" /> </fileset> </classpath> </taskdef> <target name="test-odi" description="Run Test on Domain Index functionality" depends="init"> <sqlunit haltOnFailure="false" debug="false" logformat="default" logfile="../../build/contrib/odi/test/sqlunit-test-odi.txt"> <fileset dir="db"> <include name="test*.xml" /> </fileset> </sqlunit> </target>
  • 29. Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services SQLUnit (test suite example) <sqlunit> <connection extern="db/sqlunit.properties" /> <setup> <include file="db/schemaSourceSmall.sql" /> </setup> <test name="Optimize index"> <call> <stmt>{call LuceneDomainIndex.optimize(?)}</stmt> <param id="1" type="VARCHAR">SOURCE_SMALL_LIDX</param> </call> <result/> </test> <test name="Count for type"> <call> <stmt>{call declare cn NUMBER; begin select count(*) into cn from test_source_small where lcontains(text,?)>0; if cn &lt; 60 then raise_application_error(-20101, 'Expected less than 60 rows found: ' || cn); end if; end }</stmt> <param id="1" type="VARCHAR" inout="in">type</param> </call> <result/> </test> .... <teardown> <sql> <stmt>drop table test_source_small</stmt> </sql> </teardown> </sqlunit>
  • 30. Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services Continuous integration ● Agile development requires short cycles ● Typically an Integration server talks with the SCM server and does daily a compile,test,build pro- cess ● Using Hudson CI ● Easy to execute: java -jar hudson.war ● Easy to configure using a web browser ● User friendly ● Multiple executions options ● Jobs triggering ● Multiple Notifications options ● Auto testing (Nunit, JUnit, Maven) ● Extensible +150 plugins
  • 31. Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services Hudson examples
  • 32. Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services Hudson examples
  • 33. Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services Hudson examples
  • 34. Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services Debugging ● Client side debugging ● Server side debugging ● Attaching to JPDA ● Listening for JPDA java -client -agentlib:jdwp=transport=dt_socket,server=y,address=<port> <other Java options> YourMainClass <program arguments> SQL> grant DEBUG CONNECT SESSION, DEBUG ANY PROCEDURE, JAVADEBUGPRIV to SCOTT; preparedstatement = this.conn .prepareCall("{ call dbms_debug_jdwp.connect_tcp(?,?) }"); preparedstatement.setString(1, "localhost"); preparedstatement.setInt(2, 4000); preparedstatement.execute(); preparedstatement = this.conn .prepareCall("{ call dbms_debug_jdwp.disconnect }"); preparedstatement.execute();
  • 35. Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services Logging ● Two options are for server side Java Code ● JDK Java Util Logging API ● Simple ● Included by default into the OJVM ● No extra jars ● Only one grant to use by regular users Apache Log4J ● Powerful ● Requires log4j.jar uploaded ● Minimum grant required dbms_java.grant_permission('SCOTT','SYS:java.util.logging.LoggingPermission', 'control', '' ); dbms_java.grant_permission( 'LOGROLE', 'SYS:java.lang.RuntimePermission', 'getClassLoader', '' ); dbms_java.grant_permission( 'LOGROLE', 'SYS:java.io.FilePermission', 'log/a.log', 'write' ); dbms_java.grant_permission( 'LOGROLE', 'SYS:java.io.FilePermission', 'log/b.log', 'write' ); loadjava -u JLIB_SCHEMA/JLIB_SCHEMA -r -v -s -g PUBLIC log4j-1.8.2.jar loadjava -u JLIB_SCHEMA/JLIB_SCHEMA -r -v -g PUBLIC log4j.properties
  • 36. Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services Log4J complex example ● Using Log4J to get unified logging ● Components: ● Server Side logging ● Middle tier application logging ● Unix syslogd /etc/sysconfig/syslogd /etc/rsyslog.conf # See syslogd(8) for more details SYSLOGD_OPTIONS="-r" # $AllowedSender - specifies which remote systems are allowed to send syslog messages to rsyslogd # -------------- $AllowedSender UDP, 127.0.0.1, 192.0.2.0/24
  • 37. Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services Log4J complex example grants log4j.properties: # A1 should be a ConsoleAppender. log4j.appender.A1=org.apache.log4j.ConsoleAppender # A1's layout is a PatternLayout log4j.appender.A1.layout=org.apache.log4j.PatternLayout log4j.appender.A1.layout.ConversionPattern=%-4r [%t] %-5p %c %x - %m%n # Set options for appender named "A2". # Appender "A2" will be a SyslogAppender log4j.appender.A2=org.apache.log4j.net.SyslogAppender log4j.appender.A2.SyslogHost=localhost # Only warnings or above will be logged for the logger "SECURITY.access". # Output will go to A1. log4j.logger.SECURITY.access=WARN # uncomment this if you want DBPrism debugging log4j.logger.com.prism=DEBUG,A2 log4j.additivity.com.prism=false dbms_java.grant_permission( 'CMSUSERROLE', 'SYS:java.net.SocketPermission', 'localhost', 'resolve' ); dbms_java.grant_permission( 'CMSUSERROLE', 'SYS:java.net.SocketPermission', 'localhost:1024-', 'listen,resolve' ); dbms_java.grant_permission( 'CMSUSERROLE', 'SYS:java.net.SocketPermission', 'loghost:514', 'connect,resolve' );
  • 38. Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services Release management ● Always use release number on jar-files ● Follow Maven default three-digit convention (e.g. 2.0.44) ● loadjava tool extract all .class from jar and the relation with the version is missing ● PL/SQL procedures and packages have no release number inside the RDBMS. ● Try to use a dev. environment with same: ● Architecture ● OS version ● RDBMS version as the production environment
  • 39. Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services Backup, Restore Upgrade, Downgrade ● Traditional backup-restore are not useful with server side code ● A full backup will not work to downgrade an application ● Storing only code in one schema can be an option to use traditional backup-restore tools ● XMLDB repository objects requires a custom backup ● A set of classes uploaded with loadjava can be downgraded using: ● dropjava myapp-jar-1.1.0.jar ● loadjava myapp-jar-1.0.0.jar but you need a repository like Maven to keep track all jar version-ed ● If you need to know which version of PLSQL code is currently used you could use SCM keywords such as ● $Revision$, $Log$, $Author$, $Date$
  • 40. Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services Summary ● From the developer perspective ALM requires us ● Choose the right tool for the precise job ● Use SCM to keep the changes of everything ● Develop, test and deploy using command line tools ● Follow release number for libraries ● Integrate logging to follow the application running ● Go Agile using CI ● Automatize all test Remember: ● Write a test case is not a waste of time, a test is a time- saving machine
  • 41. Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services Q & A
  • 42. Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services Links Wikipedia information about ALM Oracle JDeveloper Oracle Team Productivity Center Apache Ant Apache Maven JUnit SQLUnit Hudson CI Log4J Lucene Domain Index
  • 43. Temperies (www.temperies.com) Safe, flexible and reliable outsourcing development services Thank You