Arch2Arch Tab BEA.com
Syndicate this blog (XML)

Changing Annotation Configuration on the Fly

Bookmark Blog Post

del.icio.us del.icio.us
Digg Digg
DZone DZone
Furl Furl
Reddit Reddit

Chris Hogue's Blog | September 21, 2006   6:39 PM | Comments (27)


One of the knocks against annotations and annotation-based configuration has been that it bakes the configuration into the code, requiring the application to be cracked and recompiled to change the configuration from one environment to the other.

Consider the case of a ServiceControl, where the endpoint URL the control calls out to is specified in an annotation. Often in a development environment you won't want to be calling the live service so you point it to a stub test service. But what about when you want to put the application in production? Do you have to remember to change the URL the last time you build before deploying it to the production environment?

With the combination of Beehive Controls, WLS, and Workshop the answer is a resounding no. There's a feature called Annotation Overrides available beginning with Workshop for WebLogic 9.2 that tackles this problem in a really nice way. With annotation overrides, you can change the value of an annotation without cracking the EAR, and in fact even while it's running. Yes, it can be done live. And better yet, it's integrated with deployment plans, so you can have one plan for staging, another for production, and by simply specifying what plan to use as you deploy your configuration will always be right for each environment without having to go in manually every time.

 

Here's How it Works

In this example we've got a ServiceControl that calls out to an external service normally at a URL of "http://www.example.org/Services/OrderService". During development, however, since we don't want to hit the live service we have a local service in house that lives at the URL "http://localtest/Services/OrderService". In our code the ServiceControl declaration will look something like this:

 

@ControlExtension
@ServiceControl.Location(urls = 
    {"http://localtest/Services/OrderService"})
public interface OrderServiceControl 
                      extends ServiceControl{
    ...
}

 

Notice that the URL is to the local, in house service. This works great for testing, but it's certainly not the right location for production.

Now say I've deployed it to the production server. After deploying it the first time I can go into the WLS console, locate the control, and change the value through a simple form. To find it in the console, navigate to Deployments > [your application] > Deployment Plan > Resource Dependencies. Then locate your control in the "Controls" tree to find the available settings. It should look something like this:

 

 

When you change a value and save the changes, the console actually creates a deployment plan right next to your application. That's how the values are overridden externally.

Lastly, you'll need to go back to the Deployments screen and "Update" the application for the changes to take effect.

You've probably noticed by now that since it creates the deployment plan in the console, you can just grab that plan and use it whenever you deploy the application from now on. No need to go back through the console each time.

And this feature isn't just for the ServiceControl--it works for any Beehive control that makes a PropertySet available to control clients (unless the control author disallows external overrides by setting the @PropertySet.externalConfig attribute to false).

The next release will have some additional documentation covering more of this feature.

 

Things to Watch For

There are some things to know when using annotation overrides.

1. Annotation overriding is only supported in an EAR. Standalone modules cannot use this feature.

2. You won't see the options in the Resource Dependencies tab when you've deployed straight from the IDE, so to play with this make sure you've created an EAR file from your projects. Why is this you say? Well, since there's really no reason to override the values during normal iterative development, we don't want to pay the price in build/deploy time of generating the manifest information that is required for annotation overrides to work. So it's only done when you use the Export > EAR File wizard or use the "archive" target of the exported Workshop Ant Scripts.

3. The EAR project must reference the weblogic-controls-1.0 J2EE Library. If your EAR doesn't reference this library, you may get an error during deployment that looks something like:

"javax.enterprise.deploy.model.exceptions.DDBeanCreateException: [J2EE Deployment SPI:260142]The descriptor at 'META-INF/annotation-manifest.xml' in module 'ServicesWeb.war' is not recognized, and could not be parsed."

If your EAR doesn't yet reference that J2EE Library, you can add it by doing the following:

  1. Open the Project Explorer (not the Package Explorer).
  2. Expand the EAR project. You'll see a node ending in [WebLogic] which is the node representing weblogic-application.xml.
  3. Expand this node, right-click WebLogic J2EE Libraries, and select Add...
  4. Select the Browse button and choose weblogic-controls-1.0 (not the war one, the regular one).

 


Comments

Comments are listed in date ascending order (oldest first) | Post Comment

  • How would we enable this for our own applications, which are not based on Beehive? We have some configurations which needs to be shared between EJB's and web applications, and which should be modifiable in deployment plans.

    Posted by: nuh@pfa.dk on September 22, 2006 at 12:13 AM

  • While my use of deployment plans is mostly around Beehive applications, they're certainly a more general feature provided by WLS. There is some documentation on what can be covered by deployment plans and how to go about that here:

    http://e-docs.bea.com/wls/docs92/deployment/export.html

    Hope this helps.

    Posted by: hogue on September 22, 2006 at 8:11 AM

  • Can you use this mechanism to override annotations at the method level?

    Posted by: bposner@bea.com on October 3, 2006 at 3:30 PM

  • Currently annotation overrides are only supported at the class and field level.

    Hope this helps.

    Posted by: hogue on October 4, 2006 at 1:00 PM

  • Chris, Thanks for this excellent article on annotation overrides. If my understanding goes right, the annotation-manifest.xml is only required as part of my deployable EAR file if i need to override the annotations which are part of the code. You mention "Annotation overriding is only supported in an EAR. Standalone modules cannot use this feature." Not sure what you mean by this. I have a EAR project which references WS and EJB projects. I noticed that Workshop for WLS 9.2 had generated an annotation-manifest.xml in the WAR file as part of the webservices project. There was no such file at the EAR level. Could you clarify this behaviour please. Thanks Ramdas

    Posted by: ramdas on November 3, 2006 at 3:15 PM

  • Hi Ramdas,

    When I said "Standalone Modules", I mean web service, web, or EJB projects that are not associated with an EAR. WLS supports deploying this way, but there are some limitations. One of them is the annotation override behavior.

    As you've noticed the annotation manifest is actually associated with and located in the module project, not the EAR. But it won't be generated if you don't associate your project with an EAR.

    Hopefully that clarifies.

    Posted by: hogue on November 8, 2006 at 2:22 PM

  • Chris, Thanks for the details. -Ramdas

    Posted by: ramdas on November 14, 2006 at 12:03 PM

  • Hi Chris, In my application I trying to overide the urls at deployment time, as you decribed above I followed the all the steps. But the over ride is not working fine. here is the my control code. can you please let me know any problem with my code.

    package processes; import com.bea.control.ServiceControl; import org.apache.beehive.controls.api.events.EventSet; import org.apache.beehive.controls.api.bean.ControlExtension; @ServiceControl.Location(urls = {"http://localhost:7001/Ex1_web/processes/Process.jpd"}) @ServiceControl.HttpSoapProtocol @ServiceControl.SOAPBinding(style = ServiceControl.SOAPBinding.Style.DOCUMENT, use = ServiceControl.SOAPBinding.Use.LITERAL, parameterStyle = ServiceControl.SOAPBinding.ParameterStyle.WRAPPED) @ServiceControl.WSDL(resourcePath = "processes/ProcessContract.wsdl", service = "Process") @ControlExtension public interface ProcessServiceControl extends ServiceControl { static final long serialVersionUID = 1L; public void clientRequest(java.lang.String inputStr_arg); /** This event set interface provides support for the onAsyncFailure event. */ @EventSet(unicast=true) public interface Callback extends ServiceControl.Callback {}; }

    Thank in advance. Venkat ( BEA - IT)

    Posted by: dvnr16 on March 24, 2007 at 10:17 PM

  • Hi Venkat,

    I don't see anything obviously wrong, but if there was a problem it's unlikely it would be in the control extension code. There must be some other issue with your domain, environment, or deployment setup.

    Can you describe the problem you're having? Are you getting an error? Is it just not picking up the value? How are you deploying the application, and how are you overriding the value (deployment plan during wldeploy, wls console, etc.)?

    Posted by: hogue on March 26, 2007 at 8:09 AM

  • Chris,
    I developed a sample application with workshop 9.2 (Eclipse), and exported the ?Workshop ant scripts? and ?Workshop meta data for Workshop ant scripts? from the workshop.
    Then I built the EAR using the following command:

       ant clean build archive -Dworkspace=../workspace?



    When I checked for the creation of the annotation-manifest.xml file, I found that the file was in the “.war” file for my sample app in two places:

      meta-inf/ annotation-manifest.xml
        WEB-INF/classes/META-INF/annotation-manifest.xml Next I deployed the application using weblogic.Deployer as follows

        java weblogic.Deployer –username weblogic –password weblogic –adminurl t3://localhost:7001 –source ./Ex1_Ear.ear –deploy

        Next I went to the admin console and clicked on “Deployments”, and then on my test deployment. After the attributes of that deployment were displayed, I selected the “Deployment Plan” tab and then the “Resource Dependencies” tab. Under “Controls”, I could see my test service-control, and I was able to navigate to the “urls” property to view the overrides set up there. After updating the Override value for the url, I saved the new deployment plan. Then I updated (redeployed) the application and started it up with the option to service all requests (as opposed to only administration requests). Finally, I accessed my application, but found that the override value did not take effect as expected. Specifically, I switched the “localhost” hostname in the URL to an IP-address. But when I tested the app, the original “localhost” hostname was used, causing an error in the server log.

        There was no error or warning in the server log regarding the annotation override.

        Thanks Venkat

    Posted by: dvnr16 on March 26, 2007 at 6:47 PM

  • Those steps sound correct, although you shouldn't have had to redeploy the application. Just doing Update should pick up the new value.

    When you redeployed, can you confirm that it did in fact pick up the deployment plan? Does it show in the console as having a deployment plan? Also, when you go back to the overrides property page, do you see the new value in the listing?

    If all this looks right, is this an app you can send to me?

    Posted by: hogue on March 27, 2007 at 8:14 AM

  • Hi Chris Any ideas why a control wouldn't show up at all in an applications deployment plan tab? I've got a small app that is deployed as an ear file that uses a service control to call a remote web service (a different app hosted on the same WLS cluster) but the control doesn't show up in the resource dependencies tab. I've exported it as an ear and am pretty sure I've referenced the weblogic controls jar correctly. Also the annotation-manifest.xml file has the ServiceControl Location urls in it, so any clues or more information about how the deployment plans work would be great. Thanks Brock

    Posted by: brockmills on June 11, 2007 at 10:06 PM

  • Hi Brock,

    Sorry, I've not seen that before if you've exported the EAR correctly. There have been some issues in a cluster if people didn't have the libraries targeted to the admin server. Essentially you need most of the libraries, particularly the controls libraries, targeted to the admin server since that's the one trying to inspect the application.

    If you've got that set up correctly, it's probably best to contact support so we can get a reproducible case and take a look at what might be going on.

    Posted by: hogue on June 12, 2007 at 8:12 AM

  • I blogged with a little more detail about this because I found the console interface to be non-intuitive.

    Posted by: jbayer on August 30, 2007 at 5:56 PM

  • Hi Chris, In your reply to Brock you mention that the libraries need to be targeted to the admin server. Can you provide a list of all the libraries that need to be deployed to the admin server? Thanks, Kyle

    Posted by: kyleK on August 31, 2007 at 6:43 AM

  • Hi Kyle,

    Unfortunately I don't have the full list on me at the moment. I believe for non-Portal applications you will need the weblogic-controls, beehive-controls, and beehive-netui libraries targeted. I understand some people using WLP needed more, but I haven't been involved with those to know the full list of WLP libraries.

    -Chris

    Posted by: hogue on August 31, 2007 at 8:26 AM

  • Hi Chris, Actually we are on WLP and I am working with jbayer on this issue. I'll let you know which jars we end up including to make this work. -Kyle

    Posted by: kyleK on September 4, 2007 at 12:42 PM

  • Hi Chris, When I try to add beehive-netui-1.0(1.0,1.0) to the admin server I get the following error when I click on the the deployment link in the admin console: Unexpected Exception An unexpected exception has occurred processing your request Message: null Stack Trace: javax.management.RuntimeOperationsException at javax.management.remote.rmi.RMIConnectionImpl.checkNonNull(RMIConnectionImpl.java:1714) at javax.management.remote.rmi.RMIConnectionImpl.getMBeanInfo(RMIConnectionImpl.java:864) at javax.management.remote.rmi.RMIConnectionImpl_WLSkel.invoke(Unknown Source) at weblogic.rmi.internal.ServerRequest.sendReceive(ServerRequest.java:174) at weblogic.rmi.internal.BasicRemoteRef.invoke(BasicRemoteRef.java:223) at javax.management.remote.rmi.RMIConnectionImpl_921_WLStub.getMBeanInfo(Unknown Source) at javax.management.remote.rmi.RMIConnector$RemoteMBeanServerConnection.getMBeanInfo(RMIConnector.java:1043) at weblogic.management.jmx.MBeanServerInvocationHandler.newProxyInstance(MBeanServerInvocationHandler.java:591) at weblogic.management.jmx.MBeanServerInvocationHandler.invoke(MBeanServerInvocationHandler.java:432) at $Proxy67.getReferencingRuntimes(Unknown Source) at com.bea.console.utils.DeploymentUtils.mergeReferencingApps(DeploymentUtils.java:4094) at com.bea.console.utils.DeploymentUtils.getReferencingApps(DeploymentUtils.java:4060) at com.bea.console.actions.library.LibraryOverviewAction.getReferencingAppTable(LibraryOverviewAction.java:112) at com.bea.console.actions.library.LibraryOverviewAction.execute(LibraryOverviewAction.java:90) at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419) at org.apache.beehive.netui.pageflow.PageFlowRequestProcessor.access$201(PageFlowRequestProcessor.java:95) at org.apache.beehive.netui.pageflow.PageFlowRequestProcessor$ActionRunner.execute(PageFlowRequestProcessor.java:2042) at org.apache.beehive.netui.pageflow.interceptor.action.internal.ActionInterceptors.wrapAction(ActionInterceptors.java:90) at org.apache.beehive.netui.pageflow.PageFlowRequestProcessor.processActionPerform(PageFlowRequestProcessor.java:2114) at com.bea.console.internal.ConsolePageFlowRequestProcessor.processActionPerform(ConsolePageFlowRequestProcessor.java:221) at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224) at org.apache.beehive.netui.pageflow.PageFlowRequestProcessor.processInternal(PageFlowRequestProcessor.java:554) at org.apache.beehive.netui.pageflow.PageFlowRequestProcessor.process(PageFlowRequestProcessor.java:851) at org.apache.beehive.netui.pageflow.AutoRegisterActionServlet.process(AutoRegisterActionServlet.java:630) at org.apache.beehive.netui.pageflow.PageFlowActionServlet.process(PageFlowActionServlet.java:157) at com.bea.console.internal.ConsoleActionServlet.process(ConsoleActionServlet.java:241) at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414) at com.bea.console.internal.ConsoleActionServlet.doGet(ConsoleActionServlet.java:130) at org.apache.beehive.netui.pageflow.PageFlowUtils.strutsLookup(PageFlowUtils.java:1169) at com.bea.portlet.adapter.scopedcontent.ScopedContentCommonSupport.executeAction(ScopedContentCommonSupport.java:688) at com.bea.portlet.adapter.scopedcontent.ScopedContentCommonSupport.renderInternal(ScopedContentCommonSupport.java:268) at com.bea.portlet.adapter.scopedcontent.StrutsStubImpl.render(StrutsStubImpl.java:107) at com.bea.netuix.servlets.controls.content.NetuiContent.preRender(NetuiContent.java:288) at com.bea.netuix.nf.ControlLifecycle$6.visit(ControlLifecycle.java:427) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:708) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walk(ControlTreeWalker.java:183) at com.bea.netuix.nf.Lifecycle.processLifecycles(Lifecycle.java:361) at com.bea.netuix.nf.Lifecycle.processLifecycles(Lifecycle.java:339) at com.bea.netuix.nf.Lifecycle.runOutbound(Lifecycle.java:186) at com.bea.netuix.nf.Lifecycle.run(Lifecycle.java:140) at com.bea.netuix.servlets.manager.UIServlet.runLifecycle(UIServlet.java:370) at com.bea.netuix.servlets.manager.UIServlet.doPost(UIServlet.java:229) at com.bea.netuix.servlets.manager.UIServlet.doGet(UIServlet.java:195) at com.bea.netuix.servlets.manager.UIServlet.service(UIServlet.java:180) at com.bea.netuix.servlets.manager.SingleFileServlet.service(SingleFileServlet.java:221) at javax.servlet.http.HttpServlet.service(HttpServlet.java:856) at weblogic.servlet.AsyncInitServlet.service(AsyncInitServlet.java:124) at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:223) at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125) at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:283) at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42) at weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:26) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42) at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3243) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121) at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2003) at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:1909) at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1359) at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209) at weblogic.work.ExecuteThread.run(ExecuteThread.java:181) Caused by: java.lang.IllegalArgumentException: ObjectName must not be null at javax.management.remote.rmi.RMIConnectionImpl.checkNonNull(RMIConnectionImpl.java:1712) ... 93 more

    Posted by: kyleK on September 4, 2007 at 1:45 PM

  • I have the same problem/observation on WL Portal 9.2 as kyleK. After targetting beehive-netui-1.0(1.0,1.0) to the admin server I got the same error when I click on the deployment link in the admin console. Any progress on this?

    Posted by: czeslaw on September 25, 2007 at 4:48 AM

  • Hi Chris I have the same problem when I try to point beehive-netui-1.0(1.0,1.0) to the admin server. javax.management.RuntimeOperationsException at weblogic.rmi.internal.ServerRequest.sendReceive(ServerRequest.java:205) at weblogic.rmi.internal.BasicRemoteRef.invoke(BasicRemoteRef.java:223) at javax.management.remote.rmi.RMIConnectionImpl_921_WLStub.getMBeanInfo(Unknown Source) at javax.management.remote.rmi.RMIConnector$RemoteMBeanServerConnection.getMBeanInfo(RMIConnector.java:1028) at weblogic.management.jmx.MBeanServerInvocationHandler.newProxyInstance(MBeanServerInvocationHandler.java:591) at weblogic.management.jmx.MBeanServerInvocationHandler.invoke(MBeanServerInvocationHandler.java:432) at $Proxy71.getReferencingRuntimes(Unknown Source) at com.bea.console.utils.DeploymentUtils.mergeReferencingApps(DeploymentUtils.java:4094) at com.bea.console.utils.DeploymentUtils.getReferencingApps(DeploymentUtils.java:4060) at com.bea.console.actions.library.LibraryOverviewAction.getReferencingAppTable(LibraryOverviewAction.java:112) at com.bea.console.actions.library.LibraryOverviewAction.execute(LibraryOverviewAction.java:90) at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419) at org.apache.beehive.netui.pageflow.PageFlowRequestProcessor.access$201(PageFlowRequestProcessor.java:95) at org.apache.beehive.netui.pageflow.PageFlowRequestProcessor$ActionRunner.execute(PageFlowRequestProcessor.java:2042) at org.apache.beehive.netui.pageflow.interceptor.action.internal.ActionInterceptors.wrapAction(ActionInterceptors.java:90) at org.apache.beehive.netui.pageflow.PageFlowRequestProcessor.processActionPerform(PageFlowRequestProcessor.java:2114) at com.bea.console.internal.ConsolePageFlowRequestProcessor.processActionPerform(ConsolePageFlowRequestProcessor.java:221) at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224) at org.apache.beehive.netui.pageflow.PageFlowRequestProcessor.processInternal(PageFlowRequestProcessor.java:554) at org.apache.beehive.netui.pageflow.PageFlowRequestProcessor.process(PageFlowRequestProcessor.java:851) at org.apache.beehive.netui.pageflow.AutoRegisterActionServlet.process(AutoRegisterActionServlet.java:630) at org.apache.beehive.netui.pageflow.PageFlowActionServlet.process(PageFlowActionServlet.java:157) at com.bea.console.internal.ConsoleActionServlet.process(ConsoleActionServlet.java:241) at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414) at com.bea.console.internal.ConsoleActionServlet.doGet(ConsoleActionServlet.java:130) at org.apache.beehive.netui.pageflow.PageFlowUtils.strutsLookup(PageFlowUtils.java:1169) at com.bea.portlet.adapter.scopedcontent.ScopedContentCommonSupport.executeAction(ScopedContentCommonSupport.java:688) at com.bea.portlet.adapter.scopedcontent.ScopedContentCommonSupport.renderInternal(ScopedContentCommonSupport.java:268) at com.bea.portlet.adapter.scopedcontent.StrutsStubImpl.render(StrutsStubImpl.java:107) at com.bea.netuix.servlets.controls.content.NetuiContent.preRender(NetuiContent.java:288) at com.bea.netuix.nf.ControlLifecycle$6.visit(ControlLifecycle.java:427) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:708) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walkRecursivePreRender(ControlTreeWalker.java:720) at com.bea.netuix.nf.ControlTreeWalker.walk(ControlTreeWalker.java:183) at com.bea.netuix.nf.Lifecycle.processLifecycles(Lifecycle.java:361) at com.bea.netuix.nf.Lifecycle.processLifecycles(Lifecycle.java:339) at com.bea.netuix.nf.Lifecycle.runOutbound(Lifecycle.java:186) at com.bea.netuix.nf.Lifecycle.run(Lifecycle.java:140) at com.bea.netuix.servlets.manager.UIServlet.runLifecycle(UIServlet.java:370) at com.bea.netuix.servlets.manager.UIServlet.doPost(UIServlet.java:229) at com.bea.netuix.servlets.manager.UIServlet.doGet(UIServlet.java:195) at com.bea.netuix.servlets.manager.UIServlet.service(UIServlet.java:180) at com.bea.netuix.servlets.manager.SingleFileServlet.service(SingleFileServlet.java:221) at javax.servlet.http.HttpServlet.service(HttpServlet.java:856) at weblogic.servlet.AsyncInitServlet.service(AsyncInitServlet.java:124) at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:223) at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125) at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:283) at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42) at weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:26) at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42) at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3243) at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321) at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121) at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2003) at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:1909) at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1359) at weblogic.work.ExecuteThread.execute(ExecuteThread.java:209) at weblogic.work.ExecuteThread.run(ExecuteThread.java:181) Caused by: java.lang.IllegalArgumentException: ObjectName must not be null at javax.management.remote.rmi.RMIConnectionImpl.checkNonNull(RMIConnectionImpl.java:1697) at javax.management.remote.rmi.RMIConnectionImpl.getMBeanInfo(RMIConnectionImpl.java:849) at javax.management.remote.rmi.RMIConnectionImpl_WLSkel.invoke(Unknown Source) at weblogic.rmi.internal.ServerRequest.sendReceive(ServerRequest.java:174) ... 90 more

    Posted by: bea-weblogic-support@list.auckland.ac.nz on September 30, 2007 at 1:01 PM

  • To fix this you will need to deploy wls-commonslogging-bridge to the admin server. It most likely is on the last page of the deployment screen.

    Posted by: kyleK on October 1, 2007 at 11:57 AM

  • For those of you who are following the steps above and noticing that your overrides don't seem to take effect, download the following public patch using the Smart Update tool. It definitely works for WLI 9.2 MP1, I haven't tried it for other versions. 9.2MP1 | WLTD | RIFU5NW5 Hopefully I just saved you from a big headache. I take cash and money orders :).

    Posted by: jogarcia on February 8, 2008 at 11:33 AM

  • Hi Chris, I have deployed an application to WLI and would like to be able to change the location of a log file in a FileControl dynamically (for different environments). I followed the steps above yet it doesn't seem to want to take effect. I had a look at the annotations-overrides.xml file and under the members for that control there is a with the value I wanted to override with, but no . A couple of questions: Is this "on-the-fly" configuration available for the com.bea.control.FileControl? I have the required libraries referenced in the EAR project. What is the "cleartext-override-value"? Thanks! Kevin

    Posted by: kshep on June 10, 2008 at 5:13 AM

  • For some reason my last post removed some words. :) That sentence should say "I had a look at the annotations-overrides.xml file and under the members for that control there is a "cleartext-override-value" with the value I wanted to override with, but no "override-value". Thanks again!

    Posted by: kshep on June 10, 2008 at 5:16 AM

  • Hi Kevin. Annotation Override is a generic control feature so it should work unless the FileControl dis-allows it with the @PropertySet.externalConfig annotation. I'm no longer with Oracle/BEA so can't follow up on it with team that builds that control directly. Your best bet since this is a WLI control is probably to ask about this on the WLI newsgroup here: http://forums.bea.com/category.jspa?categoryID=2007

    Posted by: hogue on June 10, 2008 at 11:13 AM

  • Thanks Chris, I will do that. Do you know off hand what the difference between "cleartext-override-value" and "override-value is? Thanks again!

    Posted by: kshep on June 11, 2008 at 4:47 AM

  • Hi Kevin. I'm sorry, I don't recall the difference in those values. If you don't receive an answer on the WLI newsgroup you might want to try the Workshop newsgroup as those manifest files are generated by the core control infrastructure. If all else fails, support should be able to get you to the right place.

    Posted by: hogue on June 11, 2008 at 6:17 PM



Only logged in users may post comments. Login Here.

Powered by
Movable Type 3.31