You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openjpa.apache.org by "indvdum (JIRA)" <ji...@apache.org> on 2013/01/05 23:26:12 UTC

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

     [ https://issues.apache.org/jira/browse/OPENJPA-2319?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

indvdum updated OPENJPA-2319:
-----------------------------

    Description: 
Getting ReportingSQLException after second (and following) execution of JQPL. 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, );
	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}

  was:
Getting ReportingSQLException after second (and following) execution of JQPL. 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, );
	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}

    
> Second (and following) execution of same JQPL 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 JQPL. 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, );
> 	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