0

Мне нужна помощь в разработке в Objectcript Caché.Intersystems Caché Java Gateway

Я работаю в этой технологии несколько месяцев, и с некоторых дней я пытаюсь заставить Java Gateway работать без успеха. Предполагается, что я могу запустить java .class et .jar.
Но даже если это объясняется в документации, нет полного примера, и я получаю ошибки снова и снова. Итак, мне было интересно, может ли кто-нибудь предоставить полный пример, исправить меня или объяснить, что я делаю неправильно?

Вот что у меня есть на данный момент:

Мой простой класс Java - дата и время записи в файле

package packagename.packagename2; 

import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.time.LocalDateTime; 

public class entertest { 

    public int enter() throws IOException 
    { 
     File file = new File("D:\\path\\filemane.txt"); 

     if (!file.exists()) { 
       file.createNewFile(); 
     } 

     BufferedWriter bf = new BufferedWriter(new FileWriter(file.getAbsoluteFile())); 
     bf.write(LocalDateTime.now().toString()); 
     bf.close(); 

     return 1; 
    } 

} 

Мой ObjectScript код - определить мой шлюз и попытаться вызвать метод

Class domain.java.TestJava Extends EnsLib.HL7.Service.TCPService 
{ 

    Method OnProcessInput(pLine As Ens.StringContainer, Output pLineLeftOver As Ens.StringContainer) As %Status 
    { 
     Do ##super(pLine,pLineLeftOver) 
     Set val = 0 

     $$$TRACE(val) 

     Set gateway = ##class(%Net.Remote.Gateway).%New() 
     Do gateway.%Connect("127.0.0.1", 55553) 
     Do gateway.%Import("D:\\path\\entertest.jar") 

     Set javaObj = ##class(packagename.packagename2.entertest).%New(gateway) 
     Set val = javaObj.enter() 

     $$$TRACE(val) 

     Quit $$$OK 
    } 
} 

Я получаю сообщение об ошибке:

ERREUR <Ens>ErrException: <CLASS DOES NOT EXIST>zOnProcessInput+9^domain.java.TestJava.1 *packagename.packagename2.entertest 
    -- - connecté en tant que '-' numéro - @' Set javaObj = ##class(packagename.packagename2.entertest).%New(gateway)' 

Я использовал этот пост, но я не знаю, как он получил это работает: Intersystems Caché with Java Gateway - Pass parameter as java.io.FileInputStream

Я пытался добавить услугу «JavaGatewayService» в ансамбле производства. Не помогло ...
Я также попытался добавить объект шлюза в

Системное администрирование> Конфигурация> Возможности подключения> Шлюзы объектов.

Не помогло ... И я не знаю, если это поможет мне ...

Я из идей/вариантов.

Заранее спасибо.

ответ

0

я, наконец, удалось получить рабочий раствор, поэтому я добавляю это для совместного использования его, чтобы дать полностью шаг за шагом руководства.

Вот что мне нужно сделать:
В ансамбле: Я добавил службу «JavaGateway» из «EnsLib.JavaGateway.Service», выполненная с 127.0.0.1 в качестве адреса и 55555 в качестве порта (это значение по умолчанию I думать). Я также указал использование «Java 1.8» в JDKVersion.

Я написал это как Java код и экспортировать его в архив Jar:

package packageName; 

import java.io.BufferedWriter; 
import java.io.File; 
import java.io.FileWriter; 
import java.io.IOException; 
import java.time.LocalDateTime; 

public class EnterTestClass { 

    public long enter() throws IOException { 

     File file = new File("D:\\Path\\EnterTestClass.txt"); 

     if (!file.exists()) { 
      file.createNewFile(); 
     } 

     BufferedWriter bf = new BufferedWriter(new FileWriter(file.getAbsoluteFile())); 
     bf.write(LocalDateTime.now().toString()); 
     bf.close(); 

     return 1; 
    } 
} 

В студии, я создал новый класс.
Вот код:

Method OnProcessInput(pLine As Ens.StringContainer, Output pLineLeftOver As Ens.StringContainer) As %Status 
{ 
    Set val = 0 
    $$$TRACE(val) 

    Set gateway = ##class(%Net.Remote.Gateway).%New() 
    Do gateway.%Connect("127.0.0.1", 55555) 

    Set javaObj = ##class(packageName.EnterTestClass).%New(gateway) 
    Set val = javaObj.enter() 

    $$$TRACE(val) 
    Quit $$$OK 
} 

И я использовал меню «Сервис» -> «Расширения» -> «Java шлюз Assistant»: Я выбрал Jar File, дал полный путь, вышеуказанные значения 127,0 .0.1 и 555555, нажмите «Далее», ckecked класс для импорта и нажмите «Готово».

На правом дереве Studio (в представлении пространства имен) импортируемый класс должен быть видимым.

Затем он работал при запуске OnProcessInput (путем отправки запроса tcp в моем случае).

Благодарим DAiMor за помощь в некоторых моих ошибках и извините за мой английский, и если в меню нет точно имен, которые я написал (я бельгийский и работаю над французской версией Studio and Ensemble).

0

Для работы с Java в Ensemble вам необходимо использовать JavaGateway Service, и вы должны импортировать классы Java в Caché. Вы можете посмотреть на documentation для более подробной информации.
И вы можете получить ответ немного быстрее, если вы спросите у InterSystems Developer Community portal.

UPD: Вы пытались импортировать классы Java, но не в том направлении. Если вы посмотрите на документацию, вы увидите определение для метода %Import.

последний метод% импорта (JavaClass В% Строка, ByRef javaClasses Как % ListOfDataTypes, additionalClassPaths As% ListOfDataTypes = "", исключениям в% ListOfDataTypes = "")

Как вы можете видеть здесь первым параметром является javaClass. Таким образом, вместо

Do gateway.%Import("D:\\path\\entertest.jar") 

пытаются импортировать частности класса Java

Do gateway.%Import("packagename.packagename2.entertest") 
+0

Вы хотите сказать, что 'Do gateway.% Import (" D: \\ path \\ entertest.jar ")' не импортирует классы Java? И я уже несколько раз смотрел страницу документации, и это не помогло. Я не понимаю, что я делаю неправильно ... –

+0

Прости, я пропустил эту строку. Импорт импортирует классы Java, но по имени, а не по jar. Вы должны поместить там одно имя класса из java или список классов. Посмотрите документацию для этого класса: http://docs.intersystems.com/latest/csp/documatic/%25CSP.Documatic.cls?APP=1&LIBRARY=%25SYS&CLASSNAME=%25Net.Remote.Gateway – DAiMor

+0

Я просто пробовал с ' Импорт (% D: \\ path \\ entertest.class)), но я получаю ту же ошибку, что и выше '' в строке 'Set javaObj = ## class (packagename.packagename2 .entertest).% New (gateway) '... У вас есть еще один намек? –

Смежные вопросы