The present invention is in the field of electronic messaging and, in particular, relates to interfacing enterprise-based electronic messaging systems to client devices, such as wireless client devices.
Providing users of wireless client devices access to enterprise messaging information such as e-mail, contacts and calendaring information (operated by an enterprise messaging server, such as Microsoft Exchange) is known. In particular, conventionally, one or more servers (more generally, a “service”) are provided (typically behind the enterprise firewall) to interact with the enterprise messaging server. More specifically, the service (typically known as an “enterprise server”) interacts with the enterprise messaging server to observe messaging system events and to synchronize those messaging system events (e.g., activities with respect to e-mail, such as receipt of a new e-mail or deletion of an e-mail; activities with respect to contacts, such as adding or deleting a contact, or modifying a contact; and activities with respect to calendar entries, such as adding or deleting a calendar entry, or modifying a calendar entry) between client devices (e.g., wireless client devices) or to the enterprise messaging server, as appropriate.
In a conventional architecture, wireless carriers set up a virtual private network connection between a network operations center (NOC), with which the enterprise server communicates, and wireless mobile client devices. The NOC synchronizes messaging events between the enterprise server and the mobile clients, or holds messaging events destined for the mobile client devices when the mobile client devices are out of coverage area, to be sent when the mobile client devices are again connected.
A system is configured to interface a plurality of electronic messaging systems to a plurality of client devices connectable wirelessly to the system. At least some of the electronic messaging systems process messaging system events according to a first particular messaging system format that is different from a second particular messaging system format according to which others of the electronic messaging systems process messaging system events.
The system includes a messaging system adaptor configured to receive the messaging system events having the first and second particular messaging system formats and to process the messaging system events at least to convert the messaging system events from the first and second particular messaging system formats into corresponding messaging system events having a normalized format. A relay engine is configured to relay the normalized-format messaging system events with client device messaging events communicated wirelessly between the client devices and the system.
The operation of a conventional network operations center (NOC) is typically not configurable or otherwise controllable by the enterprises that subscribe to them. Rather, the NOC is typically operated and controlled by parties other than the enterprises themselves. As a result, for example, the NOC operator can set the price for its use. Furthermore, an enterprise synchronization server typically cannot handle electronic messages (for example, e-mails, calendar entries and contacts) in more than one format at a time. That is, the enterprise synchronization server is typically configured to handle messages in one format or another format, but not more than one.
It is desirable in some instances to operate a wireless messaging system without a NOC. Furthermore, there are some enterprises (typically, but not always, large enterprises, with many electronic messaging users) that have electronic messaging systems that operate in multiple formats. It would be desirable to provide a relay infrastructure to support such multiple messaging formats.
For example, the specific example of an enterprise relay service 302 shown in
The normalized messaging events 306 are provided to a relay engine 308 (which may be, for example, a synchronization engine) of the enterprise relay service 302. The relay engine 308 includes functionality for relaying (e.g., including synchronizing) messaging events between the enterprise messaging systems 301 and the e-mail clients 303. In one example, the normalized messaging events 306 are provided to the relay engine 308 using a standard JavaMail interface 307.
In general, the relay engine 308 relays the messaging system events among the enterprise messaging systems 301 and the e-mail clients 303. As part of the relay operation, the relay engine 308 provides messaging system events out to the e-mail clients 303. In one example, similar to the adaptor 304, the normalized messaging system events are provided to the e-mail clients 303 via an adaptor 312. The adaptor 312 converts the messaging system events having the normalized format, in which the relay engine 308 operates, into messaging events having messaging formats of the e-mail clients 303. For example, the messaging system events may be used by the e-mail clients 303 may include, as shown in
As will be discussed later, in some examples, information to determine whether to perform a synchronization may be within the enterprise relay server 302, while in other examples, the information to actually perform the synchronization (which may depend on the particular synchronization, but typically where a “payload,” such as the body of an e-mail, may be needed to perform the synchronization) is retrieved from the enterprise messaging system 301 or from the client device 303.
The Server Protocol Engines 353interface to multiple enterprise messaging services 355, which may be operating according to various formats such as, for example, MAPI (Messaging Application Programming Interface), which is a proprietary messaging format by Microsoft; IMAP4revl; GWOAPI (GroupWise Object Application Programming Interface), which is a proprietary messaging format from Novell; and SyncML. The Server Protocol Engines 353 operate to transform the original messaging events from the mobile device clients 350 into a specific format appropriate for the particular enterprise messaging system 355 and transforming responses thereto from the enterprise messaging system 355 to a format to be returned to the client protocol engine 352 and subsequently to the originating mobile device clients 350.
Both the Client Protocol Engine 352 and Server Protocol Engine 353 may utilize a data store 354 to persist static data (e.g., configuration data for the Client Protocol Engine 352 or for the Server Protocol Engine 353) but, in one example, neither the Client Protocol Engine 352 nor the Server Protocol Engine 353 store messaging event data or responses in the data store354.
We now discuss more particularly some examples of operational details of the enterprise relay server 404.
Turning now to
Referring to
At step 508, for each folder of interest in the client account mailbox, events bound for the server are flushed. For example, such events may be to alter data associated with messages in a destination mailbox on the server. In addition, the folder is polled according to heuristics, such as the heuristics shown in
At step 510, it is determined if there are pending events on the client side. If so, while connected, at step 512, processing waits for the client to process the pending events. At step 514, it is determined if more connections are needed (i.e., by other client messaging devices). If so, then the connection is closed at step 516. In either case, step 518 indicates that the current synchronization operation is complete.
We now discuss the heuristics shown in
The highest priority is to check for new messages. This is denoted by reference numeral 552. At reference numeral 552, for occurrence P 524, there is a check for new messages, which is based on which messages were seen during the last occurrence (i.e., Pi-1) of the polling heuristics. At reference numeral 554, there is a check for changes to the “most recent” messages. The “most recent” messages are the most recent of those messages that have been seen during previous occurrences of the heuristics polling.
At step 556, a rolling subset of the “older messages” is polled for changes. The “older messages” are those messages other than the “most recent” messages and the new messages. Only a subset of the older messages is checked each time through step 508 (
Similar in some aspects to
More particularly, the protocol servers 602 function to translate, where appropriate, between a delivery/synchronization protocol of the messaging client device 608 and the delivery/synchronization protocol of the servers 604 of the enterprise messaging service. In one example, the protocol servers 602 operate merely as a pass-through for IMAP-protocol event messages, while acting as a translator for PIMAP-protocol event messages.
Turning now to the web servers 606, these function to allow the messaging client device 608 to communicate (or, at least, appear to communicate) with the servers 604 via HTTP or HTTPS rather than, for example, direct TCP. More particularly, still referring to
The protocol server 602a provides a TCP unicast of an RMI (remote method invocation) stub for a JavaMail session 618. An RMI object communication 620 results. The RMI object communication 620 is with smart proxies, in that not all method calls result in an RMI invocation. That is, some of the data of the communication may be cached by objects running in the virtual machine of the web server 606a.
Thus, for PIMAP clients, the IMAP4 service 604 appears to be a PIMAP service, since the protocol server 602a handles communication with the PIMAP clients according to the PIMAP protocol.
An attribute extractor 708 of the message signature generator 704 extracts, as appropriate, attributes of the incoming messages 702. In one example, for an e-mail message, the extracted attributes are subject, to address, from address and sent date. In one example, for a contact message, the extracted attributes are thread-index, subject and sent date. In one example, for a calendar message, the extracted attributes include a unique identifier provided by a calendaring program.
An attribute processor 710 processes the extracted attributes to generate a message signature 706. The generated message signature is maintained (for example, stored into a database) for use in relay processing.
In some examples, the generated message signatures are unique. However, in other examples, the message signatures may not be unique. Thus, in this case, if message signatures are the same, it is still possible that the messages from which the message signatures were generated are unique, and further duplicate checking may be applied. Signatures are useful in the absence of a proper unique id.
In one example of generating message signatures, for email message events, an EmailSyncEvent is constructed and a unique id is assigned to the event. This unique id is retrieved either based on the message signature or provider id and is extracted from a local table. The relay software is then able to suppress the event by verifying (e.g., by directly inspecting the extracted attributes) if this EmailSyncEvent has already been through the system and synchronized to.
In another example, for a calendar message event, the unique id is retrieved from the local table based off the message signature (ical uid). The unique id is then used to retrieve the calendar information stored in the database. The calendar information in the current message is then compared to the stored calendar information for any changes.
In another example, for a contact message event, the corresponding personal contact is located based on an IMAP notification, which includes an RFC822 Message-ID, Thread-Index and Subject. A vCard is built from the located personal contact, and the contact's MAPI PR_ENTRY_ID property is determined. Using the entry ID, any previous reference to the vCard in the database tables is located and the previously experienced vCard is found. If the two vCards are equivalent, then there is a duplicate and the new one can be ignored; otherwise the two tables are updated with the new vCard. In this example, the message signature is not generated, since the available message header items from which to generate a message signature do not vary when the contact is modified.
In particular,
At step 808, the expanded occurrences are filtered according to filtering rules. The filtering rules apply “exceptions” to the expansion of step 804. For example, the expansion rule may be “every day,” whereas the exception may be “except Saturday and Sunday.” At step 806, the entry would be expanded into all days whereas, at step 808, the list of “all days” would be filtered to remove Saturdays and Sundays. More detail of an example of step 808 is illustrated in
Then, at step 810, the filtered occurrences are then subject to a “set position” rule. In particular, the “set position” rule removes from the expanded set of occurrences all occurrences that are not within a particular time period. More detail of an example of step 810 is illustrated in
At step 812, the output of step 810 is added to the generated occurrences and, at step 814, processing increments to the next current occurrence (if any), according to the frequency of the rule being parsed. If the end of the recurrence has not been reached, then processing returns to step 806 for the next current occurrence. Recurrence rule parsing processing ends at step 818.
In one example, the recurrence ends when a particular condition is met. For example, the conditions that may be met include:
An UNTIL date is specified in the recurrence and the last generated occurrence meets or exceeds this date.
A COUNT value is specified in the recurrence and the number of occurrences meets or exceeds this date.
An END BOUNDARY date has been specified for the algorithm and the last generated occurrence meets or exceeds this date.
We now discuss more details of the
Turning now to
Otherwise, at step 828, it is determined if there is a recurrence mapping rule for the resolution “R.” In
The box surrounding steps 834 and steps 836 indicates that, for example, the processing of steps 834 and 836 may occur for in a loop, with each pass through the loop being for a different Byxxx value (e.g., the values may be in a list, such as a comma-delimited list). If it is determined that there is a recurrence mapping rule for the resolution “R” (step 828), then at step 834, a portion of the occurrence to be expanded is updated with a value from the recurrence mapping rule for the recurrence resolution “R.” At step 836, similar to step 830, the results of the expansion for the occurrence and the next smaller “R” are added to the set of expanded occurrences. At step 836, processing is finished. In step 836, similar to step 830, for example, determining the results for the next smaller “R” may involve recursively invoking the
As discussed above,
Turning now to
Otherwise, it is determined at step 862 if a BYXXX property exists for the current resolution. If there is no such property, then it is implicit that there are no occurrences to filter for the resolution (R) and processing continues at step 864. At step 864, the resolution (R) is set to the next smallest resolution and processing returns to step 856.
If, at step 862, if there is a BYXXX property for the current resolution, the processing continues to step 866 and the processing for the following steps is repeated for each occurrence in a list of occurrences. At otherwise, processing continues to steps 864 and 856. At step 866, if the portion of the occurrence does not match the property for the current resolution, then the occurrences is removed from the list of occurrences (step 868) and processing continues to step 860.
After the
We now discuss, with reference to
For example, the recurrence rule may specify an UNTIL date, and there may be occurrences that meet or exceed this date. The occurrences that meet or exceed the UNTIL date would be filtered out. As another example, a COUNT value may be specified and the number of occurrences meets or exceeds the COUNT value. Thus, occurrences may be filtered out to meet the COUNT value condition. As yet another example, an end boundary data may be specified and the last generated occurrences meets or exceeds this date.
In a particular implementation, the BYSETPOS provides indices into the previously generated occurrences (per iteration) to act as a filter (e.g. BYSETPOS=−1,1 means take all occurrences generated by the rest of the rule and filter all but the first and last timewise). The BYXXX rules refer to all other rule parts that start with “BY” (e.g. BYMONTH, BYDAY, BYHOUR, etc.) These all act as either filters or expanders depending on the frequency of the rule (e.g. in “RRULE:FREQ=WEEKLY;BYMONTH=1,2;BYDAY=MO,WE,FR”, the BYDAY rule will generate extra occurrences (to be filtered out) per each iteration of the rule (i.e. each week), while the BYMONTH rule will filter all occurrences in an iteration if the month is not January or February).
Another detail of the operation of the enterprise relay service, and which is more generally applicable, is a garbage collection technique. More specifically, using the technique, garbage collection for an object occurs in the same thread as the thread that created the object. This avoids the requirement to wait until the garbage collector thread to reclaim these resources.
At step 408, the object created at step 402 is wrapped in a phantom reference associated with the thread's reference queue. Step 410 indicates waiting for the thread to finish some work. At step 412, the reference queue is polled for the enqueued phantom reference. At step 414, it is determined if the polled reference queue is empty. If the reference queue is empty, then execution continues by returning to step 410.
Otherwise, if the reference queue is not empty, execution continues at step 416, where cleanup is performed and the phantom reference is cleared. At step 418, the object created at step 402 is destroyed.
This application claims the benefit of priority under 35 USC §119(e) to U.S. Provisional Patent Application No.: 60/708,076, entitled SYNCHRONIZATION OF ENTERPRISE MESSAGING SYSTEM EVENTS TO CLIENT DEVICES, filed on Aug. 12, 2005; U.S. Provisional Patent Application No.: 60/722,927, entitled SYNCHRONIZATION OF ENTERPRISE MESSAGING SYSTEM EVENTS TO CLIENT DEVICES, filed on Sep. 29, 2005; U.S. Provisional Patent Application No.: 60/597,959, entitled SYNCHRONIZATION OF ENTERPRISE MESSAGING SYSTEM EVENTS TO CLIENT DEVICES, filed on Dec. 28, 2005; and U.S. Provisional Patent Application No.: 60/781,215, entitled SYNCHRONIZATION OF ENTERPRISE MESSAGING SYSTEM EVENTS TO CLIENT DEVICES, filed on Mar. 10, 2006, all of which are incorporated herein by reference in their entirety.
Number | Date | Country | |
---|---|---|---|
60708076 | Aug 2005 | US | |
60722927 | Sep 2005 | US | |
60597959 | Dec 2005 | US | |
60781215 | Mar 2006 | US |