com.smartgwt.client.docs.serverds

## Class ServerObject

- java.lang.Object
- - com.smartgwt.client.docs.serverds.ServerObject

-     public class ServerObject
      extends java.lang.Object

  The ServerObject tells the ISC server how to find or create a server-side object involved in `DMI` (Direct Method Invocation).

  This class is not meant to be created and used, it is actually documentation of settings allowed in a DataSource descriptor (.ds.xml file), for use with Smart GWT Pro Edition and above. See `com.smartgwt.client.docs.serverds` for how to use this documentation.

  A ServerObject declaration appears in the XML definition of a `DataSource` (for responding to `DSRequest`s) or in an Application configuration file (.app.xml) for responding to `RPCRequest`s.

  NOTE: Please take note of the points made in `this discussion` of caching and thread-safety issues in server-side DataSources.

- - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `java.lang.String` | `attributeName` Specifies the name of the attribute by which to look up the DMI instance.
    `java.lang.String` | `attributeScope` Specifies the scope in which the DMI instance is to be looked up.
    `java.lang.String` | `bean` For use when `lookupStyle` is `"spring"` or `"cdi"`, id (name) of the bean to ask Spring (CDI) to create.
    `java.lang.String` | `className` Specifies the fully-qualified class name that provides the server-side endpoint of the DMI (`lookupStyle`:"new") or the class name of the factory that produces the DMI instance (`lookupStyle`:"factory").
    `java.lang.Boolean` | `crudOnly` For a ServerObject defined at the `DataSource level`, by default we only allow it to intercept standard CRUD operations (ie, ordinary fetches, adds, updates and removes).
    `java.lang.Boolean` | `dropExtraFields` By default, for DMI DSResponses, DSResponse.data is filtered on the server to just the set of fields defined on the DataSource.
    `java.lang.String` | `ID` You can optionally specify an ID on the ServerObject config block - in which case you can use that value as the "className" argument when calling DMI.call().
    `java.lang.String` | `lookupStyle` Specifies the mechanism for locating the class instance on which to invoke the method.
    `java.lang.String` | `methodName` Specifies the name of the method to call for operations using this ServerObject.
    `java.lang.String` | `targetXPath` If set, the Smart GWT server will use JXPath to call your server code.
    `java.lang.String[]` | `visibleMethods` When the `ServerObject` appears in a .app.xml file (for RPC DMI), this property specifies the list of methods on the ServerObject that are callable from the client.

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `ServerObject()`

  - ### Method Summary

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

- - ### Field Detail

    - #### bean

          public java.lang.String bean

      For use when `lookupStyle` is `"spring"` or `"cdi"`, id (name) of the bean to ask Spring (CDI) to create.

      Default value is null

    - #### dropExtraFields

          public java.lang.Boolean dropExtraFields

      By default, for DMI DSResponses, DSResponse.data is filtered on the server to just the set of fields defined on the DataSource. This behavior can be overridden in several ways - see the overview in `DMI` for details. The value of this attribute overrides `DataSource.dropExtraFields`.

      Default value is null

    - #### methodName

          public java.lang.String methodName

      Specifies the name of the method to call for operations using this ServerObject. This is a DataSource-level default; you can override it for individual operations either by specifying the `OperationBinding.serverMethod` attribute, or by declaring an operation-level serverObject that specifies a different methodName (if you specify both an operationBinding.serverMethod and an operation-level serverObject.methodName, the latter takes precedence)

      Default value is null

    - #### attributeName

          public java.lang.String attributeName

      Specifies the name of the attribute by which to look up the DMI instance. This attribute is consulted only when the value of `lookupStyle` is `"attribute"`.

      Default value is null

      See Also:
        `attributeScope`, `lookupStyle`

    - #### className

          public java.lang.String className

      Specifies the fully-qualified class name that provides the server-side endpoint of the DMI (`lookupStyle`:"new") or the class name of the factory that produces the DMI instance (`lookupStyle`:"factory").

      This is one of the values that you need to pass to DMI.call() to invoke the DMI from the client.

      The value of this attribute is used for `"new"` and `"factory"` values of `lookupStyle`.

      It is also used for `"cdi"` value of `lookupStyle`, to provide class name of the bean to ask CDI to create.

      Default value is null

      See Also:
        `lookupStyle`, `ID`

    - #### lookupStyle

          public java.lang.String lookupStyle

      Specifies the mechanism for locating the class instance on which to invoke the method. Valid values are as follows:
      - "spring": For use with the Spring framework. `bean` contains the name of the bean to invoke. Which application context is used can be configured via web.xml (see the example web.xml in the SDK). See also `ServerInit` for special concerns with framework initialization when using Spring.
      - "cdi": For use with CDI (Contexts and Dependency Injection). Use `bean` to configure the name of the bean to invoke or, alternatively, `className` to configure its class name.
      - "new": A new instance of the class specified by `className` will be created and the DMI method will be invoked on that instance (unless the specified method is static, in which case no instance is created, but the class specified by `className` is still used).
      - "factory": A custom factory provides the class instance on which the DMI method is to be invoked. In this case, `className` specifies the className of the factory that will provide the instance on which the DMI method is to be invoked. The class specified by `className` must provide exactly one method named `create` that must return the class instance on which you wish the DMI method to be invoked. Like the DMI methods, the `create` method can request a standard set of values as arguments. See `DMI` for a list of available values.
      - "attribute": The instance on which the DMI method is to be invoked is looked up in the scope defined by `attributeScope` via the attribute name specified in `attributeName`.

      Default value is "new"

      See Also:
        `className`, `bean`, `attributeName`, `attributeScope`

    - #### visibleMethods

          public java.lang.String[] visibleMethods

      When the `ServerObject` appears in a .app.xml file (for RPC DMI), this property specifies the list of methods on the ServerObject that are callable from the client. See the builtin.app.xml file in the /shared/app directory of the SDK for an example of a visibleMethods declaration block.

      Default value is null

    - #### attributeScope

          public java.lang.String attributeScope

      Specifies the scope in which the DMI instance is to be looked up. Valid values are: `"request"`, `"session"`, and `"application"`. If `attributeScope` is left out of the `ServerObject` definition, then all scopes are searched in the order in which they are listed above.

      This attribute is consulted only when the value of `lookupStyle` is `"attribute"`.

      Default value is null

      See Also:
        `attributeName`, `lookupStyle`

    - #### ID

          public java.lang.String ID

      You can optionally specify an ID on the ServerObject config block - in which case you can use that value as the "className" argument when calling DMI.call(). This allows you to hide the name of the server-side class used as the factory or implementer of the DMI from the browser as a security precaution.

      Default value is null

      See Also:
        `className`

    - #### targetXPath

          public java.lang.String targetXPath

      If set, the Smart GWT server will use JXPath to call your server code. The `JXPathContext` (start point) will be the object arrived at by applying the `lookupStyle` and related ServerObject properties. The intention of this property is to allow easier access to your existing Java objects and reduce the need to write Smart GWT-specific server code.

      Default value is null

    - #### crudOnly

          public java.lang.Boolean crudOnly

      For a ServerObject defined at the `DataSource level`, by default we only allow it to intercept standard CRUD operations (ie, ordinary fetches, adds, updates and removes). To allow the ServerObject to intercept other types of operation - custom operations, validations, etc - set this property to false. Note that ServerObjects declared at the `OperationBinding level` always intercept that operation, whatever its type, and this property has no effect.

      NOTE: If you are intercepting operations on the server because you wish to inspect them before deciding whether to process them with bespoke code or allow them to proceed with normal processing, the way to invoke normal processing without causing any interference is:

               return dsRequest.execute();

      Default value is null

  - ### Constructor Detail

    - #### ServerObject

          public ServerObject()