Pregunta
· 29 ene, 2024

¿Como proteger el código de ciertos paquetes?

Buenos días.

Queremos distribuir y proporcionar desarrollos, para Partners y Clientes, con los puedan configurar sus producciones creando Operaciones y Servicios de Negocio basados en Clases Base que ya hemos desarrollado y empaquetado, ellos luego podrán incluir sus propios mapeos, rutas y demás en sus producciones, pero sin poder acceder a la implementación de esas clases base que nosotros proporcionamos. Sería el equivalente a ofrecer una librería con objetos compilados en C y el archivo .H con sus interfaces, pero no el código.

Hemos leído que si sería posible hacer algo así, si a un namespace se asignan varias bases de datos, y una de ellas es la que está cifrada y contiene esas clases, protegidas de alguna forma, y luego esos paquetes de clases se mapean sobre la producción, pero no sabemos como se implementar esta solución.

Muchas gracias de antemano.

Product version: IRIS 2023.3
Comentarios (12)4
Inicie sesión o regístrese para continuar

Hola Miguel Angel, 

Lo que buscas se hace muy facil con lo que llamamos "deployed classes" o "deployed mode". Este es el método que usan la mayoría de clientes que quieren evitar tener el código visible y que se puedan modificar. 


En modo desplegado o deployed mode, el código de los métodos se eliminan y quedan en su forma compilada. Las clases en este modo no se pueden exportar ni compilar, pero sus subclases sí, siempre que no estén desplegadas.

 https://docs.intersystems.com/iris20233/csp/docbook/DocBook.UI.Page.cls?...

Écha un vistazo a la documentación y comprueba si os sirve. El método que comentas de las bases de datos encriptadas sería también posible, pero lo veo más enrevesado. 

Hola, estoy haciendo pruebas con la exportación del proyecto usando el DeployToFile, pero tengo problemas con los BusinessProcess.

Al exportarlo con DeployToFile, me añade las siguientes clases:

  • Ens.BP.MasterPendingResponse.cls
  • Ens.BusinessProcess.cls
  • Ens.BusinessProcessMessagesReceived.cls
  • Ens.BusinessProcessMessagesSent.cls

Pero al intentar importarlo en otro Namespace, me da error porque son clases del paquete Ens:

ERROR #5567: Class 'Ens.BP.MasterPendingResponse' is in a database you do not have write permissions on so it can not be compiled

> ERROR #5030: An error occurred while compiling class 'Ens.BP.MasterPendingResponse'

Solo me pasa con los BusinessProcess, con otras clases (mensajes, servicios, reglas...) funciona.

Creo que es por la recursividad. He probado a exportar sin recursividad (aunque no sé si estoy poniendo bien el flag), invocando do p.DeployToFile("C:\test.xml", "/norecursive", 1) pero sigue exportando esas clases.

Qué puedo hacer?

Acabo de conseguir encontrar las referencias a las clases. Al abrir el XML, buscando "<Sub>CLS</Sub>" los siguientes 4 nodos son las 4 clases que no quiero que importe:  

Eliminando estos 4 nodos, ya puedo importar el archivo deploy en otro servidor.

----------------------------------------

Aunque ahora tengo otro problema: un BusinessProcess con código funciona bien, pero un BusinessProcess con BPL, no funciona. Creo que es porque el BPL genera un XData, así que tendré que cambiar el BPL por un proceso con código. Pero por lo menos ahora puedo añadir al archivo Deploy los BusinessProcess :)