|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectorg.apache.openjpa.meta.Extensions
org.apache.openjpa.meta.FieldMetaData
public class FieldMetaData
Metadata for a managed class field.
Nested Class Summary | |
---|---|
static class |
FieldMetaData.MemberProvider
Serializable wrapper around a Method or Field . |
Field Summary | |
---|---|
static int |
MANAGE_NONE
Constant specifying the management level of a field. |
static int |
MANAGE_PERSISTENT
Constant specifying the management level of a field. |
static int |
MANAGE_TRANSACTIONAL
Constant specifying the management level of a field. |
static int |
NULL_DEFAULT
Constant specifying to use a datastore default value to persist null values in object fields. |
static int |
NULL_EXCEPTION
Constant specifying to throw an exception when attempting to persist null values in object fields. |
static int |
NULL_NONE
Constant specifying to use a datastore null to persist null values in object fields. |
static int |
NULL_UNSET
Constant specifying that no null-value was given. |
Fields inherited from class org.apache.openjpa.meta.Extensions |
---|
OPENJPA |
Fields inherited from interface org.apache.openjpa.meta.ValueMetaData |
---|
CASCADE_AUTO, CASCADE_IMMEDIATE, CASCADE_NONE, MAPPED_BY_PK |
Fields inherited from interface org.apache.openjpa.meta.MetaDataModes |
---|
MODE_ALL, MODE_ANN_MAPPING, MODE_MAPPING, MODE_MAPPING_INIT, MODE_META, MODE_NONE, MODE_QUERY |
Fields inherited from interface org.apache.openjpa.lib.xml.Commentable |
---|
EMPTY_COMMENTS |
Constructor Summary | |
---|---|
protected |
FieldMetaData(String name,
Class type,
ClassMetaData owner)
Constructor. |
Method Summary | |
---|---|
ClassMetaData |
addEmbeddedMetaData()
Add embedded metadata for this value. |
protected void |
addExtensionKeys(Collection exts)
Add all the known extension keys to the specified collection; any implementation that utilized new extensions should override this method to include both the known extensions of its superclass as well as its own extension keys. |
void |
backingMember(Member member)
Supply the backing member object; this allows us to utilize parameterized type information if available. |
int |
compareTo(Object other)
|
void |
copy(FieldMetaData field)
Copy state from the given field to this one. |
void |
copy(ValueMetaData vmd)
Copy state from the given value to this one. |
boolean |
equals(Object other)
|
Member |
getBackingMember()
Return the backing member supplied in backingMember(java.lang.reflect.Member) . |
int |
getCascadeAttach()
Cascade behavior for attach operation. |
int |
getCascadeDelete()
Cascade behavior for delete operation. |
int |
getCascadePersist()
Cascade behavior for persist operation. |
int |
getCascadeRefresh()
Cascade behavior for refresh operation. |
String[] |
getComments()
Return comments, or empty array if none. |
String[] |
getCustomFetchGroups()
Gets the name of the custom fetch groups those are associated to this receiver. |
int |
getDeclaredIndex()
The relative index of this persistent/transactional field. |
Class |
getDeclaredType()
Return the declared class of the value. |
int |
getDeclaredTypeCode()
Return the declared type code of the value. |
ClassMetaData |
getDeclaredTypeMetaData()
Return metadata for the value's class, if the type is persistent. |
ClassMetaData |
getDeclaringMetaData()
The declaring class. |
Class |
getDeclaringType()
The declaring class. |
ClassMetaData |
getDefiningMetaData()
The class that defines the metadata for this field. |
ValueMetaData |
getElement()
Metadata about the element value. |
ClassMetaData |
getEmbeddedMetaData()
The embedded class metadata for the value. |
String |
getExternalizer()
The name of this field's externalizer, or null if none. |
Method |
getExternalizerMethod()
The externalizer method. |
Object |
getExternalValue(Object val,
StoreContext ctx)
Convert the given field value to its external value through the provided externalizer, or return the value as-is if no externalizer. |
Map |
getExternalValueMap()
Return the mapping of field values to external values. |
String |
getExternalValues()
Properties string mapping field values to external values. |
String |
getFactory()
The name of this field's factory, or null if none. |
Member |
getFactoryMethod()
The factory method or constructor. |
FieldMetaData |
getFieldMetaData()
Return the owning field for this value. |
Object |
getFieldValue(Object val,
StoreContext ctx)
Return the result of passing the given external value through the factory to get the field value. |
Map |
getFieldValueMap()
Return the mapping of external values to field values. |
String |
getFullName()
Deprecated. Use getFullName(boolean) instead. |
String |
getFullName(boolean embedOwner)
The field name, qualified by the owning class and optionally the embedding owner's name (if any). |
int |
getIndex()
The absolute index of this persistent/transactional field. |
Object |
getInitializer()
The initializer used by the field, or null if none. |
String |
getInverse()
Logical inverse field. |
FieldMetaData[] |
getInverseMetaDatas()
Return all inverses of this field. |
ValueMetaData |
getKey()
Metadata about the key value. |
int |
getListingIndex()
The index in which this field was listed in the metadata. |
String |
getLoadFetchGroup()
The fetch group that is to be loaded when this receiver is loaded, or null if none set. |
int |
getManagement()
Return the management level for the field. |
String |
getMappedBy()
The field that this field shares a mapping with. |
FieldMetaData |
getMappedByMetaData()
The field that this field shares a mapping with. |
String |
getName()
The field name. |
int |
getNullValue()
How the data store should treat null values for this field: NULL_UNSET : no value supplied
NULL_NONE : leave null values as null in the data store
NULL_EXCEPTION : throw an exception if this field is null
at commit
NULL_DEFAULT : use the database default if this field is
null at commit
Defaults to NULL_UNSET . |
Class |
getObjectIdFieldType()
For a primary key field, return the type of the corresponding object id class field. |
int |
getObjectIdFieldTypeCode()
For a primary key field, return the type of the corresponding object id class field. |
String |
getOrderDeclaration()
String declaring the orderings for this field to be applied on load, or null. |
Order[] |
getOrders()
The orderings for this field to be applied on load, or empty array. |
int |
getPrimaryKeyIndex()
The absolute primary key index for this field, or -1 if not a primary key. |
Class |
getProxyType()
The type this field was initialized with, and therefore the type to use for proxies when loading data into this field. |
MetaDataRepository |
getRepository()
The metadata repository. |
int |
getResolve()
Resolve mode for this field. |
Class |
getType()
The value class. |
int |
getTypeCode()
The type code of the value class. |
ClassMetaData |
getTypeMetaData()
The metadata for the value class, if the type is persistent. |
Class |
getTypeOverride()
User-supplied type overriding assumed type based on field. |
int |
getUpdateStrategy()
The strategy to use when updating the field. |
ValueMetaData |
getValue()
MetaData about the field value. |
String |
getValueMappedBy()
The field that this value shares a mapping with. |
FieldMetaData |
getValueMappedByMetaData()
The field that this value shares a mapping with. |
SequenceMetaData |
getValueSequenceMetaData()
Metadata for the value sequence. |
String |
getValueSequenceName()
The value sequence name, or null for none. |
int |
getValueStrategy()
The strategy to use for insert value generation. |
int |
hashCode()
|
boolean |
isDeclaredTypePC()
Whether the type is a persistence capable instance. |
boolean |
isDefaultFetchGroupExplicit()
Whether the default fetch group setting is explicit. |
boolean |
isEmbedded()
This attribute is a hint to the implementation to store this value in the same structure as the class, rather than as a separate datastore structure. |
boolean |
isEmbeddedPC()
Whether this is an embedded persistence capable value. |
boolean |
isExplicit()
Whether this field is explicitly declared in the metadata. |
boolean |
isExternalized()
Whether the field is externalized. |
boolean |
isInDefaultFetchGroup()
Whether this field is in the default fetch group. |
boolean |
isInFetchGroup(String fg)
Whether this field is in the given fetch group. |
boolean |
isLRS()
Whether this field is backed by a large result set. |
boolean |
isMapped()
Return whether this field is mapped to the datastore. |
boolean |
isPrimaryKey()
Whether this is a primary key field. |
boolean |
isSerialized()
Whether this value is serialized when stored. |
boolean |
isStream()
Whether this field is backed by a stream. |
boolean |
isTransient()
Return whether this is a transient field. |
boolean |
isTypePC()
Whether the type is a persistence capable instance. |
boolean |
isUsedInOrderBy()
Check if this field is used by other field as "order by" value. |
boolean |
isValueGenerated()
|
boolean |
isVersion()
Whether this field holds optimistic version information. |
Object |
order(Object val)
Order this field value when it is loaded. |
boolean |
resolve(int mode)
Resolve and validate metadata. |
void |
setCascadeAttach(int attach)
Cascade behavior for attach operation. |
void |
setCascadeDelete(int delete)
Cascade behavior for deletion. |
void |
setCascadePersist(int persist)
Cascade behavior for persist operation. |
void |
setCascadeRefresh(int refresh)
Cascade behavior for refresh operation. |
void |
setComments(String[] comments)
Set comments. |
void |
setDeclaredIndex(int index)
The relative index of this persistent/transactional field. |
void |
setDeclaredType(Class type)
Set the declared class of the value. |
void |
setDeclaredTypeCode(int type)
Set the type code for the value. |
void |
setDeclaringType(Class cls)
The declaring class. |
void |
setDefaultFetchGroupExplicit(boolean explicit)
Whether the default fetch group setting is explicit. |
void |
setEmbedded(boolean embedded)
This attribute is a hint to the implementation to store this value in the same structure as the class, rather than as a separate datastore structure. |
void |
setExplicit(boolean explicit)
Whether this field is explicitly declared in the metadata. |
void |
setExternalizer(String externalizer)
The name of this field's externalizer, or null if none. |
void |
setExternalValues(String values)
Properties string mapping field values to external values. |
void |
setFactory(String factory)
The name of this field's factory, or null if none. |
void |
setInDefaultFetchGroup(boolean dfg)
Whether this field is in the default fetch group. |
void |
setIndex(int index)
The absolute index of this persistent/transactional field. |
void |
setInFetchGroup(String fg,
boolean in)
Set whether this field is in the given fetch group. |
void |
setInitializer(Object initializer)
The initializer used by the field, or null if none. |
void |
setInverse(String inverse)
Logical inverse field. |
void |
setListingIndex(int index)
The index in which this field was listed in the metadata. |
void |
setLoadFetchGroup(String lfg)
The fetch group that is to be loaded when this receiver is loaded, or null if none set. |
void |
setLRS(boolean lrs)
Whether this field is backed by a large result set. |
void |
setManagement(int manage)
Return the management level for the field. |
void |
setMappedBy(String mapped)
The field that this field shares a mapping with. |
void |
setNullValue(int nullValue)
How the data store should treat null values for this field: NULL_UNSET : no value supplied
NULL_NONE : leave null values as null in the data store
NULL_EXCEPTION : throw an exception if this field is null
at commit
NULL_DEFAULT : use the database default if this field is
null at commit
Defaults to NULL_UNSET . |
void |
setOrderDeclaration(String dec)
String declaring the orderings for this field to be applied on load, or null. |
void |
setOrders(Order[] orders)
The orderings for this field to be applied on load. |
void |
setPrimaryKey(boolean primKey)
Whether this is a primary key field. |
void |
setPrimaryKeyIndex(int index)
The absolute primary key index for this field, or -1 if not a primary key. |
void |
setProxyType(Class type)
The type this field was initialized with, and therefore the type to use for proxies when loading data into this field. |
void |
setResolve(int mode)
Resolve mode for this field. |
void |
setResolve(int mode,
boolean on)
Resolve mode for this field. |
void |
setSerialized(boolean serialized)
Whether this value is serialized when stored. |
void |
setStream(boolean stream)
Whether this field is backed by a stream. |
void |
setTransient(boolean trans)
Return whether this is a transient field. |
void |
setType(Class type)
The value class. |
void |
setTypeCode(int code)
The type code of the value class. |
void |
setTypeOverride(Class type)
User-supplied type overriding assumed type based on field. |
void |
setUpdateStrategy(int strategy)
Set the update strategy. |
void |
setUsedInOrderBy(boolean isUsed)
Whether this field is used by other field as "order by" value . |
void |
setUsesImplData(Boolean implData)
Whether this field uses impl data in conjunction with standard field data when acting on a OpenJPAStateManager . |
void |
setUsesIntermediate(boolean intermediate)
Whether this field uses intermediate data when loading/storing information through a OpenJPAStateManager . |
void |
setValueGenerated(boolean generated)
|
void |
setValueMappedBy(String mapped)
The field that this value shares a mapping with. |
void |
setValueSequenceName(String seqName)
The value sequence name, or null for none. |
void |
setValueStrategy(int strategy)
The strategy to use for insert value generation. |
void |
setVersion(boolean version)
Whether this field holds optimistic version information. |
String |
toString()
|
Boolean |
usesImplData()
Whether this field uses impl data in conjunction with standard field data when acting on a OpenJPAStateManager . |
boolean |
usesIntermediate()
Whether this field uses intermediate data when loading/storing information through a OpenJPAStateManager . |
Methods inherited from class java.lang.Object |
---|
clone, finalize, getClass, notify, notifyAll, wait, wait, wait |
Field Detail |
---|
public static final int NULL_UNSET
public static final int NULL_NONE
public static final int NULL_DEFAULT
public static final int NULL_EXCEPTION
public static final int MANAGE_PERSISTENT
public static final int MANAGE_TRANSACTIONAL
public static final int MANAGE_NONE
Constructor Detail |
---|
protected FieldMetaData(String name, Class type, ClassMetaData owner)
name
- the field nametype
- the field typeowner
- the owning class metadataMethod Detail |
---|
public void backingMember(Member member)
public Member getBackingMember()
backingMember(java.lang.reflect.Member)
.
public MetaDataRepository getRepository()
getRepository
in interface MetaDataContext
getRepository
in class Extensions
public ClassMetaData getDefiningMetaData()
public Class getDeclaringType()
public void setDeclaringType(Class cls)
public ClassMetaData getDeclaringMetaData()
public String getName()
public String getFullName()
public String getFullName(boolean embedOwner)
public ValueMetaData getValue()
public ValueMetaData getKey()
public ValueMetaData getElement()
public boolean isMapped()
public Class getProxyType()
public void setProxyType(Class type)
public Object getInitializer()
Comparator
used by a Set
or
a TimeZone
used by a Calendar
.
public void setInitializer(Object initializer)
Comparator
used by a Set
or
a TimeZone
used by a Calendar
.
public boolean isTransient()
public void setTransient(boolean trans)
public int getIndex()
public void setIndex(int index)
public int getDeclaredIndex()
public void setDeclaredIndex(int index)
public int getListingIndex()
-1
if this field was not listed in the metadata.
public void setListingIndex(int index)
-1
if this field was not listed in the metadata.
public int getPrimaryKeyIndex()
public void setPrimaryKeyIndex(int index)
public int getManagement()
MANAGE_PERSISTENT
: the field is persistentMANAGE_TRANSACTIONAL
: the field is transactional but not
persistentMANAGE_NONE
: the field is not managedMANAGE_PERSISTENT
.
public void setManagement(int manage)
MANAGE_PERSISTENT
: the field is persistentMANAGE_TRANSACTIONAL
: the field is transactional but not
persistentMANAGE_NONE
: the field is not managedMANAGE_PERSISTENT
.
public boolean isPrimaryKey()
public void setPrimaryKey(boolean primKey)
public int getObjectIdFieldTypeCode()
public Class getObjectIdFieldType()
public boolean isVersion()
public void setVersion(boolean version)
public boolean isInDefaultFetchGroup()
public void setInDefaultFetchGroup(boolean dfg)
public boolean isDefaultFetchGroupExplicit()
public void setDefaultFetchGroupExplicit(boolean explicit)
public String[] getCustomFetchGroups()
public String getLoadFetchGroup()
public void setLoadFetchGroup(String lfg)
public boolean isInFetchGroup(String fg)
public void setInFetchGroup(String fg, boolean in)
fg
- is the name of a fetch group that must be present in the
class that declared this field or any of its persistent superclasses.public int getNullValue()
NULL_UNSET
: no value suppliedNULL_NONE
: leave null values as null in the data storeNULL_EXCEPTION
: throw an exception if this field is null
at commitNULL_DEFAULT
: use the database default if this field is
null at commitNULL_UNSET
.
public void setNullValue(int nullValue)
NULL_UNSET
: no value suppliedNULL_NONE
: leave null values as null in the data storeNULL_EXCEPTION
: throw an exception if this field is null
at commitNULL_DEFAULT
: use the database default if this field is
null at commitNULL_UNSET
.
public boolean isExplicit()
public void setExplicit(boolean explicit)
public String getMappedBy()
public void setMappedBy(String mapped)
public FieldMetaData getMappedByMetaData()
public String getInverse()
public void setInverse(String inverse)
public FieldMetaData[] getInverseMetaDatas()
public int getValueStrategy()
ValueStrategies
.
public void setValueStrategy(int strategy)
ValueStrategies
.
public String getValueSequenceName()
public void setValueSequenceName(String seqName)
public SequenceMetaData getValueSequenceMetaData()
public int getUpdateStrategy()
public void setUpdateStrategy(int strategy)
public boolean isLRS()
public void setLRS(boolean lrs)
public boolean isStream()
public void setStream(boolean stream)
public boolean usesIntermediate()
OpenJPAStateManager
. Defaults to true.
OpenJPAStateManager.setIntermediate(int,Object)
public void setUsesIntermediate(boolean intermediate)
OpenJPAStateManager
. Defaults to true.
OpenJPAStateManager.setIntermediate(int,Object)
public Boolean usesImplData()
OpenJPAStateManager
.
Defaults to Boolean.TRUE
(non-cachable impl data).
Boolean.FALSE
if this field does not use impl data,
Boolean.TRUE
if this field uses non-cachable impl
data, or null
if this field uses impl data that
should be cached across instancesOpenJPAStateManager.setImplData(int,Object)
public void setUsesImplData(Boolean implData)
OpenJPAStateManager
.
OpenJPAStateManager.setImplData(int,Object)
,
usesImplData()
public Order[] getOrders()
public void setOrders(Order[] orders)
public String getOrderDeclaration()
orderable[ asc|desc][, ...]
#element
is used to denote the value of
the field's elements.
public void setOrderDeclaration(String dec)
orderable[ asc|desc][, ...]
#element
is used to denote the value of
the field's elements.
public Object order(Object val)
public boolean isExternalized()
public Object getExternalValue(Object val, StoreContext ctx)
public Object getFieldValue(Object val, StoreContext ctx)
public String getExternalizer()
public void setExternalizer(String externalizer)
public String getFactory()
public void setFactory(String factory)
public String getExternalValues()
public void setExternalValues(String values)
public Map getExternalValueMap()
public Map getFieldValueMap()
public Method getExternalizerMethod()
public Member getFactoryMethod()
public boolean equals(Object other)
equals
in class Object
public int hashCode()
hashCode
in class Object
public int compareTo(Object other)
public String toString()
toString
in class Object
public int getResolve()
getResolve
in interface ValueMetaData
public void setResolve(int mode)
setResolve
in interface ValueMetaData
public void setResolve(int mode, boolean on)
setResolve
in interface ValueMetaData
public boolean resolve(int mode)
resolve
in interface ValueMetaData
public void copy(FieldMetaData field)
protected void addExtensionKeys(Collection exts)
Extensions
addExtensionKeys
in class Extensions
public String[] getComments()
Commentable
getComments
in interface Commentable
public void setComments(String[] comments)
Commentable
setComments
in interface Commentable
public FieldMetaData getFieldMetaData()
ValueMetaData
getFieldMetaData
in interface ValueMetaData
public Class getType()
ValueMetaData
getType
in interface ValueMetaData
public void setType(Class type)
ValueMetaData
setType
in interface ValueMetaData
public int getTypeCode()
ValueMetaData
getTypeCode
in interface ValueMetaData
public void setTypeCode(int code)
ValueMetaData
setTypeCode
in interface ValueMetaData
public boolean isTypePC()
ValueMetaData
isTypePC
in interface ValueMetaData
public ClassMetaData getTypeMetaData()
ValueMetaData
getTypeMetaData
in interface ValueMetaData
public Class getDeclaredType()
ValueMetaData
ValueMetaData.getType()
if the user indicates
a different type or the value has an externalizer.
getDeclaredType
in interface ValueMetaData
public void setDeclaredType(Class type)
ValueMetaData
setDeclaredType
in interface ValueMetaData
public int getDeclaredTypeCode()
ValueMetaData
ValueMetaData.getTypeCode()
if the user indicates
a different type or the value has an externalizer.
getDeclaredTypeCode
in interface ValueMetaData
public void setDeclaredTypeCode(int type)
ValueMetaData
setDeclaredTypeCode
in interface ValueMetaData
public boolean isDeclaredTypePC()
ValueMetaData
isDeclaredTypePC
in interface ValueMetaData
public ClassMetaData getDeclaredTypeMetaData()
ValueMetaData
getDeclaredTypeMetaData
in interface ValueMetaData
public boolean isEmbedded()
ValueMetaData
isEmbedded
in interface ValueMetaData
public void setEmbedded(boolean embedded)
ValueMetaData
setEmbedded
in interface ValueMetaData
public boolean isEmbeddedPC()
ValueMetaData
isEmbeddedPC
in interface ValueMetaData
public ClassMetaData getEmbeddedMetaData()
ValueMetaData
getEmbeddedMetaData
in interface ValueMetaData
public ClassMetaData addEmbeddedMetaData()
ValueMetaData
addEmbeddedMetaData
in interface ValueMetaData
public int getCascadeDelete()
ValueMetaData
CASCADE_NONE
: No cascades.CASCADE_IMMEDIATE
: Value is deleted immediately when
the owning object is deleted.CASCADE_AUTO
: Value will be deleted on flush
if the owning object is deleted or if the value is removed from the
owning object, and if the value is not assigned to another relation in
the same transaction.
getCascadeDelete
in interface ValueMetaData
public void setCascadeDelete(int delete)
ValueMetaData
setCascadeDelete
in interface ValueMetaData
ValueMetaData.getCascadeDelete()
public int getCascadePersist()
ValueMetaData
CASCADE_NONE
: No cascades. If a transient relation
is held at flush, an error is thrown.CASCADE_IMMEDIATE
: Value is persisted immediately when
the owning object is persisted.CASCADE_AUTO
: Value will be persisted on flush.
getCascadePersist
in interface ValueMetaData
public void setCascadePersist(int persist)
ValueMetaData
setCascadePersist
in interface ValueMetaData
ValueMetaData.getCascadePersist()
public int getCascadeAttach()
ValueMetaData
CASCADE_NONE
: No cascades of attach. Relation
remains detached.CASCADE_IMMEDIATE
: Value is attached immediately.
getCascadeAttach
in interface ValueMetaData
public void setCascadeAttach(int attach)
ValueMetaData
setCascadeAttach
in interface ValueMetaData
ValueMetaData.getCascadeAttach()
public int getCascadeRefresh()
ValueMetaData
CASCADE_NONE
: No cascades of refresh.CASCADE_IMMEDIATE
: Persistent value object is also
refreshed.CASCADE_AUTO
: Value will be refreshed if it is
in the current fetch groups.
getCascadeRefresh
in interface ValueMetaData
public void setCascadeRefresh(int refresh)
ValueMetaData
setCascadeRefresh
in interface ValueMetaData
ValueMetaData.getCascadeRefresh()
public boolean isSerialized()
ValueMetaData
isSerialized
in interface ValueMetaData
public void setSerialized(boolean serialized)
ValueMetaData
setSerialized
in interface ValueMetaData
public String getValueMappedBy()
ValueMetaData
getValueMappedBy
in interface ValueMetaData
public void setValueMappedBy(String mapped)
ValueMetaData
setValueMappedBy
in interface ValueMetaData
public FieldMetaData getValueMappedByMetaData()
ValueMetaData
getValueMappedByMetaData
in interface ValueMetaData
public Class getTypeOverride()
ValueMetaData
getTypeOverride
in interface ValueMetaData
public void setTypeOverride(Class type)
ValueMetaData
setTypeOverride
in interface ValueMetaData
public void copy(ValueMetaData vmd)
ValueMetaData
copy
in interface ValueMetaData
public boolean isUsedInOrderBy()
public void setUsedInOrderBy(boolean isUsed)
public boolean isValueGenerated()
public void setValueGenerated(boolean generated)
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
This documentation is deprecated and will be removed in the next release of WebLogic Server.