• Web Mapping Applications made easy with Eclipse ArcGIS plug-ins

    In this post we will discuss how to install and set up the ESRI Java Web ADF plug-in using Eclipse Ganymede. Once, we have the plug-in installed, we will set out to use the features by creating a Web Mapping Application (WMA) and extend our WMA with a Query Task functionality. 

    Setting Eclipse ArcGIS Preference

    Before beginning any project, it can be useful to set up common preferences for the new project wizards. Click Window > Preferences from the main menu in Eclipse. Select ArcGIS > Server from the left panel of the dialog box. The connection information entered here will be used by the project wizards. You can specify information needed to connect to some of the more commonly used servers such as ArcGIS Server, ArcIMS, and ArcGIS Web services. Each time you are prompted to add a data source, it will be automatically pre-populated with these values. 

    You can also check the box to Show New Project Wizard Advanced Options. This will provide a couple of extra steps in the wizard for further customization if needed. By default this is unchecked. 


    Setting up an Eclipse Server Runtime with Tomcat

    In order to test and publish web applications on your application server through Eclipse, you need to define one or more resources by installing the application server and installing the appropriate server runtime in Eclipse.  Although you can set up any supported application server which supports Eclipse server runtimes, in this example we will publish our WMA to Apache Tomcat.  Once installed, it is also important to make sure that Tomcat is set to use a 1.5.x or higher JDK.  You should check by using the Configure Tomcat shortcut from the Tomcat install to display the properties dialog below. Click the Java tab and make sure the Java Virtual Machine is set to a jvm.dll located in a 1.5.x JDK. 

    More information about using Tomcat in Eclipse can be found on the Eclipse wiki.  

    To set up Tomcat server runtime in Eclipse, there are a few simple steps:

    • Click Windows > Preferences from the Eclipse toolbar. In the Preferences dialog box, expand the Server option and select Installed Runtimes. Click the Add button.
    • Navigate to the appropriate Apache Tomcat server and click Next.
    • Click the Browse button and locate the Tomcat installation directory on your file system. Click the Installed JREs button to add a JDK as the default JRE.  Check an appropriate JDK or click Add and browse for a JDK. Click OK to close the Preferences dialog box.
    • The dialog box appears as follows. Click Finish. Your Tomcat Server runtime is ready to be used when creating new projects.

    Install ArcGIS Server for Java Web ADF plug-in
    This section contains instructions on how to install/update the plug-in from ESRI update center.

    • Select Help > Software Updates > from the Eclipse toolbar (1) if you have an ArcGIS Eclipse Plug-in installed and are upgrading.  Click the Installed Software tab, find ArcGIS Core and ArcGIS Server entry, right click on each and choose Update. Eclipse will go to the pre-defined update site to get the latest plug-ins. (2) If this is your first time installing the ArcGIS Server for Java Eclipse plug-in, click the Available Software tab, and click the Add Site button on the right.
     
    • Next, click the Local button to browse to the plug-in location on disk, make sure to browse to the Server folder level in your ArcGIS Server for Java directory.
    • You should now see ArcGIS added to the available software list. Check ArcGIS Core and ArcGIS Server and click Install. Once installation is complete, click Finish and follow the prompt to restart Eclipse by clicking OK.

    Create a new ArcGIS Web ADF project
    This section contains instructions for creating a new Eclipse project based on ESRI Web Project Template.

    • Create a new project by clicking File > New > Project and choose ESRI Web Project under ESRI Templates. Click Next and give your project a name.
    • Make sure to choose a Target Runtime, for example, the Apache Tomcat server runtime we set up in previous steps.
    • In the New ArcGIS Web Project Window, double click Add GIS Server node.

     

    • Enter the server connection credentials and click OK.  This should be pre-populated with the credentials set in the preferences dialog. 

     

    • Choose a service from the list and add it to the webcontext. Click Finish to complete.
    • Right click the project name in the Project Explorer panel, Run As > Run on Server. Pick a server and hit Finish. To view the site in an external browser, go Window > Web Browser, choose anyone other than the Internal Web Browser.

    At this point, you should have a WMA running with all the default features offered by the plug-in.  In our next section, we will add a Query Task to the WMA and test it again.   

    Add a query task
    This section contains instructions on how to add a query task to the web application.

    • In the right hand project file list, expand your project to open the mapviewer.jsp under WebContent. Once the source opens up, scroll down to the line where it says <a:task id="searchAttributesTask" . . .> (this is typically around line 123). 
    • Place your cursor in front of this line and right click ArcGIS > Add Task > Query Attributes ...

     

    • Now configure the query task. Click the Settings tab, pick a Map Service and pick a layer. Next to Query Expression, click Add.
    • In the New Expression window, pick a Field to query against and either type in the value to query or select from a list of sample values. Click OK, and OK on the Add Query Task window.
    • Inspect your extended mapviewer.jsp source file.  You should see the query task added and the query link added to the task menu bar.
    • Run the application again and test your query task.
    You now have a WMA with an extended Query Task enabled all without writing a single line of code.  The ESRI ArcGIS Server for Java plug-in hides the complexity of many features which enables you as the developer to quickly create production quality web mapping applications. 

    Contributing Author, Li Linn, ESRI Java Development Team

  • FAQs on ArcGIS Server Java Platform

    The product management team created a list of most frequently asked questions (ofcourse, along with our answers) to help our users. The list below covers a few generic questions on ArcGIS Server Java platform at 9.3.1.

    Q: What enhancements have been made for the ArcGIS Java Platform overall at 9.3.1?

    A: ArcGIS for the Java platform is a complete geospatial platform for Java. It is complete from the aspect of its support at the all levels of the GIS enterprise: From the Desktop, to embedded systems, all the way through to the Server. Java programmers and technologists can engineer world-class GIS solutions from Java Standard Edition (SE) applications to the Java Enterprise Edition (EE) Applications and system integration, across all of ESRI’s supported platforms: Windows, Linux and Solaris.

     Up until 9.3.1, while the ArcObjects platform was available in Java to be consumed at all of these system tiers, customization and extensibility was not clearly supported, and was completely unsupported for the Linux and Solaris platforms. At 9.3.1, however, this has changed. At this release, the ArcGIS platform can be extended by Java developers using standard Java tools and deployment strategies. This technology allows for Java classes to be recognized within the ArcObjects processes as true COM objects. The significance of this technology enhancement can be described in a number of ways. Specifically, developers of Java solutions now have more choices for performance and memory optimization when architecting their applications. The Desktop can be extended, as well as the in-process ArcObjects Engine applications. But most importantly, the ArcGIS Server can now be extended to handle complex geoprocessing and data access business logic in the server, rather than in the web tier. This allows for huge gains in performance and scaleability for ArcGIS Server Java applications.

     Q: Are the Windows, Solaris, and Linux versions of ArcGIS Server functionally the same?

    A: No. At 9.3.1, there are a number of differences in functionality between the Windows and Linux/Solaris version of ArcGIS Server. The following table lists some of the known functionality/capability differences between Windows, Linux and Solaris. Most (if not all) of these items have been publicly documented in various forms throughout the on-line support resources and software product documentation.

     These differences are not expected to change for 9.4.

     

    Windows

    Linux

    Solaris 9

    Solaris 10

    Authoring Map Services

    Yes

    No

    No

    No

    Data Interoperability Extension support

    Yes

    No

    No

    No

    Image Server Extension support (Server-side only) *

    Yes

    No

    No

    No

    Geostatistical Analyst Extension support

    Yes

    No

    No

    No

    Schematics Extension support

    Yes

    No

    No

    No

    Mobile services

    Yes

    No

    No

    No

    Direct Connect to Oracle

    Yes

    Yes

    No

    No

    High-quality MapServer output **

    Yes

    Yes

    No

    Yes **

    Retaining ODBC-based table joins in MXD when moving MXD from Windows

    Yes

    No

    No

    No

    Retaining File-based table joins in MXD when moving MXD from Windows

    Yes

    No

    No

    No

    Personal Geodatabase support

    Yes

    No

    No

    No

    ERMapper ECW format support

    Yes

    No

    No

    No

     * Image Server client libraries are supported on Windows/Linux/Solaris

    ** With respect to Solaris 9, there was a known limitation with the mapserver output quality of some cartographic elements. A patched Solaris 10 release, post June 2007, took care of the problem. There is no workaround for Solaris 9.

     The Solaris version must be a release done later than June 2007 or have the following OS patches present on the system:

    • 125100-04 Kernel Update Patch
    • 120473-05 libc nss ldap PAM zfs Patch
    • 125800-01 Fault Manager Patch

     Q: Do you (ESRI) have any benchmarks testing ArcGIS Server Java on Windows vs Linux?

    A: Performance differences between running ArcGIS Server for Java on Windows versus Linux have been observed. At the risk of oversimplifying, we will share some findings: Intensive CPU operations at the Server Object Container tier tend to be faster on Windows, due to slight overheads produced by MainWin dependencies on our core ArcObjects components. Operations such as sophisticated on the fly mapping and CPU intensive geoprocessing operations incur into performance hits that can reach up to 30 or even 40% on non Windows platforms.  Disk IO intensive operations tend to be however faster on LINUX. For example, accessing map tiles from a cached map service in LINUX tends to be more efficient than on Windows. The above differences apply to the ArcGIS Server for Java and do not aim to compare performance on the .Net and Java flavors of ArcGIS Server.

    Q: Is a mixed platform configuration like SOM on a Linux Box and SOC(s) on a Windows box supported with ArcGIS Server?

    A: No, neither can the reverse scenario be supported. The reason for this is that file paths cannot be properly reconciled in communication between a Linux SOM and a Windows SOC. For example, SOC needs to know the absolute path for the server’s log file. The Linux SOM cannot communicate a Linux pathname to a Windows SOC, nor the reverse.

    Q: Do you support setting up the server in a clustered environment?

    A: Yes. ArcGIS Server is architected to support clustering, failover and round robin. For a complete discussion, please see the following links:

    http://webhelp.esri.com/arcgisserver/9.3/dotNet/index.htm#guide_config_hardware.htm

    http://webhelp.esri.com/arcgisserver/9.3/java/guide_config_hardware.htm

     Q: Do the Eclipse plug-ins for the Java WebADF work with JBuilder 2008 or IBM’s RAD 7?

    A: ESRI does not officially support these configurations. However, our plug-ins can be used in both IDE’s with additional configuration steps.

     Content contributed by Eric Bader, Product Manager for ArcGIS Java platform

  • So long and Good-bye!

    Last week ESRI Support Center published a knowledge base article on the deprecation plans for 9.3.1. Here is a condensed list of deprecations that might impact Java developers.

    • ArcGIS 9.3.1 was the last release supporting the Microsoft Windows 2000 operating system for all ArcGIS products. We will no longer support Windows 2000 in ArcGIS 9.4.
    • ArcGIS 9.3.1 was the last release supporting Sun Solaris 9 for ArcGIS Server, ArcReader and  ArcGIS Engine. Sun has announced the end of life plans for Sun Solaris 9 and given the lack of availability in 2010, ESRI will no longer support this operating system. ArcGIS 9.4 will be the last release supporting Sun Solaris (all versions) for ArcGIS Server, ArcReader and  ArcGIS Engine.
    • ArcGIS 9.3.1 was the last ArcGIS Server Enterprise Java release with support for the Enterprise Application Developer Framework (EADF). EADF provided out-of-the box Enterprise Java Beans (EJBs) that were ready to use and deploy across supported J2EE 1.4 application servers. Users can still take advantage of EJBs by following patterns highlighting the ArcGIS Java Web Services Toolkit (AgsJWS) and EJB3, but we will no longer provide out-of-the box EJBs as part of a Java Application Developer Framework (ADF).
    • ArcGIS 9.3.1 was the last release of ArcSDE for PostgreSQL on Red Hat 4; we no longer support PostgreSQL on this operating system at ArcGIS 9.4, but we will continue to support PostgreSQL on newer versions of Red Hat Linux.
    • ArcGIS 9.3.1 was the last release with support for ArcSDE for 32-bit Informix on the AIX and Solaris platforms; we will no longer support these in ArcGIS 9.4 due to limited support from IBM for these platforms.
    • ArcGIS 9.3.1 was the last release of ArcSDE for Microsoft SQL Server 2000. We no longer support SQL Server 2000 in ArcGIS 9.4 due to this platform no longer being actively supported by Microsoft.
    • ArcGIS 9.3.1 was the last release to support Internet Explorer 6 (IE6); we will no longer support this browser with the release after ArcGIS 9.3.1. Microsoft will be two releases ahead of IE6 by the time ArcGIS 9.4 is available, and IE6 is no longer being actively maintained by Microsoft.

    Please refer the Knowledge Base Article for more information on the deprecation plans and please plan ahead for migration.

  • Configuring the JVM for Use with your ArcGIS Java Extensions

    The 9.3.1 release of ArcGIS introduces the ability to extend ArcGIS using Java. In addition to supporting automatic registration and hosting of Java extensions in ArcGIS applications, a UI-based JVM Config tool for configuring the environment for the extensions is also provided. Using this tool, users can configure JVM options for running their extensions and other options for troubleshooting purposes.

    Due to the UI nature of this tool, however, users need to explicitly interact with it to apply configuration settings on a computer. This may not be suitable for installer programs / setup scripts that want to apply these settings in a silent fashion. Such programs can instead create a Windows Registration file (.REG file) containing these settings and import it into the Windows registry.

    .REG files are text-based human-readable files for storing portions of the registry. For general instructions on working with .REG files to add / modify / delete registry keys refer to the following Microsoft KB article: http://support.microsoft.com/kb/310516. This document will provide examples of how to write Java configuration settings into a .REG file and importing it into the Windows registry.

    Example 1: Choosing the default JVM and setting remote debugging ports.


    JavaConfigTool:

    Example 2: Choosing the default JVM and enabling Java Interop Logging

     

    Importing a .REG file into the Registry:

    Windows: c:\>regedit.exe /s <filename.reg>


    UNIX: bash3.2$ regedit –c <filename.reg>


    Note that the regedit tool on UNIX is available only with ArcGIS products and the necessary initialization scripts for those products (ArcGIS Engine / ArcGIS Server) need to be run before invoking the regedit tool.

    Credits: Ranjit Iyer, Lead Developer and Ajit Dharmik, Lead Product Engineer of the ArcGIS Java development team contributed this post.

     

  • AgsJWS 9.3.1 Developer Dependencies

    The ArcGIS Java WebServices (AgsJWS) libraries are included with the ArcGIS Java Web ADF.  With version 9.3.1, the Web ADF libraries are located under '$ARCGISHOME/java/web/webcontrols/WEB-INF/lib'.  The ESRI AgsJWS libaries include the following:

    • arcgis_agsws_stubs.jar
    • arcgis_ws_runtime.jar

    The dependency libraries are in the same location on disk and included the following:

    • activation.jar
    • commons-codec-1.3.jar
    • commons-httpclient-3.0.1.jar
    • commons-logging-1.0.4.jar
    • jaxb-api.jar
    • jaxb-impl.jar
    • jsr173_1.0_api.jar

    You can create User Libraries in NetBeans and Eclipse to accelerate development with the AgsJWS API. 

    NetBeans v6.5.1

    1. From the tools menu, select Libraries to open the Library Manager. 
    2. Click the 'New Library...' button to create a new Library and name it 'AgsJWSv9.3.1'.
    3. Select a Library Type
    4. You should see your library added to the Library Type you selected in the previous step.
    5. With your new 'AgsJWSv9.3.1' library selected in the left hand Libraries pane, click the 'Add JAR/Folder' button.
    6. Navigate to the '$ARCGISHOME/java/web/webcontrols/WEB-INF/lib' folder location.
    7. Select the ESRI AgsJWS libraries and dependency libraries described above and click 'Add JAR/Folder'.
    8. Once you have all the libraries selected, click OK to close out of the dialog.  
    Now when you can add the library to an existing project by right clicking the project and selecting 'Properties'.  The Project Properties dialog opens where you can select Libraries from the list of Categories and click the 'Add Library' button to find the appropriate library to add. 

    Eclipse Ganymede (v3.4.x)

    1. From the Windows menu, select Preferences.
    2. Select Java > Build Path > User Libraries from the left hand pane.
    3. Click the 'New' button to create a new Library and name it 'AgsJWSv9.3.1'.
    4. With your new library selected, click the 'Add Jars' button to open the Jar Selection dialog.
    5. Navigate to the '$ARCGISHOME/java/web/webcontrols/WEB-INF/lib' folder location.
    6. Select the ESRI AgsJWS libraries and dependency libraries described above and click 'Open'.
    7. You should now see all the libraries added with options to attach source and javadoc locations. 
    Now you can add the library to a new project or existing project by clicking the 'Add Library' in the New Project dialog and/or the Project Preferences dialog respectively.  In Eclipse, your library is added to the 'User Library' category by default.  Once you select User Library, you can add the appropriate library to your project. 

    For further reference please review the follow Help System topics:

  • Custom Task to consume SOE

    At 9.3.1, we introduced Server Object Extensions (SOE) in Java.  Java SOE's offer developers an opportunity to encapsulate low level GIS functionality in desktop or web applications.  In the ArcGIS Server Java Development Help System we document two approaches to consuming SOE's in a console application and in a web application.  In our web application approach, we document using a Java Server Faces (JSF) managed bean pattern where the business logic, SOE, is applied to a command button component in an action listener.  This pattern does not directly depend on the Java Web ADF, but it can be used to extend a Web ADF application.  To take advantage of patterns the Java Web ADF offers, we will take a look at extending the Java Web ADF Task Framework to consume a SOE using the Hello World SOE Developer walkthrough

     The Web ADF Task Framework is an extensible architecture where you can integrate and deploy custom functionality as "Web tasks" within a Web ADF application.  Creating a Custom Java Web ADF Task that consumes an SOE involves the following steps once you have successfully deployed the Hello World SOE:  

    1. Include the SOE jar File in your Web ADF libraries
    2. Create a Java Task Class to consume the SOE
    3. Register the Class as a Managed Bean
    4. Add the task control to the JSP page with a reference to the managed bean

    Include SOE Jar File

    Copy the HelloWorldSOE jar file into the WEB-INF\lib folder of your Web ADF application so that you have local access to the SOE business object in your WEB ADF application. 

    Create a Java Class to consume the SOE

    To work with our HelloWorld SOE, we will want to create a command, or action, task and send the return to the Results panel.  Commands allow you to execute business logic in your SOE without any user interaction with the map.  To create a Web ADF Task, you can either manually create a Java class file and associated TaskInfo classes or use a supported developer IDE like Eclipse to stub out all your Task Class artifacts.  Once you have your Task Class created, implement the following method: 

      public void getMessage(TaskEvent event) {
        System.out.println(this.getClass().getName() ":getMessage()");
        
        try {
          // Get a handle to the Local ArcGIS Service
          AGSLocalMapResource resource = (AGSLocalMapResourceevent.getWebContext()
                .getResources().get("ags1");
          // Get a handle to the SOE
          IServerObject so = resource.getServerContext().getServerObject();
          IServerObjectExtension soe = ((IServerObjectExtensionManagerso)
                .findExtensionByTypeName("HelloWorldSOE");
          IHelloWorldSOE hwSoe = (IHelloWorldSOE)soe;
          
          // Invoke the HelloWorld SOE
          String soeReturn = hwSoe.helloWorld();
           
          // Add attributes to a list to send to WebResults
          List<String> values = new ArrayList<String>();
          String id = "" + System.currentTimeMillis();
          values.add(id)// Unique identifier
          values.add(soeReturn)// SOE Message
          
          // Add a List of results to the WebResults object
          WebContext context = event.getWebContext();
          WebResults results = context.getWebResults();
          results.addResults"SOE Message",  values );

        catch (Exception e) {
          e.printStackTrace();
        }

    Let's explain the method code above.  First we need to get a handle to the Map Service which the SOE is enabled on.  In the WebADF, we can get this from the named resource in our faces-config file.  In our case the resource is named 'ags1' and we use a Local Connection to cast to.  Once we have the Map Service, we can get access to the associated Server Object and we can gain access to extensions with the method findExtensionbyTypeName( <soename> ).  The return object from this method call can be collected by IServerObjectExtension and this reference can be used to call a method on the SOE. At this point in our simple example, we just want to display the return from our SOE in our application.  We can easily use the WebADF Results Panel to post the return message.  The WebResults object is maintained by the WebContext and can be accessed via the WebContext.getWebResults() method.  The result objects that you add to WebResults can provide up to 4 types of information.  We will use the addResults() method to add a Results Header and the result data supplied as a java.util.List object.  That is all the code required to access our SOE and send the response to the Results Panel.  We take advantage of the simplicity of both the SOE and the Web ADF Framework in this pattern. 

    Register the Class as a Managed Bean

    When your Task code is complete, you need to register it as a managed bean. If you used a supported developer IDE, the Task template process created these entries for you.  If not, you can manually do this by opening the faces-config.xml file in your WEB-INF folder and scroll down toward the end of the file and append the following tag content below the last managed bean. 

        <managed-bean>
          <managed-bean-name>helloWorldSvc</managed-bean-name>
          <managed-bean-class>sample.soe.task.HelloWorldSvc</managed-bean-class>
          <managed-bean-scope>none</managed-bean-scope>
        </managed-bean>

    And add the following as a map-entry under the root mapContext managed bean:

            <map-entry>
                <key>helloWorldSvc</key>
                <value>#{helloWorldSvc}</value>
            </map-entry> 

    Add the task control to the JSP page with a reference to the managed bean

    The final step in the process is to add the task control and link to your jsp page.  Open your mapviewer.jsp file and add the new task control to the list of tasks in your application.  The task tags are typically toward the bottom of the mapviewer.jsp file in the WMA.  Note, our task control assumes an associated TaskInfo class was created and links it appropriately here. 

      <!-- New SOE Task Tag in the JSP File -->
      <a:task id="helloWorldTask" value="#{mapContext.attributes.helloWorldSvc}"
    taskInfo="#{mapContext.attributes.helloWorldSvc.taskInfo}" mapId="map1" />

    Now add a task link to the 'task-menu'.  In your WMA mapviewer.jsp file you will see this <div> tag content holding the applications Search Attributes task.

        <li class="menu-bar">
        <a href="#" class="menu-header" title="SOE Task" onclick="toggleWindow('win_EsriTaskCell_helloWorldTask');">
          <span>Hello World SOE</span>
        </a>
      </li>   

     Run your application

     You nave now completed the steps to implement your custom task which consumes the HelloWorld SOE.  You can now deploy and run your application to see it work.  Once the application loads, you should see your 'Hello World SOE' link at the top of the Task Menu bar.  When executed the results are sent to the Results Panel as shown below: 

     

    Consume your SOE in the Web ADF Task Framework

    The Web ADF Task framework offers vast flexibility for you to consume your SOE's in your web application.  The framework provides a mechanism that lets you focus on working with SOE's instead of being concerned with low level implementations in your web application. 

  • ArcObjects Java, Swing/AWT.....but what about SWT?

    I like Swing a lot. Am I a rationally-thinking programmer? Ha! No. But I like Swing for a number of my own reasons. Let me share:

    1. Swing is guaranteed to run on any JVM. No special installations or special JVMs.

    2. Swing is rich with so many components and events, richer than AWT. Uh, do I understand ALL of the models and events and patterns here? No.

    3. The tooling for Swing is terrific. Eclipse and Netbeans both have great tools for Swing development. I like tools. I need tools.

    4. Swing is "top-to-bottom" and "bottom-to-top": I don't need to create a JPanel or JFrame before creating a JButton, or visa versa.

    I do understand that there are drawbacks to using Swing as well. For starters:

    1. Swing applications with heavy UIs may run a bit slow on certain platforms.

    2. Swing look and feel may not always be consistent across all platforms

    3. more....

    SWT (The Standard Widget Toolkit) is a different beast when it comes to building UI-rich cross platform applications for the desktop. It is also a strong platform for doing what Swing and AWT do as windowing toolkits, but tries to fill the voids that Swing and AWT leave us with.

    1. Swing and AWT do not render "native" widget components. SWT does use native widgets for a natural "look and feel"

    2. Because Swing/AWT to not use the native widgets found on different platforms, the abstraction can cost you in performance. SWT is more native, and can perform better, as it provides the thinest possible widget support, natively, for the widest range of platforms. But care must be take when developing for specific platforms.

    There are many compelling reasons for organizations to choose the RCP/SWT/Eclipse platform for their application development and maintenence environments.

    OK. We have some development choices and options out there for rich Java Desktop applications. Excellent. But here is some harsh reality: SWT and AWT do not mix. Can SWT and AWT widgets co-exist in the same application? Not very well, but it can be accomplished with a little help from the SWT-AWT bridge and some complex development approaches. Here is an interesting article that goes into depth on this topic, outlining the pitfals and angst that can be experienced in trying this.

    So, what does this mean for ArcGIS Engine Java developers? The high-level UI developer components that ship with the Java SDK for ArcGIS Engine are based on AWT. Period. These components have never been successfully tested in SWT or "mixed" application development environments.

    What I strongly encourage Java Engine developers to do is this: avoid trying to mix SWT with ArcGIS Engine application development at all costs. At the current release, this usage will not be supported. ESRI will look into this for possible consideration later on, but at the present time, please don't go there!

    So, have fun on the Swing-set, and don't hurt yourself!

  • Extending ArcGIS with Java

    Extending ArcGIS is one of the most important features that was released at 9.3.1. We tried hard to extensively document this new feature and you will find most of the information in the help topics. So, I have jotted down some quick notes to get you started: 

    The ability to extend ArcGIS using POJOs was introduced at 9.3.1. But, what does that mean? It means that you can add new custom functionality to ArcGIS applications using POJOs. How can you, the ArcGIS Engine/Server/Desktop/Geodatabase developer take advantage of ‘Extending ArcGIS’ feature?

    An ArcGIS Desktop developer can 

    • Create custom Geoprocessing tools to accomplish specific GIS tasks. You can add the custom tool to any toolbox in ArcToolbox or chain it with other Geoprocessing tools in ModelBuilder. Since the custom Geoprocessing tool is built using POJOs, you can easily leverage external Java libraries in your tool to perform GIS tasks.
    • Create custom Feature renderers and access it through Desktop UI dialogs like other in-built feature renderers in ArcMap. Feature renderers allow you to symbolize the point/line/polygon data in a map. You can create your own renderers to symbolize the geometries specific to your data 
    • Create Plug-in data sources to integrate external data formats with ArcGIS and hence manage them through ArcCatalog or add them as a layer.

    An ArcGIS Server developer can

    An ArcGIS Engine Developer can

    • Create custom feature renderers that can be accessed and persisted to MXD documents programmatically.
    • Create and consume custom Geoprocessing tools through Geoprocessing APIs in their application.
    • Create plug-in data sources to integrate external data formats not supported by ArcGIS and access them programmatically using Geodatabase APIs in their applications. 
    • Create Utility objects to improve the performance of applications built using ArcObjects Java API (a.k.a. ArcGIS Engine applications)

    A Geodatabase developer can

    • Create Class extensions to define data behavior in a geodatabase. Translation- you can define rules, alerts and actions that are triggered on data creation, modification and deletion.

    You must also bear in mind; the ‘Extending ArcGIS’ using POJOs is limited to creating Geoprocessing Tools, Feature Renderers, Class Extensions, Plug-in Data Sources and the most famous Server Object Extensions only. We have authored a short video on ‘Extending ArcGIS’ and have posted it to the ArcGIS Developer Media Gallery. In the video, Jim presents a very simple and straight forward introduction to ‘Extending ArcGIS’. By the way, the ability to extend ArcGIS, was available well at 9.0. However, the extensibility workflow was tedious - you must write C++ code using ArcObjects C++ APIs, generate proxies using Proxygen tool and access these proxies in your Java code to add custom functionality. But now at 9.3.1, we have made the Java-Interop much smarter and it is possible to extend ArcGIS by creating POJOs and deploying them to ArcGIS.

    Our developers went back to the whiteboard several times to simplify the development/deployment workflow and present a native Java development experience. The development workflow is to create a POJO that implements specific ArcObjects interfaces and annotated with @ArcGISExtension annotation appropriately. The deployment workflow is even simpler, you must bundle the POJOs into a JAR file and drop them in %ArcGISHome%/java/lib/ext folder and when you launch the ArcGIS applications next time, the extensibility will be available for you to consume.

    The help topics and samples are hosted on the resource center under Extending ArcGIS SDK. You can also watch the DevSummit 2009 tech workshop videos on Extending ArcGIS with Java and Extending ArcGIS Server with Java. You can also read Dan's and David's Server Object Extension blogs.

  • Creating an AgsJWS web application with Wicket Framework

    Let's build our first AgsJWS web application.  The AgsJWS API is a low level API for working with ArcGIS Server Web Services through published WSDL endpoint URL's.  This makes the API easy to integrate into existing frameworks which simplifies web application development.  POJO data models make good sense when working with low level API's and Apache Wicket provides a good POJO framework which makes developing web applications simple and enjoyable.  While this post will assume some knowledge of the Apache Wicket framework, if you are new to the framework you can read more about it here

    Our application is going to extend on our previous post which described a console based application for displaying all services from an ArcGIS Server Service Directory.  In this post, we will turn that application into a web application using the Apache Wicket framework.  

    In our example, we will put all the of the files in the same package directory.  This means that our markup files and java files will be in the same directory next to one another.  

    CatalogServerApplication.java

    Each Wicket application is defined by an Application object.  The object defines the home page and allows for some configuration. 

    package com.esri.agsjws.demo;

    import org.apache.wicket.protocol.http.WebApplication;

    public class CatalogServerApplication extends WebApplication {

        @Override
        public Class getHomePage() {
            // TODO Auto-generated method stub
            return CatalogServer.class;
        }

    }

    CatalogServer.java

    In our Application object, CatalogServerApplication, we defined the CatalogServer to be our home page.  When the base URL of our application is requested, the markup rendered by the CatalogServer page will be returned. 

    package com.esri.agsjws.demo;

    import org.apache.wicket.AttributeModifier;
    import org.apache.wicket.markup.html.WebMarkupContainer;
    import org.apache.wicket.markup.html.WebPage;
    import org.apache.wicket.markup.html.basic.Label;
    import org.apache.wicket.markup.repeater.RepeatingView;
    import org.apache.wicket.model.AbstractReadOnlyModel;

    import com.esri.arcgisws.ServiceCatalogBindingStub;
    import com.esri.arcgisws.ServiceDescription;

    public class CatalogServer extends WebPage {

        // Constructor
        public CatalogServer(){
            // Get Version Info
            ServiceCatalogBindingStub catalog = getCatalogendpointURL );
            String version = catalog.getMessageVersion().toString();
            add(new Label("version", version));
            add(new Label("server", endpointURL));
            
            RepeatingView repeating = new RepeatingView"repeating" );
            add(repeating);
            
            // Get Service Info
            ServiceDescription[] sds = getServiceDesriptioncatalog );
            
            
            for (int i = 0; i < sds.length; i++) {
                
                WebMarkupContainer item = new WebMarkupContainer(repeating.newChildId());
                repeating.add(item);    
                
                ServiceDescription sd = sds[i];
                item.add(new Label("ServiceName", sd.getName()));
                item.add(new Label("ServiceCapabilities", sd.getCapabilities()));
                item.add(new Label("ServiceType", sd.getType()));
                
                final int idx = i;
                item.add(new AttributeModifier("class", true, new AbstractReadOnlyModel()
                {
                    public Object getObject()
                    {
                        return (idx % == 1"even" "odd";
                    }
                }));            
                
            }    
        }
        
        public static ServiceCatalogBindingStub getCatalogString URL ){
            return new ServiceCatalogBindingStubURL );
        }
        
        public static ServiceDescription[] getServiceDesriptionServiceCatalogBindingStub catalog ){
            return catalog.getServiceDescriptions();
        }
        
        private static String endpointURL = "http://server.arcgisonline.com/arcgis/services";
        
    }

    Here we integrate the console based CatalogServer class but instead of printing out to the console we are going to return our output to Wicket components to be rendered by a markup page.  First we print version and server url to Labels which take two parameters.  The first parameter is the component identifier and the second parameter is the message which the label should render.  

    Next we need to iterate through our ServiceDescription and print them out in tabular form.  For this we use a WebMarkupContainer which allows us to dynamically add rows filled with Labels which we will populate with our Service Name, Capabilities, and Service Types.  I added a modifier to render alternating row colors for viewer clarity.  

    CatalogServer.html

    The HTML that defines our CatalogServer functionality has two obvious points to discuss
    1. The wicket component declaration in form of <span wicket:id="server" id="endpointURL">
    2. The message [endpointURL]

    The component declaration is the Wicket identifier and the component identifier message.  The component identifier is the same as the name of the component defined as our WebPage, the CatalogServer class.  The text in between the <span> tags gets removed when the component renders its message.  The content which is rendered is determined by the CatalogServer class.

    web.xml

    In order to deploy our web application we need to make it known to the application server through the standard web.xml file.  

        <filter>
            <filter-name>CatalogServerApplication</filter-name>
            <filter-class>org.apache.wicket.protocol.http.WicketFilter</filter-class>
            <init-param>
              <param-name>applicationClassName</param-name>
              <param-value>com.esri.agsjws.demo.CatalogServerApplication</param-value>
            </init-param>
        </filter>
        <filter-mapping>
            <filter-name>CatalogServerApplication</filter-name>
            <url-pattern>/*</url-pattern>
        </filter-mapping>   

    We map our Application object, CatalogServerApplication, to the Wicket Filter which handles all requests.  We then provide the applicationClassName parameter linked to the fully qualified path to our CatalogServerApplication class to let Wicket know which application is available.  Also take note of the url-mapping to /*.  The Wicket filter will only process requests that are Wicket requests, everything else is ignored.  This ensures that static content will be served appropriately by the container.  

    Deploy

    We can now create a WAR file for deployment to our Java Application Server.  There is no further configuration necessary.  Once deployed, point your browser to the url:  http://<servername>/<warfilename> where <servername> & <warfilename) map appropriatly such as, http://localhost:8080/CatalogServer.

    We have now seen how to take a console based application and easily convert it into a web application using the Wicket Framework.  Integrating the AgsJWS API with Web Application frameworks is an easy way to make efficient use of the API.  The web application described here is the foundation for building a web enabled service catalog to accurately show which services are available from appropriate servers.  I have posted the full web application with source code to the Code Gallery for you to download, deploy, and extend. I encourage you to give it a try for yourself.   

  • Using ArcGIS Java WebServices API

    Since the release of JavaEE 5, Java has become a powerful development platform for Service Oriented Architectures (SOA) as this release significantly enhanced the Web Services capabilities.  Most of these enhanced features were later included in the subsequent release of Java SE 6.  Of course Java supported Web Services through JAX-RPC 1.1 in J2EE 1.4, but the enhancements made in the latest versions of Java Web Services (JWS) API's allow developers to more easily build enterprise class applications with Web Services. 

    Up until and through the release of ArcGIS Server for Java 9.3, Java clients used Apache’s Axis implementation of the SOAP protocol.  Axis has proven to be a stable platform to implement Java Web Services, but in order to take advantage of the enhancements we looked into implementing the updated JWS stack at ArcGIS Server for Java 9.3.1.  Included in this stack is JAX-WS, the Java API for XML-Based Web Services, and JAXB, the Java Architecture for XML Binding.  Ultimately, JAX-WS did not fit our Java Web ADF model efficiently so we customized our own API based on JAXB called the ArcGIS Java WebServices (AgsJWS) API.  AgsJWS uses two XML-based W3C specifications, Web Service Description Language (WSDL) and SOAP to describe and communicate through a services based API.  The AgsJWS stack is provided by the ArcGIS Server for Java runtime and a vast majority of ArcGIS Server’s clients use it to consume the server’s capabilities. Among these clients, the WebADF and REST serve as the foundation for building applications that bring ArcGIS to the web.

    To familiarize ourselves with the API, we will first get a description of services from an ArcGIS Server for Java services directory.  Then we will form a URL from one of the returned services to create a console based app to generate a Map Image. 

    An ArcGIS Server instance maintains a list of services and their properties, such as name, type, and folder.  The Catalog service enables you to traverse and explore the services exposed by an ArcGIS Server instance.  Each instance provides one Catalog service.  An ArcGIS Server instance includes the ArcGIS Server Web services application to handle SOAP requests and responses.  The application is configured for use in a folder named "services".   

     WSDL Syntax to send to the service directory is as follows: 

     http://<WebServer-Hostname>/<ArcGIS-Instance>/services?wsdl

    We will use ArcGIS Online Service Directory with the following WSDL syntax URL:

    http://server.arcgisonline.com/arcgis/services?wsdl

    ArcGIS Server for Java Service Directory

    public class CatalogServer {

        // Constructor
        public CatalogServer(){}
        
        public ServiceCatalogBindingStub getCatalogString URL ){
            return new ServiceCatalogBindingStubURL );
        }
        
        public ServiceDescription[] getDesriptionServiceCatalogBindingStub catalog ){
            return catalog.getServiceDescriptions();
        }
        
        public static void main(String[] args) {
            // Create CatalogServer object
            CatalogServer catalogServer = new CatalogServer();
            // Get the ServiceCatalogBindingStub
            ServiceCatalogBindingStub catalog = catalogServer.getCatalogendpointURL );
            // Print out basic information
            System.out.println("Version: " + catalog.getMessageVersion());
            System.out.println("requiresTokens: " + catalog.requiresTokens());
            System.out.println("TokenServiceURL: " + catalog.getTokenServiceURL());
            
            ServiceDescription[] sds = catalogServer.getDesriptioncatalog );
            for (int i = 0; i < sds.length; i++) {
                ServiceDescription sd = sds[i];
                System.out.println("Service Name: " + sd.getName());
                System.out.println("Service Capabilities: " + sd.getCapabilities());
                System.out.println("Service Type: " + sd.getType());
            }        
        }
        
        private static String endpointURL = 
    http://server.arcgisonline.com/arcgis/services?wsdl;
        
    }

    Running the CatalogServer class will result in the following condensed output to the console: 

    Version: esriArcGISVersion93
    requiresTokens: false
    TokenServiceURL:
    Service Name: ESRI_StreetMap_World_2D
    Service Capabilities: Map
    Service Type: MapServer

    Your output will be much longer as there are many services available from ArcGIS Online.  We can now form a URL based on the Service Name returned to generate a Map Image using the standard ArcGIS Scheme for all SOAP Web Service URL's: 

    http://<hostname>/<arcgis-instance>/services/<folder>/<service-name>/<service-type>

    The URL for the ESRI_StreetMap_World_2D would look like the following:  

    http://server.arcgisonline.com/arcgis/services/ESRI_StreetMap_World_2D/mapserver?wsdl

    The MapServerBindingStub.exportMapImage() method generates a dynamic map image from a data frame (map) in an ArcGIS Server map service.  

    Export Map Image from Service Catalog

    public class ExportMapImage {

        public ExportMapImage(){}
        
        public MapServerBindingStub getMapString URL ){
            return new MapServerBindingStubURL );
        }

        public MapDescription getMapDescriptionMapServerBindingStub map ){
            MapServerInfo mapInfo = map.getServerInfomap.getDefaultMapName() );
            return mapInfo.getDefaultMapDescription();
        }
        
        public ImageDescription getImageDescriptionImageType imgType, ImageDisplay imgDisplay ){
            ImageDescription imgDesc = new ImageDescription();
            imgDesc.setImageTypeimgType );
            imgDesc.setImageDisplayimgDisplay );
            return imgDesc;
        }
        
        public static void main(String[] args) {
            ExportMapImage mapImage = new ExportMapImage();
            MapServerBindingStub map = mapImage.getMapendpointURL );
            MapDescription mapDesc = mapImage.getMapDescriptionmap );
            // Set the image format and return type
            ImageType imgtype = new ImageType();
            imgtype.setImageFormatEsriImageFormat.esriImagePNG );
            imgtype.setImageReturnTypeEsriImageReturnType.esriImageReturnURL );
            // Set the image size and resolution
            ImageDisplay imgdisp = new ImageDisplay();
            imgdisp.setImageHeight500 );
            imgdisp.setImageWidth500 );
            imgdisp.setImageDPI96 );
            // Send image format and size to return an ImageDescritipn
            ImageDescription imgDesc = mapImage.getImageDescriptionimgtype, imgdisp );
            // Export a map image and generate Map Image URL
            MapImage mapImageUrl = map.exportMapImagemapDesc, imgDesc );
            String mapUrl = mapImageUrl.getImageURL();
            // Print out the URL
            System.out.println"Map Image URL = " + mapUrl );
            
        }

        private static String endpointURL = 
    "http://server.arcgisonline.com/arcgis/services/ESRI_StreetMap_World_2D/mapserver?wsdl";
        
    }

    Return Value

    Executing the ExportMapImage class will return a URL to a MapImage referencing the properties of the generated map image set in the class such as image width and height, map extent, map scale, and dpi.

    Using the two classes above you can get a list of services from an ArcGIS Server Services Catalog and generate a map image from the services returned.  This will be the foundation for building web applications using the ArcGIS Java Web Services API.  

    You can find more information about the ArcGIS Server SOAP SDK from the Resource Center and usage of the ArcGIS Java WebServices (AgsJWS) API

     

  • The Java Special Interest Group, UC2009

    This year's event, sponsored by IBM, will feature 2 excellent speakers.

    Susan Port, Platforms Systems Manager for the Municipal Property Assessment Corporation in Ontario, Canada, will be sharing the business problem and her vision of getting property tax assessment information disseminated to all the property owners of Ontario, Canada. Susan and her team were successfull in rolling out their IBM Portal system, which is based on ArcGIS Server for the Java Platform and the Java ADF.

    Interested in Portal/Portlet developement with ESRI technology? Susan's talk will be very informative, and we are grateful to have her join us.

    We will also be honored to have Doug Tidwell of IBM speak to us during this hour. Doug is a well known Cloud Computing expert and has given talks and presentations at many conferences world-wide, including the JavaOne 2009 International Java Developers Conference. He will be sharing the topic: "Using REST and WS-* in the Cloud".

    The abstract for his talk is as follows:

    "REST and WS-* are the two most common ways to access services in the cloud. In this session we'll start with a look at the REST and WS-* APIs for several common cloud services. Next, we'll look at the strengths and weaknesses of each approach and discuss why you would want to use one approach (or both) in different scenarios. We'll wrap up the session with a look at advanced features (security and transactions) and how REST and WS-* implement them. You'll leave with an understanding of these two major architectural styles and how they complement each other. "

    To finish up the hour, attendees will have time to share questions and comments with Senior Java Developers from the Java Team.  ArcGIS Server and Engine for Java are YOUR products. The team is most anxious to hear your feedback on how they are serving your needs and where the Java road is taking the ArcGIS platform.

    FREE LUNCH will be graciously provided by IBM, so come early and share the lunch hour with us!

    Wednesday, July 15th, 12:00 noon in room 6E.

    See you there!

  • Planning for User Conference 2009

    It’s that time of the year again! Our International User Conference 2009 is right around the corner. We hope to meet the familiar faces that join us year after year as well as some new faces this year. If you are not familiar with our User Conference, you can find information at our UC website or if you wish to peek into our UC preparation, check out our UC 2009 photo gallery!

    As much as UC is exciting, informative and the one place to be, it may also be overwhelming, simply because of the sheer number of events, workshops and presentations. Fortunately, the UC events schedule is available online and you can search and plan your agenda ahead. I have compiled a list of Java specific events and presentations at this year’s UC with hopes to ease out your planning. Please follow the links to add the events to your planner.

    Technical Workshop and Demo Theatres

    We offer technical workshops (TW) that will cover a broader aspect of product and development as well as demo theatres (DT) that are more informal presentations on a focused topic. Here is the list:

    Tuesday, July 14th, 2009

    Developing Web Applications with Java (TW)
    10:15 A. M – 11:30 A.M. at Room 6 E

    Securing your ArcGIS Server for the Java platform site (TW)
    1:30 P. M – 2:45 P. M at Room 8

    Building Solutions with ArcGIS Engine and Java (TW)
    3:15 P. M - 4:30 P. M at Room 15 A

    Wednesday, July 15th, 2009

    Server Object Extensions with Java (DT)
    9:00 A. M – 10:00 A. M at Showcase Software Island –Server GIS (Exhibit Hall C)

    ArcGIS Server –Java Web ADF Editing Task Enhancements (DT)
    10:00 A.M – 11:00 A.M at Showcase Software Island –Server GIS (Exhibit Hall C)

    Using ArcGIS Java Web Services Toolkit (DT)
    2:00 P.M – 3:00 P.M at Showcase Software Island –Server GIS (Exhibit Hall C)

    Rapid Application Development using ArcGIS Engine and Java (DT)
    4:00 P.M - 5:00 P.M at Showcase Software Island – Desktop Developer (Exhibit Hall C)

    Thursday, July 16th, 2009

    Building rich applications using ArcGIS Engine and RCP (DT)
    10:00 A.M. -11:00 A.M at Showcase Software Island – Desktop Developer (Exhibit Hall C)

    Using the Eclipse/NetBeans Developer Experience (DT)
    11:00 A.M – 12:00 P.M at Showcase Software Island –Server GIS (Exhibit Hall C)

    Showcase Software Island and SIG

    You can meet and chat with our product engineers and developers all day on Tuesday & Wednesday and Thursday morning at Software Showcase Island –Server GIS for your Server Java related questions and Software Showcase Island –Desktop for ArcObjects/ArcGIS Engine questions in Exhibit Hall C. When you meet us at the Software Island this year please remember to ask us about Server Object Extensions, ArcGIS Java Extensions for ArcGIS Desktop, ArcGIS Web Services API, Editing task enhancements and/or Performance enhancements for Java Web ADF.

    Also please join us for Java Developers Special Interest Group (SIG) meeting at Room 6E on Wednesday, July 15th at 12:00 noon. You can have a sip of Java as well as munch on Lunch provided by SIG sponsor-IBM. Yep, that's a fine way to spend the noon! We will also post a blog with more information on Java Developer SIG later this weekend.

    New at UC this year

    The UC team has planned on new events and showcase islands this year based on your feedback and requests; you may want to check them out too!

    IT Strategies Island (Exhibit Hall C/D): 

    IT Strategies Island is also new this year to discuss and strategize emerging trends in Information Technology (not necessarily GIS-centric). The topics covered will be Cloud Computing, Virtualization, SOA, Software + Services, Open Source, BI/ERP/CRM/ECM, Standards and Interoperability, Return on Investment (ROI) and GIS. 

    What else?

    Finally, the list below is a potpourri of other random links that I thought might interest you.

    The 9.3.1 release has a lot to offer for a Java developer, find us at UC this year, we'll chat more about it.

  • Install Java Web ADF NetBeans Plug-in

    Currently our documentation explains how to install our NetBeans Java Web ADF plug-ins by accessing a URL.  The Java Web ADF SDK includes a local repository for our NetBeans plug-in modules which you can choose to install.  Here is the process for installing from the local Java Web ADF SDK: 

    • Click 'Tools->Plugins' from the main menu of the IDE.
    • In the Plugins window, select the 'Downloaded' tab.

    • From the 'Downloaded' tab, click the 'Add Plugins...' button and browse to the following directory in the Java Web ADF SDK, '<AGSHOME>\java\tools\netbeans_plugin'.  

    • In the list of available plug-ins, check the 'Install' check box associated with your ArcGIS Java ADF plug-in.  This will enable the 'Install' button. 

    • Click 'Install' and the NetBeans IDE installer window appears.

    • Click 'Next' to confirm the ESRI ArcGIS Java ADF for NetBeans plug-in will be installed. 
    • Read and accept the terms of the license agreement displayed and click 'Install'.

    • After the installation completes successfully, click 'Finish' and restart the IDE.



    On restart you should be able to opne the Plug-ins Dialog again and select the 'Installed' tab to see the list of installed plug-ins.  If everything went successfully, you should see the ESRI Java Web ADF plug-ins listed under the 'Web & Java EE' category. 

     

    At this point you are ready to create your first ArcGIS Web Project

  • Blending: where does this happen?

    Ever wonder what "Blending" in the browser or web tier really means with respect to the Java Web ADF?

    The topic is somewhat mysterious. The confusion is understandable, as the discussion hasn't necessarily been brought to the forefront of the Java ADF documentation. The question is often asked: "Where does the application blend the images together from different map resources?".

    This image "fusion" can take place either in the web browser or it can happen in the web server.

    The answer is that if your application contains at least one tiled/cached map resource, along with any others, then this "blending" takes place in the web browser. If a tiled/cached map resource is not present, then all exported images from the ArcGIS Server are assembled at the Web Server level.

    Now, does this really matter? Well, it could have an effect on performance, obviously. If the web server is busy "fusing" away for all concurrent users, application response times could be impacted. If the blending is off-loaded to your user's web browser, the web server is free to do more work.

    I'm hoping this clarifies things a bit!

  • Getting started..?

    When I joined ESRI a couple of years ago, I was a brand new Java developer, fresh out of school - shapefiles and spatial references scared me to death. Today, I have come a long way and my GIS comfort zone has expanded in all directions and dimensions.  For all those new folks sailing in the same boat, thought will share with you some of my old bookmarks.

     

    New to GIS

    If you are a Java developer, new to GIS world,  the one great hurdle to cross is the great ocean of GIS lingo.  You might often have to find definitions for simple, yet critical concepts like a layer, mxd, geodatabase or a feature renderer. The two best locations to get started with GIS basics are the GIS Dictionary and ArcGIS Desktop Help. The GIS dictionary usually provides two line definitions of GIS terminologies whereas, the ArcGIS Desktop help has more elaborate explanation.  In fact, ArcGIS Desktop help is a user help for our ArcGIS Desktop product, but it is the best place I have found to strengthen my GIS fundamentals.  You can browse through the help to catch up on some intro and concepts on geodatabase, feature class, raster, coordinate system and geoprocessing. You may not come across those terminologies right away but it will help you in the long run.

     

    New to ArcGIS Server

     If you are building JSF (Web ADF) applications,  Java Web ADF help is the best place to go. However, if you are totally new to the ArcGIS Server world, I would advise you to play with ArcGIS manager a bit and learn about publishing services, differences between SOC/SOM, GIS resource/ GIS service and how to cache maps. One stop-shop for that is our ArcGIS Server Web help!

     

    New to ArcGIS Engine

    If you are new to ArcGIS Engine, check out our Getting Started section on our ArcGIS Engine help. Along with that, I also strongly recommend our UC 2007 technical session video on Creating Engine Applications with Visual Java Beans. It is a lengthy one hour video, but worth every minute of it.

     

    Newsletters and Video presentations

     ESRI also releases newsletters and magazines that you could subscribe to and they are also available Online. The magazines help you to get in touch with the GIS concepts. After all, it is more interesting to read a magazine than a help topic! So, here is the list :

    • ArcNews is a quarterly issue that covers general news on ESRI technologies and GIS communities around the world.

    • ArcWatch, magazine provides information on ESRI products and applications built on them.

    • Of course, don’t forget to add ArcUser magazine to your list. The last issue of ArcUser has an interesting article: “Top Nine Reasons to use a file Geodatabase

    Also, Check out EDN site as well as Java Resource center Media Gallery for video presentations of our past conferences. The list below is my all time favorites:

    At last, if you have learnt to play with Visual Java Beans or WebControls but stumped by the Automation Exceptions and Java proxies, the following list of topics will help you understand ArcObjects.

    In all, hang in there and believe me, the more you learn it, the more you will love it, Am I not a fine example for that? Also, all those veterans out there, please feel free to comment on the blog and share your bookmarks or reminiscences of your early ArcGIS days. We all know that our new-bies definitely need some pep talk!

More Posts Next page »