2017-06-26 4 views
0

J'ai besoin de créer un MasterEndpoint à partir d'une donnée (en tant qu'instance Endpoint en Java) FileEndpoint.Comment créer un MasterEndpoint par programme

Normalement, je crée une classe qui étend le point de terminaison désiré et appelle tous les paramètres nécessaires (par exemple pour définir le contexte) de dans le constructeur ou dans une méthode init. Parfois, je crée une méthode qui utilise getContext().getEndpoint("name", ClazzOfEndpoint.class) dans le constructeur d'itinéraire.

Mais comment faire avec MasterEndpoint (préférable sans utiliser de littéraux/constantes de chaîne)? Le problème avec l'extension MasterEndpoint est le constructeur inhabituel qu'il utilise. Le problème avec l'utilisation getEndpoint est: comment connecter le point de terminaison maître renvoyé au FileEndpoint?

Répondre

1

Vous ne pouvez pas vraiment faire cela car ce composant maître n'est pas conçu pour être construit par programmation. Vous obtenez le point de terminaison en le configurant à l'aide d'une chaîne de caractères. C'est également la manière recommandée dans Camel pour installer et définir des endpoints. Ne les programmez pas manuellement.

+0

Existe-t-il un moyen de configurer le composant maître avec une chaîne à l'aide d'une instance de noeud final donnée? – dermoritz

+0

Juste le créer à partir d'une chaîne, avec "maître: someName: xxx" où xxx est l'URL de votre point de terminaison –

+0

merci pour la réponse rapide: ce serait: "master: someName:" + fileEndpoint.getUrl (pas sûr de la méthode prénom)? Puisque le point de terminaison de fichier est singleton, il devrait être le même point de terminaison de fichier utilisé et configuré ailleurs, n'est-ce pas? – dermoritz

0

J'ai trouvé une manière qui convient à mes besoins:

Créez d'abord le point final de maître avec son enfant:

masterEndpoint = context.getEndpoint("master:fileLock:file:" + rootFolder, MasterEndpoint.class); 

Pour configurer programmation le point final de l'enfant (dans mon cas FileEndpoint) OBTENU du maître et le configurer:

fileEndpoint = (FileEndpoint) masterEndpoint.getEndpoint(); 
fileEndpoint.setAutoCreate(false); 
fileEndpoint.setAntInclude(ANT_INCLUDE); 
fileEndpoint.setMove(doneFolder); 
fileEndpoint.setMoveFailed(errorFolder); 

il serait extrêmement difficile (et sujette aux erreurs) pour le configurer avec des chaînes.