How to get data from the Form

Bonjour,
Je crée un connecteur personnalisé pour l’écriture des données dans la base de données.
Comment puis-je obtenir les données de ce formulaire dans le connecteur pour écrire cette forme de données dans la base ?
J’ai ma classe Personne avec les attributs (id,nom,prénom).

Voila mon connecteur:
/**
*
*/
package org.mycompany.connector;

import org.bonitasoft.engine.connector.ConnectorException;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.DriverManager;
import java.sql.Statement;

public class PersonneImpl extends AbstractPersonneImpl {

static final String JDBC_DRIVER ="com.mysql.jdbc.Driver";
private Connection connection;
private Statement statement;
@Override
protected void executeBusinessLogic() throws ConnectorException{
	//Get access to the connector input parameters
	 try {
 
     String query = "INSERT INTO personne VALUES(1, \"Katrine\", \"Kati\")";
     statement.executeUpdate(query);
     query = "SELECT * FROM personne";
      ResultSet rs = statement.executeQuery(query);

        while (rs.next()) {
            System.out.println("Nom : "+rs.getString(2)+" prenom : "+rs.getString(3));
	 
	 } catch (SQLException e) { 
	   throw new ConnectorException(e);
	} 

	//WARNING : Set the output of the connector execution. If outputs are not set, connector fails

 }

@Override
public void connect() throws ConnectorException{
	//[Optional] Open a connection to remote server
	try { 
	Class.forName(JDBC_DRIVER); 
	    } 
	catch (ClassNotFoundException e) { 
		// TODO Auto-generated catch block 
	throw new ConnectorException(e); } 

    try { 
    connection = DriverManager.getConnection("jdbc:mysql://localhost/mydb1", "root", "12345678"); 
        } 
    catch (SQLException e) {
	// TODO Auto-generated catch block
	throw new ConnectorException(e); 
	    } 


}

@Override
public void disconnect() throws ConnectorException{
	//[Optional] Close connection to remote server
	 try {
	 statement.close();
	 connection.close();
         }
	 catch (SQLException e) { 
	 throw new ConnectorException(e); 
   } 
}

}

Bonjour,

Il y a plusieurs elements :
1/ comment est cree l’objet statement ?
Il devrait y avoir dans le executeBusinessLogic un
Statement statement = connection.createStatement(); – de mémoire, a verifier dans la javadoc

2/ ou est le commit ? Dans une base de donnée, on doit faire un commit. Certes, certaines bases sont en autocommit, mais autant respecter le “state of art”.
connection.commit() – de mémoire, a verifier dans la javadoc

3/ ici, l’insertion a été faite sans parametre d’input ou d’output. Donc, l’insertion est une constante. Il est preferable de définir un parametre d’entree dans le connecteur, et lors de l’appel du connecteur dans le pool, dire que le parametre d’entrée prends pour valeur la variable “personne”.

4/ un connecteur est executé par le serveur web : tout system.out.println non seulement ne sert a rien, mais est un point de synchronisation : ca va donc ralentir l’execution pour envoyer le log… null part.
Il est préférable de logger :

Logger logger= Logger.getLogger(“org.bonitasoft”);
logger.severe(“Ici ce que je veux envoyer au log”);

puis d’aller dans le log de tomcat (Tomcat/logs/bonita.logs) pour voir le resultat

5/ ou est branché le connecteur ? En execution de fin de l’activité de saisie du formulaire ?

A ce propos, qu’y a t-il dans ce log la après l’execution du connecteur ?

Merci beaucoup pour vos réponses.Bon j’ai essayé de régler quelques problèmes ce qu’il me reste à savoir pour une application Web ou je peux mettre mon fichier “persistence.xml” dans Bonita ? je pense c’est ce qui manque à mes dépendances.
Merci encore une fois.

Quelqu’un peut m’aider svp ? C’est urgent

Bonjour,

Si j’ai bien compris, tu as :

  • Un formulaire
  • Un connecteur vers une BDD
    Et tu veux récupérer les données de ton formulaire pour les envoyer vers la BDD.

Pour cela il faut que tu :

  • crée des variables globales pour tous les champs de ton formulaire
  • stockes toutes les valeurs de ton formulaire dans les variables.
  • utilise les variables dans ton connecteur

Bonjour,
J’ai crée une variable “Personne”.
Au niveau du pool , dans la partie données, j’ai ajouté ma donnée “Personne” de type objet java.
Au niveau des formulaires, j’ai stocké les valeurs dans les variables ( en utilisant les getter et setter )
Mais je sais pas comment je vais utiliser mes variables dans le connecteur ? est ce que mon code il est bien déjà ?

Il me semble pas que ton code correspond à ce que tu dis vouloir faire.
Si je comprend bien ton code, tu stockes une personne puis tu lis dans ta base la liste des personnes.

Bonjour,
Voila mon nouveau code:
/**
*
*/
package org.mycompany.connector;

import org.bonitasoft.engine.connector.ConnectorException;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.DriverManager;
import java.sql.Statement;
import java.sql.ResultSet;
import java.util.logging.Logger;

public class PersonneImpl extends AbstractPersonneImpl {

Logger logger= Logger.getLogger("org.bonitasoft");

static final String JDBC_DRIVER ="com.mysql.jdbc.Driver";
 Connection connection = null ;
 Statement statement= null ;
 ResultSet rs = null;
@Override
protected void executeBusinessLogic() throws ConnectorException{
	//Get access to the connector input parameters
	 
 
     String query = "INSERT INTO personne VALUES(1, \"Katrine\", \"Kati\")";
     try {
     connection.setAutoCommit(false);
     Statement statement = connection.createStatement();
     ResultSet rs = statement.executeQuery(query);
     connection.commit();
         } 
     catch (SQLException e) {
         e.printStackTrace();
                            }
     
     query = "SELECT * FROM personne";
     try{
    	 connection.setAutoCommit(false);
    	 Statement statement = connection.createStatement();
    	 rs = statement.executeQuery(query);
    	 connection.commit();
	    } 
     catch (SQLException e) { 
	   throw new ConnectorException(e);
	                        } 

	//WARNING : Set the output of the connector execution. If outputs are not set, connector fails

 }

@Override
public void connect() throws ConnectorException{
	//[Optional] Open a connection to remote server
	try { 
	Class.forName(JDBC_DRIVER); 
	    } 
	catch (ClassNotFoundException e) { 
		// TODO Auto-generated catch block 
	throw new ConnectorException(e); } 

    try { 
    connection = DriverManager.getConnection("jdbc:mysql://localhost/mydb1", "root", "12345678"); 
        } 
    catch (SQLException e) {
	// TODO Auto-generated catch block
    	logger.severe("Ici ce que je veux envoyer au log"); 
	throw new ConnectorException(e); 
	    } 


}

@Override
public void disconnect() throws ConnectorException{
	//[Optional] Close connection to remote server
	 try {
	 statement.close();
	 connection.close();
         }
	 catch (SQLException e) { 
	 throw new ConnectorException(e); 
   } 
}

}

J’ai cherché dans le log de Tomcat, je trouve pas bonita.logs
Est ce que c’est normal que rien ne s’ajoute sur ma base ?
Quand je teste mon connecteur j’ai cette erreur:
java.lang.reflect.InvocationTargetException
org.bonitasoft.engine.bpm.connector.ConnectorExecutionException: org.bonitasoft.engine.core.connector.exception.SConnectorException: org.bonitasoft.engine.connector.exception.SConnectorException: java.lang.NullPointerException

Bonjour,
Le probleme est de savoir ou est le nullpointer exception.
Voici une astuce pour le tracer dans le log Bonita :
import java.util.logging.Logger;

Logger logger= Logger.getLogger(“org.bonitasoft”);

ATTENTION : il est preferable d’utiliser non pas “org.bonitasoft” mais “com.mycompany”, puis de configurer dans le logging.properties (tomcat/conf) la sortie de ce filtre (il suffit de regarder comment est configurer le org.bonitasoft). Mais en utilisant le org.bonitasoft, on s’economise du temps.

Ensuite, pour logger l’emplacement du log, on peut utiliser avec succes
StringWriter sw = new StringWriter();
e.printStackTrace(new PrintWriter(sw));
String exceptionDetails = sw.toString();
et logger le exceptionDetail

Bon, ceci dit :
1/ si le connect() ne passe pas, il ne va pas le logger (c’est a la methode de connect de le faire) et tel que c’est fait, aucun log n’est emis
2/ si le connect ne marche pas, il ne vas pas executer le businessLogic() MAIS le disconnect().
Or, dans disconnect, il y a statment.close() sans tester auparavant qu’il n’est pas null. => Je parirais que le nullpointer est la.
Une bonne pratique de Java est de vérifier que les objets ne sont pas null avant d’appeler des méthodes dessus. La, statement et connection etant des variables membre, vu qu’en developpant on ne peut pas prejuger de l’ordre d’appel, il est preferable de prendre ses précautions.

Enfin, la question qui reste est pourquoi on ne peux pas se connecter a votre base ? Avec le log, on en saura plus (le driver est t-il bien installé dans tomcat/lib )

PS : dans une application Web, il faut BANIR les System.out.println ou les e.printStackTrace() :

  • ils ne vont null part avec Tomcat
  • par contre, dans leur appel, il y a un synchronize() : d’où un ralentissement tres fort du tomcat, et une CPU pas chargée (quand on a ce symptome, c’est qu’on a des points de synchronisation, et les System.out.println est souvent l’origine du pb).

Je vous fais un retour vous m’avez beaucoup aider à régler quelques problèmes merci.
je pense ce qu’il me reste à savoir c’est ou mettre mon fichier “persistence.xml” dans Bonita ? je pense c’est ce qui manque à mes dépendances. Dans Bonita.logs j’ai une erreur de ce genre:

Grave: Erreur 2 : javax.persistence.PersistenceException: No Persistence provider for EntityManager named JPAPU

Merci pour votre aide.

Bonjour,
Je ne comprends pas ce qu’est ce fichier “pertinence.xml”. Vous avez une erreur quand ? A l’appel d’un connecteur particulier ? Qu’est ce qu’il y a dans ce fichier pertinence ??

Bonjour,
Alors je vais vous expliquer, je travaille sur une application-web externe avec “JPA” et je veux l’interagir avec mon processus que j’ai modélisé sous bonita.
Pour que je puisse interagir mes données et éviter de passer à chaque fois par un connecteur Mysql et écrire une requête SQL (j’ai tout mes requêtes dans mon application externe développée avec JPA).

Je veux utiliser un connecteur que j’ai implémenté moi même, ce connecteur il va géré juste la connexion et déconnexion de ma base externe et la persistance des données ( le fichier de persistance c’est un fichier qui a comme propriétés: le driver, la base, mot de passe …et le nom de la persistance et qui existe dans mon application externe ).

Il ne connait pas le nom de cette persistance c’est ça mon problème et il me retourne cette erreur:
Grave: Erreur 2 : javax.persistence.PersistenceException: No Persistence provider for EntityManager named JPAPU

Ok, en regardant un peu la javadoc sur la persistence, il est clair que le pb est d’avoir la liaison entre votre classe et une base de donnée. On n’est plus du tout dans un pb de BonitaSoft et il est préférable de trouver un forum plus spécialisé dans la gestion de ce type de gestion.

heu… j’ai raté une étape là.
Le rapport entre le connecteur base de donnée et “persistence.xml” ? C’est un fichier que vous désirez acceder depuis le connecteur ?
Si c’est le cas, le mieux est d’avoir en entrée de connecteur une variable qui dit ou est ce fichier.
Maintenant, comment configurer cette variable ? L’idéal est d’utiliser un parametre (version souscription) sinon une constante.

Oui vu que je travaille avec une application-web externe je désire accéder depuis le connecteur à ce fichier qui existe dans mon projet en “JPA”.

Voila le contenu de mon fichier:

<?xml version="1.0" encoding="UTF-8"?> org.eclipse.persistence.jpa.PersistenceProvider jpa.Personne

En fait je l’ai mis dans tomcat\lib,mais je sais pas si ça va marcher je dois peut être fermer et ré-ouvrir tomcat.
Je cherche pas à mettre une variable je veux savoir son emplacement dans Bonita.

Oui vu que je travaille avec une application-web externe je désire accéder depuis le connecteur à ce fichier qui existe dans mon projet en “JPA”.

Voila le contenu de mon fichier:

<?xml version="1.0" encoding="UTF-8"?> org.eclipse.persistence.jpa.PersistenceProvider jpa.Personne

En fait je l’ai mis dans tomcat\lib,mais je sais pas si ça va marcher je dois peut être fermer et ré-ouvrir tomcat.
Je cherche pas à mettre une variable je veux savoir son emplacement dans Bonita.

Bon, un connecteur va se lancer dans l’application Bonita hebergé par le tomcat. Le connecteur peut donc acceder a tout les fichiers visible par le serveur. Il suffit de mettre le bon path pour acceder le fichier : je ne vois donc pas ou est le problème ? De plus, il est peut etre préférable d’ouvir un autre thread pour suivre de manière plus précis le probleme car ce thread suit le probleme de connecteur effectuant une requete SQL.