Пытаюсь разобраться...

  • Автор темы Автор темы allex
  • Дата начала Дата начала
Если между модулями, написанными на Java, нельзя передавать объекты (в данном случае Database), то зачем тогда она вообще нужна? И смысл этих библиотек? Это что, в иерархии библиотек-классов придётся в каждой получать Database по ReplicaiD??
если код юзать в контексте LS2J - низя юзать нотусёвые объекты (в ёваном треде)
в остальных случаях - этого ограничения нет, но при "умирании" (выходе их агентской треды - завершении агента), LDN объекты "прибиваются"

Добавлено:
в дебагер вообще ни чего не выводится.
в дебагер чего? java код дебажится "отличными" от LS дебагера методами, и принты выводятся в java консоль
 
Если это код агента, то функция должна называться NotesMain
Код:
public void NotesMain() {
//...
}
 
Уже поправил
но в консоль ни чего не выводится
 
Добавьте вывод в консоль в самом начале агента (перед Session session = getSession();) для проверки запуска функции. Да, и с регистром не напутали, а то NotesMain и notesmain для явы две разные функции.
 
см. статистику запуска агента или пущайте прям в дизигнере, и еще - тип агента (запуска) какой
 
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Вот код с принтами</div></div><div class="sp-body"><div class="sp-content">
Код:
import lotus.domino.*;
import java.util.Vector;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.ResultSet;
public class JavaAgent extends AgentBase {
public void NotesMain(String id) {
System.out.println("void инициировалась");
try {
Session session = getSession();
AgentContext agentContext = session.getAgentContext();
Statement stmt = null;
ResultSet rs = null;
Connection conn = null;
System.out.println("сессии инициировались");
try {
Class.forName("com.mysql.jdbc.Driver").newInstance();
System.out.println("Драйвер загружен");
}
catch (Exception ex)
{
System.out.println("SQLException: " + ex.getMessage());
}

try {
conn = DriverManager.getConnection("jdbc:mysql://konect");
System.out.println("Подключение установлено");	
} 
catch (SQLException ex)
{
System.out.println("On connect SQLException: " + ex.getMessage());
System.out.println("SQLState: " + ex.getSQLState());
System.out.println("VendorError: " + ex.getErrorCode());
}
try {
stmt = conn.createStatement();
id = "4isNNEkEA8kNhn9B";
String Query = "SELECT * FROM pr_data WHILE auth=" + '"'+ id +'"';
System.out.println("Запрос" + Query);

try {
rs = stmt.executeQuery(Query);
System.out.println("Запрос выполняется");
}
catch(SQLException ex)
{
System.out.println("on JOIN SQLException: " + ex.getMessage());
System.out.println("SQLState: " + ex.getSQLState());
System.out.println("VendorError: " + ex.getErrorCode());
} 
Database db = agentContext.getCurrentDatabase();
Document doc = db.createDocument();
Vector vauth = new Vector();
Vector vfio = new Vector();
Vector vaddress = new Vector();
Vector vemail = new Vector();
Vector vmessage = new Vector();

while (rs.next()) {
// retrieve and print the values for the current row
int theid= rs.getInt("id");
String fname = rs.getString("fname");
String mname = rs.getString("mname");
String lname = rs.getString("lname");
String message = rs.getString("message");
String email = rs.getString("email");
String auth = rs.getString("auth");
String pindex = rs.getString("pindex");
String pregion = rs.getString("pregion");
String plocality = rs.getString("plocality");
String pstreet = rs.getString("pstreet");
String phome = rs.getString("phome");
String pcorps = rs.getString("pcorps");
String pflat = rs.getString("pflat");
System.out.println("Переменные присвоены");
System.out.println("auth_code= " + auth );
System.out.println("id= " + theid + " ---> ФИО = " + fname + " " + mname +" "+ lname);
System.out.println("id= " + theid + " ---> Почтовый адрес = " + pindex +" "+ pregion +" "+ plocality +" "+ pstreet +" "+ phome +" "+ pcorps +" "+ pflat);
System.out.println("id= " + theid + " ---> Электронныйый адрес = " + email);
System.out.println("id= " + theid + " ---> Текст обращения = " + message );
System.out.println("_________________________________");

vauth.addElement(auth);
vfio.addElement(fname + " " + mname +" "+ lname);
vaddress.addElement(pindex +" "+ pregion +" "+ plocality +" "+ pstreet +" "+ phome +" "+ pcorps +" "+ pflat);		
vemail.addElement(email);	
vmessage.addElement(message);	
}
doc.replaceItemValue("Form", "rlo");
doc.appendItemValue("FIO", vfio);
doc.appendItemValue("Address", vaddress);
doc.appendItemValue("email", vemail);
doc.appendItemValue("Annotation", vmessage);
doc.computeWithForm(false, false);
doc.save();
} finally {
if (rs != null) {
try {
rs.close();
} catch(SQLException ex) {} 
rs = null;
} //if
if (stmt != null) {
try {
stmt.close();
} catch(SQLException ex) {} 
stmt = null;
} //if
} //finally


} catch(Exception e) {
e.printStackTrace();
}
}
}

И ни чего не пишется
Тп запуска:
triger - из меню
target - нет
Base Class - JavaAgent
Shared
 
если код юзать в контексте LS2J - низя юзать нотусёвые объекты (в ёваном треде)
То есть? Если у меня в Java-библиотеке есть использование Database, то мне в LS нельзя обращаться к NotesDatabase? Или вообще ко всем Notes...-объектам?
 
То есть? Если у меня в Java-библиотеке есть использование Database, то мне в LS нельзя обращаться к NotesDatabase? Или вообще ко всем Notes...-объектам?
Если в ява-библиотеке есть метод, принимающий в качестве параметра Database, то его нельзя вызывать через LS2J с NotesDatabase (аналогично для других Notes-классов).
 
низя вызывать юзать нотес объкты, в джава, если этот код будет вызван через бридж (LS2J)
в LS как-раз можно ;)
если вызвать такой код, через бридж, просто буде ошибка, когда, при вызове метода, джава обратиться к LDN объекту
 
public void NotesMain(String id) — это не public void NotesMain()!!! Попробуйте убрать параметр.

Кстати, а что в логе на момент запуска агента?
 
Если в ява-библиотеке есть метод, принимающий в качестве параметра Database, то его нельзя вызывать через LS2J с NotesDatabase (аналогично для других Notes-классов).
в бридже невозможно передавать большинство объектов, ограничение будет как со стороны LS (нет биндинга), так и джава, исключения я перечислил выше
 
Все прошло отлично до момента запроса


<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">Вот лог </div></div><div class="sp-body"><div class="sp-content">void инициировалась
сессии инициировались
Драйвер загружен
Подключение установлено
ЗапросSELECT * FROM pr_data WHILE auth=\"4isNNEkEA8kNhn9B\"
on JOIN SQLException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near \'WHILE auth=\"4isNNEkEA8kNhn9B\"\' at line 1
SQLState: 42000
VendorError: 1064
java.lang.NullPointerException
at JavaAgent.NotesMain(Unknown Source)
at lotus.domino.AgentBase.runNotes(Unknown Source)
at lotus.domino.NotesThread.run(Unknown Source

Кстати в java агентах можно получить documentcontext, как в ls-агентах
 
тогда перехватывайте все исключения и печатайте трэйс стэка
 
lmike, nvy
Не пойму... Я как-то думал, что объекты Notes-классов можно использовать только в LS, объекты Java-классов - только в Java.. а их оказывается можно как-то передать и использовать? Т.е. в Java-коде можно как-то использовать NotesDatabase??
 
В java агентах можно получить documentcontext, как в ls-агентах ?
 
lmike, nvyНе пойму... Я как-то думал, что объекты Notes-классов можно использовать только в LS, объекты Java-классов - только в Java.. а их оказывается можно как-то передать и использовать? Т.е. в Java-коде можно как-то использовать NotesDatabase??
Как раз нет, внимательно перечитайте посты выше.


Добавлено:
В java агентах можно получить documentcontext, как в ls-агентах ?
agentContext.getDocumentContext()
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!