Disparition du code d'un business object

Bonjour,

J’ai un business object avec code custo dont j’ai commenté des getField pour investiguer une erreur que je voyais dans les logs. Le problème c’est qu’au rechargement de la vue d’administration de ce business object après modification, j’ai eu une NPE puis la disparition de l’intégralité du code de mon business object. En cliquant sur éditer : la fenêtre de choix de langage apparaît et si je choisis Java, j’ai un code vierge pour cet objet. En remettant le code initial de mon objet (avant commentaires) et sauvegardant, la NPE apparaît de nouveau et le code redisparaît.

Le problème vient peut-être d’autre chose mais c’est les seules actions que j’ai réussi à déterminer.

Le code de mon objet avant commentaires :

package com.simplicite.objects.RenaultSites;

import java.util.ArrayList;
import java.util.List;

import com.simplicite.util.Globals;
import com.simplicite.util.ObjectDB;
import com.simplicite.util.ObjectField;
import com.simplicite.util.Tool;

/**
 * Real estate identifier value
 */
public class SitesRealEstateAssetIdentifierValue extends com.simplicite.commons.RenaultSites.SitesCommon {
	private static final long serialVersionUID = 1L;

	/** Hook override */
	@Override
	public void postLoad() {
		setIdentifierField("sitesIdvIdentifier", "ADV", 8, null);
	}
	
	/** Hook override */
	@Override
	public void initList(ObjectDB parent) {
		// XOR pattern => both FK visible on list
		getField("sitesIdvReaId").setVisibility(ObjectField.VIS_BOTH);
		getField("sitesIdvAcpId").setVisibility(ObjectField.VIS_BOTH);
	}
	
	/** Hook override */
	@Override
	public void initCreate() {
		// XOR pattern => both FK visible on create form
		getField("sitesIdvReaId").setVisibility(ObjectField.VIS_BOTH);
		getField("sitesIdvAcpId").setVisibility(ObjectField.VIS_BOTH); // Ligne commentée n°1
	}
	
	/** Hook override */
	@Override
	public void initUpdate() {
		// XOR pattern => only relevant FK visible on update form
	//	ObjectField f = getField("sitesIdvReaId");
	//	f.setVisibility(f.isEmpty() ? ObjectField.VIS_HIDDEN : ObjectField.VIS_BOTH);
	//	 f = getField("sitesIdvAcpId");
	//	f.setVisibility(f.isEmpty() ? ObjectField.VIS_HIDDEN : ObjectField.VIS_BOTH);
	}
	
	/** Hook override */
	@Override
	public void initCopy() {
		initUpdate();
	}

	/** Hook override */
	@Override
	public List<String> postValidate() {
		List<String> errs = new ArrayList<>();

		// Enforce XOR on links
		int n = 0;
		if (!Tool.isEmpty(getFieldValue("sitesIdvReaId"))) n++;
		if (!Tool.isEmpty(getFieldValue("sitesIdvAcpId"))) n++; // Ligne commentée n°2
		if (n!=1)
			errs.add("SITES_IDV_XOR");

		return Tool.merge(errs, super.postValidate(), false);
	}
}

La NPE :

2019-06-27 23:43:38,634 FATAL [com.simplicite.util.ObjectDirect] SIMPLICITE|http://12d81b031d6d:8080||FCOREOM002|system|com.simplicite.util.ObjectDirect|init||Error init Object SitesRealEstateAssetIdentifierValue for user system
    java.lang.NullPointerException
     at com.simplicite.util.SharedScript.getSource(SharedScript.java:116)
     at com.simplicite.util.engine.CoreCache.getDocScript(CoreCache.java:2068)
     at com.simplicite.util.engine.ObjectLoader.loadFromDB(ObjectLoader.java:477)
     at com.simplicite.util.engine.ObjectLoader.getClone(ObjectLoader.java:155)
     at com.simplicite.util.engine.ObjectLoader.load(ObjectLoader.java:86)
     at com.simplicite.util.ObjectDirect.init(ObjectDirect.java:42)
     at com.simplicite.util.ObjectDB.init(ObjectDB.java:223)
     at com.simplicite.util.ObjectDB.load(ObjectDB.java:203)
     at com.simplicite.util.engine.CoreCache.instantiateObject(CoreCache.java:2972)
     at com.simplicite.util.engine.CoreCache.getObject(CoreCache.java:2931)
     at com.simplicite.util.engine.CoreCache.preCompileObject(CoreCache.java:345)
     at com.simplicite.util.engine.CoreCache.getObjectDefinition(CoreCache.java:2861)
     at com.simplicite.objects.System.ObjectFieldSystem.getStyle(ObjectFieldSystem.java:147)
     at com.simplicite.util.tools.JSONTool.objectFieldMetaDataToJson(JSONTool.java:865)
     at com.simplicite.util.tools.JSONTool.rowMetaDataToJson(JSONTool.java:1620)
     at com.simplicite.util.tools.JSONTool.listToJson(JSONTool.java:2128)
     at com.simplicite.util.tools.JSONTool.list(JSONTool.java:2449)
     at com.simplicite.webapp.tools.JSONServletTool.search(JSONServletTool.java:689)
     at com.simplicite.webapp.ObjectJson.search(ObjectJson.java:218)
     at com.simplicite.webapp.ObjectJson.search(ObjectJson.java:194)
     at com.simplicite.webapp.tools.JSONServletTool.businessObjectService(JSONServletTool.java:519)
     at com.simplicite.webapp.servlets.AbstractJSONServlet.service(AbstractJSONServlet.java:68)
     at javax.servlet.http.HttpServlet.service(HttpServlet.java:741)
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231)
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
     at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
     at com.simplicite.webapp.filters.AuthMethodFilter.doFilter(AuthMethodFilter.java:115)
     at com.simplicite.webapp.filters.AbstractFilter.doFilter(AbstractFilter.java:37)
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
     at com.simplicite.webapp.filters.RewriteFilter.doFilter(RewriteFilter.java:77)
     at com.simplicite.webapp.filters.AbstractFilter.doFilter(AbstractFilter.java:37)
     at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193)
     at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166)
     at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202)
     at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96)
     at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490)
     at com.simplicite.tomcat.valves.APISessionValve.invoke(Unknown Source)
     at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139)
     at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92)
     at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678)
     at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
     at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343)
     at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408)
     at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66)
     at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:853)
     at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1587)
     at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49)
     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
     at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
     at java.lang.Thread.run(Thread.java:748) 

Le health de mon environnement de développement :


[Platform]
Status=OK
Version=4.0.P23
BuiltOn=2019-06-24 12:02 (revision 37bff5123e5689935ee77c91105f31c1cf3a1f5c)
Encoding=UTF-8
EndpointIP=172.17.0.22
EndpointURL=http://12d81b031d6d:8080
TimeZone=Europe/Paris
SystemDate=2019-06-27 23:58:58

[Application]
ApplicationVersion=0.16 dev
ContextPath=
ContextURL=https://int.rfs.dev.aws.renault.com
ActiveSessions=2
EnabledUsers=10
TotalUsers=11
LastLoginDate=2019-06-27 23:50:00

[Server]
ServerInfo=Apache Tomcat/9.0.21
ServerType=WEB
User=root

[OS]
Name=Linux
Architecture=amd64
Version=4.14.101-75.76.amzn1.x86_64
SystemEncoding=UTF-8

[Disk]
DiskFree=8657
DiskUsable=8129
DiskTotal=10015

[JavaVM]
Version=1.8.0_212
Vendor=Oracle Corporation
VMName=OpenJDK 64-Bit Server VM
VMVersion=25.212-b04
ScriptEngine=rhino
ScriptEngineVersion=Rhino 1.7.10 2018 04 09
HeapFree=30312
HeapSize=506944
HeapMaxSize=1773888
TotalFreeSize=1297256

[Cache]
GrantCache=8
GrantCacheMax=0
GrantCacheRatio=0
ObjectCache=162
ObjectCacheMax=10000
ObjectCacheRatio=1
ProcessCache=1
ProcessCacheMax=10000
ProcessCacheRatio=0

[Database]
Vendor=3
ProductName=PostgreSQL
ProductVersion=10.6
DriverName=PostgreSQL JDBC Driver
DriverVersion=42.2.5.jre7
DBDate=2019-06-27 23:58:58
DBDateOffset=0
DBPatchLevel=P23
UsingBLOBs=true

[Healthcheck]
Date=2019-06-27 23:58:58
ElapsedTime=11


Est-ce que le code partagé “SitesCommon” existe bien toujours sur cette instance ? Est-ce qu’il compile toujours ? De ce que je vois ça semble un pb lié à ce code partagé…

Pour investiguer un pb comme celui là j’aurais besoin de pouvoir le reproduire sur une instance sur notre serveur cloud (que je peux si besoin cloner et passer en mode debug). Bref reproduis tu ce pb sur une instance du serveur renault.simplicite.io ?

J’ai essayé de reproduire ce que tu indiques sur ni sur sitesdev.renault.simplicite.io (HSQLDB) si sur sitespre.renault.simplicite.io (PostgreSQL 9.6) sans succès.

Dans la mesure où, avec PostgreSQL les docs sont stockées en base (dans des BLOBs) et que le pb se produit à la lecture d’un tel doc, ça vaudrait donc peut être la peine d’avoir au moins une instance calée sur la même version de PostgreSQL que celle que vous utilisez on premises (à savoir 10.6 si j’en crois ton /health). On ne sait jamais…

Je vais regarder si je peux changer facilement la version de PostgreSQL sur le serveur renault.simplicite.io.

@bmo a reconnu ce problème qui lui était arrivé il y a deux ans. Pour lui c’est un problème au niveau de la sauvegarde du fichier car le fichier n’a pas bien été supprimé de la base et à la sauvegarde il y a un problème de clé. On a retesté et on constate bien l’erreur suivante à la sauvegarde du code du business object :

2019-06-28 10:53:01,376 ERROR [com.simplicite.util.ObjectDirect] SIMPLICITE|http://12d81b031d6d:8080||ECORED0001|system|com.simplicite.util.ObjectDirect|save||Error DocumentSystem 
    org.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint "m_document_uk" 
     Detail: Key (dbd_path)=(ObjectInternal/obo_script_id/0/2111/SitesRealEstateAssetIdentifierValue.java) already exists. 
    	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2440) 
    	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2183) 
    	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:308) 
    	at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:441) 
    	at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:365) 
    	at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:143) 
    	at org.postgresql.jdbc.PgPreparedStatement.executeUpdate(PgPreparedStatement.java:120) 
    	at org.apache.tomcat.dbcp.dbcp2.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:136) 
    	at org.apache.tomcat.dbcp.dbcp2.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:136) 
    	at com.simplicite.util.engine.DBAccess.update(DBAccess.java:1528) 
    	at com.simplicite.util.engine.ObjectManager.create(ObjectManager.java:1675) 
    	at com.simplicite.util.engine.ObjectManager.save(ObjectManager.java:2706) 
    	at com.simplicite.util.ObjectDirect.save(ObjectDirect.java:442) 
    	at com.simplicite.util.ObjectDB.save(ObjectDB.java:946) 
    	at com.simplicite.util.ObjectDB.save(ObjectDB.java:933) 
    	at com.simplicite.util.tools.DocTool.upload(DocTool.java:526) 
    	at com.simplicite.util.engine.ObjectManager.upload(ObjectManager.java:1772) 
    	at com.simplicite.util.engine.ObjectManager.update(ObjectManager.java:2301) 
    	at com.simplicite.util.engine.ObjectManager.save(ObjectManager.java:2727) 
    	at com.simplicite.util.ObjectDirect.save(ObjectDirect.java:442) 
    	at com.simplicite.util.ObjectDB.save(ObjectDB.java:946) 
    	at com.simplicite.util.ObjectDB.save(ObjectDB.java:933) 
    	at com.simplicite.util.tools.EditorTool.save(EditorTool.java:253) 
    	at com.simplicite.util.tools.EditorTool.service(EditorTool.java:65) 
    	at com.simplicite.webapp.tools.JSONServletTool.applicationService(JSONServletTool.java:296) 
    	at com.simplicite.webapp.servlets.AbstractJSONServlet.service(AbstractJSONServlet.java:70) 
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) 
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) 
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 
    	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 
    	at com.simplicite.webapp.filters.AuthMethodFilter.doFilter(AuthMethodFilter.java:115) 
    	at com.simplicite.webapp.filters.AbstractFilter.doFilter(AbstractFilter.java:37) 
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 
    	at com.simplicite.webapp.filters.RewriteFilter.doFilter(RewriteFilter.java:77) 
    	at com.simplicite.webapp.filters.AbstractFilter.doFilter(AbstractFilter.java:37) 
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) 
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) 
    	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490) 
    	at com.simplicite.tomcat.valves.APISessionValve.invoke(Unknown Source) 
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) 
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) 
    	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678) 
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) 
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) 
    	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408) 
    	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) 
    	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:853) 
    	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1587) 
    	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 
    	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    	at java.lang.Thread.run(Thread.java:748)

Edit : on a tenté de trouver l’entrée dans m_document pour le business object en question en faisant une recherche de document pour Path *SitesRealEstateAssetIdentifierValue* mais sans succès. Si c’est bien ce qu’on doit corriger, comment peut-on retrouver la clé du code de cet objet pour purger la table ?

Mmm bizarre, la unique key de m_document c’est le dbd_path donc la requête pour trouver le doublon ça devrait $etre du genre select * from m_document where dbd_path like '%SitesRealEstateAssetIdentifierValue%' => ça donne quoi ?

PS: Il y a une actionde synchro/purge des documents qu’on peut lancer manuellement pour résoudre les pbs de docs “orpehlins”:

Dans le cas d’un doublon de path je ne sais pas trop ce que ça va faire, personnellement lancer cette action m’a toujours fait peur…

Le select ne renvoie rien.

J’ai tenté le Synchronize documents, ça donne ce résultat :

Document fields: 
Reset m_object.obj_script_id for row_id=2111
Reset m_xml.xsp_log_id for row_id=173
Reset m_xml.xsp_log_id for row_id=165
Reset m_xml.xsp_log_id for row_id=168
Reset m_xml.xsp_log_id for row_id=170
Reset m_xml.xsp_log_id for row_id=171
Reset m_xml.xsp_log_id for row_id=174
Reset m_xml.xsp_log_id for row_id=177
Reset m_xml.xsp_log_id for row_id=166
Reset m_xml.xsp_log_id for row_id=167
Reset m_xml.xsp_log_id for row_id=169
Reset m_xml.xsp_log_id for row_id=172
Reset m_xml.xsp_log_id for row_id=175
Reset m_xml.xsp_log_id for row_id=176
Reset m_xml.xsp_log_id for row_id=178
Reset m_xml.xsp_src_id for row_id=173
Reset m_xml.xsp_src_id for row_id=170
Reset m_xml.xsp_src_id for row_id=171
Reset m_xml.xsp_src_id for row_id=174
Reset m_xml.xsp_src_id for row_id=168
Reset m_xml.xsp_src_id for row_id=177
Reset m_xml.xsp_src_id for row_id=167
Reset m_xml.xsp_src_id for row_id=169
Reset m_xml.xsp_src_id for row_id=172
Reset m_xml.xsp_src_id for row_id=166
Reset m_xml.xsp_src_id for row_id=175
Reset m_xml.xsp_src_id for row_id=176
Reset m_xml.xsp_src_id for row_id=178
Reset m_xml.xsp_src_id for row_id=165

Document entries:

Summary:
0 document fields fixed because of missing document.
29 document fields reset because of missing document.
0 document imported as BLOB.
0 document exported from BLOB to disk.
0 document(s) deleted because of missing physical file.
0 documents(s) deleted because not used by any document field.
0 file(s) deleted because not referenced as document.

Après ça, j’ai tenté de resauvegarder le code de mon Business Object mais j’ai toujours une Stack, différente cette fois-ci (et le code ne reste toujours pas) :

2019-06-28 14:34:15,857 ERROR [com.simplicite.util.ObjectDirect] SIMPLICITE|http://12d81b031d6d:8080||ECORED0001|system|com.simplicite.util.ObjectDirect|save||Error DocumentSystem 
    org.postgresql.util.PSQLException: ERROR: duplicate key value violates unique constraint "m_document_uk" 
     Detail: Key (dbd_path)=(ObjectInternal/obo_script_id/0/2111/SitesRealEstateAssetIdentifierValue.java) already exists. 
    	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2440) 
    	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:2183) 
    	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:308) 
    	at org.postgresql.jdbc.PgStatement.executeInternal(PgStatement.java:441) 
    	at org.postgresql.jdbc.PgStatement.execute(PgStatement.java:365) 
    	at org.postgresql.jdbc.PgPreparedStatement.executeWithFlags(PgPreparedStatement.java:143) 
    	at org.postgresql.jdbc.PgPreparedStatement.executeUpdate(PgPreparedStatement.java:120) 
    	at org.apache.tomcat.dbcp.dbcp2.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:136) 
    	at org.apache.tomcat.dbcp.dbcp2.DelegatingPreparedStatement.executeUpdate(DelegatingPreparedStatement.java:136) 
    	at com.simplicite.util.engine.DBAccess.update(DBAccess.java:1528) 
    	at com.simplicite.util.engine.ObjectManager.create(ObjectManager.java:1675) 
    	at com.simplicite.util.engine.ObjectManager.save(ObjectManager.java:2706) 
    	at com.simplicite.util.ObjectDirect.save(ObjectDirect.java:442) 
    	at com.simplicite.util.ObjectDB.save(ObjectDB.java:946) 
    	at com.simplicite.util.ObjectDB.save(ObjectDB.java:933) 
    	at com.simplicite.util.tools.DocTool.upload(DocTool.java:526) 
    	at com.simplicite.util.engine.ObjectManager.upload(ObjectManager.java:1772) 
    	at com.simplicite.util.engine.ObjectManager.update(ObjectManager.java:2301) 
    	at com.simplicite.util.engine.ObjectManager.save(ObjectManager.java:2727) 
    	at com.simplicite.util.ObjectDirect.save(ObjectDirect.java:442) 
    	at com.simplicite.util.ObjectDB.save(ObjectDB.java:946) 
    	at com.simplicite.util.ObjectDB.save(ObjectDB.java:933) 
    	at com.simplicite.util.tools.EditorTool.save(EditorTool.java:253) 
    	at com.simplicite.util.tools.EditorTool.service(EditorTool.java:65) 
    	at com.simplicite.webapp.tools.JSONServletTool.applicationService(JSONServletTool.java:296) 
    	at com.simplicite.webapp.servlets.AbstractJSONServlet.service(AbstractJSONServlet.java:70) 
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) 
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) 
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 
    	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 
    	at com.simplicite.webapp.filters.AuthMethodFilter.doFilter(AuthMethodFilter.java:115) 
    	at com.simplicite.webapp.filters.AbstractFilter.doFilter(AbstractFilter.java:37) 
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 
    	at com.simplicite.webapp.filters.RewriteFilter.doFilter(RewriteFilter.java:77) 
    	at com.simplicite.webapp.filters.AbstractFilter.doFilter(AbstractFilter.java:37) 
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) 
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) 
    	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490) 
    	at com.simplicite.tomcat.valves.APISessionValve.invoke(Unknown Source) 
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) 
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) 
    	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678) 
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) 
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) 
    	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408) 
    	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) 
    	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:853) 
    	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1587) 
    	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 
    	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    	at java.lang.Thread.run(Thread.java:748)

OK que donne la requête SQL ?

C’est le début de mon message d’avant. :slight_smile:

Désolé j’avais pas vu le début du message

Très bizarre… Que donne: select * from m_document where dbd_path like 'ObjectInternal/obo_script_id/0/2111%' ?

Rien non plus pour cette requête.

Et celle là: select * from m_document where dbd_path like '%.java' ?

Sur sitespre.renault.simplicite.io (qui est en PostgreSQL) il y a bien l’entrée dans m_document pour le .java en question:

Du coup je ne comprends pas bien quel pb il peut y avoir sur ton instance…

La structure de cette table sous PostgreSQL est:

sitespre=> \d m_document
                Table "public.m_document"
    Column     |            Type             | Modifiers
---------------+-----------------------------+-----------
 row_id        | integer                     | not null
 created_dt    | timestamp without time zone | not null
 created_by    | character varying(100)      | not null
 updated_dt    | timestamp without time zone | not null
 updated_by    | character varying(100)      | not null
 dbd_path      | text                        |
 dbd_name      | character varying(255)      |
 dbd_vers      | integer                     |
 dbd_ondemand  | character(1)                |
 dbd_resp_id   | integer                     |
 dbd_index_id  | integer                     |
 dbd_object_id | integer                     |
 dbd_field_id  | integer                     |
 dbd_row_id    | integer                     |
 dbd_size      | integer                     |
 dbd_mime      | character varying(100)      |
 dbd_content   | bytea                       |
 dbd_thumbnail | bytea                       |
 dbd_index     | text                        |
Indexes:
    "m_document_pkey" PRIMARY KEY, btree (row_id)
    "m_document_fk1" btree (dbd_index_id)
    "m_document_fk2" btree (dbd_object_id)
    "m_document_fk3" btree (dbd_resp_id)
    "m_document_fk4" btree (dbd_field_id)
    "m_document_idx1" btree (dbd_name)
    "m_document_uk" btree (dbd_path)

Vérifie que c’est bien la même chose pour toi (il y a peut être une subtilité entre PostgreSQL 9.6 et 10.6 mais je n’y crois pas trop)

Regarde si tu n’as pas de NULLs dans les colonnes identifiantes :select * from m_document where dbd_name is null or dbd_path is null

Pour select * from m_document where dbd_path like '%.java' je vois tous les fichiers sauf celui dont on parle ici.
Pour le select * from m_document where dbd_name is null or dbd_path is null je n’ai aucun résultat.

Pour vérifier la structure de la base et potentiellement chercher des index, j’ai une demande d’accès à la base en cours…

Ce pb est de plus en plus strange.

Ma demande sur la structure de base c’est au cas où la colonne dbd_path ne serait pas de type text mais un varchar pas assez grand pour ce nom relativement long. Mais franchement je comprendrais pas pourquoi.

Quid de la requête select * from m_document where dbd_object_id = 2111 ?

Pas de résultat non plus.

Ca n’a pas de sens, il ne peut pas y avoir de violation d’une unique key si un record avec la même unique key n’existe pas déjà:

Ce message :

ERROR: duplicate key value violates unique constraint "m_document_uk" Detail: Key (dbd_path)=(ObjectInternal/obo_script_id/0/2111/SitesRealEstateAssetIdentifierValue.java) already exists. 

implique forcément que la requête select * from m_document where dbd_path = 'ObjectInternal/obo_script_id/0/2111/SitesRealEstateAssetIdentifierValue.java' renvoie une ligne !

Où alors il y a une truc très subtil qui se produit mais je ne vois vraiment pas quoi…

Je viens de refaire tout le use case ce matin et j’ai toujours une erreur mais ce n’est plus la même. Elle apparaît désormais lorsque j’ouvre le business object SitesRealEstateAssetIdentifierValue après avoir collé le code, sauvegardé et vidé le cache ; et l’erreur est la suivante :

2019-07-01 09:38:03,171 FATAL [com.simplicite.util.ObjectDirect] SIMPLICITE|http://71e4dd1fef56:8080||FCOREOM002|system|com.simplicite.util.ObjectDirect|init||Error init Object SitesRealEstateAssetIdentifierValue for user system 
    java.lang.NullPointerException 
    	at com.simplicite.util.SharedScript.getSource(SharedScript.java:116) 
    	at com.simplicite.util.engine.CoreCache.getDocScript(CoreCache.java:2068) 
    	at com.simplicite.util.engine.ObjectLoader.loadFromDB(ObjectLoader.java:477) 
    	at com.simplicite.util.engine.ObjectLoader.getClone(ObjectLoader.java:155) 
    	at com.simplicite.util.engine.ObjectLoader.load(ObjectLoader.java:86) 
    	at com.simplicite.util.ObjectDirect.init(ObjectDirect.java:42) 
    	at com.simplicite.util.ObjectDB.init(ObjectDB.java:223) 
    	at com.simplicite.util.ObjectDB.load(ObjectDB.java:203) 
    	at com.simplicite.util.engine.CoreCache.instantiateObject(CoreCache.java:2972) 
    	at com.simplicite.util.engine.CoreCache.getObject(CoreCache.java:2931) 
    	at com.simplicite.util.engine.CoreCache.preCompileObject(CoreCache.java:345) 
    	at com.simplicite.util.engine.CoreCache.getObjectDefinition(CoreCache.java:2861) 
    	at com.simplicite.objects.System.ObjectFieldSystem.getStyle(ObjectFieldSystem.java:147) 
    	at com.simplicite.util.tools.JSONTool.objectFieldMetaDataToJson(JSONTool.java:865) 
    	at com.simplicite.util.tools.JSONTool.rowMetaDataToJson(JSONTool.java:1620) 
    	at com.simplicite.util.tools.JSONTool.listToJson(JSONTool.java:2128) 
    	at com.simplicite.util.tools.JSONTool.list(JSONTool.java:2449) 
    	at com.simplicite.webapp.tools.JSONServletTool.search(JSONServletTool.java:689) 
    	at com.simplicite.webapp.ObjectJson.search(ObjectJson.java:218) 
    	at com.simplicite.webapp.ObjectJson.search(ObjectJson.java:194) 
    	at com.simplicite.webapp.tools.JSONServletTool.businessObjectService(JSONServletTool.java:519) 
    	at com.simplicite.webapp.servlets.AbstractJSONServlet.service(AbstractJSONServlet.java:68) 
    	at javax.servlet.http.HttpServlet.service(HttpServlet.java:741) 
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:231) 
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 
    	at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) 
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 
    	at com.simplicite.webapp.filters.RewriteFilter.doFilter(RewriteFilter.java:77) 
    	at com.simplicite.webapp.filters.AbstractFilter.doFilter(AbstractFilter.java:37) 
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 
    	at com.simplicite.webapp.filters.AuthMethodFilter.doFilter(AuthMethodFilter.java:115) 
    	at com.simplicite.webapp.filters.AbstractFilter.doFilter(AbstractFilter.java:37) 
    	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:193) 
    	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:166) 
    	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:202) 
    	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:96) 
    	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:490) 
    	at com.simplicite.tomcat.valves.APISessionValve.invoke(Unknown Source) 
    	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:139) 
    	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:92) 
    	at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:678) 
    	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74) 
    	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:343) 
    	at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:408) 
    	at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:66) 
    	at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:853) 
    	at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1587) 
    	at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) 
    	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 
    	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) 
    	at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) 
    	at java.lang.Thread.run(Thread.java:748)

Envoie moi par mail les infos pour que je récupère ton module pour l’installer sur une instance cloud vièrge.

En effet c’est impossible d’investiguer un truc comme ça en aveugle (i.e. sans logs, sans accès au paramétrage, sans debuguer, …)

Bon j’ai créé une instance vierge https://sitesdaz.renault.simplicite.io (même mot de passe designer que celui que tu m’as donné par mail)

J’y ai importé le module exporté depuis ton instance + complété avec le code que tu m’as transmis par mail.

Je n’ai pas de pb visible…

Juste si je décommente la partie suivante du code:

ObjectField f = getField("sitesIdvReaId");
f.setVisibility(f.isEmpty() ? ObjectField.VIS_HIDDEN : ObjectField.VIS_BOTH);
f = getField("sitesIdvAcpId");
f.setVisibility(f.isEmpty() ? ObjectField.VIS_HIDDEN : ObjectField.VIS_BOTH);

J’ai alors un pb d’attribut sitesIdvAcpId inconnu à l’exécution:

CORED0001|system|com.simplicite.objects.RenaultSites.SitesRealEstateAssetIdentifierValue|getField|Error Object SitesRealEstateAssetIdentifierValue: unknown field sitesIdvAcpId.
ECORED0001|system|com.simplicite.webapp.ObjectContextWeb|setContext|Error Error in initList hook for object SitesRealEstateAssetIdentifierValue

Mais en tout cas pas de NPE ou de duplicate key…