Friday, August 19, 2011

InvalidOperException : JBO-25221

It could be due to many reasons but the one that caused this error in my case was pretty simple. I had generated data control and dragged on my page. At this point the method signature was:

myMethod(int a, int b)

Later on I changed method to:

myMethod(int a, int b, int c)

and regenerated the data control. But I forgot to update the definition in the pageDef of the page. And when I tried to execute the method I got this error.

So I just updated the method definition in my pageDef and everything worked fine :)

Saturday, July 30, 2011

ADF: How to pass parameters between taskflows?


Simple stuff actually for most ADF users but this post is for the absolute beginners.

Here is the sample Taskflow design and we need to pass parameters from Caller TF to Callee TF.


Go to the definition of Callee TF and goto Parameters tab and define the Input Parameter Definitions.

Now go to the taskflow design and click on the Callee TF and go to the properties tab. In the 'Parameters' section you will see the parameters that you defined earlier. Here you should fill in the values that you want to pass.



On the event of which the Callee TF is called, you should set the values in the pageFlowScope.param1 and param2.

<af:commandToolbarButton id="ctbCreate" action="dialog:showWizard" >
<af:setPropertyListener from="0"
to="#{pageFlowScope.dpDimensionId}"
type="action" />
<af:setPropertyListener from="0"
to="#{pageFlowScope.decisionPackageId}"
type="action" />
</af:commandToolbarButton >

Now you would be able to get the values of param1 and param2 as 0 in the callee TF. Simple.

Friday, May 06, 2011

[Deployer:149164]The domain edit lock is owned by another session in exclusive mode - hence this deployment operation cannot proceed.

If ever you see this error while starting an application in Jdev, you can perform following steps:

1. Go to admin console of the integrated weblogic: http://127.0.0.1:7101/console
2. Login to server console by using default username/password which would be weblogic/weblogic1.
3. On successful login just click the button on the upper left corner where you can activate pending changes or discard pending changes. This would resolve the issue.

If however you are not able to logon to the weblogic console do either of these steps:
a) Go to Jdeveloper installation directory. Search for *.lok files and delete them.
b) If you find nothing in the above directory goto C:\Documents and Settings\\Application Data\JDeveloper directory and delete edit.lok file.

This will definitely resolve your issue.

Tuesday, February 22, 2011

How to create ADF components on runtime?

Quite easy actually! There are two methods by which we can do it. Either we can create the component in the managed bean and add it to the children of an existing component, or we can create it in our .jspx or .jsff page directly.

1) Creating component in the Managed Bean.

In the below code we are creating a new ShowDetailItem which we will add to an existing panelTabbed item.

private UIComponent createComponent() {
UIComponent componentToAdd = null;

//Create new object of ShowDetailItem and set its properties.
RichShowDetailItem item = new RichShowDetailItem();
item.setDisclosed(true);
item.setText("new tab");
componentToAdd = item;

//Now that we are at it, I am creating a new iFrame which will be set inside the ShowDetailItem
RichInlineFrame frame = new RichInlineFrame();
frame.setSource("http://oracle.com");

//add the iFrame to the children of the ShowDetailItem
componentToAdd.getChildren().add(frame);

return componentToAdd;
}

Now calling this method from the event listener on which I want to add the ShowDetailItem:
....
....
RichPanelTabbed mainPanel = getMainPanelTabbed();
UIComponent componentToAdd = buildComponent();
mainPanel.getChildren().add(componentToAdd);
....

And we are done! Now when ever this event listener is invoked, you will see a new tab in your panelTabbed layout.

2) Second way is also very easy and preferred if you have to create more than one components of same type. So if I want to create multiple tabs at run time for my panelTabbed component, I should use this method.

This is by using <af:iterator>> in your page. See the snippet below:

<:iterator var="row"
value="#{bindings.selectedFormsIterator.allRowsInRange}">
<af:showDetailItem text="#{bindings.selectedFormsIterator.currentRow.dataProvider.formName}">
<af:inlineFrame source="http://someurl.com/test.jsp?Form=#{bindings.selectedFormsIterator.currentRow.dataProvider.formName}" />
</af:showDetailItem>
</af:iterator>

Basically af:iterator is a modified version of af:forEach and is suggested for iteration if you are trying to create multiple components.

You just need to create the iterator binding and associate it with your iterator and you are ready to go!

Simple isn't it?

Thursday, August 12, 2010

Project Coin Features in Java 7

Here is a presentation that I made for my team:


Tuesday, July 27, 2010

Easiest way to print Timestamp in Java

Rather than using Calendar.getTime() we can use java.sql.Timestamp class to get the time stamp which gives date and time till millisecond precision.

System.out.println(new Timestamp(System.currentTimeMillis()));

Above will give you current timestamp in this format: 2010-07-27 16:37:45.39

Sunday, February 21, 2010

File upload problem: UTF-8 encoding not honored when form has multipart/form-data

The problem that I was facing was something like this. I was using Apache Commons File Upload library to upload and download some file.

I had a form in which user can upload a file and another field 'name' in which she can give any name to the file being loaded.


When I submitted the form, the file was uploaded fine but the value in name field was garbled. I followed all the possible suggestions I found:

  1. <%@page pageEncoding="UTF-8"%> set.
  2. <%@page contentType="text/html;charset=UTF-8"%gt; set after the first directive.
  3. <meta equiv="Content-Type" content="text/html;charset=UTF-8"> in the head.
  4. enctype="multipart/form-data" attribute in the form.
  5. accept-charset="UTF-8" attribute in the form.

in the Servlet:
  1. before doing any operations on request object: request.setCharacterEncoding("UTF-8");
For accessing the value

FileItem item = (FileItem) iter.next();

if (item.isFormField()) {

//For regular form field:

name = item.getFieldName();

//converting from default encoding to UTF-8.

value = new String(item.getString().getBytes(), "UTF-8");

}


But this too didn't work. Finally after lot of trial and error methods, this is the call which set everything right.

value = item.getString("UTF-8").trim();

I was able to get the value in text field correct, ungarbled!