Вбудовування звітів Crystal Reports в веб-додатки за допомогою програми Rational Application Developer, частина 4. Вставка динамічних даних у звіти Crystal Reports, Інтеграція додатків і даних, Бази даних, статті

 

Це 4 частина в серії з 5 статей, яка має дати практичні навички з впровадження звітів Crystal Reports в веб-додатки за допомогою програми IBM Rational Application Developer. У попередніх частинах даної серії статей звіти Crystal Reports були попередньо розроблені і впроваджені в сторінки JavaServer або за допомогою компонента Report Page Viewer, або програмно, за допомогою програмного коду Java Reporting Component (JRC). Що особливо важливо, звіти проектувалися з фактичними даними, для чого було потрібно підключення конструктора звіту Crystal Report до таблиці бази даних під час проектування. У даній статті описується зовсім інший підхід, при якому звіт Crystal Report створюється на основі вибірки фактичних даних, але без фактичного підключення до бази даних під час проектування звіту. Потім складається програмний код JRC для створення джерела фактичних даних, які вставляються в звіт під час виконання. Перевага проектування звітів за допомогою вибіркових даних полягає в тому, що можна використовувати цей метод як обхідний прийом, якщо не можна підключитися до бази даних за допомогою впровадженого конструктора звітів Crystal Report, або з причини неправильної конфігурації середовища, або через те, що впровадженим конструктором звітів не підтримується пряме підключення Java Database Connectivity API (JDBC) до платформи бази даних.


Зразок сценарію розробки


У даній статті описуються основні кроки, необхідні для використання програми IBM Rational Application Developer для вставки динамічних даних у звіти Crystal Reports в веб-додатках.


1. Витяг даних за допомогою інструментарію обробки даних програми Rational Application Developer.


2. Створення нового веб-проекту за допомогою технології JavaServer Page (JSP) з включенням звітів Crystal Reports.


3. Програмна вставка динамічних даних у звіти Crystal Reports в сторінці JSP за допомогою коду Java Reporting Component (JRC) додатка Rational Application Developer з подальшим її виконанням на сервері.


4. Перемикання на використання інтерфейсу Java Naming and Directory Interface (JNDI) замість інтерфейсу Java Database Connectivity API (JDBC ™) для вставки динамічних даних у звіт Crystal Report.


У розглянутому прикладі використовується додаток Rational Application Developer Version 6.0.1.1 до встановлених по замовчуванню функціями програми Crystal Reports V XI. Більшість читачів, включаючи користувачів пробної версії Rational Application Developer, мають доступ до середовища тестування IBM WebSphere Version 6. Тому в даній статті зразок веб-додатки налаштовується для виконання в середовищі тестування WebSphere V6.0.2.5, а не V5.1. У ньому також використовується додаток IBM DB2 ® Universal Database v8.1, що містить базу даних SAMPLE, використовувану для створення звітів.


Додаткову інформацію про сценарії на основі Crystal Reports звітів можна знайти в довідці програми Application Developer (Help > Help Contents > Developing Web Applications > Crystal Reports > Creating Reports). З’ясувати, де можна завантажити пробні версії даних продуктів, можна в підрозділі IBM trial software в кінці цієї статті в розділі Resources. Можна скористатися посиланням Crystal Reports FAQs на сторінці підтримки Rational Application Developer Support (див. також Resources), Щоб знайти відповіді на будь-які питання з ліцензування, оновлення або з інших тем, що належать до інструментарію Crystal Reports в додатку Rational Application Developer.


Крок 1. Витяг вибіркових даних за допомогою інструментарію обробки даних програми Rational Application Developer


На цьому кроці використовується інструментарій бази даних для створення підключення до серверної бази даних. Для проектування звіту Crystal Report використовується, як приклад, вміст таблиці за крок 2.


1. У робочій області Rational Application Developer перейдіть до області Data (Window > Open Perspective > Data).


2. Клацніть правою кнопкою миші в області Database Explorer і виберіть потім New Connection.


3. Виберіть Choose a Database Manager and JDBC Driver (Див. рис. 1).


Рис. 1.Діалоговоеокно New Database Connection



 


4. Клацніть Next.


5. У діалоговому вікні New Database Connection введіть значення, показані на рис. 2, потім клацніть Test Connection.


Рис. 2. Діалогове вікно вказівки параметрів з’єднання



 


6. Якщо тестове підключення успішно, клацніть OK (Рис. 3).


Рис. 3. Успішне тестове підключення



 


7. Клацніть Finish в діалоговому вікні New Database Connection, щоб завершити з’єднання з базою даних. Програмою-майстром це з’єднання буде потім показано як Con1 в області Database Explorer.


8. Клацніть правою кнопкою миші таблицю Department в області Database Explorer, а потім клацніть Sample Contents, Як показано на рис. 4.


Рис. 4.Область Database Explorer



 


9. При правильній настройці бази даних в області DB Output на вкладці Results буде показано вибіркове вміст таблиці Department (мал. 5).



 


10. Далі перейдіть до вікна Web (Window > Open Perspective > Web). У вікні Web відкрийте область DB Output (Window > Show View > Other > Data > DB Output), Щоб можна було посилатися на вибіркове вміст таблиці Department при створенні звіту Crystal Report.


Крок 2. Створення нового веб-проекту за допомогою технології JavaServer Page із включенням звітів Crystal Reports


На цьому кроці створюється новий веб-проект зі сторінкою JSP. Потім буде створений новий звіт Crystal Report без фактичного підключення до якої-небудь бази даних, тому що цей звіт Crystal Report буде заснований на файлі опису даних. Цей файл визначення даних являє собою текстовий файл з роздільниками табуляції і з розширенням. Ttx (TTX), структура якого відповідає структурі таблиці. Кожен рядок у файлі TTX містить ім’я поля, тип даних, довжину (якщо тип даних – рядок) і одну порцію вибіркових даних. Все це можна забезпечити на основі вибіркового вмісту, показаного в області DB Output (рис. 5) На попередньому кроці.


Для створення нового веб-проекту виконайте наступні кроки.


1. У робочій області програми Rational Application Developer створіть новий динамічний веб-проект, вибравши File > New > Dynamic Web Project.


2. У вікні майстра New Dynamic Web Project, В діалоговому Dynamic Web Project введіть, показані на рис. 6.


Примітка.
Для даного прикладу необхідно вибрати для параметра Servlet version значення 2.4 і вказати IBM® WebSphereIBM® Application Server V6.0 як значення для параметра Target Server, як показано на рис. 6.


Рис. 6.Діалоговоеокно New Dynamic Web Project



 


3. Клацніть Next, А потім виберіть Crystal Reports features в діалоговому вікні Features, показаному на рис. 7.


Рис. 7.Діалоговоеокно Web Project features



 


4. Клацніть Finish.


5. У своєму веб-проекті клацніть правою кнопкою миші папку WebContent і потім виберіть New > Crystal Report.


6. У вікні New Crystal Report Wizard введіть значення, показані на рис. 8.



Рис. 8.Окно New Crystal Report Wizard



 

7. Клацніть Finish.


8. У діалоговому вікні Crystal Reports Gallery виберіть параметр Report Wizard (рис. 9).



Рис. 9.Діалоговоеокно Crystal Reports Gallery



 

9. Клацніть OK.


10. У діалоговому вікні Standard Report Creation Wizard натисніть Create New Connection > Field Definitions Only (Див. рис. 10).



Рис. 10.Окно Standard Report Creation Wizard



 

11. У діалоговому вікні Field Definitions Only (рис. 11) клацніть Create File, Щоб розпочати створення нового файлу визначення даних. В якості альтернативи можна натиснути кнопку з міткою , Щоб перейти до своєї файлової системи для вибору існуючого файлу визначення даних. Для даного прикладу, однак, створіть новий файл визначення даних, клацнувши Create File.


Рис. 11.Діалоговоеокно Field Definitions Only



 


12. Поверніться до рис. 5 на кроці 1 і введіть дані з першого стовпця (DeptNo) в діалогове вікно Database Definition Tool (Як показано на рис. 12), а потім клацніть Add, Щоб додати це поле до нового файлу визначення даних.


Рис. 12. Діалоговоеокно Database Definition Tool



 


13. Потім, аналогічно попередньому кроці, зверніться до таблиці 1 нижче, і по черзі введіть дані з усіх стовпців, які потрібно додати.


14. Потім клацніть Add в діалоговому вікні Database Definition Tool.


 


Таблиця 1. Поля, які необхідно додати до звіту Crystal Report

























Field Name


Field Type


Length


Sample Data


DeptName


String


30


Spiffy Computer Service Div.


MgrNo


String


6


000010


AdmrDept


String


3


A00


 

15. Після додавання всіх стовпців в діалоговому вікні Database Definition Tool відобразяться записи, показані на рис. 13.


Рис. 13. Діалогове вікно Database Definition Tool із записами всіх стовпців



 


16. Клацніть кнопку з хрестиком вгорі праворуч діалогового вікна Database Definition Tool, щоб закрити його.


17. Потім клацніть Yes в діалоговому вікні (рис. 14), щоб зберегти свої зміни у файлі Department_dataDefinition.ttx в своїй папці WebContent (рис. 15).


Рис. 14. Діалогове вікно для збереження змін у файлі визначення даних



 


Рис. 15. Збереження змін в папці WebContent



 

18. Після натискання кнопки Save в попередньому діалоговому вікні управління повертається діалогового вікна Field Definitions Only з повним шляхом до файлу визначення даних Department_dataDefinition.ttx, зазначеним в текстовому вікні Field Definition File (рис. 16). Потім клацніть Finish.


Рис. 16.Діалоговоеокно Field Definition File



 


19. У діалоговому вікні Data вікна Standard Report Creation Wizard виберіть новостворений файл визначення даних під вузла Field Definitions Only, А потім клацніть кнопку з міткою >, Щоб помістити свій файл визначення даних в розділ Selected Tables (рис. 17).


20. Потім клацніть Next.



 


21. У діалоговому вікні Fields (рис. 18) виберіть усі поля, які необхідно відобразити в звіті Crystal Report, а потім клацніть Next.



Рис. 18. Діалогове вікно Fields



 

22. У наступних двох діалогових вікнах, Grouping і Record Selection (мал. 19 і рис. 20), залишивши попередньо встановлені значення за замовчуванням, клацніть Next.


23. Залиште також значення за замовчуванням, вже встановлені в діалоговому вікні Report Style (рис. 21) і клацніть Finish.


Рис. 19. Діалогове вікно Grouping



 


Рис. 20.Діалоговоеокно Record Selection



Рис. 21. Діалогове вікно Report Style



 


24. Потім клацніть правою кнопкою миші папку WebContent і клацніть Refresh. В результаті в області Package Explorer під папкою WebContent з’явиться файл Department_dataDefinition.ttx.


25. Додатково можна двічі клацнути файл Department_dataDefinition.ttx, щоб відкрити його і впевнитися, що його вміст аналогічно показаному на рис. 22.


Рис. 22.Содержімоефайла Department_dataDefinition.ttx



 


Крок 3. Програмне створення об’єкта ResultSet з даними і його вставка в звіти Crystal Reports під час виконання


На даному кроці записується програмний код Java Reporting Component (JRC) для створення об’єкта ResultSet з даними і його вставки в звіт Crystal Report під час виконання.


1. Щоб ознайомитися з повною роздруківкою програмного коду, необхідно завантажити файл SampleWebApplication.zip з розділу Download і витягти його вміст в свою локальну файлову систему для перегляду одного з двох файлів:


·         SampleWebEAR.ear. Тут містяться всі файли, необхідні для даної статті (JSP, Crystal Report, файл визначення даних і так далі). Можна імпортувати їх у робочий простір програми Rational Application Developer по шляху File > Import > EAR file і потім змінити код, щоб вказати настройки для свого середовища.


·         jrc_set_resultset_datasource.jsp. Якщо вже успішно виконані два попередні кроки, то, швидше за все, немає необхідності змінювати файл SampleWebEAR.ear. Файл jrc_set_resultset_datasource.jsp містить лише відповідний вихідний код JRC з кроку 3 даної статті, і можна використовувати його окремо, якщо інші об’єкти вже встановлені.


2. Тепер змініть файл jrc_set_resultset_datasource.jsp, щоб він працював із звітом Crystal Report (setResultsetDatasource.rpt), створеним за крок 2.


3. Змініть значення змінної reportName, щоб вказати на звіт Crystal Report. Так як файл setResultsetDatasource.rpt був створений в папці WebContent, значення змінної reportName повинно бути setResultsetDatasource.rpt, як показано в уривку програмного коду Роздруківка 1.



Роздруківка 1. Зміна значення змінної reportName







               


final String reportName = “setResultsetDatasource.rpt”;


4. Змініть значення змінної WebProjectName, щоб вказати на ім’я свого веб-проекту, як показано в роздруківці 2



Роздруківка 2. Зміна значення змінної WebProjectName для вказівки на ім’я свого веб-проекту.







               


final String WebProjectName = “SampleWeb”;


5. В уривку програмного коду в роздруківці 3 з файлу jrc_set_resultset_datasource.jsp використовується інтерфейс API додатка BusinessObjects Java Reporting Component для створення об’єкта reportClientDocument з подальшою вказівкою для нього файлу setResultsetDatasource.rpt.



Роздруківка 3. Програмний код, яким створюється об’єкт reportClientDocument







               


/ / ———- Створення об’єкта ReportClientDocument ————-


ReportClientDocument reportClientDocument = new ReportClientDocument();


/ / ———- Вказівка ​​шляху до місця розташування джерела звіту ————-


/ / Відкриття звіту.


reportClientDocument.open(reportName, 0);


6. В уривку коду в роздруківці 4 показаний запит SQL, використовуваний як основа для створення об’єкта ResultSet.



Роздруківка 4. Запит SQL







               


/ / Запит SQL, який можна використовувати, можна отримати на початку створення звіту


безпосередньо з необхідного джерела даних, а потім


/ / В звітах Crystal Reports, пройшовши по шляху Database> Show SQL Query, щоб переглянути


запит SQL, створений для звіту.


String query= “SELECT DEPTNO, DEPTNAME, MGRNO, ADMRDEPT FROM DEPARTMENT “;


7. Виклик функції getResultSetFromJDBC (…) для отримання об’єкта ResultSet, який містить дані (див. роздруківку 5).



Роздруківка 5. Отримання об’єкта ResultSet, що містить дані







               


/ / Виклик простий службової функції для отримання набору Java Result, який буде


/ / Вставлений у звіт.


ResultSet resultSet = getResultSetFromJDBC(query,


ResultSet.TYPE_SCROLL_INSENSITIVE);


8. В роздруківці 6 показаний програмний код функції getResultSetFromJDBC (…). По суті, це простий код JDBC для підключення до бази даних DB2 із подальшим виконанням запиту до неї. Значення параметрів (Особливо jdbcurl and jdbcdriver) для конкретного постачальника баз даних можна знайти за посиланням JDBC Test в розділі Resources або в документації постачальника баз даних.



Роздруківка 6. Програмний код функції getResultSetFromJDBC (…)







               


private ResultSet getResultSetFromJDBC(String query, int scrollType)


throws SQLException, ClassNotFoundException {


/ / Введіть тут свої ім’я користувача і пароль


String username = “<Имя_пользователя_базы_данных>“;


String password = “<Пароль>“;


/ / Драйвер jdbc і url-адресу jdbc для db2 версій 7.1 і 8.1


/ / Змініть jdbcurl = jdbc: db2: <Імя_бази_данних>, щоб вказати свою


базу даних


String jdbcdriver = “COM.ibm.db2.jdbc.app.DB2Driver”;


String jdbcurl = “jdbc:db2:sample”;


/ / Завантаження класу jdbcdriver


Class.forName(jdbcdriver);


/ / Компонування підключення до DSN.


java.sql.Connection connection = DriverManager.getConnection(jdbcurl,


username,password);


/ / Витяг приписи з об’єкта підключення


Statement statement = connection.createStatement(scrollType,


ResultSet.CONCUR_READ_ONLY);


/ / Виконання запиту і повернення наборів результатів.


return statement.executeQuery(query);


}                                                           


                                                            


Виконання зразків програмного коду до наступного уривка і що вони представляють собою по відношенню до наступного уривку


Програмний код в роздруківці 7 витягує таблицю бази даних, так як неї будуть вставлятися динамічні дані. Потім код вставляє дані об’єкта java.sql.ResultSet в таблицю бази даних за допомогою методу setDataSource () об’єкта DatabaseController.



Роздруківка 7.Безподпісі







               


String tableName = reportClientDocument.getDatabaseController().getDatabase().getTables()


.getTable(0).getName();


/ / Вставка до звіту об’єкта Java Resultset. Потім він стає


/ / Джерелом даних для звіту, коли створюється сам звіт.


reportClientDocument.getDatabaseController().setDataSource(resultSet,


tableName , “resultTbl”);


                                                            


Примітка.
Програмним кодом уривка в роздруківці 7 вставляються дані в першу таблицу. Також передбачається, що об’єкт java.sql.ResultSet, званий resultSet, має структуру, що відповідає першій таблиці.


Потім в уривку програмного коду в роздруківці 8 з об’єкта reportClientDocument виходить об’єкт reportSource, який потім поміщається в область сеансу.



Роздруківка 8. Без підпису







               


/ / Кешування джерела для звіту ReportClientDocument в сеансі.


session.setAttribute(“reportSource”, reportClientDocument.getReportSource());


                                                            


Нарешті, в уривку програмного коду в роздруківці 9 перенаправляється обозреватель на сторінку перегляду (CrystalReportViewer_setResultSet.jsp).



Роздруківка 9.Безподпісі







               


request.getRequestDispatcher(“/CrystalReportViewer_


setResultSet.jsp”).forward(request,response);


                                                            


Виконання програмного коду setResultSet JSP


Розглянемо тепер програмний код файлу CrystalReportViewer_setResultSet.jsp.


Програмним кодом в роздруківці 10 виконуються наступні дії:


· Витяг з сеансу об’єкта reportSource;


· Створення екземпляра об’єкта CrystalReportViewer для створення об’єкта oCrystalReportViewer;


· Установка джерела для звіту даного об’єкта oCrystalReportViewer для витягнутого з сеансу об’єкта reportSource.



Роздруківка 10. Без підпису







               


/ / Витяг з сеансу об’єкта IReportSource і передача його програмі перегляду


IReportSource reportSource = (IReportSource)session.getAttribute(“reportSource”);


/ / ———- Створення програми перегляду і відображення звіту ————-


/ / Створення об’єкта CrystalReportViewer ————-


CrystalReportViewer oCrystalReportViewer =


new CrystalReportViewer();


/ / Установка властивості reportsource для програми перегляду


oCrystalReportViewer.setReportSource(reportSource);


                                                            


У наступних трьох уривках програмного коду встановлюються атрибути програми перегляду (об’єкт oCrystalReportViewer).


1. У першому, в роздруківці 11, вказується, чи стає програма перегляду власником сторінки. Установка для параметра setOwnPage значення true забезпечує деякі переваги, дозволяючи програмі перегляду повністю обробляти вміст, що включає об’єкти HTML. Це зменшує обсяг програмне коду, який необхідно додати в сторінку JSP, і дозволяє програмі перегляду автоматично визначати деякі настройки.



Роздруківка 11. Без підпису







               


oCrystalReportViewer.setOwnPage(true);


                                                            


2. В роздруківці 12 вказується, чи стає програма перегляду власником форми. Якщо управління сервером є власником форми, можна витягати і встановлювати значення для форми. Зокрема, якщо програма перегляду – власник форми, то вона може кешувати свій стан на стороні клієнта.



Роздруківка 12. Без підпису







               


oCrystalReportViewer.setOwnForm(true);


                                                            


3. В уривку програмного коду в роздруківці 13 вказується, чи використовувати для друку режим друку PDF або ActiveX, коли користувач натискає кнопку друку. У режимі друку PDF відображається документ PDF, а потім користувач може вибрати для нього виконання друку. У режимі друку ActiveX на комп’ютер клієнта завантажується елемент управління ActiveX для виконання завдання друку. Якщо режим друку ActiveX вибирається в системі, яка не підтримує елементи керування ActiveX, за замовчуванням встановлюється режим друку PDF.



Роздруківка 13. Без підпису







               


oCrystalReportViewer.setPrintMode(CrPrintMode.PDF);


/ / Іншим режимом друку є CrPrintMode.ACTIVEX


                                                            


Примітка.


· Додаткову інформацію про згадані вище та інших доступних атрибутах CrystalReportViewer можна знайти в довідці програми Rational Application Developer (Help > Help Contents > Developing Web Applications > Crystal Reports > API Reference > Viewer Java Classes > Crystal Report Viewer).


· У випадку виникнення будь-яких проблем при друку або експорту звітів Crystal Reports (особливо показаного нижче виключення) необхідно переглянути наступні посилання в розділі Resources, щоб отримати довідку щодо їх вирішення.


o    WebSphere server throws runtime errors while exporting or printing the Crystal Reports


o    How to resolve the runtime errors while printing or exporting Crystal Reports



Роздруківка 14.Безподпісі







               


java.lang.IllegalStateException: SRVE0199E: OutputStream


already obtained


                                                            


Нарешті, програмним кодом в роздруківці 15, обробляється і відображається звіт на веб-сторінці.



Роздруківка 15.Безподпісі







               


oCrystalReportViewer.processHttpRequest(request, response,


getServletConfig().getServletContext(), null);


                                                            


Щоб виконати сторінку на сервері IBM WebSphere і переглянути результати.


1. Клацніть правою кнопкою миші сторінку jrc_set_resultset_datasource.jsp в області Project Explorer і виберіть Run > Run on Server.


2. Вид в браузері сторінки JSP, яка містить звіт Crystal Report, наведено на рис. 23.



Рис. 23. Перегляд у браузері сторінки JSP, яка містить звіт Crystal Report



 


Порада:


· Необхідно зауважити, що функцією getResultSetFromJDBC() забезпечується введення імені користувача і пароля для бази даних, тому в даному випадку не виводиться сторінка входу в базу даних (рис. 24).



Рис. 24. Сторінка входу в базу даних



 


Переваги від напрямку, а не перенаправлення оглядача


· У частині 3 цієї серії статей в кінці файлу jrc_begin_here.jsp використовувався наступний програмний код (роздруківка 16) для перенаправлення оглядача на програму перегляду (CrystalReportViewer.jsp), якою потім звіт відображався в браузері.



Роздруківка 16. Без підпису







               


response.sendRedirect(“CrystalReportViewer.jsp”);


                                        


Однак в даному прикладі в кінці файлу jrc_set_resultset_datasource.jsp використовується програмний код, показаний в роздруківці 17, для напрями, А не перенаправлення, оглядача на програму перегляду (CrystalReportViewer_setResultSet.jsp).



Роздруківка 17.Безподпісі







               


request.getRequestDispatcher(“/CrystalReportViewer_setResultSet.jsp”)


.forward(request,response);


                                        


Причина цієї зміни в тому, що при спробі перенаправлення оглядача виводиться повідомлення про помилку виконання, показане в роздруківці 18.



Роздруківка 18. Без підпису







               


com.crystaldecisions.sdk.occa.report.lib.ReportSDKException: JDBC


Error: DSRA9110E: ResultSet is closed.—- Error code:-2147467259


Error code name:failed


at com.crystaldecisions.sdk.occa.report.lib.ReportSDKException.throw


ReportSDKException(Unknown Source)


                   


На рис. 25 показана відповідна помилка, яка відображається на веб-сторінці (замість звіту Crystal Report).


Рис. 25. Зараховано при перенаправленні браузера на файл CrystalReportViewer_setResultSet.jsp



При такому підході викликається функція getResultSetFromJDBC (), в якій вводяться ім’я користувача бази даних і пароль. Однак навіть у такому випадку, якщо джерело відображуваної веб-сторінки (яка містить звіт Crystal Report) видно в браузері, створюваний код HTML не містить значення імені користувача і пароля. Таким чином усувається проблема безпеки, пов’язана з жорстким програмуванням значень імені користувача і пароля в відображуваної сторінці JavaServer Page. Однак, як і в частині 3 цієї серії, в якості альтернативи функції getResultSetFromJDBC () можна використовувати інтерфейс JNDI. Детальний пояснення наводиться в наступному розділі.


Крок 4. Перемикання на використання інтерфейсу JNDI замість JDBC для вставки динамічних даних у звіти Crystal Reports


Якщо замість використання підключення JDBC необхідно використовувати інтерфейс JNDI для перегляду попередньо сконфигурированного джерела даних, щоб витягти набір ResultSet, можна замінити функцію, показану в Подшаг 9 кроку 3 даній статті, функцією getResultSetFromJNDI () (див. роздруківку 19).



Роздруківка 19. Без підпису







               


private ResultSet getResultSetFromJNDI(String query, int scrollType)


throws SQLException, ClassNotFoundException {


/ / Код перегляду джерела даних


Context ctx, env =null;


DataSource ds = null;


try{


ctx = new InitialContext();


ds = (DataSource) ctx.lookup(“java:comp/env/robinDatasource”);


}


catch(javax.naming.NamingException ne){


ne.printStackTrace();


}


Connection conn = ds.getConnection();


/ / Компонування підключення до DSN.


//java.sql.Connection connection = DriverManager.getConnection


(jdbcurl,username,password);


Statement statement = conn.createStatement(scrollType, ResultSet.CONCUR_READ_ONLY);


/ / Виконання запиту і повернення наборів результатів.


return statement.executeQuery(query);


}



Якщо обрана така альтернатива, необхідно виконати наступні кроки.


1. Спочатку, за допомогою функції getResultSetFromJNDI (), необхідно вказати наступні два об’єкти:


1. Джерело даних. У частині 2 цієї серії (див. розділ Resources) Перегляньте Подшаг з 1 по 12 кроку 4, щоб дізнатися, як вказати джерело даних з ім’ям jdbc / robinDS, яким використовується запис аутентифікації Java ™ Authentication and Authorization Service (JAAS) з ім’ям robinAlias ​​в дескрипторі розгортання веб-додатки (файл application.xml). Ці ім’я джерела даних і запис аутентифікації JAAS знадобляться в наступному кроці.


2. Посилання на ресурси. Прямі перегляди джерел даних інтерфейсом JNDI в серверах WebSphere V6 виключається. Замість цього необхідно створити посилання на ресурси в своєму дескрипторі розгортання веб-додатки (Файл web.xml), що вказує на джерело даних JNDI. Про переваги використання посилань на ресурси можна дізнатися в підрозділі Resource References розділу Resources.


2. Далі виконайте наступні кроки для посилання на ресурси в своєму джерелі даних JNDI.


A. Відкрийте файл web.xml подвійним клацанням миші по ньому в області Project Explorer.


B. Перейдіть на вкладку References.


C. Клацніть Add, щоб додати нове посилання на ресурси.


D. Потім виберіть Resource Reference в діалоговому вікні Add Reference (рис. 26) і клацніть Next.



Рис. 26. Виборпункта Resource reference вдіалоговомокне Add Reference



 


3. У діалоговому вікні Resource Reference введіть значення, показані на рис. 27, А потім клацніть Finish.



Рис. 27. Діалоговоеокно Resource Reference



 


4. На вкладці References в області WebSphere Bindings введіть вказані значення (рис. 28) Для створеної посилання на ресурс robinDatasource.


5. JNDI name: Введіть ім’я JNDI для свого джерела даних (jdbc / robinDS).


6. JAAS login configuration: Виберіть Use Default Method і введіть ім’я запису аутентифікації JAAS для налаштувань свого джерела даних (robinAlias).



Рис. 28. Інші налаштування посилання на джерело на вкладці References



 


7. Збережіть зміни у файлі web.xml, клацнувши File > Save.


Порада:
Зверніть увагу на наступний рядок в уривку програмного коду в роздруківці 19 для функції getResultSetFromJNDI ():


ds = (DataSource) ctx.lookup(“java:comp/env/robinDatasource”);


Фактично це перегляд посилання на ресурс robinDatasource, Який далі зв’язується з джерелом даних на основі JNDI з ім’ям jdbc/robinDS. Цим підтверджується, що функція getResultSetFromJNDI () вже правильно налаштована для використання посилання на ресурс, створеної на попередніх кроках.


8. Тепер залишається тільки змінити програмний код в Подшаг 8 кроку 3 для виклику функції getResultSetFromJNDI () (JNDI), а не функції getResultSetFromJDBC () (JDBC).


Виклик функції getResultSetFromJNDI () визначено більш безпечний, ніж виклик функції getResultSetFromJDBC (), тому що в даному випадку аутентифікація виконується за допомогою запису аутентифікації JAAS (robinAlias), сконфігурованої для джерела даних (robinDS) за допомогою імені JNDI (jdbc / robinDS).


Обробка винятків, які можуть відбуватися під час виконання


Під час виконання цього процесу можуть відбуватися деякі винятки. Нижче описується, як їх обробляти, якщо вони відбудуться.


· Якщо виводиться повідомлення про помилку виконання драйвера JDBC (рис. 29), скопіюйте файли. Jar універсального драйвера JDBC для DB2 (db2jcc.jar, db2jcc_license_cu.jar і db2jcc_license_cisuz.jar) з каталогу установки DB2 (SQLLIBjava) в свій каталог установки WebSphere Application Serverv6.0 (libext).



Рис. 29. Зараховано драйвера JDBC



 


Якщо використовується середу тестування WebSphere V6.0, а не автономний сервер IBM ® WebSphere ® Application Server V6.0, каталог установки і каталог установки програми Rational Application Developer (untimes ase_v6), Ð ¿Ð ¾ Ñ Ð »Ðμ Ð º Ð ¾ Ð ¿Ð ¸ Ñ € Ð ¾ Ð ² Ð ° Ð ½ Ð ¸ Ñ Ñ” Ð ° Ð ¹ Ð »Ð ¾ Ð ². jar Ð ¿ÐμÑ € ÐμÐ · Ð ° Ð ¿ÑƒÑ Ñ, Ð ¸ Ñ, Ðμ Ñ ÐμÑ € Ð ² ÐμÑ €, Ñ ‰ ÐμÐ »Ð º Ð ½ уР² Ð ¿Ñ € Ð ° Ð ² Ð ¾ Ð ¹ Ð º Ð ½ Ð ¾ Ð ¿Ð º Ð ¾ Ð ¹ Ð ¼ Ñ <ÑÐ ¸ ÐμÐ ³ Ð ¾ Ð ¾ Ð ± Ð ¾ Ð · Ð ½ Ð ° Ñ ‡ ÐμÐ ½ Ð ¸ Ðμ Ð ² Ð ¾ Ð ± л Ð ° Ñ Ñ, Ð ¸ Servers і вибравши Restart > Start.


· Якщо в області Console з’явилося повідомлення про помилку log4j, Показане в роздруківці 20, необхідну інформацію можна знайти за посиланням How to resolve log4j errors.


Роздруківка 20. повідомлення про помилку log4j







               


[2/14/06 17:38:36:435 EST] 00000031 SystemErr


R log4j:ERROR setFile(null,true) call failed.


[2/14/06 17:38:36:435 EST] 00000031 SystemErr


 system cannot


find the path specified)


                    at java.io.FileOutputStream.openAppend(Native Method)


                    at java.io.FileOutputStream.init(FileOutputStream.java:199)


                    at java.io.FileOutputStream.init(FileOutputStream.java:124)


                    at org.apache.log4j.FileAppender.setFile(FileAppender.java:272)


                    at org.apache.log4j.RollingFileAppender.setFile


                    (RollingFileAppender.java:156)


                   


Далі в цій серії


На цьому завершується 4 стаття серії з 5 частин про впровадження звітів Crystal Reports в веб-додатки. В даній статті було розглянуто використання компонента Java Reporting Component (JRC) додатка Rational Application Developer для вставки динамічних даних у звіт, що створюється на основі вибіркових даних, а не фактичних даних. Перевага проектування звітів за допомогою вибіркових даних полягає в тому, що його можна використати як обхідний прийом в ситуаціях, коли не можна підключитися до бази даних за допомогою впровадженого конструктора звітів Crystal Report, або через неправильної конфігурації середовища, або через те, що впровадженим конструктором звітів не підтримується пряме підключення JDBC до платформи бази даних.


Все більш популярними стають бази даних на основі мови XML. У частині 5, якою завершується дана серія статей, описується використання додаткових функцій JRC, таких як створення звітів з даних XML, а не із таблиць реляційних баз даних. Якщо необхідно створювати звіти Crystal Reports на основі даних XML, рекомендовано вивчити дану статтю.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*