Thanks! That solves my questions.
I just see close to me a situation that the upgrade to a higher version ( 16.2 to 18.1)
may trigger quite an effort on updating all developer's Studio. With all that "can never happen" ![]()
![]()
- Log in to post comments
Thanks! That solves my questions.
I just see close to me a situation that the upgrade to a higher version ( 16.2 to 18.1)
may trigger quite an effort on updating all developer's Studio. With all that "can never happen" ![]()
![]()
I was thinking about this issue from @Wolf Koelling
IRIS Quarterly Container only releases and Studio
"install some code on the target server" sounds to have the potential to work around his show stopper.
Hi John,
Would this include a certain level of independence between editing and Caché, Ensemble, IRIS version?
Especially a kind of "forward" compatibility as long as you don't go for new features?
Did you check it with Chrome or just the default browser ?
for similar reasons I have set my default browser to Chrome
I'm glad I could help the community with my answers and
I especially like to express my BIG THANK to my readers voting for me.
This clear and positive feedback is a strong motivation for me for the future years.
My interpretation of th eerror message is:
The JDBCdriver gets a request that it doesn't understand for a some reason but doesnt uncover the details.
The issue is to my understanding sowher in the Java part outside Caché.
I'd suggest to contact WRC as the know how to trace this and also understand the results.
You are right: LNX distrib + Win Distrib were the same build.
As far I remember from the version string "2018.1.1.643.0 " only "2018.1.1" is important.
And also the container should have $ZV to verify (No idea what's in there actually )
Hi Wolf,
I ran into a similar problem a few weeks ago: IRIS on Linux - no studio
My solution: Custom install on my local WIN10 desktop. Only the Studio (and ODBC drivers).
Nice side effect: the new IRIS-Studio also talks seamlessly to my local Caché.
My assumption: As it works for an isolated Linux it should work for Docker as well (if no firewall blocks you
)
HIVE docs on String Types shows me:
STRINGVARCHAR (Note: Only available starting with Hive 0.12.0)CHAR (Note: Only available starting with Hive 0.13.0and
Varchar types are created with a length specifier (between 1 and 65535), which defines the maximum number of characters allowed in the character string. If a string value being converted/assigned to a varchar value exceeds the length specifier, the string is silently truncated. Character length is determined by the number of code points contained by the character string.
Related to your ERROR that tells us that STRING has no size limit => it is a STREAM in our terms.
So if you don't convert a STRING to VARCHAR [ preferable VARCHAR(255) ] you won't be able to use an alphanumeric ID
You may, of course, add some artificial numbering of type BIGINT to be used as ID.
In any case, just with data type STRING I'd call this a rather a text file than an SQL usable table.
Without touching the original source you may need to write your own loader:
Using UUID is a .save way to have a UNIQUE Key.
And Open by Key is a stable way for access.
BUT be warned: replacing the default ID means locking you out from Bitmap indexing.
This might not be an issue with modestly sized tables.
With larger ones it may kill your query performance
After exercising this you may start to analyze how to run asynchronous web sockets also without additional JS stuff.
see more Using WebSockets (RFC 6455)
Jour problem is that morder**....js is not found in your CSP library structures.
Better start with the official example in namespace SAMPLES:
That one is really useful to start
I'm not sure if this is the question but I think
"*.data.*" could be covered by ?.E1".data.".E eventually instead of .E somewhat limited by .AN or .ANP
"Sample.*" could become ?1"Sample.".E Same for .ANP as above
And also in Unix/Linux.
It's important that the agents of all participants can talk to each other. (I just was hit by a misconfigured firewall)
- Also check if ISCAgent is active running.
- next check if you can have a network connection between both mirror menbers
(e.g accessing Mgmt Portal from Primary to Backup und and reverse)
You were faster in typing ![]()
Hi Scott,
I don't have an example, just an idea.
The best engine for javaScript is node.js.
You may execute your JS with node.js on command line (over $ZF or a CommandPipe) and collect the result yourself or
by Using Node.js with Caché. with direct object access.
I've seen something here:
.png)
Might be a quick hack.
Thanks Salva!
A real Xmas posting! For me. I like it!
Regards and best wishes, Robert
the error message indicates that you try ECP access to a Mirror DB
Not all mirror configurations allow ECP access - the difference is read/write access and synch/async mirror
using a virtual IP address adds another level of complexity
Check your config against these rules: Configuring ECP Connections to a Mirror
The graphics in Mirroring may help to identify your situation.
To connect a Caché DB on a diffe3rnt serve use ECP
For other SQL DBs but also (Caché) see Using the Caché SQL Gateway
2 main options.
Within a persistent class you have also a Storage definition describing the structure of the stored data.
In addition access code for SQL projection is generated during the compile process.
Using Inspector in Caché Studio you will find a bunch of SQL specific parameters to control the presentation of your class and properties.
The whole model of describing Objects + SQL tables is known as Unified Data Architecture.
This link tells you more Objects, SQL, and the Unified Data Architecture
Your snip out from the full WSDL uses XML references s0: and s1:
similar to
In addition I'm somewhat surprised to see in your operation
<input message="s0:myOperationSoapIn"/>
<output message="s0:myOperationSoapOut"/>
<fault message="s0:MyFault" name="MyFault"/>
This means you have 1 input msg but 2 different output msg.
If you see the Caché side
- input triggers a ClassMethod
- it returns something or returns an error
I'm not aware of some default logic to return a fault message that is generated.
Typically Success/Failure is signaled as part of the output message.
As a consequence manual modification of the generated code could be required to split
the return message into 2 different message types.
It's of cause some guessing behind as you didn't publish the full WSDL.
If the definition you get with ?WSDL contains already the missing parts, then
It may have been changed since your SOAP service in Caché was generated.
You just generate your SOAP service with a different class name again using the new WSDL an then
either
- use the new set of classes
or
- check the differences to your actual services. And adapt it manually.
I'd assume it isn't much more than a property or a serial class. No magic.
This indicates that GROUP BY is to slow to answer in time.
If the selectivity of field1 is very low this may take quite a while.
The closer field1 is to unique the longer it takes as it produces a large resultset.
You may allow a longer timeout. But pls. don't ask me how. Some other experts may know.
If your GCT.PA_Data is a huge thing you may slice it into pieces by year, id, ... whatever seems useful:
Example:
SELECT field1 F1, count(field2) CntF2
FROM (
SELECT filed1,field2 from GCT.PA_Data
where field1 is not null and ID between 1 and 100000
) group by field1
This is not the final solution but a way to understand the limits of your server.
BTW:
an index on field1 might be useful anyhow
Example
Index ff on field1 [ DATA = filed2 ] ;
with this construct, your query will only access this special index
instead of the full record and NULL fields are all grouped in advance.
It is kind of a "materialized view" that other DBs offer.
Software caused connection abort
As you didn't supply many details the is more than 1 reason
Try to run your query on the live server and see its performance.
Try a simple query like "SELECT top 3 field1,field2 FROM GCT.PA_Data2" just to see if you have access rights at all.
Your Caché installation has an example in namespace SAMPLES
http://localhost:57772/csp/samples/websocketdemo.csp
It works in synchronous mode.
WebSocket Sample
This sample uses the WebSocket protocol to communicate with the server.
Note that it requires a web server compatible with web sockets and the browser also support web sockets,
so the following versions or later IE10, Firefox 11, Chrome 16 Safari 6, Opera 12.
I used Caché default login page as an example as it is a very easy one to serve.
http://localhost:57772/csp/sys/%25CSP.Login.cls
Take a look to YOUR login page to see if you really want to do this.
First, you do the Get() to fetch your login page
USER>Write oReq.Get("csp/sys/%2525CSP.Login.cls"),! ZWRITE oReq
1
oReq=<OBJECT REFERENCE>[1@%Net.HttpRequest]
+----------------- general information ---------------
| oref value: 1
| class name: %Net.HttpRequest
| reference count: 2
+----------------- attribute values ------------------
| AcceptGzip = 1 <Set>
| (BinaryContent) = 1
|(Cookies("127.0.0.1","/","CSPWSERVERID")) = $lb("144BiVjd","",0)
|(Cookies("127.0.0.1","/","CacheBrowserId")) = $lb("fCl8qBvDJnIKcns4iOsFlw--","",0)
|(Cookies("127.0.0.1","/csp/sys","CSPSESSIONID-SP-57772-UP-csp-sys-")) = $lb("001000010000G5M1GDe9SeGk57MvZN91AeLNZ1wkcwbfb5gBQs","",0)
| (Device) = "|TCP|36057801"
| (DeviceState) = $lb("127.0.0.1",57772,"",8080,"","0","",0)
| (ErrorOnNextOpen) = 0
| FollowRedirect = ""
| ForceReuseDevice = 0
| HTTPVersion = 1.1
| (Headers) = 5
|(Headers("ACCEPT-ENCODING")) = "gzip"
|(Headers("ACCEPT-ENCODING",0)) = "Accept-Encoding"
|(Headers("ACCEPT-ENCODING",1)) = 3
|(Headers("ACCEPT-ENCODING",2)) = ""
| (Headers("HOST")) = "127.0.0.1"
|(Headers("HOST",0)) = "Host"
|(Headers("HOST",1)) = 2
|(Headers("HOST",2)) = ""
|(Headers("REFERER")) = "http://127.0.0.1:57772/csp/sys/%2525CSP.Login.cls"
|(Headers("REFERER",0)) = "Referer"
|(Headers("REFERER",1)) = 4
|(Headers("REFERER",2)) = ""
|(Headers("USER-AGENT")) = "Mozilla/4.0 (compatible; Cache;)"
|(Headers("USER-AGENT",0)) = "User-Agent"
|(Headers("USER-AGENT",1)) = 1
|(Headers("USER-AGENT",2)) = ""
| Https = 0
| LocalInterface = ""
| Location = "csp/sys/%2525CSP.Login.cls" <Set>
|NoDefaultContentCharset = 0
| OpenTimeout = ""
| Password = ""
| Port = 57772 <Get>
| PostGzip = 0
| ProxyHTTPS = 0
| ProxyPort = 8080
| ProxyServer = ""
| ProxyTunnel = 0
| ReadRawMode = 0
| RecChars = 2262
| (RedirectNo) = 0
|RequestHeaderCharset = "UTF-8"
| ResponseStream = ""
| ReturnGzipResponse = 1
| SOAPBuffering = ""
|SSLCheckIdentityInternal = ""
|SSLCheckServerIdentity = 1
| SSLConfiguration = ""
| SSLError = ""
| SentChars = 354
| SocketTimeout = 115
| TTFC = .00366
| TTLC = .005715
| (TimeLastUsed) = 5615429668.294
| Timeout = 30
| Username = ""
| WriteRawMode = 0
| WriteTimeout = -1
+----------------- swizzled references ---------------
| i%EntityBody = "" <Set>
| r%EntityBody = "2@%Library.GlobalBinaryStream" <Set>
| i%HttpResponse = ""
| r%HttpResponse = "3@%Net.HttpResponse"
+--------------- calculated references ---------------
| Authorization <Get,Set>
| ContentCharset <Get,Set>
| ContentEncoding <Get,Set>
| ContentLength <Get>
| ContentType <Get,Set>
| Date <Get,Set>
| From <Get,Set>
| IfModifiedSince <Get,Set>
| Pragma <Get,Set>
| ProxyAuthorization <Get,Set>
| Referer <Get,Set>
| Server <Get,Set>
| UserAgent <Get,Set>
+------------------------------------------------------
Next you refer to the response and get all Headers and Cookies
USER>s oRes=oReq.HttpResponse ZW oRes
oRes=Finally you access the page you got (a GZ Stream)
USER>set oData=oRes.Data ZW oData-
I have marked "CacheUserName" , "CachePassword" that you have to submit for Login.
I did something similar in past. %Net.HttpRequest is the right way
You have to mimic a browser and have to find the right Form and Input tags to fill USER and PW typically.
The risk you have:
- you may get a awfull amount of JS and CSS stuff.
- If it isn't a classic form you may need to reverse engineer all the dynamics behind (like a browser).
It may end up with a very tricky coding exercise.
Changing the rules during a competition is a very bad idea.
Participating in a game includes accepting the published and know rules. Accept it or run a different game.
Even my grand-children starting from 5 understand this.