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);
}
}
}
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.
Comments
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.
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.
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
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 ?
Comments
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
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, 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
Comments
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.