I am facing an issue in my EJB code. The following is my code, which is deployed on Weblogic 10.3.3:
@Entity
@NamedStoredFunctionQuery(name = "MY_FUNCTION", functionName = "apipay",
parameters = {
@StoredProcedureParameter(
queryParameter = "consubflag", name = "consubflag", direction = Direction.IN, type=String.class),
@StoredProcedureParameter(
queryParameter = "contrno", name = "contrno", direction = Direction.IN, type=String.class),
@StoredProcedureParameter(
queryParameter = "username", name = "username", direction = Direction.IN, type=String.class)
},
returnParameter =
@StoredProcedureParameter(
queryParameter = "paymentid", type = String.class)
)
public class MyPayment implements Serializable {
@Id
String paymentid;
String consubflag;
String contrno;
String username;
}
Following is the EJB code from which I am calling:
Query q = tabsEntityManager.createNamedQuery("MY_FUNCTION");
q.setParameter("consubflag", "S");
q.setParameter("contrno", contrno);
q.setParameter("username", "ATMGTW");
paymentId = (String) q.getSingleResult();
Following is my persistence.xml:
<persistence-unit name="PU1" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>jdbc/myDS1</jta-data-source>
<class>com.MyPayment</class>
</persistence-unit>
<persistence-unit name="PU2" transaction-type="JTA">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<jta-data-source>jdbc/myDS2</jta-data-source>
<class>com.MyRequest</class>
</persistence-unit>
</persistence>
The complete error stack trace is:
java.lang.IllegalArgumentException: NamedQuery of name: My_FUNCTION not found.
at org.eclipse.persistence.internal.jpa.EJBQueryImpl.getDatabaseQueryInternal(EJBQueryImpl.java:545)
at org.eclipse.persistence.internal.jpa.EJBQueryImpl.setParameterInternal(EJBQueryImpl.java:1145)
at org.eclipse.persistence.internal.jpa.EJBQueryImpl.setParameter(EJBQueryImpl.java:1032)
at org.eclipse.persistence.internal.jpa.EJBQueryImpl.setParameter(EJBQueryImpl.java:71)
at com.warid.es.onelink.facade.TopUpControllerBean.postPaidPayment(TopUpControllerBean.java:594)
I tried the same code in a Java SE app and it’s working fine.
NamedStoredFunctionQuery was introduced in EclipseLink 2.3.x and according documentation WebLogic 10.3.3.0 was shipped with EclipseLink 2.0.2.
That’s why annotation is ignored during deployment and query defined in @NamedStoredFunctionQuery is not found.