powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / ERROR [stderr] (http--127.0.0.1-8080-1) java.lang.NullPointerException
17 сообщений из 17, страница 1 из 1
ERROR [stderr] (http--127.0.0.1-8080-1) java.lang.NullPointerException
    #38537258
NDAleksey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ничего не понимаю. Ошибка происходит при persistence/merge.

Инициализация entity:
Код: java
1.
2.
3.
4.
CSV_FileConfig fileConfig = new CSV_FileConfig();
fileConfig.setURI( URI );
fileConfig.setDelimiter( delimiter );
fileConfig.setTitle( isTitle );



ORM-ник с entity:
Код: xml
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.
<sequence-generator name="pkFileConfig" sequence-name="CSV_FILE_CONFIGS_ID_SEQ" allocation-size="1" initial-value="1" />
<entity class="CSV_FileConfig" name="CSV_FileConfig" metadata-complete="false">
	<table name="CSV_FILE_CONFIGS"/>
	<attributes>
		<id name="id">
			<column name="ID" nullable="false"/>
			<generated-value strategy="SEQUENCE" generator="pkFileConfig" />
		</id>
		<basic name="URI" optional="true">
			<column name="URI"/>
		</basic>
		<basic name="delimiter" optional="true">
			<column name="DELIMITER"/>
		</basic>
		<basic name="title">
			<column name="IS_TITLE"/>
		</basic>
		<basic name="colCount">
			<column name="COL_COUNT"/>
		</basic>
		<one-to-many name="columnConfigList" mapped-by="fileConfig" target-entity="com.bs.amg.test.persistence.CSV_ColumnConfig" fetch="LAZY">
			<cascade>
				<cascade-refresh/>
			</cascade>
		</one-to-many>
	</attributes>
</entity>



Ну и дальше:
Код: java
1.
2.
3.
4.
5.
6.
7.
protected CSV_FileConfig saveFileConfig( CSV_FileConfig fileConfig ) throws Exception
{
	// entityManager.persist( fileConfig );
	fileConfig = entityManager.merge( fileConfig );

	return fileConfig;
}



Ошибки валятся отсюда:
Код: java
1.
2.
3.
17:32:13,113 ERROR [stderr] (http--127.0.0.1-8080-1) java.lang.NullPointerException

17:32:13,115 ERROR [stderr] (http--127.0.0.1-8080-1) 	at CSV_Creator.saveFileConfig(CSV_Creator.java:59)
...
Рейтинг: 0 / 0
ERROR [stderr] (http--127.0.0.1-8080-1) java.lang.NullPointerException
    #38537274
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ты прикалываешься??? В предыдущей теме же выяснили что у тебя EntityManager не инжектиться.
...
Рейтинг: 0 / 0
ERROR [stderr] (http--127.0.0.1-8080-1) java.lang.NullPointerException
    #38537276
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
потому что кто-то делает new CSV_Creator() и свято верит что CDI найдт этот объект и всё туда сам проставит.
...
Рейтинг: 0 / 0
ERROR [stderr] (http--127.0.0.1-8080-1) java.lang.NullPointerException
    #38537293
NDAleksey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczпотому что кто-то делает new CSV_Creator() и свято верит что CDI найдт этот объект и всё туда сам проставит.

Блин, я совсем тогда не понимаю. Т.е. Если у меня связь. Сервлет вызывает бин через DI (@EJB), бин вызывает метод интерфейса, который иницализируясь вызывает еще один класс, (CSV_Creator), где уже и происходит saveFileConfig. То значит, что все промежуточные объекты должны тоже инжектиться?
...
Рейтинг: 0 / 0
ERROR [stderr] (http--127.0.0.1-8080-1) java.lang.NullPointerException
    #38537296
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NDAlekseyБлин, я совсем тогда не понимаю.

В этом пролесть JEE. Понять новичку что на самом деле там происходит, решительно не возможно.

NDAleksey Т.е. Если у меня связь. Сервлет вызывает бин через DI (@EJB), бин вызывает метод интерфейса, который иницализируясь вызывает еще один класс, (CSV_Creator), где уже и происходит saveFileConfig. То значит, что все промежуточные объекты должны тоже инжектиться?

Не важно кто как вызывается. Важно как и кем создаются экземпляры. Если экземпляры создаются CDI, то он и добавляет зависимости. А если экземпляры создаешь ты сам, то CDI о них ничего не знает.

В Spring есть отдельный метод, которому можно скормить свой объект, чтобы спринг проставил зависимости. Есть ли аналог в CDI я не знаю.
...
Рейтинг: 0 / 0
ERROR [stderr] (http--127.0.0.1-8080-1) java.lang.NullPointerException
    #38537298
NDAleksey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczНе важно кто как вызывается. Важно как и кем создаются экземпляры. Если экземпляры создаются CDI, то он и добавляет зависимости. А если экземпляры создаешь ты сам, то CDI о них ничего не знает.

В Spring есть отдельный метод, которому можно скормить свой объект, чтобы спринг проставил зависимости. Есть ли аналог в CDI я не знаю.

Извиняюсь, за тугость, но скажите, создавая объект, я должен инжектить их через @EJB? Я реально не понимаю, как указать CDI что этот объект надо вызвать)
...
Рейтинг: 0 / 0
ERROR [stderr] (http--127.0.0.1-8080-1) java.lang.NullPointerException
    #38537308
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создавая объекты через конструктор глупо надеятся что волшебник в голубом вертолёте сам выставит в полях этого объекта какие-то значения. Вы себе всю голову этими @EJB забили, не понимая банальных основ Java.

Что выведет этот код?

Код: java
1.
2.
3.
4.
5.
6.
public class CSV_Creator{
   String afield;
   public static void main(String[] args){
       System.out.println(new CSV_Creator().afield);
   }
}
...
Рейтинг: 0 / 0
ERROR [stderr] (http--127.0.0.1-8080-1) java.lang.NullPointerException
    #38537310
NDAleksey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczСоздавая объекты через конструктор глупо надеятся что волшебник в голубом вертолёте сам выставит в полях этого объекта какие-то значения. Вы себе всю голову этими @EJB забили, не понимая банальных основ Java.

Что выведет этот код?

Код: java
1.
2.
3.
4.
5.
6.
public class CSV_Creator{
   String afield;
   public static void main(String[] args){
       System.out.println(new CSV_Creator().afield);
   }
}



посыпаю голову пеплом и иду учить мат.часть... спасибо и извините)
...
Рейтинг: 0 / 0
ERROR [stderr] (http--127.0.0.1-8080-1) java.lang.NullPointerException
    #38538861
NDAleksey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczпотому что кто-то делает new CSV_Creator() и свято верит что CDI найдт этот объект и всё туда сам проставит.

не удалось выходные отдать JavaEE, поэтому не сочтите за глупость задать такой вопрос: правильно ли я понимаю, что для того чтобы использовать мой CSV_Creator, мне нужно заинжектить его еще на этапе "компиляции", а не в run-time через new? Т.е. для того чтобы CDI дал возможность использовать объекты различных классов в моей бизнес-логике, они должны быть "заинициализированы" статически (через @EJB, если это SessionBean или через @Inject, если не нужно делать Bean )?

P.S. если я неправ, то можете послать меня по ссылке)
...
Рейтинг: 0 / 0
ERROR [stderr] (http--127.0.0.1-8080-1) java.lang.NullPointerException
    #38538893
NDAleksey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вернее даже не "заинициализированны", а просто объявлены с аннотацией. CDI сам присвоит им значения, т.е. создаст их. И никаких new я не должен использовать
...
Рейтинг: 0 / 0
ERROR [stderr] (http--127.0.0.1-8080-1) java.lang.NullPointerException
    #38538902
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NDAlekseyне удалось выходные отдать JavaEE, поэтому не сочтите за глупость задать такой вопрос: правильно ли я понимаю, что для того чтобы использовать мой CSV_Creator, мне нужно заинжектить его еще на этапе "компиляции"

Нет. Нет никаких инъекций на этапе компиляции.

NDAleksey, а не в run-time через new?

В run-time. Но через new. Нужно чтобы CDI сам инстанциировал ваш бин. А для этого он должен быть EJB.

NDAlekseyТ.е. для того чтобы CDI дал возможность использовать объекты различных классов в моей бизнес-логике, они должны быть "заинициализированы" статически (через @EJB, если это SessionBean или через @Inject, если не нужно делать Bean )?

Стремительным домкратом. Да.
При чем тут "статическая заинициализация"? Перестаньте микшировать термины в случайном порядке. Не знаете слово - не используйте, пока не посмотрите значение в словаре.

Если объект создал контейнер, то он может в него добавить и зависимости. Если объект создан не контейнром, то контейнер о нем ничего не знает и заинъектить зависимости не может. Конкретно в этом утверждении что не понятно?


NDAlekseyP.S. если я неправ, то можете послать меня по ссылке)

Рекомендую спецификацию CDI
http://stackoverflow.com/a/8166333
...
Рейтинг: 0 / 0
ERROR [stderr] (http--127.0.0.1-8080-1) java.lang.NullPointerException
    #38539028
NDAleksey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczЕсли объект создал контейнер, то он может в него добавить и зависимости. Если объект создан не контейнром, то контейнер о нем ничего не знает и заинъектить зависимости не может. Конкретно в этом утверждении что не понятно?


Простите, что путаю понятия. Я просто неправильно выразился, тем самым не донес свою мысль. Но мне кажется , что я Вас прекрасно понял. Если у меня есть бин:
Код: java
1.
2.
3.
4.
5.
6.
7.
@Stateless(name = "TestEJB")
public class TestBean {
	@PersistenceContext( unitName = "manager1" )
	EntityManager entityManager;

	public void foo() throws IOException{ entityManager.persist( new EntityBean() ); }
}



и в сервлете у меня он объявлен как:
Код: java
1.
2.
@EJB
TestBean bean;



То при вызове, EJB контейнер впихнет заинициализирует создаст его (тупо заинжектит, вернет ссылку или называйте как хотите). Причем, как вы правильно сказали, перед возвращением ссылки на бин, который создает EJB-контейнер, добавит зависимость в него (заинициализированный) в лице entityManager.

Но если же я в своем бине определю метод:

Код: java
1.
2.
3.
public void bar() {
	TestNotBean testNotBean = new TestNotBean();
}



А потом определю:
Код: java
1.
2.
3.
4.
5.
6.
public class TestNotBean {
	@PersistenceContext( unitName = "manager1" )
	EntityManager entityManager;

	public void foo() { entityManager.persist( new EntityBean() ); }
}



То он в entityManager в TestNotBean не подтягивает значения. Проверяю entityManager на null - он ему не равен. Но при persistence, соответственно, вылетает NPE. Получается что при выполнении bar() объект TestNotBean не создается EJB-контейнером?
...
Рейтинг: 0 / 0
ERROR [stderr] (http--127.0.0.1-8080-1) java.lang.NullPointerException
    #38539051
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NDAleksey,

Ну, теперь всё верно. Вопрос какой? :)
...
Рейтинг: 0 / 0
ERROR [stderr] (http--127.0.0.1-8080-1) java.lang.NullPointerException
    #38539161
NDAleksey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczNDAleksey,

Ну, теперь всё верно. Вопрос какой? :)

Ааа...))) Спасибо большое!) А то я ж думал, что постригусь и уйду в монахи аникейщиком)

Получается что при выполнении bar() объект TestNotBean не создается EJB-контейнером? А как тогда сделать, чтобы контейнер его создал, при этом не делая TestNotBean сессионным и не объявляя testNotBean со злосчастной @EJB. И без JNDI))

Только не говорите, что "Идти и читать спецификацию")
...
Рейтинг: 0 / 0
ERROR [stderr] (http--127.0.0.1-8080-1) java.lang.NullPointerException
    #38539238
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NDAlekseyТолько не говорите, что "Идти и читать спецификацию")
Мне, честного-говоря лень делать это за вас. Так как JEE я не люблю, а поэтому не практикую, то в деталях разбираюсь вместе с задающими вопросы.
Вот тут четко описано какие классы можно инжектить и что для этого нужно
http://docs.oracle.com/javaee/6/tutorial/doc/gjbnr.html
Вот пример. Просто. Доходчиво. Вот такие классы можно. Не только EJB.
http://docs.oracle.com/javaee/6/tutorial/doc/gizks.html
Есть ещё WEB-INF/beans.xml

Как точно CDI делает обнаружение, я не знаю. (Помимо JNDI и beans.xml)
Можно просто попробовать @Inject для поля. Возможно контейнер просто найдёт класс, создаст и заинжектит. Заодно, возможно, в JNDI закинет.
Если нельзя использовать singleton, то, возмоэно, стоит попробовать @RequestScoped.
...
Рейтинг: 0 / 0
ERROR [stderr] (http--127.0.0.1-8080-1) java.lang.NullPointerException
    #38539248
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот ещё хорошая ссылка нарылась
http://code.google.com/p/jee6-cdi/wiki/DependencyInjectionAnIntroductoryTutorial_Part1
Не знаю на сколько пересекается с официальным туториалами, но выглядит интересно.
...
Рейтинг: 0 / 0
ERROR [stderr] (http--127.0.0.1-8080-1) java.lang.NullPointerException
    #38539550
NDAleksey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Спасибо большое Вам! Если б не Вы, я бы так и парился с сессионными бинами. С моей бизнес-логикой они идут врозь. Нужен класс с определенной иерархией наследования и чтобы его потом инжектить, а по определению SessionBean так не выходит. Вы как только упомянули про CDI (честно говоря я неделю назад ни в зуб ногой что это), я полез по этой ссылке и вот щас у мення все получилось с entityManager-ом и моей чудо иерархией! А Ваши ссылки я обязательно гляну! Спасибо!
...
Рейтинг: 0 / 0
17 сообщений из 17, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / ERROR [stderr] (http--127.0.0.1-8080-1) java.lang.NullPointerException
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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