With JDeveloper you can generate an EJB datacontol on an EJB session bean and this Datacontol can be used in ADF. In this blog entry I will show you what the new features are and how you can do it yourself.
First we start with an entity, this is a normal entity on the country table in the HR schema ( I use the eclipselink persistence implementation, which supported very well in JDeveloper )
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEj94ER5a9BOYUVizC4ugfTGWpE-WcG2dHuBNEBE0TsUoI6MiAqkNpNPyVlfSq4zSTknMSXPPZUdKm7Awli-leP93B4MVgl7SkoeNZrIYiMMIb7BLPHYJs8dVO9bi5OjYYqL6maN_YoK6q0/s400/ejb_1.png)
Next step is to create a Session Bean where we add some Facade Methods.
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiOvCSNXMjWlZJ7s1sKUcxJzy2rBQ9ivnTM1LuVT2LNHjCvw5ABNX2FQEgVXVZFewtKsz0hYTxS8LoOZ4eK0mxLw8ckAlLVqI1juwhdHxlrkE6JgFIQ_njhh4oPOiiOvLQZLct_m18R0Kg/s400/ejb_2.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgOgWKTomaMd7M6VR6r_sO1yYK68OTvjzaymuTmIIq-ixgTAayWdRDOUgYi59KGWsWJWyqXf0_eWUGDuKKiN6YlEej4sg_vFVIokuYwHJkeUp5DwSYV1CKMLUvWEVlbZPk43mBzhyphenhyphenFcPeo/s400/ejb_3.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjZBWEbkfQfaUWOE4LBs-XJGGrC6Sq0cu0J6or-vJd_abn8TBWBmR4kUhi5MTk7waj8_gSfwawIPFyEALGjnv9SndN1yh2VgR95bZqB1MhHzl0JD1GTTpi-3XeL_V1sGYUgw2BmI0Mcmus/s400/ejb_4.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEjd3nB4SwmjwXY1LmQiIdtkcc7SFvDmd2g6NMH_isZEkBxvaH9-qH8c5U-3zGqMUKNAyGczGBE2b1nvQXDOsSiiZmFEyIMYsp33LSERPLIjDJMhvcsOKC9zEj6OR1KMzWwG_AcvMJRPqos/s400/ejb_5.png)
If we now go the viewcontroller project we can use this Country EJB datacontrol ( add the EJB model project to the viewcontroller project dependency or add the EJB ADF library to the project) . In the Data Controls window you can see the Named Criteria folder in the countriesFindAll method. Drag the All Queriable Attributes on the JSF page and select the Query Panel option.
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgsl-7xpisM0IEAWctf6vRHK_p-LhQzrJJIIkQfEc5_1ss0GYNJXMjY1uutNmH3GRJESncbi_2_u0slElwFXG_EyAdLNiXl7bU4nwUNYlPMNgcbDJ62mFaJ0QWzhsMqwOArCxM8fRIGHaM/s400/ejb_6.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgzTsOXAUwFmUu9N_y4_da6HvWrq2NmEU7Zq0cfQssgnUWv-Ik1QsHksZ2Aw8IZ4s3HCbFGRhGQbVfEoQ-ZU5KNgYJAUfA0Iat3__UUfUIqOknbN3UchCyVl-GYkVk2mLQcRRB_3zLPpFs/s400/ejb_7.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgh8v-urPe5sF-jMnhLVHYksb0xo4h2snWYPpkbal4IHbJxaCkeSJooLZg3I3tPCN670H8kWX4P7ptKUgNdEgOVi_s0hChyphenhyphenAayiuiuJwr97fwRZt6Pejwh0Phb7hX-VKt_xAvWj-83ucUM/s400/ejb_8.png)
![](https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEh-F4jtEB4jDGJ2hBsIAGmsCtGvo5OZM2Jsk3xOBQrN7A_5N_ICRdvTNcay5OhMehCJys3WSjDk3pVW7wmUNOEyjvuOGAW0vQnRo5tBjDh71HtfzzU9pvJV8Tu8NRMSczputO3HBvewjaQ/s400/ejb_9.png)
Here some eclipselink logging to let you see that is really works.
[EL Fine]: 2009-11-12 14:03:47.375--ServerSession(22965561)--SELECT COUNT(COUNTRY_ID) FROM COUNTRIES
[EL Fine]: 2009-11-12 14:03:47.39 --SELECT * FROM (SELECT /*+ FIRST_ROWS */ a.*, ROWNUM rnum FROM (SELECT COUNTRY_ID AS COUNTRY_ID1
, COUNTRY_NAME AS COUNTRY_NAME2, REGION_ID AS REGION_ID3 FROM COUNTRIES) a WHERE ROWNUM <= ?) WHERE rnum > ?
bind => [5, 0]
[EL Fine]: 2009-11-12 14:03:49.953 --SELECT * FROM (SELECT /*+ FIRST_ROWS */ a.*, ROWNUM rnum FROM (SELECT COUNTRY_ID AS COUNTRY_ID1
, COUNTRY_NAME AS COUNTRY_NAME2, REGION_ID AS REGION_ID3 FROM COUNTRIES) a WHERE ROWNUM <= ?) WHERE rnum > ?
bind => [10, 5]
[EL Fine]: 2009-11-12 14:04:39.281 --SELECT * FROM (SELECT /*+ FIRST_ROWS */ a.*, ROWNUM rnum FROM (SELECT COUNTRY_ID AS COUNTRY_ID1
, COUNTRY_NAME AS COUNTRY_NAME2, REGION_ID AS REGION_ID3 FROM COUNTRIES) a WHERE ROWNUM <= ?) WHERE rnum > ?
bind => [15, 10]
can u please guide on how to create a inputListOfValues using EJB ? i know how to create a inputListOfValues using a VO. Please advise.
ReplyDeleteHi,
ReplyDeleteyou have to do it manually, you can't create a lov on a viewobject attribute.
first display your form or table and replace an inputtext with inputListOfValues , use the same binding for the value.
then add the methodaction + its iterator to the pagedef of that page , add a tree binding on that iterator.
in the jspx page inside in the inputListOfValues add the values based on this tree.
like this
<af:selectOneChoice value="#{bindings.deptIdLocal.inputValue}"
label="Dept">
<af:forEach items="#{bindings.DeptLOV1.rangeSet}"
var="li">
<af:selectItem label="#{li.DepartmentName}"
value="#{li.DepartmentId}"/>
</af:forEach>
</af:selectOneChoice>