2013-03-12 7 views
7

C'è un modo per generare BPEL in modo programmatico in Java?Generazione di file BPEL a livello di codice?

Ho provato ad utilizzare l'API Designer BPEL Eclipse per scrivere questo codice:

Process process = null; 
try { 



     Resource.Factory.Registry reg =Resource.Factory.Registry.INSTANCE; 

     Map<String, Object> m = reg.getExtensionToFactoryMap(); 

     m.put("bpel", new BPELResourceFactoryImpl());//it works with XMLResourceFactoryImpl() 



     //create resource 

     URI uri =URI.createFileURI("myBPEL2.bpel"); 



     ResourceSet rSet = new ResourceSetImpl(); 

      Resource bpelResource = rSet.createResource(uri); 



      //create/populate process 

      process = BPELFactory.eINSTANCE.createProcess(); 

      process.setName("myBPEL"); 

      Sequence mySeq = BPELFactory.eINSTANCE.createSequence(); 

      mySeq.setName("mainSequence"); 

      process.setActivity(mySeq); 



      //save resource 

      bpelResource.getContents().add(process); 

      Map<String,String> map= new HashMap<String, String>(); 
      map.put("bpel", "http://docs.oasis-open.org/wsbpel/2.0/process/executable"); 
      map.put("tns", "http://matrix.bpelprocess"); 
      map.put("xsd", "http://www.w3.org/2001/XMLSchema"); 
      bpelResource.save(map); 

    } 



    catch (Exception e) { 

      e.printStackTrace(); 

    } 


} 

ma ho ricevuto un errore:

INamespaceMap cannot be attached to an eObject ...

ho letto this message da Simon:

I understand that using the BPEL model outside of eclipse might be desirable, but it was never intended by us. Thus, this isn't supported

C'è qualche altra API che può aiutare?

+0

http://www.eclipse.org/forums/index.php/m/1015906/ è lo stesso errore che si sta vedendo. L'hai già incontrato? Forse dovresti attenersi ai forum di Eclipse per problemi come il tuo. La probabilità che qualcun altro sia in grado di aiutarti è superiore rispetto a qui su StackOverflow. – SpaceTrucker

risposta

2

Ciò è stato risolto utilizzando il unify framework API dopo aver aggiunto le classi necessarie per gestire correlazione. BPELUnit dichiarato da @Daniel sembra essere un'altra alternativa.

+0

Potresti fornire una guida passo passo per come hai risolto il problema? –

+0

Per quanto mi ricordo, i passaggi dipendono dal processo che si desidera generare, scaricare l'API e utilizzare l'oggetto BpelProcess e aggiungere ad esso le attività desiderate (Ricevi, Assegna, Rispondi ....) e quindi utilizzare BpelSerializer per serializzare il processo e generare il file .bpel, spero che questo aiuti. – faridasabry

+0

Grazie mille per aver risposto. Sarebbe bello se potessi per favore postare qualche codice di esempio? –

2

L'API BPli di Eclipse si basa su un modello EMF. In questo modo è possibile generare i propri artefatti utilizzando JET o Xpand in base a ciò. In questo modo non è necessario eseguire Eclipse.

Sebbene non sia possibile utilizzare BPEL al di fuori di Eclipse, avete preso in considerazione lo spostamento di parti della vostra applicazione al suo interno?

Gli schemi XML BPEL sono elencati nello appendig of the spec. Quindi potresti anche basare il tuo lavoro su questo e integrarlo con le applicazioni BPEL esistenti ove necessario.

+0

Mi stavo chiedendo sulla creazione di file .bpel dinamicamente nel codice Java, non ho bisogno di creare un modello grafico .. solo un flusso di lavoro dinamico basato sugli input – faridasabry

+1

@ user1925930 Penso che sia quello di cui stavo parlando. È possibile salvare i modelli EMF come xml con un'estensione di file definita dall'utente tramite l'API EMF Resources. – SpaceTrucker

+0

Ho modificato la mia domanda per includere il codice che stavo cercando con org.eclipse.bpel.model e org.eclipse.emf.ecore.resource ma ho ricevuto l'errore menzionato sopra ... hai un'idea di come risolvere? – faridasabry

3

Si consiglia di provare JAXB. Ti aiuta a trasformare il BPEL XSD ufficiale in classi Java. Si utilizzano tali classi per costruire il documento BPEL e produrlo.

3

Ho avuto esattamente lo stesso problema con BPELUnit [1], così ho avviato un modulo in BPELUnit che ha le prime cose necessarie per generare e leggere i modelli BPEL [2] anche se è tutt'altro che completo. Supportato è solo BPEL 2.0 (1.1 seguirà in seguito) ei gestori non sono attualmente supportati (ma verranno aggiunti). È in fase di sviluppo attivo perché il componente di copertura del codice di BPELUnit sarà basato su di esso in modo che la funzione BPEL venga completata nel tempo. Sei felicemente invitato a contribuire se hai bisogno di chiudere prima le lacune.

Puoi verificarlo da GitHub o eseguire l'artefatto Maven.

A partire da ora non c'è documentazione ma è possibile dare un'occhiata ai test JUnit che leggono e scrivono processi.

Se questo non è adatto per, mi piacerebbe condividere alcune esperienze con voi:

  1. Non utilizzare JAXB: Avrete bisogno di leggere e scrivere namespace XML che non sono conservati con JAXB. Ecco perché ho scelto XMLBeans. DOM sarebbe l'altra alternativa a cui riesco a pensare.

  2. L'ereditarietà dello schema XML non è molto adattabile agli sviluppatori. Ecco perché ci sono proprie strutture di interfaccia e wrapper attorno alle classi generate da XMLBeans.

Daniel

[1] http://www.bpelunit.net
[2] https://github.com/bpelunit/bpelunit/tree/master/net.bpelunit.model.bpel

0

Nel caso in cui qualcuno stia cercando di risolvere il problema sopra mentre è ancora in esecuzione all'interno dell'ambiente Eclipse.

Il problema può essere risolto come affermato da Luca Pinohere aggiungendo:

AdapterRegistry.INSTANCE.registerAdapterFactory(BPELPackage.eINSTANCE, BasicBPELAdapterFactory.INSTANCE); 

prima della linea di creazione di risorse ovvero

Resource bpelResource = rSet.createResource(uri); 

Nota: Un'altra soluzione, allo stesso problema, affermando anche come risolvere le dipendenze per far funzionare questo codice, può essere trovato nella mia altra risposta here.