You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "Herman Vierendeels (JIRA)" <ji...@apache.org> on 2013/01/07 11:16:18 UTC

[jira] [Commented] (OPENJPA-2319) Second (and following) execution of same JPQL is failed

    [ https://issues.apache.org/jira/browse/OPENJPA-2319?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13545751#comment-13545751 ] 

Herman Vierendeels commented on OPENJPA-2319:
---------------------------------------------

could this have something to do with 
https://issues.apache.org/jira/browse/OPENJPA-2286
SELECT COUNT with date litteral,used more than once, provokes ArgumentException

                
> Second (and following) execution of same JPQL is failed
> -------------------------------------------------------
>
>                 Key: OPENJPA-2319
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-2319
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: sql
>    Affects Versions: 2.2.1
>         Environment: Debian testing
> OpenJDK Runtime Environment (IcedTea7 2.1.3) (7u3-2.1.3-1)
> Maven 3.0.4
> Groovy 2.0.5
> PostgreSQL 9.1-901-1.jdbc4
> Tomcat or Jetty web server
>            Reporter: indvdum
>
> Getting ReportingSQLException after second (and following) execution of JPQL. First execution (after server start) is normal.
> {code:title=code|borderStyle=solid}
> ...
> public List<Payment> getPayments(IPayable participan) {
> 	Query query = em.createQuery("select p from Payment p where (p.sender = ?1 or p.recipient = ?1) order by p.createDate desc");
> 	query.setParameter(1, participan);
> 	return (List<Payment>) query.getResultList();
> }
> ...
> {code}
> {code:title=log after first call of getPayments()|borderStyle=solid}
> 33779  download-x  TRACE  [http-bio-8080-exec-10] openjpa.jdbc.SQL - <t 2028134790, conn 1685658195> executing prepstmnt 1156839632 
> SELECT t0.id, t0.dtype, t0.createdate, t0.description, 
>         t0.recipient, t0.recipientaftercash, 
>         t0.recipientbeforecash, t0.sender, 
>         t0.senderaftercash, t0.senderbeforecash, t0.type, 
>         t0.value, t0.download_id 
>     FROM public.Payment t0 
>     WHERE (t0.sender = ? OR t0.recipient = ?) 
>     ORDER BY t0.createdate DESC 
> [params=(String) ru.bazon.downloadx.entities.security.User:51, (String) ru.bazon.downloadx.entities.security.User:51]
> 33782  download-x  TRACE  [http-bio-8080-exec-10] openjpa.jdbc.SQL - <t 2028134790, conn 1685658195> [3 ms] spent
> {code}
> {code:title=log after second (and following) call of getPayments()|borderStyle=solid}
> 165632  download-x  TRACE  [http-bio-8080-exec-10] openjpa.jdbc.SQL - <t 2028134790, conn 1685658195> executing prepstmnt 344249860 
> SELECT t0.id, t0.dtype, t0.createdate, t0.description, 
>         t0.recipient, t0.recipientaftercash, 
>         t0.recipientbeforecash, t0.sender, 
>         t0.senderaftercash, t0.senderbeforecash, t0.type, 
>         t0.value, t0.download_id 
>     FROM public.Payment t0 
>     WHERE (t0.sender = ? OR t0.recipient = ?) 
>     ORDER BY t0.createdate DESC 
> [params=(int) 51, (int) 51]
> 165635  download-x  TRACE  [http-bio-8080-exec-10] openjpa.jdbc.SQL - <t 2028134790, conn 1685658195> [3 ms] spent
> <openjpa-2.2.1-r422266:1396819 fatal general error> org.apache.openjpa.persistence.PersistenceException: ERROR: operator does not exist: character varying = integer
>   HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.
>   Position: 243 {prepstmnt 344249860 
> SELECT t0.id, t0.dtype, t0.createdate, t0.description, 
>         t0.recipient, t0.recipientaftercash, 
>         t0.recipientbeforecash, t0.sender, 
>         t0.senderaftercash, t0.senderbeforecash, t0.type, 
>         t0.value, t0.download_id 
>     FROM public.Payment t0 
>     WHERE (t0.sender = ? OR t0.recipient = ?) 
>     ORDER BY t0.createdate DESC 
> [params=(int) 51, (int) 51]} [code=0, state=42883]
> 	at org.apache.openjpa.jdbc.sql.DBDictionary.narrow(DBDictionary.java:4958)
> 	at org.apache.openjpa.jdbc.sql.DBDictionary.newStoreException(DBDictionary.java:4918)
> 	at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:136)
> 	at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:110)
> 	at org.apache.openjpa.jdbc.sql.SQLExceptions.getStore(SQLExceptions.java:62)
> 	at org.apache.openjpa.jdbc.kernel.PreparedSQLStoreQuery$PreparedSQLExecutor.executeQuery(PreparedSQLStoreQuery.java:139)
> 	at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:1005)
> 	at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:863)
> 	at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:794)
> 	at org.apache.openjpa.kernel.DelegatingQuery.execute(DelegatingQuery.java:542)
> 	at org.apache.openjpa.persistence.QueryImpl.execute(QueryImpl.java:286)
> 	at org.apache.openjpa.persistence.QueryImpl.getResultList(QueryImpl.java:302)
> 	at javax.persistence.TypedQuery$getResultList.call(Unknown Source)
> 	at ru.indvdum.jpa.dao.JPADataAccessObject.list(JPADataAccessObject.groovy:208)
> 	at ru.bazon.downloadx.dao.DAO.getPayments(DAO.java:422)
> 	at ru.bazon.downloadx.web.vaadin.main.mypayments.MyAllPaymentsComponent.redraw(MyAllPaymentsComponent.java:105)
> 	at ru.bazon.downloadx.web.vaadin.main.MyPaymentsComponent.redraw(MyPaymentsComponent.java:47)
> 	at ru.bazon.downloadx.web.vaadin.DownloadXComponent$3.selectedTabChange(DownloadXComponent.java:148)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	at java.lang.reflect.Method.invoke(Method.java:601)
> 	at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:510)
> 	at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:164)
> 	at com.vaadin.ui.AbstractComponent.fireEvent(AbstractComponent.java:1219)
> 	at com.vaadin.ui.TabSheet.fireSelectedTabChange(TabSheet.java:876)
> 	at com.vaadin.ui.TabSheet.setSelectedTab(TabSheet.java:606)
> 	at com.vaadin.ui.TabSheet.changeVariables(TabSheet.java:695)
> 	at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.changeVariables(AbstractCommunicationManager.java:1460)
> 	at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.handleVariableBurst(AbstractCommunicationManager.java:1404)
> 	at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.handleVariables(AbstractCommunicationManager.java:1329)
> 	at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.doHandleUidlRequest(AbstractCommunicationManager.java:761)
> 	at com.vaadin.terminal.gwt.server.CommunicationManager.handleUidlRequest(CommunicationManager.java:323)
> 	at com.vaadin.terminal.gwt.server.AbstractApplicationServlet.service(AbstractApplicationServlet.java:501)
> 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
> 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
> 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
> 	at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)
> 	at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
> 	at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
> 	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
> 	at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
> 	at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449)
> 	at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)
> 	at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
> 	at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
> 	at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383)
> 	at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)
> 	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
> 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
> 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
> 	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
> 	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
> 	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
> 	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
> 	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
> 	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
> 	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
> 	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
> 	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
> 	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579)
> 	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
> 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
> 	at java.lang.Thread.run(Thread.java:722)
> Caused by: org.apache.openjpa.lib.jdbc.ReportingSQLException: ERROR: operator does not exist: character varying = integer
>   HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.
>   Position: 243 {prepstmnt 344249860 
> SELECT t0.id, t0.dtype, t0.createdate, t0.description, 
>         t0.recipient, t0.recipientaftercash, 
>         t0.recipientbeforecash, t0.sender, 
>         t0.senderaftercash, t0.senderbeforecash, t0.type, 
>         t0.value, t0.download_id 
>     FROM public.Payment t0 
>     WHERE (t0.sender = ? OR t0.recipient = ?) 
>     ORDER BY t0.createdate DESC 
> [params=(int) 51, (int) 51]} [code=0, state=42883]
> 	at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:219)
> 	at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.wrap(LoggingConnectionDecorator.java:203)
> 	at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator.access$700(LoggingConnectionDecorator.java:59)
> 	at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection$LoggingPreparedStatement.executeQuery(LoggingConnectionDecorator.java:1118)
> 	at org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:265)
> 	at org.apache.openjpa.jdbc.sql.PostgresDictionary$PostgresPreparedStatement.executeQuery(PostgresDictionary.java:1019)
> 	at org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:265)
> 	at org.apache.openjpa.jdbc.kernel.JDBCStoreManager$CancelPreparedStatement.executeQuery(JDBCStoreManager.java:1774)
> 	at org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:255)
> 	at org.apache.openjpa.jdbc.kernel.PreparedSQLStoreQuery$PreparedSQLExecutor.executeQuery(PreparedSQLStoreQuery.java:118)
> 	... 59 more
> NestedThrowables:
> org.postgresql.util.PSQLException: ERROR: operator does not exist: character varying = integer
>   HINT:  No operator matches the given name and argument type(s). You might need to add explicit type casts.
>   Position: 243
> 	at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2103)
> 	at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1836)
> 	at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:257)
> 	at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:512)
> 	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:388)
> 	at org.postgresql.jdbc2.AbstractJdbc2Statement.executeQuery(AbstractJdbc2Statement.java:273)
> 	at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:96)
> 	at org.apache.tomcat.dbcp.dbcp.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:96)
> 	at org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:267)
> 	at org.apache.openjpa.lib.jdbc.LoggingConnectionDecorator$LoggingConnection$LoggingPreparedStatement.executeQuery(LoggingConnectionDecorator.java:1116)
> 	at org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:265)
> 	at org.apache.openjpa.jdbc.sql.PostgresDictionary$PostgresPreparedStatement.executeQuery(PostgresDictionary.java:1019)
> 	at org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:265)
> 	at org.apache.openjpa.jdbc.kernel.JDBCStoreManager$CancelPreparedStatement.executeQuery(JDBCStoreManager.java:1774)
> 	at org.apache.openjpa.lib.jdbc.DelegatingPreparedStatement.executeQuery(DelegatingPreparedStatement.java:255)
> 	at org.apache.openjpa.jdbc.kernel.PreparedSQLStoreQuery$PreparedSQLExecutor.executeQuery(PreparedSQLStoreQuery.java:118)
> 	at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:1005)
> 	at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:863)
> 	at org.apache.openjpa.kernel.QueryImpl.execute(QueryImpl.java:794)
> 	at org.apache.openjpa.kernel.DelegatingQuery.execute(DelegatingQuery.java:542)
> 	at org.apache.openjpa.persistence.QueryImpl.execute(QueryImpl.java:286)
> 	at org.apache.openjpa.persistence.QueryImpl.getResultList(QueryImpl.java:302)
> 	at javax.persistence.TypedQuery$getResultList.call(Unknown Source)
> 	at ru.indvdum.jpa.dao.JPADataAccessObject.list(JPADataAccessObject.groovy:208)
> 	at ru.bazon.downloadx.dao.DAO.getPayments(DAO.java:422)
> 	at ru.bazon.downloadx.web.vaadin.main.mypayments.MyAllPaymentsComponent.redraw(MyAllPaymentsComponent.java:105)
> 	at ru.bazon.downloadx.web.vaadin.main.MyPaymentsComponent.redraw(MyPaymentsComponent.java:47)
> 	at ru.bazon.downloadx.web.vaadin.DownloadXComponent$3.selectedTabChange(DownloadXComponent.java:148)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> 	at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
> 	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> 	at java.lang.reflect.Method.invoke(Method.java:601)
> 	at com.vaadin.event.ListenerMethod.receiveEvent(ListenerMethod.java:510)
> 	at com.vaadin.event.EventRouter.fireEvent(EventRouter.java:164)
> 	at com.vaadin.ui.AbstractComponent.fireEvent(AbstractComponent.java:1219)
> 	at com.vaadin.ui.TabSheet.fireSelectedTabChange(TabSheet.java:876)
> 	at com.vaadin.ui.TabSheet.setSelectedTab(TabSheet.java:606)
> 	at com.vaadin.ui.TabSheet.changeVariables(TabSheet.java:695)
> 	at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.changeVariables(AbstractCommunicationManager.java:1460)
> 	at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.handleVariableBurst(AbstractCommunicationManager.java:1404)
> 	at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.handleVariables(AbstractCommunicationManager.java:1329)
> 	at com.vaadin.terminal.gwt.server.AbstractCommunicationManager.doHandleUidlRequest(AbstractCommunicationManager.java:761)
> 	at com.vaadin.terminal.gwt.server.CommunicationManager.handleUidlRequest(CommunicationManager.java:323)
> 	at com.vaadin.terminal.gwt.server.AbstractApplicationServlet.service(AbstractApplicationServlet.java:501)
> 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
> 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
> 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
> 	at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)
> 	at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
> 	at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
> 	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
> 	at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
> 	at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449)
> 	at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)
> 	at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
> 	at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
> 	at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383)
> 	at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)
> 	at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
> 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
> 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
> 	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:224)
> 	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
> 	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
> 	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
> 	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
> 	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
> 	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
> 	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
> 	at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:987)
> 	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:579)
> 	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
> 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
> 	at java.lang.Thread.run(Thread.java:722)
> {code}
> {code:title=persistence.xml|borderStyle=solid}
> <?xml version="1.0" encoding="UTF-8"?>
> <persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
> 	<persistence-unit name="download-x">
> 		<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
> 		<non-jta-data-source>java:comp/env/jdbc/download-x</non-jta-data-source>
> 		<class>ru.bazon.downloadx.entities.links.Download</class>
> 		<class>ru.bazon.downloadx.entities.links.Link</class>
> 		<class>ru.bazon.downloadx.entities.pay.DownloadPayment</class>
> 		<class>ru.bazon.downloadx.entities.pay.Payment</class>
> 		<class>ru.bazon.downloadx.entities.security.Role</class>
> 		<class>ru.bazon.downloadx.entities.security.User</class>
> 		<class>ru.bazon.downloadx.entities.settings.SystemSettings</class>
> 		<class>ru.bazon.downloadx.entities.settings.WebMoneySettings</class>
> 		<properties>
> 			<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema(ForeignKeys=true)"/>
> 			<property name="openjpa.Multithreaded" value="true"/>
> 			<property name="openjpa.jdbc.SchemaFactory" value="native(ForeignKeys=true)"/>
> 			<property name="openjpa.jdbc.EagerFetchMode" value="none"/>
> 			<property name="openjpa.ConnectionFactoryProperties" value="PrintParameters=true, PrettyPrint=true"/>
> 			<property name="openjpa.DetachState" value="all"/>
> 			<property name="openjpa.RuntimeUnenhancedClasses" value="unsupported"/>
> 			<property name="openjpa.InverseManager" value="true(Action=warn)"/>
> 		</properties>
> 	</persistence-unit>
> </persistence>
> {code}
> {code:title=Payment.groovy|borderStyle=solid}
> package ru.bazon.downloadx.entities.pay
> import javax.persistence.CascadeType
> import javax.persistence.Entity
> import javax.persistence.EnumType
> import javax.persistence.Enumerated
> import javax.persistence.GeneratedValue
> import javax.persistence.Id
> import javax.persistence.ManyToOne
> import ru.bazon.downloadx.pay.PaymentType
> import ru.indvdum.jpa.entities.AbstractEntity
> @Entity
> class Payment extends AbstractEntity {
> 	@Id
> 	@GeneratedValue
> 	int id;
> 	BigDecimal value = BigDecimal.ZERO;
> 	BigDecimal senderBeforeCash = 0;
> 	BigDecimal senderAfterCash = 0;
> 	BigDecimal recipientBeforeCash = 0;
> 	BigDecimal recipientAfterCash = 0;
> 	String description;
> 	Date createDate;
> 	@Enumerated(EnumType.STRING)
> 	PaymentType type = PaymentType.Transfer;
> 	@ManyToOne(cascade = [CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH])
> 	IPayable sender;
> 	@ManyToOne(cascade = [CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH])
> 	IPayable recipient;
> 	
> 	@Override
> 	public String toString() {
> 		return "${value}";
> 	}
> }
> {code}
> {code:title=IPayable.java|borderStyle=solid}
> package ru.bazon.downloadx.entities.pay;
> import java.math.BigDecimal;
> public interface IPayable {
> 	BigDecimal getCash();
> 	void setCash(BigDecimal cash);
> }
> {code}
> {code:title=User.groovy|borderStyle=solid}
> package ru.bazon.downloadx.entities.security
> import javax.persistence.CascadeType
> import javax.persistence.Entity
> import javax.persistence.FetchType
> import javax.persistence.GeneratedValue
> import javax.persistence.Id
> import javax.persistence.ManyToMany
> import javax.persistence.OneToMany
> import javax.persistence.Table
> import javax.persistence.Temporal
> import javax.persistence.TemporalType
> import javax.persistence.Transient
> import org.apache.openjpa.persistence.jdbc.Unique
> import org.apache.shiro.authc.AuthenticationInfo
> import org.apache.shiro.authc.SaltedAuthenticationInfo
> import org.apache.shiro.authz.AuthorizationInfo
> import org.apache.shiro.crypto.hash.Sha256Hash
> import org.apache.shiro.subject.PrincipalCollection
> import org.apache.shiro.subject.SimplePrincipalCollection
> import org.apache.shiro.util.ByteSource
> import org.apache.shiro.util.SimpleByteSource
> import ru.bazon.downloadx.entities.links.Link
> import ru.bazon.downloadx.entities.pay.IPayable
> import ru.bazon.downloadx.security.Permit
> import ru.indvdum.jpa.entities.AbstractEntity
> @Entity
> @Table(name = "users")
> class User extends AbstractEntity implements IPayable, AuthorizationInfo, AuthenticationInfo, SaltedAuthenticationInfo {
> 	@Id
> 	@GeneratedValue
> 	int id;
> 	@Unique
> 	String login;
> 	
> 	String passwordHash;
> 	String firstName;
> 	String middleName;
> 	String lastName;
> 	String email;
> 	String phone;
> 	// TODO: reserve cash for link payments
> 	BigDecimal cash = BigDecimal.ZERO;
> 	Date registerDate;
> 	Date repeatedDownloadsDate;
> 	@Temporal(TemporalType.DATE)
> 	Date birthDate;
> 	@ManyToMany(fetch = FetchType.EAGER, cascade = [CascadeType.DETACH, CascadeType.MERGE, CascadeType.PERSIST, CascadeType.REFRESH])
> 	Set<Role> userRoles = new HashSet<Role>();
> 	@OneToMany(mappedBy = "user", orphanRemoval = true, fetch = FetchType.EAGER, cascade = CascadeType.ALL)
> 	Set<Link> links = new HashSet<Link>();
> 	public String getName() {
> 		return "${firstName} ${middleName} ${lastName}";
> 	}
> 	public String setPassword(String password) {
> 		Sha256Hash sha256Hash = new Sha256Hash(password, callMethod("getCredentialsSalt").getBytes());
> 		passwordHash = sha256Hash.toHex();
> 		return passwordHash;
> 	}
> 	@Transient
> 	private String realmName;
> 	public void setRealmName(String realmName) {
> 		this.realmName = realmName;
> 	}
> 	@Override
> 	public PrincipalCollection getPrincipals() {
> 		return new SimplePrincipalCollection(id, realmName);
> 	}
> 	@Override
> 	public Object getCredentials() {
> 		return passwordHash;
> 	}
> 	@Override
> 	public Collection<String> getStringPermissions() {
> 		Set<String> permissionsNames = new HashSet<String>();
> 		for (Role role : userRoles) {
> 			for (Permit permit : role.getPermits()) {
> 				permissionsNames.add(permit.getName());
> 			}
> 		}
> 		return permissionsNames;
> 	}
> 	@Override
> 	public Collection<Permit> getObjectPermissions() {
> 		Set<Permit> permissions = new HashSet<Permit>();
> 		for (Role role : userRoles) {
> 			for (Permit permit : role.getPermits()) {
> 				permissions.add(permit);
> 			}
> 		}
> 		return permissions;
> 	}
> 	@Override
> 	public ByteSource getCredentialsSalt() {
> 		return new SimpleByteSource("random_salt_value_" + login);
> 	}
> 	@Override
> 	public Collection<String> getRoles() {
> 		Collection<String> roles = new HashSet<String>();
> 		for (Role role : userRoles) {
> 			roles.add(role.getName());
> 		}
> 		return roles;
> 	}
> 	public boolean isPermitted(Permit permission) {
> 		for (Role role : userRoles) {
> 			if (role.isPermitted(permission))
> 				return true;
> 		}
> 		return false;
> 	}
> 	@Override
> 	public String toString() {
> 		return "${login}";
> 	}
> }
> {code}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira