Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

problem z java persistance + jboss

3 views
Skip to first unread message

Piotr Porzucek

unread,
Jun 2, 2007, 6:18:19 PM6/2/07
to
Witam,

Korzystam z Netbeans 5.5 + JBoss 4.0.4GA + SQL Server 2005. Podczas
uruchamiania aplikacji na jboss-ie pojawiaja się wyjątek:

23:54:50,609 INFO [SchemaUpdate] Running hbm2ddl schema update
23:54:50,609 INFO [SchemaUpdate] fetching database metadata
23:54:50,609 WARN [TxConnectionManager] Connection error occured:
org.jboss.res
ource.connectionmanager.TxConnectionManager
$TxConnectionEventListener@10612d3[st
(...)
java.lang.NullPointerException


Mój plik persistance.xml:

<?xml version="1.0" encoding="UTF-8"?>
<persistence version="1.0" xmlns="http://java.sun.com/xml/ns/
persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
<persistence-unit name="helpdeskUnit" transaction-type="JTA">
<jta-data-source>java:/baza</jta-data-source>
<properties>
<property name="hibernate.hbm2ddl.auto" value="update"/>
</properties>
</persistence-unit>
</persistence>

Co ciekawe, gdy property "hibernate.hbm2ddl.auto" zostanie usunięte,
wyjątek się nie pojawia, ale za to nie działa wstrzykiwanie
EntityManagera do EJB :(. Mój plik jboss-ds.xml:

<datasources>
<local-tx-datasource>
<jndi-name>baza</jndi-name>
<connection-url>jdbc:sqlserver://localhost:
1433;DatabaseName=helpdesk;</connection-url>
<driver-class>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver-
class>
<user-name>sa</user-name>
<password>sa</password>
<min-pool-size>5</min-pool-size>
<max-pool-size>20</max-pool-size>
<idle-timeout-minutes>5</idle-timeout-minutes>
</local-tx-datasource>
</datasources>


Proszę o pomoc i z góry dziękuję za zainteresowanie.

Pozdrawiam,
Piotr Porzucek

Jacek Laskowski

unread,
Jun 2, 2007, 7:25:16 PM6/2/07
to
Piotr Porzucek wrote:

> 23:54:50,609 INFO [SchemaUpdate] Running hbm2ddl schema update
> 23:54:50,609 INFO [SchemaUpdate] fetching database metadata
> 23:54:50,609 WARN [TxConnectionManager] Connection error occured:
> org.jboss.res
> ource.connectionmanager.TxConnectionManager
> $TxConnectionEventListener@10612d3[st
> (...)
> java.lang.NullPointerException

Cześć Piotr!

Prześlij resztę wyjątku. Niczego nie mogę się chwycić, więc może to pomoże.

> Mój plik persistance.xml:
>
> <?xml version="1.0" encoding="UTF-8"?>
> <persistence version="1.0" xmlns="http://java.sun.com/xml/ns/
> persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
> xsi:schemaLocation="http://java.sun.com/xml/ns/persistence
> http://java.sun.com/xml/ns/persistence/persistence_1_0.xsd">
> <persistence-unit name="helpdeskUnit" transaction-type="JTA">
> <jta-data-source>java:/baza</jta-data-source>

Zakładam, że java:/baza to poprawny adres źródła danych? Nigdy nie
korzystałem z JPA w środowisku JBoss, więc stąd moje pytanie. Dziwnie to
wygląda. A samo jdbc/baza, albo nawet baza nie wystarczy?

> <properties>
> <property name="hibernate.hbm2ddl.auto" value="update"/>
> </properties>
> </persistence-unit>
> </persistence>
>
> Co ciekawe, gdy property "hibernate.hbm2ddl.auto" zostanie usunięte,
> wyjątek się nie pojawia, ale za to nie działa wstrzykiwanie
> EntityManagera do EJB :(.

Zakładam, że update jedynie wymusza na Hibernate JPA szybsze
uruchomienie, więc jeśli usuniesz property stąd "wszystko działa". Mam
nieodparte wrażenie, że to niepoprawna nazwa źródła psuje wszystko.

> <datasources>
> <local-tx-datasource>
> <jndi-name>baza</jndi-name>
> <connection-url>jdbc:sqlserver://localhost:
> 1433;DatabaseName=helpdesk;</connection-url>
> <driver-class>com.microsoft.sqlserver.jdbc.SQLServerDriver</driver-
> class>
> <user-name>sa</user-name>
> <password>sa</password>
> <min-pool-size>5</min-pool-size>
> <max-pool-size>20</max-pool-size>
> <idle-timeout-minutes>5</idle-timeout-minutes>
> </local-tx-datasource>
> </datasources>

A może brak połączenia z bazą danych, czyli niepoprawny connection-url -
dziwnie wyglądają // po jdbc:sqlserver. Możesz je usunąć i sprawdzić,
jaki będzie efekt? Albo jeszcze coś innego związanego z definicją bazy
danych. Zdecydowanie potrzeba więcej stosu wyjątku javy.

Jacek

--
Jacek Laskowski
http://www.JacekLaskowski.pl

Piotr Porzucek

unread,
Jun 3, 2007, 7:11:34 AM6/3/07
to

> Cześć Piotr!
>
> Prześlij resztę wyjątku. Niczego nie mogę się chwycić, więc może to pomoże.
>
On 3 Cze, 01:25, Jacek Laskowski <j...@laskowski.net.pl> wrote:
> Piotr Porzucek wrote:
> > 23:54:50,609 INFO [SchemaUpdate] Running hbm2ddl schema update
> > 23:54:50,609 INFO [SchemaUpdate] fetching database metadata
> > 23:54:50,609 WARN [TxConnectionManager] Connection error occured:
> > org.jboss.res
> > ource.connectionmanager.TxConnectionManager
> > $TxConnectionEventListener@10612d3[st
> > (...)
> > java.lang.NullPointerException
>
> Cześć Piotr!
>
> Prześlij resztę wyjątku. Niczego nie mogę się chwycić, więc może to pomoże.
>

Witam,

Jakoś sobie z tym problem poradziłem - faktycznie coś było nie tak z
connection URL-em. Ale oczywiście pojawiły się nowe komplikacje :).
Aplikacja jest deploy-owana bez żadnych błędów. Ponadto uruchamiam
prostą aplikację WWW - jeden serwlet. W tym serwlecie wykorzystuję
komponent sesyjny. W komponencie sesyjnym wstrzykiwany jest
EntityManager. Niestety, gdy serwlet wykorzystuje ten komponent
sesyjny, wstrzykiwanie nie działa. Poniżej przedstawiam kod mojego
komponentu i serwletu:

public class MenadzerKonfiguracjiBean implements
helpdesk.session.konfiguracja.MenadzerKonfiguracjiLocal {

@PersistenceContext(unitName="helpdesk2")
private EntityManager entityManager;


public MenadzerKonfiguracjiBean() {
}

public Programista dodajProgramiste(Programista programista) {

if (entityManager == null) throw new
EJBException("EntityManager jest nullem");
entityManager.persist(programista);
return programista;
}

public Programista dodajProgramiste(String imie, String nazwisko,
String email, String haslo) {
Programista programista = new
Programista(imie,nazwisko,email,haslo);
dodajProgramiste(programista);
return programista;
}
}

Serwlet:

public class Test extends HttpServlet {

protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html;charset=UTF-8");
PrintWriter out = response.getWriter();

MenadzerKonfiguracjiLocal konfiguracja = new
MenadzerKonfiguracjiBean();

Programista programista =
konfiguracja.dodajProgramiste("Piotr","Porzucek","piotr.p...@gmail.com","heh");
(...)
}

W ostatniej linijce jest rzucany wyjątek. Dlaczego EntityManager nie
jest wstrzykiwany?

Z góry dziękuje za pomoc

Pozdrawiam,
Piotr Porzucek

Piotr Porzucek

unread,
Jun 3, 2007, 8:16:20 AM6/3/07
to
Choć może to nie wina EntityManagera... Jakiś problem z EhCache.
Dodałem odpowiedni jar (ehcache-1.2.4) do bibliotek. Gdy włączam
stronę generowaną przez serwlet pojawią się wyjątek:


14:10:41,968 INFO [SettingsFactory] Query cache: disabled
14:10:41,968 INFO [SettingsFactory] Cache provider:
org.hibernate.cache.EhCache
Provider
14:10:41,968 INFO [SettingsFactory] Optimize cache for minimal puts:
disabled
14:10:41,968 INFO [SettingsFactory] Structured second-level cache
entries: disa
bled
14:10:41,968 INFO [SettingsFactory] Statistics: disabled
14:10:41,968 INFO [SettingsFactory] Deleted entity synthetic
identifier rollbac
k: disabled
14:10:41,968 INFO [SettingsFactory] Default entity-mode: pojo
14:10:41,968 INFO [SessionFactoryImpl] building session factory
14:10:41,968 WARN [ConfigurationFactory] No configuration found.
Configuring eh
cache from ehcache-failsafe.xml found in the classpath: null
14:10:41,968 ERROR [[Test]] Servlet.service() for servlet Test threw
exception
javax.persistence.PersistenceException: net.sf.ehcache.CacheException:
Error con
figuring from null. Initial cause was null
at
org.hibernate.ejb.Ejb3Configuration.createEntityManagerFactory(Ejb3Co
nfiguration.java:217)
at
org.hibernate.ejb.HibernatePersistence.createEntityManagerFactory(Hib
ernatePersistence.java:114)
at
javax.persistence.Persistence.createEntityManagerFactory(Persistence.
java:37)
at
javax.persistence.Persistence.createEntityManagerFactory(Persistence.
java:27)
at
helpdesk.session.konfiguracja.MenadzerKonfiguracjiBean.<init>(Menadze
rKonfiguracjiBean.java:32)
at testowy.Test.processRequest(Test.java:34)
at testowy.Test.doGet(Test.java:57)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:
697)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:
810)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:252)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:173)
at
org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFi
lter.java:96)
at
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Appl
icationFilterChain.java:202)
at
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationF
ilterChain.java:173)
at
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperV
alve.java:213)
at
org.apache.catalina.core.StandardContextValve.invoke(StandardContextV
alve.java:178)
at
org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(Securit
yAssociationValve.java:175)
at
org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValv
e.java:74)
at
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.j
ava:126)
at
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.j
ava:105)
at
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineVal
ve.java:107)
at
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.jav
a:148)
at
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java
:869)
at org.apache.coyote.http11.Http11BaseProtocol
$Http11ConnectionHandler.p
rocessConnection(Http11BaseProtocol.java:664)
at
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpo
int.java:527)
at
org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWor
kerThread.java:112)
at java.lang.Thread.run(Thread.java:595)
Caused by: net.sf.ehcache.CacheException: Error configuring from null.
Initial c
ause was null
at
net.sf.ehcache.config.ConfigurationFactory.parseConfiguration(Configu
rationFactory.java:95)
at
net.sf.ehcache.config.ConfigurationFactory.parseConfiguration(Configu
rationFactory.java:131)
at
net.sf.ehcache.CacheManager.parseConfiguration(CacheManager.java:255)

at net.sf.ehcache.CacheManager.init(CacheManager.java:202)
at net.sf.ehcache.CacheManager.<init>(CacheManager.java:195)
at
org.hibernate.cache.EhCacheProvider.start(EhCacheProvider.java:124)
at
org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:
180)
at
org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.jav
a:1213)
at
org.hibernate.ejb.Ejb3Configuration.buildEntityManagerFactory(Ejb3Con
figuration.java:631)
at
org.hibernate.ejb.Ejb3Configuration.createEntityManagerFactory(Ejb3Co
nfiguration.java:760)
at
org.hibernate.ejb.Ejb3Configuration.createFactory(Ejb3Configuration.j
ava:151)
at
org.hibernate.ejb.Ejb3Configuration.createEntityManagerFactory(Ejb3Co
nfiguration.java:205)
... 26 more
Caused by: java.lang.NullPointerException
at
net.sf.ehcache.config.ConfigurationFactory.parseConfiguration(Configu
rationFactory.java:92)
... 37 more


Jacek Laskowski

unread,
Jun 4, 2007, 2:25:29 PM6/4/07
to
Piotr Porzucek wrote:

> Jakoś sobie z tym problem poradziłem - faktycznie coś było nie tak z
> connection URL-em.

Witaj!

A co to było?

> Aplikacja jest deploy-owana bez żadnych błędów. Ponadto uruchamiam
> prostą aplikację WWW - jeden serwlet. W tym serwlecie wykorzystuję
> komponent sesyjny. W komponencie sesyjnym wstrzykiwany jest
> EntityManager. Niestety, gdy serwlet wykorzystuje ten komponent
> sesyjny, wstrzykiwanie nie działa. Poniżej przedstawiam kod mojego
> komponentu i serwletu:
>
> public class MenadzerKonfiguracjiBean implements
> helpdesk.session.konfiguracja.MenadzerKonfiguracjiLocal {

Zakładam, że MedadzerKonfiguracjiBean jest udekorowany @Stateless, albo
podobnie?

> @PersistenceContext(unitName="helpdesk2")

Wcześniej było tak

<persistence-unit name="helpdeskUnit" transaction-type="JTA">

a teraz unitName="helpdesk2". To na pewno nie zadziała.

> public Programista dodajProgramiste(Programista programista) {
>
> if (entityManager == null) throw new
> EJBException("EntityManager jest nullem");

A to co?! Sprawdzasz, czy kontener działa poprawnie?! ;-)

> entityManager.persist(programista);

Upewnij się, że kończysz transakcję, bo programista może nie trafić do
bazy danych. Najlepiej skorzystać z odpowiednich adnotacji. Nawet nie
wiem, co jest domyślnym ustawieniem :(

> public class Test extends HttpServlet {
>
> protected void doGet(HttpServletRequest request,
> HttpServletResponse response)
> throws ServletException, IOException {
> response.setContentType("text/html;charset=UTF-8");
> PrintWriter out = response.getWriter();
>
> MenadzerKonfiguracjiLocal konfiguracja = new
> MenadzerKonfiguracjiBean();

A to co ma być?! Bezpośrednie skorzystanie z klasy komponentu EJB3?!
Egzemplarz tak stworzony nie jest zarządzany przez kontener, więc wiele
z funkcjonalności nie będzie dostępne. Przy JBoss AS 4.0.4 musisz
korzystać z JNDI (lookup itp.)

> Programista programista =
> konfiguracja.dodajProgramiste("Piotr","Porzucek","piotr.p...@gmail.com","heh");
> (...)
> }
>
> W ostatniej linijce jest rzucany wyjątek. Dlaczego EntityManager nie
> jest wstrzykiwany?

Hehe, bo korzystasz z komponentu EJB jak ze zwykłej klasy, więc kontener
nie ma świadomości, że należałoby usprawnić działanie komponentu.
Odszukaj komponent za pomocą lookup i zobaczysz, że zacznie hulać.

Wyjątkowo dokładnie opisałeś problem. Gratulacje! Bardzo pomogło.
Zastanawiam się, dlaczego nie skorzystasz z JBoss AS 4.2.0, gdzie
wstrzeliwanie działa...lepiej, ale nadal brakuje obsługi @EJB w
kontenerze servletów.

Piotr Porzucek

unread,
Jun 4, 2007, 8:21:08 PM6/4/07
to
Jacek Laskowski napisał(a):

>> Jakoś sobie z tym problem poradziłem - faktycznie coś było nie tak z
>> connection URL-em.
>
> Witaj!
>
> A co to było?

Witam ponownie,

literówka - niepotrzebny średnik na końcu connection URL

>> public Programista dodajProgramiste(Programista programista) {
>>
>> if (entityManager == null) throw new
>> EJBException("EntityManager jest nullem");
>
> A to co?! Sprawdzasz, czy kontener działa poprawnie?! ;-)

debug ;-)

>> public class Test extends HttpServlet {
>>
>> protected void doGet(HttpServletRequest request,
>> HttpServletResponse response)
>> throws ServletException, IOException {
>> response.setContentType("text/html;charset=UTF-8");
>> PrintWriter out = response.getWriter();
>>
>> MenadzerKonfiguracjiLocal konfiguracja = new
>> MenadzerKonfiguracjiBean();
>
> A to co ma być?! Bezpośrednie skorzystanie z klasy komponentu EJB3?!
> Egzemplarz tak stworzony nie jest zarządzany przez kontener, więc wiele
> z funkcjonalności nie będzie dostępne. Przy JBoss AS 4.0.4 musisz
> korzystać z JNDI (lookup itp.)
>

tak, doszedłem w końcu do tego :D

> Wyjątkowo dokładnie opisałeś problem. Gratulacje! Bardzo pomogło.
> Zastanawiam się, dlaczego nie skorzystasz z JBoss AS 4.2.0, gdzie
> wstrzeliwanie działa...lepiej, ale nadal brakuje obsługi @EJB w
> kontenerze servletów.
>
> Jacek
>

a bo z Netbeansem od razu dostałem 4.0.4 ;) A na czym polega to "lepsze"
wstrzeliwanie?

Wielkie dzięki za pomoc.
Pozdrawiam,
Piotr Porzucek

0 new messages