2

JPA (OpenJPA) + Spring (Spring Web MVC を使用した Web Flow) + H2 データベース エンジンに問題があります。シンプルな Web アプリケーション用にシンプルな RegisterDAO を用意しました。依存性注入を使用して、(@PersistentUnit アノテーションによって) EntityManagerFactory を RegisterDAO に注入しています。すべて問題ないように見えますが (EntityManagerFactory は null ではなく、注入されているようです)、このファクトリから EntityManager を作成しようとすると問題が発生します。GlassFish(私が使用しています)は、次のような例外をスローします(メッセージはポーランド語であるため、元の状態で印刷できません:)):

org.springframework.webflow.execution.FlowExecutionException: Exception thrown in state 'register' of flow 'register'
    at org.springframework.webflow.engine.impl.FlowExecutionImpl.wrap(FlowExecutionImpl.java:569)
    at org.springframework.webflow.engine.impl.FlowExecutionImpl.resume(FlowExecutionImpl.java:263)
    at org.springframework.webflow.executor.FlowExecutorImpl.resumeExecution(FlowExecutorImpl.java:169)
    at org.springframework.webflow.mvc.servlet.FlowHandlerAdapter.handle(FlowHandlerAdapter.java:183)
    at org.springframework.webflow.mvc.servlet.FlowController.handleRequest(FlowController.java:174)
    at org.springframework.web.servlet.mvc.SimpleControllerHandlerAdapter.handle(SimpleControllerHandlerAdapter.java:48)
    at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:788)
    at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:717)
    at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:644)
    at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:560)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:754)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
    at org.apache.catalina.core.StandardWrapper.service(StandardWrapper.java:1523)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:279)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:188)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:641)
    at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:97)
    at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:85)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:185)
    at org.apache.catalina.connector.CoyoteAdapter.doService(CoyoteAdapter.java:325)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:226)
    at com.sun.enterprise.v3.services.impl.ContainerMapper.service(ContainerMapper.java:165)
    at com.sun.grizzly.http.ProcessorTask.invokeAdapter(ProcessorTask.java:791)
    at com.sun.grizzly.http.ProcessorTask.doProcess(ProcessorTask.java:693)
    at com.sun.grizzly.http.ProcessorTask.process(ProcessorTask.java:954)
    at com.sun.grizzly.http.DefaultProtocolFilter.execute(DefaultProtocolFilter.java:170)
    at com.sun.grizzly.DefaultProtocolChain.executeProtocolFilter(DefaultProtocolChain.java:135)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:102)
    at com.sun.grizzly.DefaultProtocolChain.execute(DefaultProtocolChain.java:88)
    at com.sun.grizzly.http.HttpProtocolChain.execute(HttpProtocolChain.java:76)
    at com.sun.grizzly.ProtocolChainContextTask.doCall(ProtocolChainContextTask.java:53)
    at com.sun.grizzly.SelectionKeyContextTask.call(SelectionKeyContextTask.java:57)
    at com.sun.grizzly.ContextTask.run(ContextTask.java:69)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.doWork(AbstractThreadPool.java:330)
    at com.sun.grizzly.util.AbstractThreadPool$Worker.run(AbstractThreadPool.java:309)
    at java.lang.Thread.run(Thread.java:619)
Caused by: <openjpa-2.0.1-r422266:989424 nonfatal general error> org.apache.openjpa.persistence.PersistenceException: Schema 'INFORMATION_SCHEMA' doesn't exists {SELECT SEQUENCE_SCHEMA, SEQUENCE_NAME FROM INFORMATION_SCHEMA.SEQUENCES} [code=-1, state=42Y07]
    at org.apache.openjpa.jdbc.meta.MappingTool.record(MappingTool.java:556)
    at org.apache.openjpa.jdbc.meta.MappingTool.record(MappingTool.java:456)
    at org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.synchronizeMappings(JDBCBrokerFactory.java:155)
    at org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.synchronizeMappings(JDBCBrokerFactory.java:159)
    at org.apache.openjpa.jdbc.kernel.JDBCBrokerFactory.newBrokerImpl(JDBCBrokerFactory.java:117)
    at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:212)
    at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:156)
    at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:227)
    at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:154)
    at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:60)
    at com.sun.enterprise.container.common.impl.EntityManagerFactoryWrapper.createEntityManager(EntityManagerFactoryWrapper.java:101)
    at umk.dumont.db.dao.RegisterDAO.checkIfLoginIsFree(RegisterDAO.java:156)
    at umk.dumont.services.RegisterService.validateForm(RegisterService.java:95)
    at umk.dumont.models.RegisterFormModel.validateRegister(RegisterFormModel.java:40)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.springframework.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:186)
    at org.springframework.webflow.validation.ValidationHelper.invokeValidateMethodForCurrentState(ValidationHelper.java:122)
    at org.springframework.webflow.validation.ValidationHelper.invokeModelValidationMethod(ValidationHelper.java:109)
    at org.springframework.webflow.validation.ValidationHelper.validate(ValidationHelper.java:101)
    at org.springframework.webflow.mvc.view.AbstractMvcView.validate(AbstractMvcView.java:625)
    at org.springframework.webflow.mvc.view.AbstractMvcView.processUserEvent(AbstractMvcView.java:217)
    at org.springframework.webflow.engine.ViewState.handleEvent(ViewState.java:248)
    at org.springframework.webflow.engine.ViewState.resume(ViewState.java:218)
    at org.springframework.webflow.engine.Flow.resume(Flow.java:545)
    at org.springframework.webflow.engine.impl.FlowExecutionImpl.resume(FlowExecutionImpl.java:259)
    ... 34 more
Caused by: org.apache.openjpa.lib.jdbc.ReportingSQLException: Schema 'INFORMATION_SCHEMA' doesn't exists {SELECT SEQUENCE_SCHEMA, SEQUENCE_NAME FROM INFORMATION_SCHEMA.SEQUENCES} [code=-1, state=42Y07]
    at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:273)
    at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:253)
    at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.access$000(LoggingConnectionDecorator.java:70)
    at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection.prepareStatement(LoggingConnectionDecorator.java:305)
    at org.apache.openjpa.lib.jdbc.DelegatingConnection.prepareStatement(DelegatingConnection.java:186)
    at org.apache.openjpa.lib.jdbc.ConfiguringConnectionDecorator$ConfiguringConnection.prepareStatement(ConfiguringConnectionDecorator.java:155)
    at org.apache.openjpa.lib.jdbc.DelegatingConnection.prepareStatement(DelegatingConnection.java:175)
    at org.apache.openjpa.jdbc.sql.DBDictionary.prepareStatement(DBDictionary.java:5131)
    at org.apache.openjpa.jdbc.sql.DBDictionary.getSequences(DBDictionary.java:3942)
    at org.apache.openjpa.jdbc.schema.SchemaGenerator.generateSequences(SchemaGenerator.java:960)
    at org.apache.openjpa.jdbc.schema.SchemaGenerator.generateSchema(SchemaGenerator.java:365)
    at org.apache.openjpa.jdbc.schema.SchemaGenerator.generateSchemas(SchemaGenerator.java:300)
    at org.apache.openjpa.jdbc.schema.SchemaTool.getDBSchemaGroup(SchemaTool.java:1142)
    at org.apache.openjpa.jdbc.schema.SchemaTool.add(SchemaTool.java:348)
    at org.apache.openjpa.jdbc.schema.SchemaTool.run(SchemaTool.java:325)
    at org.apache.openjpa.jdbc.meta.MappingTool.record(MappingTool.java:504)
    ... 61 more

H2 コンソールを使用して「SELECT SEQUENCE_SCHEMA, SEQUENCE_NAME FROM INFORMATION_SCHEMA.SEQUENCES」と入力すると、すべて問題ないため、これは奇妙です (INFORMATION_SCHEMA という名前のテーブルのセットが表示されます)。もちろん、この sql ステートメントをログイン ユーザー名と呼び、persistence.xml ファイルで使用しています。

何か案は?

編集:私の設定:persistence.xml:

<property name="openjpa.ConnectionDriverName" value="org.h2.Driver"/>
  <property name="openjpa.ConnectionURL" value="jdbc:h2:F:\baza"/>
  <property name="openjpa.ConnectionUserName" value="sa"/>
  <property name="openjpa.ConnectionPassword" value="haslodobazy"/>
  <property name="openjpa.Log" value="DefaultLevel=TRACE, Tool=INFO"/>
  <property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>

春のapplicationCotext.xml:

<jee:jndi-lookup id="entityManagerFactory" jndi-name="myPersistenceUnit"/>
<bean class="org.springframework.orm.jpa.support.PersistenceAnnotationBeanPostProcessor"/>
<bean id="registerDaoImpl" class="umk.dumont.db.dao.RegisterDAO" />

<bean id="service" class="umk.dumont.services.RegisterService">
    <property name="registerDAO" ref="registerDaoImpl"/>
</bean>
<bean class="umk.dumont.models.RegisterFormModel">
    <property name="service" ref="service"/>
</bean> 

ウェブ構成:

<persistence-unit-ref>
    <persistence-unit-ref-name>myPersistenceUnit</persistence-unit-ref-name>
    <persistence-unit-name>persistenceUnitNameFromPersistenceXML</persistence-unit-name>
</persistence-unit-ref>

私は私の依存関係であるMavenを使用しています:

<dependencies>
    <dependency>
        <groupId>jstl</groupId>
        <artifactId>jstl</artifactId>
        <version>1.1.2</version>
    </dependency>
    <dependency>
        <groupId>javax</groupId>
        <artifactId>javaee-web-api</artifactId>
        <version>6.0</version>
        <scope>provided</scope>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-webmvc</artifactId>
        <version>3.0.5.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-jpa</artifactId>
        <version>2.0.8</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.webflow</groupId>
        <artifactId>spring-binding</artifactId>
        <version>2.2.1.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.webflow</groupId>
        <artifactId>spring-js</artifactId>
        <version>2.2.1.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.webflow</groupId>
        <artifactId>spring-webflow</artifactId>
        <version>2.2.1.RELEASE</version>
    </dependency>
     <dependency>
        <groupId>org.apache.openjpa</groupId>
        <artifactId>openjpa</artifactId>
        <version>2.0.1</version>
        <!--<scope>runtime</scope>-->
    </dependency>
    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <version>1.3.150</version>
        <scope>runtime</scope>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>3.8.2</version>
        <scope>test</scope>
    </dependency>
4

1 に答える 1

0

問題は、H2ではなくApacheDerbyを実際に使用していることです。理由:H2内にそのようなエラーメッセージまたはコードはありません。ただし、Apache Derbyは、このステートメントを実行するときに、まさにこのメッセージとコードを使用します。

構成を確認していただけますか?jdbc:derby:...代わりに使用している場所jdbc:h2:...

于 2011-03-08T05:30:34.333 に答える