go to post Dmitry Maslennikov · Jan 1, 2017 You should look at the requirements part at this download Atelier page. Where you will see that Caché should be licensed.
go to post Dmitry Maslennikov · Dec 20, 2016 Before doing such task, you should know a bit more about technologies which you going to use. PDF - it is a binary format, so, you can't just copy text from PDF. Some of the files may contain a text, some just a picture with text. And to get plain text from PDF, you have to use some third party OCR software. One of the leaders is ABBYY FineReader it is proprietary, but if you need you can find some products for free.
go to post Dmitry Maslennikov · Dec 9, 2016 I would suggest that you have authorization in your web-application, and SoapUI fails to load it because it is not authorized. follow the documentation and add it to the URL. &CacheUserName=_SYSTEM&CachePassword=SYS
go to post Dmitry Maslennikov · Dec 8, 2016 When you want to use Ensemble on Docker, it means that you need some integration with some external services. When you have to connect to some external services, no need any extra actions. But when you should use some shared folder, or some own internal services, which will be used by others, you have to expose some TCP ports, or volumes, and do some changes in a running process for this container. But you can use some network settings for the container, and in this case, Ensemble will be as a usual machine in your network, and you don't need to change any settings when you have to add some new internal service into Ensemble Production. Windows also supports Docker but from version Server 2016. Windows also supports windows containers, but I don't know yet, is it supported to run windows version of Ensemble or not. What you need to start your first Ensemble container within Ensemble application. The easiest way is to define some %Installer Manifest. When you can create a new database, load and compile your code, do some changes in an Ensemble settings. There are some different examples of Dockerfile. Quite simple, with only Ensemble. Or even with Apache inside, for some web application. You can also look at this example of Dockerfile ### Cache ### FROM tutum/centos:latest MAINTAINER Dmitry Maslennikov <Dmitry.Maslennikov@csystem.cz> # update OS + dependencies & run Caché silent instal RUN yum -y update \ && yum -y install which tar hostname net-tools wget \ && yum -y clean all \ && ln -sf /etc/locatime /usr/share/zoneinfo/Europe/Prague ARG WRC_USERNAME ARG WRC_PASSWORD ARG cache=ensemble-2016.2.1.803.0 ARG globals8k=512 ARG routines=32 ARG locksiz=117964800 ENV TMP_INSTALL_DIR=/tmp/distrib # vars for Caché silent install ENV ISC_PACKAGE_INSTANCENAME="ENSEMBLE" \ ISC_PACKAGE_INSTALLDIR="/opt/ensemble/" \ ISC_PACKAGE_UNICODE="Y" \ ISC_PACKAGE_CLIENT_COMPONENTS="" \ # vars for install our application ISC_INSTALLER_MANIFEST=${TMP_INSTALL_DIR}/Installer.cls \ ISC_INSTALLER_LOGFILE=installer_log \ ISC_INSTALLER_LOGLEVEL=3 \ ISC_INSTALLER_PARAMETERS="routines=$routines,locksiz=$locksiz,globals8k=$globals8k" # set-up and install Caché from distrib_tmp dir WORKDIR ${TMP_INSTALL_DIR} # our application installer COPY Installer.cls . # custom installation manifest COPY custom_install-manifest.isc ./$cache-lnxrhx64/package/custom_install/manifest.isc # license file COPY cache.key $ISC_PACKAGE_INSTALLDIR/mgr/ # cache distributive RUN wget -qO /dev/null --keep-session-cookies --save-cookies /dev/stdout --post-data="UserName=$WRC_USERNAME&Password=$WRC_PASSWORD" 'https://login.intersystems.com/login/SSO.UI.Login.cls?referrer=https%253A//wrc.intersystems.com/wrc/login.csp' \ | wget -O - --load-cookies /dev/stdin "https://wrc.intersystems.com/wrc/WRC.StreamServer.cls?FILE=/wrc/distrib/$cache-lnxrhx64.tar.gz" \ | tar xvfzC - . \ && chmod +r ./$cache-lnxrhx64/package/custom_install/manifest.isc \ && ./$cache-lnxrhx64/cinstall_silent custom_install \ && cat $ISC_PACKAGE_INSTALLDIR/mgr/cconsole.log \ && cat $ISC_PACKAGE_INSTALLDIR/mgr/installer_log \ && ccontrol stop $ISC_PACKAGE_INSTANCENAME quietly \ && rm -rf $TMP_INSTALL_DIR # Caché container main process PID 1 (https://github.com/zrml/ccontainermain) RUN curl -L https://github.com/daimor/ccontainermain/releases/download/0.1/ccontainermain -o /ccontainermain \ && chmod +x /ccontainermain # TCP sockets that can be accessed if user wants to (see 'docker run -p' flag) EXPOSE 57772 1972 22 ENTRYPOINT ["/ccontainermain", "-cconsole", "-i", "ensemble"] And installer manifest, with just some settings. Class Temp.Installer { XData setup [ XMLNamespace = INSTALLER ] { <Manifest> <If Condition='+"${routines}"=0'> <Var Name="routines" Value="32"/> </If> <If Condition='+"${globals8k}"=0'> <Var Name="globals8k" Value="256"/> </If> <If Condition='+"${locksiz}"=0'> <Var Name="locksiz" Value="1179648"/> </If> <SystemSetting Name="Config.config.routines" Value="${routines}"/> <SystemSetting Name="Config.config.globals8kb" Value="${globals8k}"/> <SystemSetting Name="Config.config.locksiz" Value="${locksiz}"/> </Manifest> } ClassMethod setup( ByRef pVars, pLogLevel As %Integer = 3, pInstaller As %Installer.Installer, pLogger As %Installer.AbstractLogger ) As %Status [ CodeMode = objectgenerator, Internal ] { do %code.WriteLine($char(9)_"set pVars(""CURRENTCLASS"")="""_%classname_"""") do %code.WriteLine($char(9)_"set pVars(""CURRENTNS"")="""_$namespace_"""") #; Let our XGL document generate code for this method. Quit ##class(%Installer.Manifest).%Generate(%compiledclass, %code, "setup") } } In this example, Ensemble distributive will be downloaded directly from the WRC. to build this image docker build -t ensemble --build-arg WRC_USERNAME=******* --build-arg WRC_PASSWORD=******* . and to run the container from this image docker run -p 57772:57772 ensemble
go to post Dmitry Maslennikov · Dec 3, 2016 Most companies doing their backup over the network. It depends on how big your database, and you should estimate, how quickly it will be in your case theoretical and in practice. Unfortunately, on some old versions of Caché, in some cases there are some lack of performance and backup may work not so fast as expected. We had such issue with 2012.2.And a little hint, to do backup over the network, Caché instance should have an access. And if your Caché works on Windows, you should change user in settings for Caché Service, to some domain user, which will have access to write.
go to post Dmitry Maslennikov · Nov 28, 2016 Look at this open source project, it is a spatial index for Caché, this project was done at the first InterSystems hackathon in Moscow. And the article in Russian about it.
go to post Dmitry Maslennikov · Nov 27, 2016 As I understand you have to connect to another server, so, you can use class %IO.Socket. With methods Write/Read to send/retrieve data. If you have to create an own server, which will be used by some other servers, you can use %IO.ServerSocket class.
go to post Dmitry Maslennikov · Nov 25, 2016 You got this error because you tried to use ODBC connection, but you say that you have JDBC connection. You should understand that it is different, with different ways to connect. If you really use JDBC, you can create the new connection to the Oracle database, with a help from this article in the documentation. And with a code something like this, you can retrieve needed data from that server. #dim %JDBCGateway As %Net.Remote.Java.JDBCGateway set conn=$system.SQLGateway.GetJDBCConnection("cache2samples") if conn'="" { set cmd = "SELECT top 10 id,ssn,name,age,dob FROM Sample.Person" set st = %JDBCGateway.prepareStatement(conn,cmd) set %JDBCGateway.StatementCache(conn) = st set query = %JDBCGateway.execQuery(st) set columns=%JDBCGateway.getColumnCount(st) write ! set pos=0 for i=1:1:columns { set name=%JDBCGateway.getColumnName(st,i) set size=%JDBCGateway.getColumnDisplaySize(st,i) set pos(i)=pos set pos=pos+size+1 write name,?pos } while %JDBCGateway.next(st) { write ! for i=1:1:columns { write ?pos(i),%JDBCGateway.getString(st,i) } } }
go to post Dmitry Maslennikov · Nov 24, 2016 In password security most valuable is entropy.And a bit of humor about it.It means, that even if you have a quite hard pattern for the password, but some password will not be strong enough.On the internet, you can find some online calculators, for the password, when you can check how different symbols change difficulty. For example http://www.passwordmeter.com/
go to post Dmitry Maslennikov · Nov 23, 2016 in this mode, you should have access to call ^SECURITY tool, where you can what you want. %SYS>d ^SECURITY 1) User setup 2) Role setup 3) Service setup 4) Resource setup 5) Application setup 6) Auditing setup 7) Domain setup 8) SSL configuration setup 9) Mobile phone service provider setup 10) OpenAM Identity Services setup 11) Encryption key setup 12) System parameter setup 13) X509 User setup 14) Exit Option? 1 1) Create user 2) Edit user 3) List users 4) Detailed list users 5) Delete user 6) Export users 7) Import users 8) Exit
go to post Dmitry Maslennikov · Nov 23, 2016 Everything that you should do, to support https, is to configure your web server. As you use Apache, you should configure it, by any of tutorials, which you can find in the internet. Nothing should be done from Caché side, it is should work in any case.You should check settings for you Apache server, to be sure that nothing wrong there, and it works well, you can also check it with some static files, like html.
go to post Dmitry Maslennikov · Nov 23, 2016 ccontrol works on windows systems, but not in this way as expected on Unix systems.Anyway, rename instance possible, but it would be a very difficult to get working system after that. Just because does not enough just rename it. You should find all mentions of this name inside of Cache and rename it too. So, I would recommend to install new system near and move your configuration from old one.
go to post Dmitry Maslennikov · Nov 22, 2016 JDBC doesn't have any directives in this case, but I think if you ask InterSystems via WRC, about this feature, they may add it in new versions.
go to post Dmitry Maslennikov · Nov 22, 2016 There are two examples, at code.intersystems.comFrom Eduard, quite simpleAnd mine, with %Installer manifest
go to post Dmitry Maslennikov · Nov 20, 2016 SAMPLES>do $system.OBJ.ExportPackage("Sample","samples.xml") Exporting class: Sample.Address Exporting class: Sample.Company Exporting class: Sample.CustomResultSet Exporting class: Sample.Customer Exporting class: Sample.Employee Exporting class: Sample.Installer Exporting class: Sample.ListOfPersonIdentification Exporting class: Sample.MyException Exporting class: Sample.Person Exporting class: Sample.PersonIdentification Exporting class: Sample.ResultSets Exporting class: Sample.Task Exporting class: Sample.TaskExample1 Exporting class: Sample.TaskExample2 Exporting class: Sample.TaskExample3 Exporting class: Sample.USZipCode Exporting class: Sample.Utils Exporting class: Sample.Vendor
go to post Dmitry Maslennikov · Nov 19, 2016 It is not so simple. Before decoding, you should strip any special characters, like line endings. Then you should read input stream in fixed size devisable by 4, and decode this value. set stream1=##class(%Stream.GlobalBinary).%New() set stream2=##class(%Stream.GlobalBinary).%New() while 'base64.AtEnd { set temp=base64.Read() set temp=$translate(temp, $c(13,10)) do stream1.Write(temp) } do stream1.Rewind() while 'stream1.AtEnd { set temp=stream.Read(4000) set temp=$system.Encryption.Base64Decode(temp) do stream2.Write(temp) }
go to post Dmitry Maslennikov · Nov 18, 2016 cconsole.log, it is a server's main log, where logged start/stop and some crash errors. You have an error when communication was terminated from the server side, in this case, I may expect that process which worked on it was crashed unexpected, and it should be logged there.
go to post Dmitry Maslennikov · Nov 9, 2016 It doesn't matter what you have on server side you connect for. And it does not work, just because this server did not get what it is expected. And you should know exactly what it expect, you can update your post and add some examples from fiddler, so we can see what you want to achieve with Caché.
go to post Dmitry Maslennikov · Nov 4, 2016 And also, I forgot to mention about method CreateDirectoryChain in %File class. And you should use it, if you want just create a folder. But back to $zf, can you try this command ? set cmd="mkdir e:\Sample\new" > output.log 2> output.log" set res=$zf(-1, cmd) and what will be in res variable, and in output.log file which you can find in database folder for your namespace.