Bonjour,

Débutant dans les framework Java je viens de faire le choix de JSF. Je souhaite utiliser JSF pour ajouter une interface graphique à un système reposant sur mongoDB et MapReduce. Mon besoin est essentiellement de l'affichage + des formulaires pour intervenir sur les paramètres du système et interragir avec l'utilisateur. Ensuite beaucoup de traitement s'effectuent en tache de fond sans liens avec l'interface.
Au regard de tous ce que j'ai pu lire jusqu'ici sur JSF, on l'associe souvent à d'autre framwork comme jpa et hibernate pour le mapping relationnel. Dans mon cas point de relationnel, et manifestement il n'existe pas encore de mapping pour mongo prenant en charge MapReduce. Bref, je souhaiterais m'épargner de l'utilisation d'autres framework et me limiter à jsf + les lib JavaMongo (pour les interactions avec la base de données). Sinon souhaitant quelque chose de léger et pratique j'utilise Jetty comme serveur d'application pour mes tests, d'où manifestement l'obligation de déclarer les beans dans faces-config.xml. C'est peut-être un pb ? Voilà pour la présentation rapide.

Mon problème actuel est qu'une erreur est générée à chaque fois que je souhaite afficher le résultat d'une requête provenant de mongoDB dans ma page web (jsf). J'ai créé une classe SubscriptionDao.java pour les accès à la base, puis une classe SubscriptionBean pour l’interaction avec les pages jsf.

SubscriptionDao.java
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import sys.util.Config;
import sys.util.DBConnector;
 
public class SubscriptionDao {
 
	long nbsub;
 
	public SubscriptionDao(){
		Config.getInstance().loadProperties();
	}
 
/* un main pour les test ... */
	public static void main(String[] args){
		SubscriptionDao subDao = new SubscriptionDao();
		System.out.println("count sub : "+  subDao.countSubscription());
	}
 
	//nb de document dans la collection
	public void countSubscription(){
		DBCollection collection_sub = DBConnector.getInstance().getCollection();
		nbsub = collection_sub.count();
		DBConnector.getInstance().close();
		return nbsub;
	}//	
}
Résultat du main => count sub : 100

La classe SubscriptionBean.java

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
 
import java.io.Serializable;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;
import sys.dao.SubscriptionDao;
 
@ManagedBean
@SessionScoped
public class Subsbean implements Serializable{
 
  private long nbSubscription;
  private SubscriptionDao subscriptionDao;
 
  public Subsbean() {
	  subscriptionDao = new SubscriptionDao();
  }
 
/* un main pour les tests */
  public static void main(String[] args){
	  Subsbean subsbean = new Subsbean();
	  System.out.println("nb sub : "+  subsbean.getNbSubscription());
  } 
  public long getNbSubscription(){
        //Résultat identique en déclarant l'objet dans la méthode 
	// SubscriptionDao  subscriptionDao = new SubscriptionDao();
	return nbSubscription = subscriptionDao.countSubscription();
  }//
}
Résultat du main => nb sub : 100

Page web : matching.xhtml
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
 
<?xml version='1.0' encoding='UTF-8' ?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 
<html xmlns="http://www.w3.org/1999/xhtml"
      xmlns:h="http://java.sun.com/jsf/html"
      xmlns:f="http://java.sun.com/jsf/core">
  <f:view> 
    <h:head>
      <title>Matching</title>
      <h:outputStylesheet library="css" name="styles.css"/>
    </h:head>   
  	<h:body>
    <h:form id="formulaire">
        <h:panelGrid columnClasses="col1,col2" columns="2" border="1">
          <h:outputText value="#{subsbean.inputNbMatching}"  styleClass="info"/>
          <h:panelGroup>
            <h:outputText value="#{subsbean.nbSubscription}"/>
          </h:panelGroup>
        </h:panelGrid>       
      </h:form>
      </h:body>
      </f:view>
</html>
Quand j'exécute cette page j'ai le msg d'erreur suivant (qui ne me parle pas beacoup !):

Erreur d'analyse XML : aucun élément trouvé Emplacement : http://localhost:8080/pubsub-jsf-01/matching.xhtml Numéro de ligne 1, Colonne 1 :

Je précise que si je modifie la méthode countSubscription pour obtenir un "long" lambda (histoire de vérifier que le pb est bien la connexion avec la bdd) j'obtiens l'affichage voulu soit par ex :

extrait de : SubscriptionDao.java
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
public long countSubscription(){
		nbsub = (int)Math.pow(5,2);		
		return nbsub;
	}//
Résultat de ma page web:
nb subscription 25

Voilà j'espère être assez précis pour exposer mon soucis.
Dans l'attente de vos précieuses réponses, merci
Sylvain