##### Using the default implementations of jet.server.api.http.CustomizedServerEnv

The self-contained JReport Enterprise Server provides two implementations of CustomizedServerEnv. They are jet.server.DefaultServerEnv and jet.server.MultipleInstanceServerEnv.

jet.server.DefaultServerEnv

If you use this implementation, you will not need to specify it in the target "web.xml" in the makewar.xml or in ejb-jar.xml, since it can find the customized reporthome from the `<context-param></context-param>` tags of the target "web.xml" or the `<env-entry></env-entry>` tags of web.xml or ejb-jar.xml.

jet.server.MultipleInstanceServerEnv

This implementation is extended from DefaultServerEnv. It enables finding the reporthome not only from `<context-param></context-param>` or `<env-entry></env-entry>` tags, but also from an external file <user.home>/.jreportrc. However, this implementation has three main limitations. They are:

- This implementation must be clearly specified with the `<env-entry></env-entry>` tags in the target "web.xml" in the makewar.xml or in ejb-jar.xml, as follows:

      <env-entry>
      <env-entry-name>jreport.servenv</env-entry-name>
      <env-entry-value>jet.server.MultipleInstanceServerEnv</env-entry-value>
      <env-entry-type>java.lang.String</env-entry-type>
      </env-entry>

- The JReport Enterprise Server must be initialized with JRServerContextListener from a Web module.

  Since in cases of deploying multiple JReport Enterprise Server instances in one Java EE application server without touching the WAR, such as extracting the WAR, setting reporthome and rebuilding the WAR, JReport Enterprise Server has to use ServletContext to generate an ID for every instance. JReport Enterprise Server retrieves javax.servlet.context.tempdir from ServletContext by invoking the getAttribute(String) method, and then uses this value to generate the instance ID.

  For detailed information, see Java Servlet Specification Version 2.3/2.4 SRV.3.7.1 Temporary Working Directories.

- The <user.home>/.jreportrc file must be created by JReport Enterprise Server. You can only edit the file to change the reporthome after the JReport Enterprise Server initialization.

  Since the instance ID is generated based on a hash code retrieved from javax.servlet.context.tempdir, it cannot be pre-assigned, and is therefore impossible for you to create the <user.home>/.jreportrc file. However, once the file has been created, you can edit it to change the reporthome for each instance. The RC file can hold multiple records. The record format should be as follows:

  `jreport.rpthome.<instanceID>=the-instance-report-home`

  The instanceID is created by JReport Enterprise Server during its first initializing. It is a string of HEX encoded hash value. For example:

  `jreport.rpthome.12345678=/home/user1/.jreport/instance.12345678`

  `jreport.rpthome.12345abc=/home/user1/.jreport/instance.12345abc`

  If JReport Enterprise Server cannot get the reporthome from CustomizedServerEnv, it will create a default reporthome in `<user.home>/.jreport/default`.

The following is an example of specifying reporthomes when deploying multiple server instances using jet.server.MultipleInstanceServerEnv:

Example: Specifying reporthomes when deploying multiple server instances

JReport Enterprise Server provides an internally implemented class of the jet.server.api.http.CustomizedServerEnv interface - jet.server.MultipleInstanceServerEnv which supports multiple JReport Enterprise Server instances in one Java EE application server. The reporthome of each instance can be assigned by the class automatically. To do this, follow the steps below:

1. In the file makewar.xml, use the `<env-entry></env-entry>` tags to specify jet.server.MultipleInstanceServerEnv in the target "web.xml". For example:

       <env-entry>
       <env-entry-name>jreport.servenv</env-entry-name>
       <env-entry-value>jet.server.MultipleInstanceServerEnv</env-entry-value>
       <env-entry-type>java.lang.String</env-entry-type>
       </env-entry>

2. Since different JReport instances cannot access the same JReport Enterprise Server system database at the same time, you will need to create a dbconfig.xml file to store the connection information, and put it in jrenv.jar in `workspace\bin` (you can find the jrenv.jar file after extracting jreport.war) for each JReport Enterprise Server WAR/EAR.

   For detailed information about modifying the dbconfig.xml, see Configuring the server database.

3. When the JReport Enterprise Server WAR/EAR has been deployed, JReport will create a file .jreportrc in `<user.home>`, and each JReport instance will read its reporthome from this file. This file must be created by JReport Enterprise Server, however, you can edit it in order to change the reporthome after it has been created.