2011-01-11 13 views
2

OpenJPA実装を使用してデータベースに何かを持続させる簡単なJPA2アプリケーションを作成しようとしています。私はDerbyを実行しており、デフォルトのEmbedded JDBC Driverを使用しています。私は何が欠けているのか理解しようとしている以上、頭を傷つけてきました。私はそれが何か自明なものだと確信していますが、誰かがこれを見て正しい方向に向けると、私は本当に素晴らしいでしょう。ありがとう。ここでJPA2でEntityManagerを作成するときにエラーが発生する

は私のpersistence.xmlです:

<?xml version="1.0" encoding="UTF-8"?> 
<persistence version="2.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_2_0.xsd"> 
    <persistence-unit name="HelloWorld"> 
     <jta-data-source>java:comp/env/StuffDerby</jta-data-source> 
     <class>helloworld.entities.Employee</class> 
    </persistence-unit> 
</persistence> 

と、私はこのコードを実行すると:

EntityManagerFactory emf = Persistence.createEntityManagerFactory("HelloWorld"); 
EntityManager em = emf.createEntityManager(); 

をcreateEntityManager()メソッドを呼び出すときには失敗します。 java.lang.String代わりのjava.sql.DataSource

406 HelloWorld INFO [WebContainer : 0] openjpa.Runtime - Starting OpenJPA 2.0.0 
[1/11/11 12:46:21:377 PST] 0000002f servlet  E com.ibm.ws.webcontainer.servlet.ServletWrapper service SRVE0068E: Uncaught exception created in one of the service methods of the servlet HelloServlet in application HelloWorld. Exception created : <openjpa-2.0.0-r422266:935683 nonfatal general error> org.apache.openjpa.persistence.PersistenceException: java.lang.String incompatible with javax.sql.DataSource 
    at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:208) 
    at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:156) 
    at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:213) 
    at com.ibm.ws.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:45) 
    at com.ibm.ws.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:30) 
    at helloworld.entities.controller.EmployeeManager.getEntityManager(EmployeeManager.java:37) 
    at helloworld.entities.controller.EmployeeManager.getEmployee(EmployeeManager.java:188) 
    at helloworld.HelloServlet.doGet(HelloServlet.java:47) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:718) 
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:831) 
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1661) 
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.service(ServletWrapper.java:1595) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:131) 
    at com.ibm.ws.osgi.web.extender.OsgiDirectoryProtectionFilter.doFilter(OsgiDirectoryProtectionFilter.java:94) 
    at com.ibm.ws.webcontainer.filter.FilterInstanceWrapper.doFilter(FilterInstanceWrapper.java:188) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain.doFilter(WebAppFilterChain.java:116) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterChain._doFilter(WebAppFilterChain.java:77) 
    at com.ibm.ws.webcontainer.filter.WebAppFilterManager.doFilter(WebAppFilterManager.java:908) 
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:932) 
    at com.ibm.ws.webcontainer.servlet.ServletWrapper.handleRequest(ServletWrapper.java:500) 
    at com.ibm.ws.webcontainer.servlet.ServletWrapperImpl.handleRequest(ServletWrapperImpl.java:178) 
    at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:3826) 
    at com.ibm.ws.webcontainer.webapp.WebGroup.handleRequest(WebGroup.java:276) 
    at com.ibm.ws.webcontainer.WebContainer.handleRequest(WebContainer.java:931) 
    at com.ibm.ws.webcontainer.WSWebContainer.handleRequest(WSWebContainer.java:1583) 
    at com.ibm.ws.webcontainer.channel.WCChannelLink.ready(WCChannelLink.java:186) 
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleDiscrimination(HttpInboundLink.java:455) 
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.handleNewInformation(HttpInboundLink.java:384) 
    at com.ibm.ws.http.channel.inbound.impl.HttpInboundLink.ready(HttpInboundLink.java:272) 
    at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.sendToDiscriminators(NewConnectionInitialReadCallback.java:214) 
    at com.ibm.ws.tcp.channel.impl.NewConnectionInitialReadCallback.complete(NewConnectionInitialReadCallback.java:113) 
    at com.ibm.ws.tcp.channel.impl.AioReadCompletionListener.futureCompleted(AioReadCompletionListener.java:165) 
    at com.ibm.io.async.AbstractAsyncFuture.invokeCallback(AbstractAsyncFuture.java:217) 
    at com.ibm.io.async.AsyncChannelFuture.fireCompletionActions(AsyncChannelFuture.java:161) 
    at com.ibm.io.async.AsyncFuture.completed(AsyncFuture.java:138) 
    at com.ibm.io.async.ResultHandler.complete(ResultHandler.java:204) 
    at com.ibm.io.async.ResultHandler.runEventProcessingLoop(ResultHandler.java:775) 
    at com.ibm.io.async.ResultHandler$2.run(ResultHandler.java:905) 
    at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1550) 
Caused by: java.lang.ClassCastException: java.lang.String incompatible with javax.sql.DataSource 
    at org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.createConnectionFactory(JDBCConfigurationImpl.java:834) 
    at org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.getDBDictionaryInstance(JDBCConfigurationImpl.java:594) 
    at org.apache.openjpa.jdbc.meta.MappingRepository.endConfiguration(MappingRepository.java:1489) 
    at org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:507) 
    at org.apache.openjpa.lib.conf.Configurations.configureInstance(Configurations.java:432) 
    at org.apache.openjpa.lib.conf.PluginValue.instantiate(PluginValue.java:104) 
    at org.apache.openjpa.conf.MetaDataRepositoryValue.instantiate(MetaDataRepositoryValue.java:68) 
    at org.apache.openjpa.lib.conf.ObjectValue.instantiate(ObjectValue.java:83) 
    at org.apache.openjpa.conf.OpenJPAConfigurationImpl.newMetaDataRepositoryInstance(OpenJPAConfigurationImpl.java:939) 
    at org.apache.openjpa.conf.OpenJPAConfigurationImpl.getMetaDataRepositoryInstance(OpenJPAConfigurationImpl.java:930) 
    at org.apache.openjpa.kernel.AbstractBrokerFactory.makeReadOnly(AbstractBrokerFactory.java:626) 
    at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:193) 
    ... 38 more 
+0

jndiリファレンスのものがデータソースではなく文字列であるように見えます。 jndiの人口ビットで、その名前のルックアップの結果ではなく、データソースのjndi参照で文字列を入れていないことを確かめてください(私は見ることができないので投稿しません)。リソースの参照や何かについては、いくつかのj2ee mumboジャンボがあるはずです。 – time4tea

答えて

2
org.apache.openjpa.persistence.PersistenceException: 
    java.lang.String incompatible with javax.sql.DataSource 
すなわち

java:comp/env/StuffDerbyポイント。それに応じてサーバーの設定で修正してください。

+0

は、一部のXMLファイルで定義されているデータソースではなく、ASはそれをインスタンス化する必要がありますか? – Bozho

+0

実際、通常はリソースタイプとしてFQNを指定できるJNDIリソースとして定義されています。 WebアプリケーションのXMLファイルまたはWebベースの管理者のいずれかで行うことができます。おそらく、FQNは 'java.sql.DataSource'の代わりに' java.lang.String'でした。もしそうでなければ、おそらくASのバグでしょう。 – BalusC

+0

ええ。私はすぐにASのバグを想定して習慣を育てました。そして、私は生産プロジェクトのようにいずれかを使用していない... – Bozho

関連する問題