ExtJs 4 - avoid adding duplicate records

This is quick tip on how to avoid adding duplicate records to data store in ExtJs 4.

In my example I have Ext.grid.Panel which dynamically creates store for itself in constructor method from provided list of fields:

 More...

Running GeoServer on Windows 7 (x32 or x64) and IIS 7.5

 

GeoServer is one of the most powerful and rapidly evolving geo-server, capable of serving geographical data in-line with standards developed by Open Geospatial Consortium (OCG).

More information about GeoServer can be found on www.geoserver.org.
What is so attractive in GeoServer?

  • it is Open Source software
  • follows OGC standards
  • functionality hugely improves with every new relase
  • it’s fast and scalable
  • it’s free

GeoServer is written in Java and requires Java Virtual Machine to run on. This can be advantageous as it is operating system independent in sense that it will run on any operating system supporting Java Virtual Machine architecture.

Still, most widely used operating system is Microsoft Windows OS.
And many existing applications and geo systems are required to run from Microsoft IIS (for e.g. because applications require .NET environment, that is exactly what Manifold needs).

So our situation:

Application requires IIS and GeoServer requires Java and Java based Web Server like Apache, Jetty etc.

Possible solutions:
1)Keep them separate.
    Install IIS on one server and Apache or Jetty with GeoServer on different machine (can be virtual).
Probably you will need kind of proxy tool especially if you want to be able to exchange data in different format than images.

2)Make your Apache default server.
Make your Apache default server for e.g. running on port 80 and install IIS on different port for e.g. 8080.
Then you can redirect calls using Apache configuration, this might not be loved by application developers developing .NET web applications

Web Client <-> Apache/Jetty (GeoServer) <-> IIS

3)Install IIS and make it your default Web Server.
Make IIS default Web Server (for e.g.  on port 80) and add Apache/Jetty and GeoServer as secondary web server
   
    Web Client <-> IIS <-> Apache/Jetty (GeoServer)

I think the most popular and easiest to set up is 3rd option.
And here is how this can be done.

The key for this is use of Microsoft “URL Redirection” IIS plug-in.

Here I assume that you have:
Windows 7 Operating System with IIS 7.5 running on port 80
you have downloaded and installed Microsoft URL Redirection plug-in

 

 

Apache with GeoServer or standalone GeoServer distribution running on Jetty using port 8080 so direct call to GeoServer instance can be made as below:
http://localhost:8080/geoserver/web/

Where we want to be:

Client call hits IIS first, and then request is passed to URL Rewriter which checks URL for rules we are going to set up. And if fits in rules request is processed by IIS or is sent to Apache/Jetty

Steps to follow:

1)from IIS Manager select “Default Web Site”
2)start “URL Rewrite” application
3)go to “Actions” and select “Add Rule(s)...”

we will use “Blank rule”

populate rest fields as shown below

Don't worry about “Conditions” - there are from my development environment.
Further down you should set fields like below:


“Action” section is particularly important.
So:
Action type: Rewrite
Action Properties:
    Rewrite URL: http://localhost:8080/{R:1}   <- this could be {R:0} read more from URL Rewrite docs
    Append query string: ticked
    Log rewritten URL: un-ticked

“Rewrite URL” is an “url” pointing to your Web Server hosting GeoServer including port

So we have now IIS redirecting every call to http://localhost:8080/  (which in my case is Apache)

Now we want IIS to process every call having certain string in URL request.
In other words we need to build list of redirection exceptions.
Exceptions will be our web applications.

So if we want to add new application/web site to IIS, simply go to “Default Web Site”, and add application. For e.g. our test application is latest GeoExt library, as we want to check examples
http://localhost/GeoExt-1.0

Using IIS Manager
create new application called GeoExt-1.0
select “Default Web Site” from IIS Manager
open “URL Rewrite” application
select redirection rule “GeoServer Redirect” in my example
right-top – Condition -> Add...
make sure “Check if input string:” is set to “Does Not Match the Pattern”, so every thing that is different to “/geoext-1.0” (ignore case) will be passed to Apache and if it has  “/geoext-1.0” as in url request string will be processed by IIS

populate fields like shown below:

 

So now we can call our application like:

 

Main advantage is that we can call GeoServer installed on same server as IIS
And we can call our application:
http://localhost/myApp
and GeoServer
http://localhost/geoserver/web

So we shouldn’t have “same origin” policy rule violated. This is extremely important when exchange data in  formats like XML, JSON, JavaScript and so on.

We still can use full functionality of both, even having IIS running on port 80 and Apache/Jetty on port 8080.
And we don’t need to provide port for this. As per screenshot below, test GeoExt WMS-Capabilities from examples directory where I have changed url to data from “data/wms.json” to http://localhost/geoserver/ows?service=wms&version=1.1.1&request=Getcapabilities

 

 

Hope this helps