Contraintes en 3.2

Bonjour,

Je pense qu’il y a une anomalie sur les contraintes en 3.2.
Les contraintes ne fonctionnent pas pour les objets métiers ayant du code java.

Sur l’objet ExampleObject1 venant de https://www.simplicite.io/resources/modules/examples-3.1.xml2
J’ai créé une contrainte simple qui rend le champ exObj1Picture obligatoire.

La contrainte fonctionne.

J’ai ensuite supprimé le script associé à ExampleObject1 et créé une classe java simple ne contenant qu’un initCreate()

Suite à ça, la contrainte n’est plus active, le champ exObj1Picture n’est plus obligatoire.

On est en 3.2 donc j’imagine que la classe Java en question est déployée physiquement (en déposant un .class dans WEB-INF/classes ou un .jar dans WEB-INF/lib et en redemarrant Tomcat) ?

Je pose la question car en 4.0 (branche master) on a désormais la possibilité de gérer des classes Java dynamiques (qui s’éditent en ligne via la UI et se compilent à la volée), si vous avez du code Java il serait donc peut être préférable de passer directement en 4.0 (d’autant qu’il n’y aurait pas ce pb de contraintes - et que celles-ci s’exécutent en prime à la fois coté serveur et coté client).

Ceci étant dit on va quand même regarder ce qui pourrait expliquer que des contraintes ne s’exécutent pas en 3.2 avec un classe Java (en fait, en 3.x plus personne ne faisait de classes Java c’est donc pas impossible qu’il y ait effectivement qques pbs)

Je ne reproduis pas le pb décrit

J’ai ajouté 2 contraintes sur l’objet ExObject1 (le module en ligne est à jour sur https://www.simplicite.io/resources/modules/examples-3.1.xml)

J’ai associé une classe Java à cet objet (en supprimant bien le script qui lui était associé initialement) avec un initupdate qui fait juste une trace dans les logs, je vois bien la trace dans les logs et je vois bien les contraintes s’exécuter:

Mon code Java:

package com.simplicite.objects.Examples;

import com.simplicite.util.AppLog;

public class ExampleObject1 extends com.simplicite.util.ScriptedObjectDB
{
	private static final long serialVersionUID = 1L;

	@Override
	public void initUpdate()
	{
		AppLog.info(getClass(), "initUpdate", "Hello world from Java class!", getGrant());
	};
}

PS: j’ai testé aussi en faisant porter les contraintes sur le champ de type image, je ne reproduis pas non plus de problème

Les contraintes n’ont rien à voir avec l’implémentation Java ou Script de l’objet.

  • Par contre si le code/hook contient des erreurs, il se peut que le traitement nominal soit interrompu (dont l’exécution des contraintes). Il devrait y avoir des traces dans les logs.
  • La contrainte est elle habilitée à un groupe en particulier ?
  • L’objet a-t-il d’autres mécanismes qui changeraient la propriété obligatoire plus tard (autre contrainte, code… ?)
  • Il y a peut être un pb de cache avec les instances Java, à retester en vidant tous les caches + en redémarrant le serveur pour être sur de purger la mémoire statique => à tester

En V3 elles sont limitées à une usage back-office, il faut passer en V4 pour les utiliser en Front et/ou Back.