Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Подключение к Derby в JSF / 23 сообщений из 23, страница 1 из 1
14.05.2013, 13:12:36
    #38256484
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение к Derby в JSF
Подскажите, правильно ли подключаю? Никакие библиотеки не нужно подключать в эклипсе?
Насколько я понимаю, всё что касается базы описано в классе, и в xml, а сама база в WebContent/misc/customers.sql:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import javax.annotation.Resource;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;
import javax.sql.DataSource;
import javax.sql.rowset.CachedRowSet;
@ManagedBean
@RequestScoped
public class CustomerBean {
	@Resource(name = "jdbc/mydb")
	private DataSource ds;
	public ResultSet getAll() throws SQLException {
		Connection conn = ds.getConnection();
		try {
			Statement stmt = conn.createStatement();
			ResultSet result = stmt.executeQuery("SELECT * FROM Customers");
			CachedRowSet crs = new com.sun.rowset.CachedRowSetImpl();
			crs.populate(result);
			return crs;
		} finally {
			conn.close();
		}
	}
}



Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
<Context>
<Resource name="jdbc/mydb" 
          auth="Container" 
          type="javax.sql.DataSource"               
          username="app" 
          password="app" 
          driverClassName="org.apache.derby.jdbc.ClientDriver"
          url="jdbc:derby://localhost:1527/COREJSF;create=true"/>
</Context>



вот только получаю
Caused by: java.lang.NullPointerException
at com.corejsf.CustomerBean.getAll(CustomerBean.java:23) - это строчка где создается Connection

или проблема в том, что у меня на машине не установлена CLASSPATH environment variable in the operating system к Derby? там правда есть и scripts that are included with Derby that can
set up the classpath to run the Derbytools, но как их прикрутить?
...
Рейтинг: 0 / 0
14.05.2013, 14:24:23
    #38256640
Garrick
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение к Derby в JSF
rema174,

В вашем случае предварительно необходимо запустить сервер Derby. Конечно, если он не стартует вместе в вашим APP сервером. Ну и JAR с драйвером должен быть доступен.
...
Рейтинг: 0 / 0
14.05.2013, 15:38:44
    #38256793
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение к Derby в JSF
Garrick,

да, этого не было сделано...
теперь Derby запущен - показывается соответствующее инфо в консоли.
но после запуска все равно получаю java.lang.NullPointerException...

где должна находиться база? сейчас она в проекте WebContent/misc/
но путь к misk misc нигде больше не фигурирует в других файлах...
...
Рейтинг: 0 / 0
14.05.2013, 16:50:51
    #38256932
ivanra
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение к Derby в JSF
Ошибка в этой строчке?
Код: java
1.
Connection conn = ds.getConnection();


Что за сервер? jndi там в принципе есть? Что будет если попробовать вручную llokup сделать?
...
Рейтинг: 0 / 0
14.05.2013, 17:17:11
    #38257006
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение к Derby в JSF
ivanraОшибка в этой строчке?
Код: java
1.
Connection conn = ds.getConnection();


Что за сервер? jndi там в принципе есть? Что будет если попробовать вручную llokup сделать?

Caused by: java.lang.NullPointerException
at com.corejsf.CustomerBean.getAll(CustomerBean.java:23) - создаем connection
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at javax.el.BeanELResolver.getValue(BeanELResolver.java:87)
at com.sun.faces.el.DemuxCompositeELResolver._getValue(DemuxCompositeELResolver.java:176)
at com.sun.faces.el.DemuxCompositeELResolver.getValue(DemuxCompositeELResolver.java:203)
at org.apache.el.parser.AstValue.getValue(AstValue.java:183)
at org.apache.el.ValueExpressionImpl.getValue(ValueExpressionImpl.java:185)
at com.sun.faces.facelets.el.TagValueExpression.getValue(TagValueExpression.java:109)
... 37 more

используется tomcat...
...
Рейтинг: 0 / 0
14.05.2013, 17:18:38
    #38257014
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение к Derby в JSF
rema174используется tomcat...
А откуда ваш Tomcat умеет JSF и CDI?
...
Рейтинг: 0 / 0
14.05.2013, 17:32:39
    #38257057
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение к Derby в JSF
Blazkowiczrema174используется tomcat...
А откуда ваш Tomcat умеет JSF и CDI?
Blazkowicz,
но ведь умеет на других проектах с jsf
cdi не используется
...
Рейтинг: 0 / 0
14.05.2013, 17:40:27
    #38257082
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение к Derby в JSF
rema174,

Варианта два. Либо DataSource вообще не создался. Но тогда бы и приложение не запустилось. И в логе была бы ошибка.
Либо Tomcat просто не инжектит DataSource, что более вероятно. Ведь JSF они из коробки не поддерживает. У вас там что-то ещё установлено, что реализует JSF.
...
Рейтинг: 0 / 0
14.05.2013, 17:43:59
    #38257094
ivanra
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение к Derby в JSF
Кстати, судя по скринам, в META-INF отсутствует beans.xml. А без него CDI не заработает
...
Рейтинг: 0 / 0
14.05.2013, 18:04:01
    #38257140
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение к Derby в JSF
авторВарианта два. Либо DataSource вообще не создался. Но тогда бы и приложение не запустилось. И в логе была бы ошибка.
Либо Tomcat просто не инжектит DataSource, что более вероятно. Ведь JSF они из коробки не поддерживает. У вас там что-то ещё установлено, что реализует JSF.

а что там может быть ещё не установлено, если весь jsf - это javax.faces-2.1.16.jar, и сейчас он в либах на томкате.



авторКстати, судя по скринам, в META-INF отсутствует beans.xml. А без него CDI не заработает
CDI там нету, он же нужен для GlassFish и тогда beans.xml понадобился бы, а тут томкат.
...
Рейтинг: 0 / 0
14.05.2013, 18:16:04
    #38257163
ivanra
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение к Derby в JSF
Без CDI не работает вот эта аннотация:
Код: java
1.
2.
	@Resource(name = "jdbc/mydb")
	private DataSource ds;


что и подтверждается логами (ds=null)
...
Рейтинг: 0 / 0
14.05.2013, 20:47:22
    #38257314
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение к Derby в JSF
ivanra,
ладно,
автор Configuring a CDI Application. An application that uses CDI must have a file named beans.xml. The file can be completely empty (it has content only in certain limited situations), but it must be present. For a web application, the beans.xml file must be in the WEB-INF directory.
добавление beans.xml ничего не дает и
Код: java
1.
2.
import javax.enterprise.context.RequestScoped;
   // вместо    import javax.faces.bean.RequestScoped;


тоже не влияет.
попробовать запусть на GlassFish'e?
но охота на томкате.
...
Рейтинг: 0 / 0
15.05.2013, 09:38:34
    #38257617
ivanra
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение к Derby в JSF
Так томкат вроде из коробки не поддерживает CDI.
Можно попробовать:
- взять J2EE-сертифицированный TomEE
- либо добавить поддержку CDI (например, JBoss-Seam реализация под кодовым названием Weld)
- либо вместо инъекции использовать обычный лукап, как-то так:
Код: java
1.
2.
    Context initContext = new InitialContext();
    DataSource ds = (DataSource)initContext.lookup("java:/jdbc/mydb");
...
Рейтинг: 0 / 0
15.05.2013, 11:24:30
    #38257815
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение к Derby в JSF
ivanra,
и все же в данном случае не используется CDI, т.к. вместо @ManagedBean было бы @Named
...
Рейтинг: 0 / 0
15.05.2013, 13:01:20
    #38258136
ivanra
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение к Derby в JSF
Можно и без CDI, в рамках jee5. <resource-ref> в web.xml есть?
...
Рейтинг: 0 / 0
15.05.2013, 13:31:17
    #38258238
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение к Derby в JSF
ivanraМожно и без CDI, в рамках jee5. <resource-ref> в web.xml есть?
конечно
<resource-ref>
<res-ref-name>jdbc/mydb</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>

кстати, я все-таки изменил строку
url="jdbc:derby://localhost:1527/COREJSF;create=true"
на
url="jdbc:derby://localhost:1527/customers.sql;create=true" ( c какого там было COREJSF ? но результат тотже)
и ведь DataSouurseExplorer успешно коннектится к customers.sql
...
Рейтинг: 0 / 0
15.05.2013, 14:49:33
    #38258479
ivanra
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение к Derby в JSF
Ну, значит не поддерживает сервер инъекцию источников данных. В jboss это тоже только с пятой версии появилось. Какая версия томката?
А с приложением - придется добавлять поддержку cdi, либо просто сделать лукап, с адресом я вначале ошибся, должно быть так:
Код: java
1.
2.
    Context initContext = new InitialContext();
    DataSource ds = (DataSource)initContext.lookup("java:comp/env/jdbc/mydb");
...
Рейтинг: 0 / 0
15.05.2013, 22:39:34
    #38259295
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение к Derby в JSF
ivanraНу, значит не поддерживает сервер инъекцию источников данных. В jboss это тоже только с пятой версии появилось. Какая версия томката?
А с приложением - придется добавлять поддержку cdi, либо просто сделать лукап, с адресом я вначале ошибся, должно быть так:
Код: java
1.
2.
    Context initContext = new InitialContext();
    DataSource ds = (DataSource)initContext.lookup("java:comp/env/jdbc/mydb");



поставил TomEE, все эти штуки прямо из коробки - только вывод ошибок улучшился))
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
An Error Occurred:
javax.el.ELException: Error reading 'all' on type com.corejsf.CustomerBean

viewId=/index.xhtml
location=C:\workspace\.metadata\.plugins\org.eclipse.wst.server.core\tmp0\wtpwebapps\database\index.xhtml
phaseId=RENDER_RESPONSE(6)

Caused by:
java.lang.NullPointerException - Error reading 'all' on type com.corejsf.CustomerBean
at com.corejsf.CustomerBean.getAll(CustomerBean.java:23)

/index.xhtml at line 15 and column 51 value="#{customerBean.all}"
...
Рейтинг: 0 / 0
15.05.2013, 22:47:44
    #38259306
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение к Derby в JSF
могу выложить проект, если есть желание поковыряться)
...
Рейтинг: 0 / 0
17.05.2013, 15:15:32
    #38262167
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение к Derby в JSF
проблема, как тут уже говорилось, в ds - в нем ничего нет,
добавляю перед созданием коннекшина:

Код: java
1.
if(ds == null) return null;



и мое приложение работает, но ничего ест-но не выводит.

и еще в консоли:
WARNING: Injection data not found in JNDI context: jndiName='comp/env/jdbc/mydb', target=com.corejsf.CustomerBean/ds
...
Рейтинг: 0 / 0
17.05.2013, 15:30:14
    #38262192
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение к Derby в JSF
rema174и еще в консоли:
WARNING: Injection data not found in JNDI context: jndiName='comp/env/jdbc/mydb', target=com.corejsf.CustomerBean/ds
Ну, вот. Уже что-то. Инжекшн обрыгался, потому что не нашел такого объекта в JNDI.
Либо с web.xml, либо с context.xml что-то не так.
Мы чтобы не пхать DataSource в приложение настраиваем на сервере вот так:
/apache-tomcat-6.0.20/conf/Catalina/localhost/app-name.xml
...
Рейтинг: 0 / 0
17.05.2013, 15:30:52
    #38262193
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение к Derby в JSF
Поищите по логу ещё что-нибудь про jdbc/mydb. Может оно с перепугу задеплоилось после приложения?
...
Рейтинг: 0 / 0
17.05.2013, 16:48:48
    #38262391
rema174
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Подключение к Derby в JSF
Blazkowicz,
сделал определение драйвера и данные к базе в бине, и заработало.
На context.xml эклипс показывает: "No grammar constraints (DTD or XML schema) referenced in the document" - это могло быть причиной?
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Подключение к Derby в JSF / 23 сообщений из 23, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]