Is Oracle MapViewer a Fit for Me?

Recently I began evaluating Oracle MapViewer to determine if it is the right tool for me. I’m looking for a mapping API that will allow me to manage vector graphics, points and polylines, independently from the base map. Today, I write too much repetitive code for map providers like Google Maps and OSM.  Oracle MapViewer it is a good tool for people working in a Java EE environment. It also has a place as part of Oracle’s Business Intelligence Suite, and is a very handy ad-hoc spatial data viewer, but does it belong in my website development toolbox?

current_map_stackMy personal preference is open source and lightweight, as this graphic illustrates, with a client-side JavaScript MVC framework making AJAX calls to JAX-RS web services. The RESTful web services should run in a standard Java web container and not depend on Java EE server containers.

In order to do vector graphics and event handling for polylines and points independently from the base map, my map API abstraction layer must be replaced. Ideally, the replacement framework should be purely JavaScript and should not require any server-side changes, something like Leaflet.

MapViewer Components

MapViewer is much more than just a JavaScript framework for maps. It has several server-side components that support its client-side AJAX-based JavaScript API:

  • A core rendering engine Java library, SDOVIS, that performs cartographic rendering. A servlet exposes the rendering functions to Web applications.
  • Application programming interfaces for programming MapViewer features. These APIs include XML, Java, PL/SQL, and an AJAX-based JavaScript API.
  • A graphical Map Builder tool that enables you to create map symbols, define spatial data rendering rules, and create and edit MapViewer objects.
  • Oracle Maps, which includes map cache and FOI (feature of interest) servers that facilitate the development of interactive geospatial Web applications.

The MapViewer architecture is not targeted towards my ideal environment of simple Java web containers. The preferred environment is Oracle WebLogic or Glassfish.

That being said, MapViewer does support Tomcat, but to what extent I’ve yet to discover. The following table is from the Map Viewer J2EE Servers Support page:

J2EE Server Name and Version

 Oracle WebLogic Server  10g and Later
 GlassFish  3.1.2 or later
 Oracle Application Server  10g (10.1.3.x)
 WebLogic  9
 Oracle OC4J Standalone  10g (10.1.3.x)
 Apache Tomcat  6.x and Later
 WebSphere  6.x and 7.x
 JBoss  4.x and Later

This architecture is illustrated in this graphic from the Oracle Fusion Middleware MapViewer Primer.

mapviewerIn my current work environment, pools of servers support different domains of our site. There is nothing to say that one pool of servers cannot include Java EE servers to handle the mapping load. It would still serve to isolate the mapping services from other server pools as well reduce the workload on the other servers. The business justification for the new pool of mapping servers depends on how many MapViewer features add value to our site, things like dynamic heatmaps, for example.

I’ll start my deep dive with the tutorials that come with the project, and then will explore some of the extensive features list in MapViewer data sheet.

Advertisements

Installing a SSD for Faster GIS

vimg_about01

Running ESRI software is inevitable as I dive deeper into Geographic Information Systems. If I decide to get a Masters in GIS from the Penn State World Campus, then running ESRI ArcGIS is mandatory. That is a problem because my house is “Windows-free” and all ESRI software is Windows-only.

I did some searching and found that running ArcGIS on a Windows VM is not uncommon. The only gotcha I discovered is that you must turn off 3-D acceleration. I also learned that if I hold out long enough it’s rumored that a Mac version of ArcGIS may be coming.

To get the best possible performance with my existing computer I replaced my boot drive with a Samsung model 840 120 GB SSD for $99.99. Even though my computer is a bit long in the tooth, it should be able to run a Windows VM reasonably well, especially now that it has the SSD.

With the SSD Ubuntu boots incredibly fast! I shouldn’t have to replace my hardware for the foreseeable future, even when I do start running ArcGIS on a Windows VM.

Today was a good geek day.

Spatial Vector Acceleration in Oracle Spatial and Graph 12c

12c_logo

Dan Geringer, Senior Software Development Manager at Oracle, was on site this week working with our DBA, Tim Gerber, and they steered me towards documentation about the spatial vector acceleration available in 12c. The parameter is documented in the Oracle Spatial and Graph Developers Guide:

To accelerate the performance of spatial operators, it is recommended that you enable the Vector Performance Accelerator (VPA) feature by setting the SPATIAL_VECTOR_ACCELERATION database system parameter to the value TRUE.

Simply run the following command from a suitably privileged account.

SQL> ALTER SYSTEM SET SPATIAL_VECTOR_ACCELERATION=TRUE SCOPE=BOTH;
System altered.

ORA-65049: creation of local user or role is not allowed in CDB$ROOT

12c_logo

I really hate the response “RTFM” in the forums, but sadly it was appropriate in my case. Let me save you some grief when you start playing with 12c. If you do not need to use a CDB (container database) or PDB (pluggable database), then uncheck the “Create as Container database” check box during the installation.

Step5of9

If you leave that checked you will quickly learn that you can’t create a local user in the root container.

$ sqlplus sys as sysdba
SQL*Plus: Release 12.1.0.1.0 Production on Wed Jun 26 07:08:11 2013
Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Enter password:
Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

SQL> GRANT DBA, CONNECT, RESOURCE TO STEVE IDENTIFIED BY dbl-secret-pwd;
GRANT DBA, CONNECT, RESOURCE TO STEVE IDENTIFIED BY dbl-secret-pwd
*
ERROR at line 1:
ORA-65049: creation of local user or role is not allowed in CDB$ROOT

Installing Oracle Spatial and Graph 12c on OEL 6.4

12c_logo

Oracle Spatial and Graph 12c has Arrived

Jean Ihm posted on Google+ today that Oracle Spatial and Graph 12c is available. This post is an update to my post earlier this month How to Install Oracle Spatial and Graph (11g) on OEL 6.4. Bear in mind that the context of my blog is a home spatial learning lab written by a Java developer, not a DBA, so please take what I say with a grain of salt.

Oracle 12c Gotcha

The Oracle 12c installation has “Create as Container database” checked by default. Container databases and PDB (Pluggable Database) didn’t exist in 11g and are a real paradigm shift. Unless you mean to add that complexity to your installation, be sure to uncheck the box circled in red below on the fifth screen show.

Complete the Pre-install Steps for Oracle Spatial and Graph 12c

To start out I cloned an Oracle VirtualBox snapshot I took of OEL 6.4 (Oracle Enterprise Linux) just prior to installing Oracle 11g. I performed the prerequisite steps as documented my 11g install post:

  1. Define the hostname.
  2. Install the dependencies. I didn’t find a 12c pre-install RPM for OEL, so I used the 11g RPM: oracle-rdbms-server-11gR2-preinstall.
  3. Change the secure Linux policy in /etc/selinux/config to permissive.

Install Oracle Spatial and Graph 12c

Download the two Linux zip files from the Oracle Spatial and Graph 12c page.

As root, create the directory shown below, and unzip both files into that directory.

# mkdir /home/OraDB12c/
$ cp [your path]/linuxamd64_12c_database_1of2.zip /home/OraDB12c/ 
$ cp [your path]/linuxamd64_12c_database_2of2.zip /home/OraDB12c/ 
$ cd /home/OraDB12c/ 
$ unzip linuxamd64_12c_database_1of2.zip
$ unzip linuxamd64_12c_database_2of2.zip

Add Permission for Oracle User to xhost

Next, to avoid a common display error during the Oracle 11g installation run the following command as root.

# xhost +SI:localuser:oracle 
  localuser:oracle being added to access control list

Edit /home/oracle/.bash_profile with your preferred editor and add the following environment variables (substituting your host name and other installation preferences).

# Oracle Settings
TMP=/tmp; export TMP
TMPDIR=$TMP; export TMPDIR

ORACLE_HOSTNAME=gps12c.localdomain 
ORACLE_UNQNAME=orcl 
ORACLE_BASE=/home/oracle/app/oracle
ORACLE_HOME=/home/oracle/app/oracle/product/12.1.0/dbhome_1
ORACLE_SID=orcl
export ORACLE_SID ORACLE_HOME ORACLE_BASE ORACLE_UNQNAME ORACLE_HOSTNAME
PATH=$ORACLE_HOME/bin:/usr/sbin:$PATH
export PATH
LD_LIBRARY_PATH=$ORACLE_HOME/lib:/lib:/usr/lib
CLASSPATH=$ORACLE_HOME/jlib:$ORACLE_HOME/rdbms/jlib; 
export CLASSPATH LD_LIBRARY_PATH

Switch to the oracle user and change to the OraDB12c directory to run the install.

# su - oracle
# cd /home/OraDB12c/database 
# ./runInstaller 

Since mine is a home machine I accepted the default values on most screens. I’ve included all the screenshots below.

Leave the first-page blank unless you have an Oracle Support account.

12c_2

This page is different from 11g. I skipped the software updates since I had none to install.

12c_3

This option will launch the database configuration assistant after the software is installed.

12c_4

A desktop class is sufficient for a home spatial learning lab.

12c_5

Be sure to deselect “Create as Container database” unless you need to manage PDB (Pluggable Databases). If you leave this op

Step5of9

Take the default inventory directory.

12c_7

With the three pre-install steps noted above, my system passed all the prerequisite checks and skipped directly to the summary page.

12c_8

Run the two scripts shown as root.

12c_11

Go have a cup of coffee. The database configuration takes awhile. When it’s complete the following window will appear.

12c_12

Test the Oracle Installation

Try connecting to the database while still signed in as the user oracle using the commands shown below. Run the test query shown to pull back the database SID.

$ sqlplus / as sysdba

SQL*Plus: Release 12.1.0.1.0 Production on Tue Jun 25 22:01:38 2013
Copyright (c) 1982, 2013, Oracle.  All rights reserved.

Connected to:
Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

SQL> select instance_name from v$instance;

INSTANCE_NAME
----------------
orcl

SQL> exit
Disconnected from Oracle Database 12c Enterprise Edition Release 12.1.0.1.0 - 64bit Production
With the Partitioning, OLAP, Advanced Analytics and Real Application Testing options

Wrapping Up

That is good enough for tonight. In my future posts, I’ll be using 12c instead of 11g, despite the fact that it will probably be a long while before we upgrade at work. I want access to the latest spatial features as I am learning.

How to Install Oracle MapViewer

MapViewerLogo

In this post, I cover how to install the Oracle MapViewer 11g (11.1.1.7) Quick Start Kit. I also tell you where to track down a copy of the data for the MapViewer demos (that is not included with this distribution), and I take you step-by-step through the import of that data and the creation of a permanent data source.

Download Oracle MapViewer

Go to the Software Downloads for Oracle Fusion Middleware MapViewer page and accept the Terms and Conditions. Download the MapViewer Quick Start Kit from the Current MapViewer Version section. The Quick start kit is bundled with Glassfish server version 3.1.2. Alternatively, you can download and unzip the EAR file and then deploy the WAR file from the EAR to Tomcat.

Unzip the file and read the README.txt file located in the mapviewer11g_gs directory.

Install and Configure Glassfish and MapViewer

Installation is simply a matter of following the instructions in the README.txt file.

$ ./runMeFirst.sh
Setting 'admin' user's password to: welcome1 ...
Command change-admin-password executed successfully.
Waiting for domain1 to start ......
Successfully started the domain : domain1
domain  Location: /home/smitchell/Applications/mapviewer11g_qs/glassfish3/glassfish/domains/domain1
Log File: /home/smitchell/Applications/mapviewer11g_qs/glassfish3/glassfish/domains/domain1/logs/server.log
Admin Port: 4848
Command start-domain executed successfully.
Deploying Oracle MapViewer ......
Application deployed with name mapviewer.
Command deploy executed successfully.
Deploying MapViewer Samples application ......
Application deployed with name mvdemo.
Command deploy executed successfully.
Enabling remote secure login
You must restart all running servers for the change in secure admin to take effect.
Command enable-secure-admin executed successfully.
Restarting server ...
Successfully restarted the domain
Command restart-domain executed successfully.
MapViewer QuickStart kit is now running!
MapViewer Server URL: http://localhost:8080/mapviewer
MapViewer Samples URL: http://localhost:8080/mvdemo
Glassfish Admin URL:  http://localhost:4848

Next, remove the one-time-use files used by runMeFirst.sh.

$ rm welcome1.txt 
$ rm password.txt 

MapViewer is now running. To start and stop Glassfish/MapViewer run the startServer and stopServer scripts.

Configure the MapViewer Demo

The MapViewer Quick Start Kit comes bundled with the MVDEMO war. There is some housekeeping necessary to set up the demo. That is all explained on the MVDEMO homepage: http://localhost:8080/mvdemo/.

Confirm the Required Database Views Exist

Numerous views should have been created in MDSYS when you installed Oracle Enterprise Edition.  Open SQL Developer and connect to the database. Scroll down to Other Users. Expand Other Users and find the user MDSYS. Expand the Views folder and scroll down until you come to the USER_SDO_… views (not shown). The following views should be there: USER_SDO_CACHED_MAPS, USER_SDO_MAPS, USER_SDO_THEMES, and USER_SDO_STYLES.

MDSYS_VIEWS

Note that the mcsdefinition.sql file is opened in the right side-panel above. That is a script that creates the necessary views should they be missing.

Import the MapViewer Demo Data

The data for the MapViewer demo is contained in a file named mvdemo.zip. That file is not part of maviewer11g_qs download. I found a copy in mapviewer10133wls.zip. It contains the mvdemo.zip file which, in turn, contains four SQL files, a mvdemo.dmp file, and readme.txt.

Follow the instructions in the file readme.txt included in mvdemo.zip. It walks you through the following steps.

Create new Oracle User

Create a new user, mvdemo. You’ll need that user later to import the demo data, although you may use a different user if you wish.

grant connect, resource, create view to mvdemo identified by mvdemo;
Grant succeeded.

Import the Dump Data

I’m working on two machines, so for this step, I first used secure copy to copy the dump data over to the Oracle database server.

 scp mvdemo.dmp oracle@gps11g:~/
oracle@gps11g's password:
mvdemo.dmp                                      100%  8288KB    8.1MB/s    00:00

From the oracle user account on the database server I ran the import command:

$ imp mvdemo/mvdemo file=mvdemo.dmp full=y ignore=y

Import: Release 11.2.0.1.0 - Production on Sun Jun 9 19:43:47 2013
Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Connected to: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production
With the Partitioning, OLAP, Data Mining and Real Application Testing options

Export file created by EXPORT:V09.00.01 via conventional path
import done in US7ASCII character set and AL16UTF16 NCHAR character set
import server uses WE8MSWIN1252 character set (possible charset conversion)
export client uses WE8MSWIN1252 character set (possible charset conversion)
. importing MVDEMO's objects into MVDEMO
. importing MVDEMO's objects into MVDEMO
. . importing table                       "CITIES"        195 rows imported
. . importing table                     "COUNTIES"       3230 rows imported
. . importing table                    "EMPLOYEES"         14 rows imported
. . importing table                  "INTERSTATES"        239 rows imported
. . importing table                         "MAPS"          4 rows imported
. . importing table                       "STATES"         56 rows imported
. . importing table                       "STYLES"        285 rows imported
. . importing table                  "TERRITORIES"          9 rows imported
. . importing table                "TERR_COUNTIES"       3230 rows imported
. . importing table                       "THEMES"         10 rows imported
Import terminated successfully without warnings.

Run mvdemo.sql

Readme.txt suggests importing mvdemo.sql from SQL*PLUS; however, I did it from SQL Developer using a new connection authenticated with the new mvdemo user account.

sqldemo_import

That completes the mvdemo data import.

Create the mvdemo Data Source

Open the MapViewer Administrative console, http://localhost:8080/mapviewer/, and click the Admin link that I circled in red below.

MapViewerAdmin

Follow these steps:

  1. Sign in with the Glassfish Id and password, admin/welcome1. You may change the Glassfish password by running the resetPassword.sh script.
  2. When the Management page appears click Configuration at the top of the menu on the left side of the page.
  3. The MapperConfig file will be displayed. Scroll to the bottom of the file to the Predefined Data Sources section.
  4. Un-comment the mvdemo map_data_source and edit the values to match the database server as shown below. NOTE: the exclamation point in front of the password is not a typo. It must be there.
  5. Click the Save and Restart button at the bottom of the Configuration page.

datasource

Click on the Data sources menu below the Configuration menu after the MapViewer restarts and you’ll see the new data source.

mvdemo_ds

Explore the Demos

You can now start exploring the demos at http://localhost:8080/mvdemo/demo/oracle_maps_demo.jsp.

demopage

In my next post I’ll set up the HTML5 demos, that is, once I’ve finished exploring this demo set.

Installing Oracle SQL Developer

sqldevlogo

This  short post covers the installation of Oracle SQL Developer and the IP tables change required on OEL 6.4 to open up port 1521 so SQL Developer can connect to the Oracle database.

The illustration below from my earlier post, Host to Install OEL 6.4 as a VirtualBox Guest, shows that I run my Oracle 11g Enterprise Edition spatial learning lab on VirtualBox, but my tools run on the host OS, Ubuntu:

SpatialLab

Configure the Hosts File

Add the host name of the Oracle database server to /etc/hosts on the machine running SQL Developer.

hosts

Open Port 1521

SQL Developer needs to connect to the TNS listener on the Oracle database server over port 1521 (or some other configured port), so Linux needs to accept traffic on port 1521. Use Telnet to test whether the port is open on the database server. From the machine running SQL Developer issue the following command substituting your Oracle database server host name and listener port.

$ telnet gps11g 1521
Trying 192.168.1.39...
telnet: Unable to connect to remote host: No route to host

If telnet cannot get through on that port check the /etc/sysconfig/iptables file on the Oracle database server.  Confirm that port 1521 is open. I had to add the rule outlined in red. Please talk to your Systems Administrator about the risks of making this change. My house is behind a firewall appliance and port 1521 is blocked to the outside world, so I felt secure making this change.

iptables

If you make changes to /etc/sysconfig/iptables run the following command to restart iptables afterwards:

$ /etc/init.d/iptables restart
iptables: Flushing firewall rules:                         [  OK  ]
iptables: Setting chains to policy ACCEPT: filter          [  OK  ]
iptables: Unloading modules:                               [  OK  ]
iptables: Applying firewall rules:                         [  OK  ]

Download SQL Developer

Download SQL Developer from here: http://www.oracle.com/technetwork/developer-tools/sql-developer/downloads/index.html. Pick the appropriate distribution for your system. For OEL 6.4 that is Other Platforms.

sqldev-download

Install SQL Developer

The installation itself is very well documented here: https://forums.oracle.com/forums/thread.jspa?threadID=2302774. Follow the instructions found on that page to install SQL Developer.

The SQL Developer software requires Java. The link above includes a step where you have to add the Java installation location to a configuration file. I’ve had to do that in the past on other machines, but I did not have to do that on this machine. Since I’m a Java developer and need to use an older Sun distribution of Java for compatibility reasons I did a separate set-up step not mentioned before in my blog. That included added JAVA_HOME to my .bashrc file.

Add a Database Connection

After installing and launching SQL Developer click the green plus sign to add a new database connection:

sqldevadd

Supply the information displayed when the TNS Listener was started.

db_connection

Connect to the Oracle Database Server

As long as your database is started, your listener is listening to port 1521, and iptables allows traffic on port 1521 you should now be able to connect to the SPATIAL_LEARNING database.

db_data

In my next post, I will setup Oracle Map Viewer.