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