|
|||||||||||
PREV PACKAGE NEXT PACKAGE | FRAMES NO FRAMES |
The federation service (wt.federation package) provides functionality to create and manage proxy objects of remote systems and perform utility functions supporting the federation system.
See:
Description
Interface Summary | |
Federated | Supported API: true Extendable: false |
FederatedLinkHolder | Supported API: false Extendable: false |
FederatedService | Defines the essential interface for all classes implementing Federated services that provide access to non-local objects. |
FederationService | FederationService provides client invokable methods to federation services. |
FederationServiceSvr | FederationServiceSvr provides methods to federation services that can only be invoked from classes running on the server. |
QuerySpecTranslator | This interface defines the attributes and methods required of a class that implements translation of wt.query.QuerySpec objects to strings representing search filters in foreign systems, especially systems accessed via Info*Engine. |
RemotelyLinkable | Supported API: false Extendable: false |
Class Summary | |
BasicEventDelegate | Supported API: false Extendable: false |
CachedAttributeTable | Supported API: false Extendable: false |
CachedDirectoryEntry | Supported API: false Extendable: false |
CachedSearchResults | Supported API: false Extendable: false |
ConfigExaminer | This class examines the Federation configuration and reports what it discovers. |
CreateProxyProcessor | Presents a form allowing a user to define attribute values for a proxy object and to request that the object be made persistent. |
DelegateUtilities | DelegateUtilities provides class methods to retrieve delegates related information (e.g repository, repository type and Windchill type associated to the delegate ). |
DirectoryAttributeHolder | Supported API: true Extendable: false |
DirectoryInputStream | DirectoryInputStream reads entries from directory services and translates them to Windchill objects. |
DirectoryQuerySpecTranslator | This class translates Windchill QuerySpec objects to directory search filter strings. |
DirectoryTranslationTable |
Use the newDirectoryTranslationTable static factory method(s),
not the DirectoryTranslationTable constructor, to construct
instances of this class. |
DoFederationSearchProcessor | Presents the federation search results in the HTML Local Search UI. |
FederatedDirectoryService | This class implements a Federated interface to directory services such as LDAP-accessible directory services. |
FederatedDirectoryService.ContextCloser | |
FederatedDirectoryService.ContextKey | |
FederatedHttpBodyPart | Defines and manages MIME body parts contained in HTTP request and response messages. |
FederatedHttpConnection | Creates HTTP connections to remote systems, sends requests, and returns the responses received. |
FederatedHttpInputStream | Supported API: true Extendable: false |
FederatedHttpMessage | Represents an HTTP protocol request or response message. |
FederatedHttpMultipart | Represents a MIME multipart object contained in an HTTP request or response message. |
FederatedHttpResponse | Parses and provides access to the elements of an HTTP protocol response. |
FederatedInfoEngineService | This class implements FederatedService objects that use Info*Engine to access remote systems and data sources. |
FederatedLink |
Use the newFederatedLink static factory method(s), not the
FederatedLink constructor, to construct instances of this
class. |
FederatedLinkMigrator | |
FederatedLinkMigrator.Server | |
FederationHelper | FederationHelper provides client invokable methods to federation services. |
FederationSearchProcessor | Presents the federation search criteria in the HTML Remote Search UI. |
FederationServerHelper | FederationServerHelper provides server invokable methods to federation services. |
FederationServiceFwd | FederationService provides client invokable methods to federation services. |
FederationStartup | FederationStartup is instantiated at Windchill startup time, usually by a method server. |
FederationTables | |
FederationUtilities | FederationUtilities provides class methods that perform utility functions supporting the Federation subsystem. |
IESQLQuerySpecTranslator | This class translates Windchill QuerySpec objects to SQL-like search filter strings for Info*Engine. |
InfoEngineInputStream | InfoEngineInputStream uses HTTP to interface with Info*Engine to read objects from remote information sources, and it translates them to Windchill objects. |
InfoEngineTranslationTable | Generate a unique identifier for a remote object given a key and a set of name/value substitutions. |
LightweightProxy |
Use the newLightweightProxy static factory method(s), not
the LightweightProxy constructor, to construct instances
of this class. |
MasterIteration |
Use the newMasterIteration static factory method(s), not
the MasterIteration constructor, to construct instances
of this class. |
NewIterationEventDelegate | Supported API: false Extendable: false |
ObjectAttributeTable | ObjectAttributeTable generates a Hashtable of objects representing the attributes of an ObjectMappable object. |
ObjectOutputTable | ObjectOutputTable generates a Hashtable of objects where each object is the string representation of a property of an ObjectMappable object. |
PostCheckoutEventDelegate | Supported API: false Extendable: false |
PostCopyEventDelegate | Supported API: false Extendable: false |
PostModifyEventDelegate | Supported API: false Extendable: false |
PostStoreEventDelegate | Supported API: false Extendable: false |
PreCheckoutEventDelegate | Supported API: false Extendable: false |
PreDeleteEventDelegate | Supported API: false Extendable: false |
PreModifyEventDelegate | Supported API: false Extendable: false |
PrepareForModificationEventDelegate | Supported API: false Extendable: false |
PreStoreEventDelegate | Supported API: false Extendable: false |
PropagateEventDelegate | Supported API: false Extendable: false |
ProxyDocument |
Use the newProxyDocument static factory method(s), not the
ProxyDocument constructor, to construct instances of this
class. |
ProxyDocumentMaster |
Use the newProxyDocumentMaster static factory method(s),
not the ProxyDocumentMaster constructor, to construct instances
of this class. |
ProxyGroup | Proxy group of users. |
ProxyPartMaster |
Use the newProxyPartMaster static factory method(s), not
the ProxyPartMaster constructor, to construct instances
of this class. |
ProxyURLData |
Use the newProxyURLData static factory method(s), not the
ProxyURLData constructor, to construct instances of this
class. |
ProxyUser |
Use the newProxyUser static factory method(s), not the ProxyUser
constructor, to construct instances of this class. |
Redirector | This class provides the HTTP interface for Federated RMI. |
RPCHelper | |
SaveProxyProcessor | Makes a proxy object persistent and presents the persisted attributes in the HTML UI. |
SAXElementHandler | Event handler class for SAX. |
SearchAttributeList | SearchAttributeList There should be no strings that need localizing in here. |
ServiceIdentifier |
Use the newServiceIdentifier static factory method(s), not
the ServiceIdentifier constructor, to construct instances
of this class. |
StandardFederationService | Standard implementation of the federation service interfaces. |
StandardFederationService.RMIStreamHandler | |
upgrade3to4 |
Exception Summary | |
FederationServicesException | Supported API: false Extendable: false |
The federation service (wt.federation package) provides functionality to create and manage proxy objects of remote systems and perform utility functions supporting the federation system.
The federation service is designed to be a plug and play
component in the Windchill system. The federation service is intended to be
used for both client and server development. Business objects, asserted as
being federated in the object model, are assigned a remote
system information (serviceID) at creation and can be promoted throughout the
defined phases of an associated federation. The proxy source information is
held in the serviceID cookie, but instead operate on
it through the federation service’s external interface. The following figure contains a representation of the object model for
federation service.
The Federated interface provides an abstraction of a plug-and-play component. The intent is that, in an object model, a business object would assert that is Federated by implementing the Federated interface. With this assertion, the business object can then be created as a proxy of remote object.
The FederationHelper provides an abstraction as the API to the FederationService. The API’s method can be categorized as either local or remote invocations. The local methods are getters of information, typically from cookies that are held in the business object. The remote methods serve as wrappers to a service that promotes server-side functionality.
The FederationService provides an abstraction that specifies and promotes serverside functionality as a service that is remotely available for use by a client. The intent is that this interface defines all the necessary server-side functionality for federation.
The FederationServerHelper provides an abstraction of server-side API to the federation services. These methods can be invoked only from server-side processing.
The FederationServicesException provides an abstraction of an abnormal occurrence or error in usage or processing of the federation service. This exception can be localized through a given resource bundle, and other exception can be nested with in it.
As defined by the standard federation service access control rules, no constraints are placed on the access of proxy objects.
The federation service is an event listener. The service listener listens for and acts upon the following standard Windchill events.
When a PRE_STORE or a PRE_MODIFY event is emitted for a proxy object, the federation service provides the opportunity to store or
update associated objects prior to storing or updating the proxy object itself by doing:
if ( obj
instanceof Federated )
((Federated)obj).prepareForStore
();
Revising a proxy object is not allowed. Proxy objects are created against source objects from remote system. The revision is prevented to ensure that the proxy objects are consistent with the source objects.
When a POST_STORE or a POST_MODIFY event is emitted for a proxy object, the federation service provides the opportunity to store or update associated objects after storing or updating the proxy object itself by doing:
if ( obj
instanceof Federated )
((Federated)obj).postStore
();
When a PREPARE_FOR_MODIFICATION is emitted for a proxy object, the federation service will throw an exception with a message indication that updating federated objects is not allowed.
The Standard Federation Service-doAction() Executes one or more Info*Engine tasks selected by a specific logical action name, and the types and physical locations of a specific set of objects passed as parameters. sendFeedback() sends feedback objects to the client.
The Federation Send Feedback mechanism uses the
Info*Engine Web EventService (WES) to enable the sending of Feedback objects to
clients. The Info*Engine WES requires a Message Oriented Middleware (MOM)
product to be installed, configured and started. More information about MOM can
be found in the Info*Engine Installation and Configuration Guide.
The MOM has to be configured to recognize the "CommandDelegateFeedback" Event. Actually the Event name only has to be the same as the EVENT parameter value for the "Subscribe-Event" webject in the wt/federation/StandardFederationServicesStartup Info*Engine task and the "Emit-Event" webject in the wt/federation/CmdDelegateFeedbackEmit Info*Engine task. These tasks are shipped with EVENT set to "CommandDelegateFeedback". It’s possible to change the value in these tasks to something other than "CommandDelegateFeedback" although I don’t know that it is necessary to advertise this.
For sendFeedback() to work, Federation has to subscribe to receive Info*Engine WES Events, specifically the "CommandDelegateFeedback" Event. This is done via the wt/federation/StandardFederationServicesStartup task, which can be executed at Federation Service startup time. For this task to execute during Federation Service startup, the following line must be added to wt.properties: wt.federation.task.startup=wt/federation/StandardFederationServicesStartup.xml. If the StandardFederationServicesStartup task is executed during Federation Service startup and no MOM is installed/started, Federation Service startup (and Method Service startup) continue it just means that sendFeedback() won’t work if it is called.
Also, if the Federation Verbose flag is true, the following message is logged to the Method Server log file when the Federation Service is started:
Wed 6/13/01
javax.jms.JMSException:
java.net.ConnectException: Connection refused: no further information: tcp://<server>:<port>.
The most likely cause is no Messaging Service is started.
This is a non-fatal condition. The only consequence is that Command Delegate Feedback
is disabled. The stack trace follows.
If the
StandardFederationServicesStartup task is executed and the MOM isn’t configured
with the proper Event (i.e., the CommandDelegateFeedback Event), the following
message is logged and the Method Server terminates.
Tue 6/19/01
Similar results will occur (i.e., something will be logged for the error and the Method Server terminates) if the
StandardFederationServicesStartup task is executed and there are other MOM configuration errors.
If sendFeedback() is called and no MOM is installed/started (regardless of whether or not the StandardFederationServicesStartup task was executed), sendFeedback() throws a FederationServicesException exception and, if the Federation Verbose flag is true, the following is logged to the Method Server log file:
Tue 6/19/01
The stack trace follows.
If sendFeedback() is called without executing the StandardFederationServicesStartup task at Federation Service startup time (and a MOM is installed/configured/started), no Feedback message is sent to the client. In this scenario no errors occur on the Server so there are no exceptions from sendFeedback() and no log messages in the MethodServer log file. The only indication that something is wrong is that the client isn’t receiving Feedback messages.
If sendFeedback() is called without executing the StandardFederationServicesStartup task at Federation Service startup time (and a MOM is installed/started but not configured with the CommandDelegateFeedback Event), sendFeedback() throws a FederationServicesException exception and, if the Federation Verbose flag is true, the following is logged to the Method Server log file:
Wed 6/20/01
The stack trace follows.
This is a supported API. The corresponding UI in Windchill is the Delegate Administrator.
doAction executes one or more Info*Engine tasks selected by a specific logical action name, and the types and physical locations of a specific set of objects passed as parameters. sendFeedback sends feedback objects to clients.
import wt.federation.FederationHelper; import wt.util.WTException; import com.infoengine.object.factory.Att; import com.infoengine.object.factory.Element; import com.infoengine.object.factory.Group; import com.ptc.core.util.feedback.common.FeedbackSpec; import java.util.Enumeration; public class DoActionExample { public static void main (String[] args) { Element testElement = new Element(); testElement.addAtt( new Att("obid", "VR:wt.part.WTPart:73694:551318183-990560613281-2091086-126-8-253- 132@Windchill.mn.ptc.com") ); testElement.addAtt( new Att("name", "ENGINE") ); testElement.addAtt( new Att("number", "2623844395") ); testElement.addAtt( new Att("CLASS", "wt.part.WTPart") ); Element[] elementArray = { new Element("arrayElement1"), new Element("arrayElement2") }; Group group1 = new Group( "group1" ); group1.addElement( group1Elem1 ); group1.addElement( group1Elem2 ); ... try { Object[][] argv = { {"testElement", testElement }, {"group1", group1}, {"elementArray", elementArray}, {"bool1", new Boolean(true)}, {"char1", new Character(a')},' {"int1", new Integer(100)}, {"byte1", new Byte((byte) 9)}, {"double1", new Double(10000)}, {"short1", new Short((short) 99)}, {"float1", new Float(100.25)}, {"long1", new Long(4000)}, {"string1", "argv Test String"} }; // Federation Service doAction() is accessed through // FederationHelper Group resultGroup = FederationHelper.doAction( "testAction", argv ); //Example calling doAction() with a FeedbackSpec object. Object key = TdTest.class.getName(); FeedbackSpec feedbackSpec = new DefaultFeedbackSpec(key, true); Group resultGroup = FederationHelper.doAction( "testAction", argv, feedbackSpec ); if ( resultGroup != null ) { System.out.println( "resultGroup:" ); showIeGroup( resultGroup ); } else { System.out.println( "resultGroup is null." ); } } catch ( WTException exc ) { ... } ... } private static void showIeElement(Element inElement) { Enumeration attrs = null; Att attr = null; if ( inElement != null ) { System.out.println( "Element:" ); System.out.println( " Element Name: " + inElement.getName() ); System.out.println( " Element Attributes:" ); attrs = inElement.getAtts(); while ( attrs.hasMoreElements() ) { attr = (com.infoengine.object.factory.Att) attrs.nextElement(); System.out.println( " " + attr.getName() + ": " + attr.getValue() ); } } } private static void showIeGroup(Group inGroup) { if ( inGroup != null ) { Enumeration elements = null; System.out.println( "Group:" ); System.out.println( "Group Name: " + inGroup.getName() ); System.out.println( "Number of Elements: " + inGroup.getElementCount() ); System.out.println( "\nGroup Elements:" ); elements = inGroup.getElements(); while ( elements.hasMoreElements() ) { showIeElement( (Element) elements.nextElement() ); } } } }
import wt.federation.FederationServerHelper; import wt.federation.FederationServicesException; import wt.feedback.StatusFeedback; public class SendFeedbackExample { public static void main (String[] args) { ... try { // Send the client a StatusFeedback type feedback object. // Federation Service sendFeedback() is accessed through // FederationServerHelper.service FederationServerHelper.service.sendFeedback( new StatusFeedback( "Test Feedback Message" ); } catch ( FederationServicesException exc ) { ... } ... } }
|
|||||||||||
PREV PACKAGE NEXT PACKAGE | FRAMES NO FRAMES |