Posts Tagged ‘Oracle’
WebLogic 10.x new features
Recent history
BEA WebLogic 9.0, 9.1 and 9.2 were released from 2007: the main features were: a new console, WLST (WebLogic ScriptingTool), deployment plans, WebLogic Diagnostic Framework (WLDF), new security providers (RDBMS, SAML 1.1, etc.), JMS
performance improvements, support of Java EE 4, JDK 5, Spring
, OpenJPA
, Kodo, etc.
Since this date, some events happened:
- Oracle bought Sun (2009)
- Oracle released WebLogic 10.3 (2008)
- Oracle bought BEA (2008)
WebLogic Server 10 General Features
- Developer productivity ehancements
- JDK 6, Java EE 5
- Support of
EJB
3 andJPA
- BEA enhancements
- Web Services: more annotations, less XML
JAX-RPC
Web Services EnhancementsJAX-WS
2.0 Web Services Implementation
- Misc:
- Better administration console
- Auto-Record of Admin Console actions as WLST scripts
- Automatic JTA Transaction Recovery Service (TRS) migration
- SNMP 3.0
- Production Application Redeployment enhancements
- Clustering – Unicast messaging (in addition to Multicast)
Programmer Perspective
- New persistence engine: TopLink
- OEPE (Oracle Entreprise Pack for Eclipse): sequence of tools and plugins for Eclipse: remote deployment, debugging, editors for
weblogic.xml
andweblogic-application.xml
, wizards, facets, Weblogic ClientGen,WSDLC
andJAXB
wizards - Optimizations for
Spring
integration and certication - Web 2.0:
- Ajax / Dojo client support
- Http publish / submit engine for collaborative applications:
- Bayeux protocol
- data exchange within applications over persistent connections
- scalability for Dojo clients
- Ad-hoc tools for:
- Oracle Database
Spring
- JAX-WS webservices
Lightweight WebLogic Server
WebLogic 10 offers a light weight server:
- Install only “core” WebLogic server
- Optionally, startup other services (
,JDBC
EJB
,JMS
, etc.) - FastSwap: modify classes without requiring redeployment.
Architect Perspective
Architects have to consider WebLogic as a complete suite, and not only WebLogic Server:
- Oracle RAC integration: Connectivity to RAC with load balancing, failover, transactions
- Enterprise Messaging with
JMS
: High performance and reliableJMS
messaging engine “built-in” - ActiveCache with Coherence*Web and
EJB
/JPA
: Coherence Data Grid caching included and integrated - Operations Automation: Tools for automating management of applications and servers
- Operations Insight: Tools for diagnosing problems in development and production
- Other features
- Development tools: Choice of tools for developer productivity
- Web Services: Enterprise Web Services for SOA
- TopLink: Persist application data to stores with performance and productivity. It works in a way similar to Hibernate L2 cache.
Spring
: Enable flexible choice of dev frameworks with same WebLogic QOS
Production and Support Perspective
WebLogic 10 provides a tool: JRockit Mission Control
- monitors more than 150 parameters:
- CPU
- memory
- leaks
- latency spikes
- threads
- object references
connectionsJDBC
JMS
- pools
- clusters
- configuration files
- etc.
- allows to compare WebLogic domains
- Runtime Analyzer: runtime capture for offline analysis, Garbage Collector analysis, etc.
Coherence – ActiveCache
Coherence is the Data Grid offered by Oracle. It allows to store Java objects in memory, and share them between all instances. From a certain viewpoint, Coherence looks like the GigaSpaces.
Roadmap for Future WebLogic Releases
- Support of Java EE 6 (ratified by the community in last December)
OSGi
deployment- More native integration for WebLogic Server – Coherence – Oracle Database
- JRockit Flight Recorder for constant record
- Virtualization
- More integration with Maven, Hudson and Cruise Control
- Shared Library: use the same
JAR
for many applications, rather than packing the sameJAR
in differentEAR
s. - On long term:
- IDE
- NetBeans to be oriented onto J2ME development
- JDevelopper to remain Oracle strategic IDE
- Contributions to Eclipse to go on
- JRockit and Sun HotSpot JVMs to be merged.
- IDE
Use p6spy with BEA WebLogic 9.2
Case:
You need debug information on SQL queries, for an application within BEA WebLogic 9.2. You need p6spy.
P6spy is a jar which play the role of a bridge between your application and your actual JDBC driver (in my case: oracle.jdbc.driver.OracleDriver
for Oracle 10g)
Solution:
- Change JDBC Driver in Weblogic Web Console
Services > JDBC > Data Sources >
(your data source)> Configuration > Connection Pool > Driver Classname = com.p6spy.engine.spy.P6SpyDriver
- Copy p6spy-1.3.jar and spy.properties in
%WL_HOME%/servers/lib/ext
- Check that spy.properties contains : realdriver=oracle.jdbc.driver.OracleDriver
- In the spy.properties choose the
stdoutLogger
, rather thanlog4jLogger
appender - In the
CLASSPATH
ofstartManagedWebLogic.cmd
, add the following path:%WL_HOME%/servers/lib/ext/p6spy-1.3.jar;%WL_HOME%/servers/lib/ext
Oracle Partitioning
On last Friday I attented a presentation about Oracle (10g) Partitioning. Here is a summary of interesting points:
Why?
On some projects, data bases reach tens of TB. For so huge volume of data, developpers often are used to archiving or historizing datas. Partitioning the base is another way to face mass data.
What?
Partitioning is allowing a table or an index to be divided into smaller pieces, called “partitions”. Please notice that, from a logical point of view, we keep one object (table or index) ; yet, physically, we have many physical partitions.
When?
- DBAs advise to consider partitioning prior to create the tables. Indeed, partitioning when the table reaches a critical size is more expensive than sooner.
- Tables may be partionioned if they are or are assumed to be 2GB or more.
Partition key/ pruning
- From a certain viewpoint, a partition key may be seen as a “super index”
- Rows of the base are assigned to a unique partition.
- The partitioning key contains one column (or more) which determine the partition where any row is to be stored.
- During insert/update/delete operations, the right partition is automatically found owing to the partition key.
- Warning: any table with columns of type
LONG
orLONG_RAW
cannot be partitioned.
Purpose
- Improvement of availability and performance of the base. At first glance, on
select
operations the benefit is small, but oninsert
operations the benefit is felt. - Reduction of administrative burden and input/ouput access
- Anticipation of high volumes of data and cost of development
TYPES
Three types of partitions are available:
- range: eg by month, year, etc.
- list: eg by country, currency, etc. This is the case when the column values are among an enumeration
- hash
Composite keys are allowed, yet they are not advised to be used.
INDEX
Indexes can be partitioned, too. All combinations are allowed: partioned indexes for partioned tables, partioned indexes for global tables, etc.
Syntax
CREATE TABLE range_example ( RANGE_KEY_COLUMN DATE, MY_DATA VARCHAR2 (20) ) PARTITION BY RANGE (range_key_column) ( PARTITION part_1 VALUES LESS THAN (TO_DATE ('01/01/2005', 'dd/mm/yyyy')), PARTITION part_2 VALUES LESS THAN (TO_DATE ('01/01/2006', 'dd/mm/yyyy')))
Oracle 11g
Oracle 11g will bring a lot of improvements on partitioning: extended composite partitioning, reference partitioning, partitioning on virtual columns, etc.
Short Tutorial: Migration from EJB Entity to Hibernate
Case
- let’s consider an EJB Bean AnimalBean, linked to a table JL_Animal
- let’s have a human understandable name for the Pojo, let’s say: Animal
- let an EJB entity have following finders:
* @ejb.finder * signature = "Collection findByBirthDate(java.lang.Integer birthDate)" * query = "SELECT OBJECT(o) FROM AnimalBean AS o WHERE o.birthDate = ?1" * * @ejb.finder * signature = "Collection findByCountryAndBirthDate(java.lang.String from,java.lang.Integer birthDate)" * query = "SELECT OBJECT(o) FROM AnimalBean AS o WHERE o.country = ?1 AND o.birthDate = ?2"
Read the rest of this entry »
Copy all tables from a schema to another one
Case:
I need copy the content of all tables from one Oracle schema to another one, specifically: I must copy raw data from a production DB to a developper one.
Context:
- The DBA do not allow DBLinks
- Oracle source and destination schemas share the same structure (name of the tables, names and types of columns, etc.
Fix:
Here is a small script I wrote, of course it can be improved:
#!/usr/bin/bash SRC_LOGIN=XYZ SRC_PASSWORD=XYZ SRC_DB=production DBDEST_LOGIN=XYZ DEST_PASSWORD=XYZ DEST_DB=developmentDB echo "select object_name from user_objects where object_type = 'TABLE' order by object_name;" | \ sqlplus $SRC_LOGIN/$SRC_PASSWORD@$SRC_DB | \ grep -v OBJECT_NAME | grep -v "-" | grep -v "^$" | \ sed "1,9d" | tac | sed "1,3d" | tac | \ sort | uniq > allTables.txt for table in `more allTables.txt` do rm -rf $table.sql echo "exporting $table" exp $SRC_LOGIN/$SRC_PASSWORD@$SRC_DB file=$table.sql buffer=10485867 tables="$table" direct=y echo "importing $table" echo "truncate table $table;" | \ sqlplus $DEST_LOGIN/$DEST_PASSWORD@$DEST_DB imp $DEST_LOGIN/$DEST_PASSWORD@$DEST_DB file=$table.sql \ buffer=10485867 tables="$table" \ fromuser=$SRC_LOGIN touser=$DEST_LOGIN ignore=y rm -rf $table.sql done rm -rf allTables.txt
A little more explanations:
echo "select object_name from user_objects where object_type = 'TABLE';" | sqlplus $SRC_LOGIN/$SRC_PASSWORD@$SRC_DB
: this allow to retrieve the names of all the tables from the DBgrep -v OBJECT_NAME | grep -v "-" | grep -v "^$"
: this removes empty lines and useless trace from Oracle SQLPlussed "1,9d" | tac | sed "1,3d" | tac
: removes the 9 first lines and the 3 last ones.tac
in Unix allow to reverse the content of a filesort | uniq
: sort lines and remove duplicatesexp $SRC_LOGIN/$SRC_PASSWORD@$SRC_DB file=$table.sql buffer=10485867 tables="$table" direct=y
: exports the content of the table $tableecho "truncate table $table;" | sqlplus $DEST_LOGIN/$DEST_PASSWORD@$DEST_DB
: truncates destination table. This is useful in case the script must be played more than once, for instance.imp $DEST_LOGIN/$DEST_PASSWORD@$DEST_DB file=$table.sql buffer=10485867 tables="$table" fromuser=$SRC_LOGIN touser=$DEST_LOGIN ignore=y
: import the content of the table
Some improvement ideas:
- handle sequences, triggers, stored procedures, etc.
- create the complete destination DB owing to source DB, ie do not assume anymore that the DBs share the same structure