Exposing business objects in an existing Servlet WebApp as Webservices

Hi,
I am extending a legacy Servlet application (running under Tomcat 5.5).
I want to expose a class as a web service. What is the best way to do this ?
I have tried these so far without much success
1. Dropped Axis2.war in WebApp with my web service as a .aar file in services.
This introduces additional issues like intra-webapp communication.
The Webservice implementation uses objects in the legacy servlet.
I am yet to find a simple standard mechanism to achieve this.
2. Embed Axis2 inside the servlet.
I followed the following example to do this.
http://hacimbengali.blogspot.com/2007/05/adding-axis2-webservice.html
Basically, wrote another servlet, extended from AxisServlet and
added my POJO as a service. The code seems to execute without generating exceptions, but I am unable to invoke
my webservice or generate the WSDL from the browser by issuing http://localhost:8080/axis2/services/myservice?wsdl
The same class works if I make calls from a java console app and start SimpleHTTPServer.
So I am puzzled why this does not work in Tomcat
My code
//----------------------------------begin code--------------------------------------------------------
public class AxisXServlet extends org.apache.axis2.transport.http.AxisServlet {
static final long serialVersionUID = 1L;
/* (non-Java-doc)
     * @see javax.servlet.http.HttpServlet#HttpServlet()
     public AxisXServlet() {
          super();
     /* (non-Javadoc)
     * @see javax.servlet.GenericServlet#init()
     public void init(ServletConfig config) throws ServletException
     super.init(config);
     AxisService service;
     try {
     service = AxisService.createService(
               FPWSImpl.class.getName(),
               axisConfiguration);
     //RPCMessageReceiver.class);
     //service.setName();
     axisConfiguration.addService(service);
     axisConfiguration.startService(service.getName());
     } catch (AxisFault e) {
     e.printStackTrace();
//----------------------------------------end code-----------------------------------------------------------

Hi ialexei,
Have got the solution for your problem?. If yes, please post it here. I have same situation like this.
I have developed a java web application and the purpose of the application is to fetch the data which are updated or new from another site using their remote services. This operation is being performed in a fixed interval using a timer in my application. After getting the result from remote site, presently, I am keeping it in memory (Need at least 512 MB RAM). I have created a servlet and created some methods. These methods are accessible by passing the methodname as query parameter while calling the servlet. I have also created a web service for the methods which are available in servlet (in a separate class).
I have deployed the web service on Tomcat 5.0/Axis and web application on Tomcat ( same instance of Tomcat). Since one is web service and other is web application, I am duplicating the business logic/components and both are running separately also. I would like to use my business logic/components on either in web service or web application and divert the call from one to other.
I mean,
(1) if I use the business logic/components on web service, then from my servlet, I would like to call the web service and return the result
(2) if I use the business logic/components on web application, then from my web service, I would like to call the servlet and return the result
Pl. advice me which one from the above methods is good and how to implement that.
--Sabeer                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                   

Similar Messages

  • Exposing Business Objects to Java

    Hi
    I need to use SAP BO in my Java application. Could anyone please suggest what is the best way to do this? Do I need to expose it as a web service only or are there any other better approaches?
    Thanks

    You may be posting to the wrong forum - here it's for the SAP BusinessObjects Business Intelligence suite of products - BusinessObjects Enterprise, Crystal Reports Server, etc.
    Which Business Objects would you be referring to?
    Sincerely,
    Ted Ueda

  • Exposing Business Object as Web Service

    Hi,
    I've designed a Business Object and would like to expose its findAll Operation as a web service. The wizard tells that the operation has “Improper operation message cardinality". While browsing through saphelp I found this: http://help.sap.com/saphelp_nwce10/helpdata/en/44/24128b347c1c9fe10000000a11466f/content.htm
    That’s nice to know but doesn't solve my problem. How do I create a web service that returns ALL objects?
    Thanks in advance for your help.
    Bastian
    edit:
    this on solved it:
    CE/CAF: Expose service as Webservice

    Hi,
    you need to create wrapper method of findAll,
    The reason you are not able to expose it as service because findAll resturning array of values instead of one response (or candinality of return is 0..n). So create one wrapper complex type add your BO as datatype of that complex type with multiple cardinality,
    In new method add this complex type as response (with cardinality 0..1) and within code call standard findAll and mapp return value to complext type.
    It will work.
    Regards,
    Gourav

  • Cannot select find operations when exposing Business Object

    Hi,
    I have created a business object from which I need to 'find' instances. The business object has to be exposed as a web service.
    The business object has 'find***' operations. However, I cannot select those operations when I try to expose the business object as a web service.
    How can I get those operations to be selected?
    Regards,
    Rahul

    Rahul-
    There is a limitation with CAF web services that they can not cater to collections. The findXXX methods always return collections hence they can not be exposed as web services. There are alternatives however - create a custom Complex Type which contains the collection. Create a method in an Application Service which calls your findXXX method and then returns the collection "through" the custom type you have created.
    For example, if you want to return a list of purchase orders create a wrapper structure as follows:
    ReturnStructure     
         PurchaseOrders [0..n]
    Cheers-
    Atul

  • How to call business objects in BO part from a servlet in lean-webapp

    Hi Gurus,
    for oci-implementation (and as it has been suggested here: http://scn.sap.com/thread/3340669) we want to implement a servlet that calls certain actions in a business object. The servlet resides inside the leanwebapp-DC. The business object is in the bo-part of our own custom module. Our problem is to find a way for the servlet to call the business logic. Our first thought was to go via the moduleAccess. However, we could not figure out how to access the module of the leanwebapp.
    Any suggestions?
    Best regards,
    Christian

    Hey Wolfgang,
    thank you very much for your quick and accurate answer.
    After struggling a little bit with our project setup we implemented your solution and it worked immediately.
    However, we now have the problem to declare the module dependency between the leanwebapp and the bo-part of our module. The Development-and-Extension-Guide for WCEM 3.0 tells us (page 39) to do this in the metadata.xml of the calling module (which would be the leanwebapp). Unfortunately, the leanwebapp does not have a metadata.xml.
    Declaring the dependency in the .dcdef of the leanwebapp-DC leads to either:
    a runtime exception while calling ModuleAccess moduleAccess = wecSession.getModuleAccess("oci"); in the servlet (com.sap.wec.tc.core.modulemgmt.metadata.exceptions.ModuleRuntimeException: Module access of module 'oci' cannot be created. It is not part of the current application.) or
    a runtime time exception while accessing the servlet:
    Caused by: com.sap.wec.tc.core.common.init.InitializeException: Error initializing 'com.sap.wec.tc.core.modulemgmt.metadata.ModuleMetaDataDeploymentModel' com.sap.wec.tc.core.modulemgmt.metadata.exceptions.ModuleRuntimeException: The deployment unit contains multiple JAR files or folders which declare the same part/namespace combination. Module: 'oci', part: 'bo', namespace: 'xxx', JAR/Folder 1: 'D:\usr\sap\DE2\J02\j2ee\cluster\apps\xxx.com\xxx~oci~dpu\app_libraries_container\xxx.com~xxx~oci~bo~assembly.jar', JAR/Folder 2: 'D:\usr\sap\DE2\J02\j2ee\cluster\apps\xxx.com\demo-leanapp\servlet_jsp\demo\root\WEB-INF\lib\xxx.com~xxx~oci~bo~assembly.jar'
    Do you have any hints on how to declare the dependeny properly?
    Best regards,
    Christian

  • InfoView Timeout Crystal Report Server 2008 Business Objects 3.1

    After two days of digging, poking, prodding and fumbling around in the dark I finally found a method (one that actually works!) to change the timeout period for InfoView.  Venkat Patnaik (second message) posted an excellent procedure in a place that is not readily apparent:
    /message/8250448#8250448 [original link is broken]
    Following his method, my InfoView seems to timeout after about 3 minutes.  I am going to play with the settings to see if I can get it dialed in a bit more, but I wanted to post this so there is a thread with a relevant subject so people can find Venkat's excellent post.  Thanks Venkat!

    Wow I am getting really tired of SAP's constant broken links and moving things around.  That link worked great a couple of weeks ago when I posted this message.  I did some digging around for that particular thread but I was not able to find it this morning.    Maybe it was deleted.... 
    Luckily I documented my procedure for making these changes and I did not stray from Ventak's original procedure except for making paths and such specific to my environment. 
    Basically the timeout values need to be changed in several places:
    1. Stop the TomCat server via the Central Configuration Manager before doing anything else. 
    2. Modify the web.xml file in each of the following directories:
    C:\Program Files\Business Objects\Tomcat55\webapps\InfoViewApp\WEB-INF\web.xml
    C:\Program Files\Business Objects\Tomcat55\webapps\InfoViewAppActions\WEB-INF\web.xml
    C:\Program Files\Business Objects\Tomcat55\webapps\CmcApp\WEB-INF\web.xml
    C:\Program Files\Business Objects\Tomcat55\webapps\CmcAppActions\WEB-INF\web.xml
    Parameters to change:
    ***This parameter may not exist in all web.xml files.***
    <!-- Set to false to disable logon with token. -->
        <context-param>
            <param-name>logontoken.enabled</param-name>
            <param-value>true</param-value> (Change to false)
        </context-param>
    <!-- Define the default session timeout for your application,
             in minutes.  From a servlet or JSP page, you can modify
             the timeout for a particular session dynamically by using
             HttpSession.getMaxInactiveInterval(). -->
        <session-config>
            <!-- 20 minutes for session objects -->
            <session-timeout>20</session-timeout>   (Change to 5)
        </session-config>
    3. Modify the registry key:
    HKEY_LOCAL_MACHINE\SOFTWARE\Business Objects\Suite 12.0\CMS\Instances\<SERVER NAME> u2013 IdleSessionTimeout=0x927C0 (600000)
    The key is a REG_DWORD value and the value is in hexadecimal.  Set the timeout value to 90,000 ms u2013 1.5 minutes with the value 0x15F90.  You can use other hex values as desired, 90,000 ms worked for me. 
    4. Restart the TomCat server. 
    5. Add the following command line parameter to the CrystalManagementServer parameters in the server properties window of the Central Management Console <-failovertimeout 1.5>
    6. Restart the CrystalManagementServer via the CMC
    Good luck, let me know if you have any questions.

  • 11g SOA Composite Rules Error - Rule session pool object does not exist

    Hi all,
    I'm hoping someone has experienced this and found a way through it. We're looking at exposing Oracle Rules DecisionFunctions via the automagically created web services in JDeveloper. We've tried several Rules examples, including the OrderApproval one available online, and are getting errors everytime we try and test the web service.
    Firstly we get this error:
    [2010-09-01T09:47:24.249+10:00] [soa_server1] [ERROR] [] [oracle.soa.services.rules] [tid: [ACTIVE].ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'] [userId: <anonymous>] [ecid: 0000IfAZ45P0FwI5yrDCiW1CV7Dc000AwY,0] [WEBSERVICE_PORT.name: IDecisionService_pt] [APP: soa-infra] [composite_name: CR] [component_name: OracleRules1] [component_instance_id: 04c3bc86-9452-4755-9bbf-51591f1c7fff] [J2EE_MODULE.name: fabric] [dcid: 761c1dbb0eb1dbdc:-33082b47:12ac627683f:-7ffd-0000000000002aae] [WEBSERVICE.name: OracleRules1_DecisionService_1_ep] [J2EE_APP.name: soa-infra] [composite_instance_id: 130022] <.> Error caching the Decision Services metadata.[[
    Error caching the decision services metadata for path default/CR!1.0*soa_f8581f86-106e-4f47-825f-89148db6663b/OracleRules1.
    Check the underlying exception and correct the error. This is most likely due to a rule modeling isssue. Validate the rule dictionary in rule designer and fix any errors and warnings. If the error persists, contact Oracle Support Services.
    Error caching the Decision Services metadata.
    Error caching the decision services metadata for path default/CR!1.0*soa_f8581f86-106e-4f47-825f-89148db6663b/OracleRules1.
    Check the underlying exception and correct the error. This is most likely due to a rule modeling isssue. Validate the rule dictionary in rule designer and fix any errors and warnings. If the error persists, contact Oracle Support Services.
         at oracle.bpel.services.rules.impl.DecisionServiceCache.cacheDecisionServiceMetadata(DecisionServiceCache.java:1211)
         at oracle.bpel.services.rules.impl.DecisionServiceCache.prepare(DecisionServiceCache.java:362)
         at oracle.bpel.services.rules.impl.DecisionServiceImpl.preProcess(DecisionServiceImpl.java:221)
         at oracle.bpel.services.rules.fabric.BusinessRulesServiceEngine.request(BusinessRulesServiceEngine.java:609)
         at oracle.integration.platform.blocks.mesh.SynchronousMessageHandler.doRequest(SynchronousMessageHandler.java:139)
         at oracle.integration.platform.blocks.mesh.MessageRouter.request(MessageRouter.java:179)
         at oracle.integration.platform.blocks.mesh.MeshImpl.request(MeshImpl.java:155)
         at sun.reflect.GeneratedMethodAccessor1197.invoke(Unknown Source)
         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
         at java.lang.reflect.Method.invoke(Method.java:597)
         at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
         at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
         at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
         at oracle.integration.platform.metrics.PhaseEventAspect.invoke(PhaseEventAspect.java:59)
         at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
         at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
         at $Proxy248.request(Unknown Source)
         at oracle.integration.platform.blocks.soap.WebServiceEntryBindingComponent.doMessageProcessing(WebServiceEntryBindingComponent.java:1169)
         at oracle.integration.platform.blocks.soap.WebServiceEntryBindingComponent.processIncomingMessage(WebServiceEntryBindingComponent.java:768)
         at oracle.integration.platform.blocks.soap.FabricProvider.processMessage(FabricProvider.java:113)
         at oracle.j2ee.ws.server.provider.ProviderProcessor.doEndpointProcessing(ProviderProcessor.java:1168)
         at oracle.j2ee.ws.server.WebServiceProcessor.invokeEndpointImplementation(WebServiceProcessor.java:996)
         at oracle.j2ee.ws.server.provider.ProviderProcessor.doRequestProcessing(ProviderProcessor.java:562)
         at oracle.j2ee.ws.server.WebServiceProcessor.processRequest(WebServiceProcessor.java:222)
         at oracle.j2ee.ws.server.WebServiceProcessor.doService(WebServiceProcessor.java:185)
         at oracle.j2ee.ws.server.WebServiceServlet.doPost(WebServiceServlet.java:430)
         at oracle.integration.platform.blocks.soap.FabricProviderServlet.doPost(FabricProviderServlet.java:477)
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
         at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
         at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
         at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:300)
         at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
         at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
         at oracle.dms.wls.DMSServletFilter.doFilter(DMSServletFilter.java:330)
         at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
         at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.doIt(WebAppServletContext.java:3684)
         at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3650)
         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:2268)
         at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2174)
         at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1446)
         at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)
         at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)
    Caused by: java.lang.NullPointerException
         at oracle.rules.sdk2.datamodel.DecisionFunction.getGlobalTypeIDs(DecisionFunction.java:860)
         at oracle.rules.sdk2.datamodel.DecisionFunction.validate(DecisionFunction.java:342)
         at oracle.rules.sdk2.dictionary.DictionaryComponentTable.validate(DictionaryComponentTable.java:221)
         at oracle.rules.sdk2.datamodel.DataModel.validate(DataModel.java:92)
         at oracle.rules.sdk2.dictionary.RuleDictionary.validate(RuleDictionary.java:1093)
         at oracle.rules.sdk2.dictionary.RuleDictionary.update(RuleDictionary.java:835)
         at oracle.rules.sdk2.datamodel.DataModel.generateFactClasses(DataModel.java:115)
         at oracle.rules.sdk2.dictionary.RuleDictionary.dataModelRL(RuleDictionary.java:1398)
         at oracle.bpel.services.rules.impl.DecisionServiceCache.cacheDecisionServiceMetadata(DecisionServiceCache.java:1141)
         ... 44 more
    And then we get the following error:
    [2010-09-01T09:47:24.390+10:00] [soa_server1] [ERROR] [] [oracle.soa.services.rules] [tid: [ACTIVE].ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'] [userId: <anonymous>] [ecid: 0000IfAZ45P0FwI5yrDCiW1CV7Dc000AwY,0] [WEBSERVICE_PORT.name: IDecisionService_pt] [APP: soa-infra] [composite_name: CR] [component_name: OracleRules1] [component_instance_id: 04c3bc86-9452-4755-9bbf-51591f1c7fff] [J2EE_MODULE.name: fabric] [dcid: 761c1dbb0eb1dbdc:-33082b47:12ac627683f:-7ffd-0000000000002aae] [WEBSERVICE.name: OracleRules1_DecisionService_1_ep] [J2EE_APP.name: soa-infra] [composite_instance_id: 130022] <.> [[
    oracle.fabric.common.BusinessFaultException
         at oracle.bpel.services.rules.impl.DecisionServiceCache.cacheDecisionServiceMetadata(DecisionServiceCache.java:1211)
         at oracle.bpel.services.rules.impl.DecisionServiceCache.prepare(DecisionServiceCache.java:362)
         at oracle.bpel.services.rules.impl.DecisionServiceImpl.preProcess(DecisionServiceImpl.java:221)
         at oracle.bpel.services.rules.fabric.BusinessRulesServiceEngine.request(BusinessRulesServiceEngine.java:609)
         at oracle.integration.platform.blocks.mesh.SynchronousMessageHandler.doRequest(SynchronousMessageHandler.java:139)
         at oracle.integration.platform.blocks.mesh.MessageRouter.request(MessageRouter.java:179)
         at oracle.integration.platform.blocks.mesh.MeshImpl.request(MeshImpl.java:155)
         at sun.reflect.GeneratedMethodAccessor1197.invoke(Unknown Source)
         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
         at java.lang.reflect.Method.invoke(Method.java:597)
         at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
         at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
         at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
         at oracle.integration.platform.metrics.PhaseEventAspect.invoke(PhaseEventAspect.java:59)
         at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
         at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
         at $Proxy248.request(Unknown Source)
         at oracle.integration.platform.blocks.soap.WebServiceEntryBindingComponent.doMessageProcessing(WebServiceEntryBindingComponent.java:1169)
         at oracle.integration.platform.blocks.soap.WebServiceEntryBindingComponent.processIncomingMessage(WebServiceEntryBindingComponent.java:768)
         at oracle.integration.platform.blocks.soap.FabricProvider.processMessage(FabricProvider.java:113)
         at oracle.j2ee.ws.server.provider.ProviderProcessor.doEndpointProcessing(ProviderProcessor.java:1168)
         at oracle.j2ee.ws.server.WebServiceProcessor.invokeEndpointImplementation(WebServiceProcessor.java:996)
         at oracle.j2ee.ws.server.provider.ProviderProcessor.doRequestProcessing(ProviderProcessor.java:562)
         at oracle.j2ee.ws.server.WebServiceProcessor.processRequest(WebServiceProcessor.java:222)
         at oracle.j2ee.ws.server.WebServiceProcessor.doService(WebServiceProcessor.java:185)
         at oracle.j2ee.ws.server.WebServiceServlet.doPost(WebServiceServlet.java:430)
         at oracle.integration.platform.blocks.soap.FabricProviderServlet.doPost(FabricProviderServlet.java:477)
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
         at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
         at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
         at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:300)
         at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
         at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
         at oracle.dms.wls.DMSServletFilter.doFilter(DMSServletFilter.java:330)
         at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
         at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.doIt(WebAppServletContext.java:3684)
         at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3650)
         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:2268)
         at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2174)
         at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1446)
         at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)
         at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)
    And lastly this one:
    [2010-09-01T09:47:30.437+10:00] [soa_server1] [ERROR] [] [oracle.soa.services.rules] [tid: [ACTIVE].ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'] [userId: <anonymous>] [ecid: 0000IfAZ5iO0FwI5yrDCiW1CV7Dc000Awd,0] [WEBSERVICE_PORT.name: IDecisionService_pt] [APP: soa-infra] [composite_name: CR] [component_name: OracleRules1] [component_instance_id: 08f3eaa8-ce61-4ec9-a646-af821be06420] [J2EE_MODULE.name: fabric] [dcid: 761c1dbb0eb1dbdc:-33082b47:12ac627683f:-7ffd-0000000000002ab0] [WEBSERVICE.name: OracleRules1_DecisionService_1_ep] [J2EE_APP.name: soa-infra] [composite_instance_id: 130023] <.> Rule session pool object does not exist.[[
    The requested rule session pool object for path default/CR!1.0*soa_f8581f86-106e-4f47-825f-89148db6663b/OracleRules1 and key OracleRulesSDK$OracleRules1 does not exist.
    Check the underlying exception and correct the error. This is most likely due to a rules validation error. Validate the rule dictionary in Rule Designer and correct the validation error. If the error persists, contact Oracle Support Services.
    Rule session pool object does not exist.
    The requested rule session pool object for path default/CR!1.0*soa_f8581f86-106e-4f47-825f-89148db6663b/OracleRules1 and key OracleRulesSDK$OracleRules1 does not exist.
    Check the underlying exception and correct the error. This is most likely due to a rules validation error. Validate the rule dictionary in Rule Designer and correct the validation error. If the error persists, contact Oracle Support Services.
         at oracle.bpel.services.rules.rpi.oracle.RuleSessionPool.getSession(RuleSessionPool.java:528)
         at oracle.bpel.services.rules.rpi.oracle2.OracleRuleSession.execute(OracleRuleSession.java:260)
         at oracle.bpel.services.rules.impl.DecisionServiceImpl.process(DecisionServiceImpl.java:331)
         at oracle.bpel.services.rules.fabric.BusinessRulesServiceEngine.request(BusinessRulesServiceEngine.java:634)
         at oracle.integration.platform.blocks.mesh.SynchronousMessageHandler.doRequest(SynchronousMessageHandler.java:139)
         at oracle.integration.platform.blocks.mesh.MessageRouter.request(MessageRouter.java:179)
         at oracle.integration.platform.blocks.mesh.MeshImpl.request(MeshImpl.java:155)
         at sun.reflect.GeneratedMethodAccessor1197.invoke(Unknown Source)
         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
         at java.lang.reflect.Method.invoke(Method.java:597)
         at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:307)
         at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:182)
         at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:149)
         at oracle.integration.platform.metrics.PhaseEventAspect.invoke(PhaseEventAspect.java:59)
         at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:171)
         at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:204)
         at $Proxy248.request(Unknown Source)
         at oracle.integration.platform.blocks.soap.WebServiceEntryBindingComponent.doMessageProcessing(WebServiceEntryBindingComponent.java:1169)
         at oracle.integration.platform.blocks.soap.WebServiceEntryBindingComponent.processIncomingMessage(WebServiceEntryBindingComponent.java:768)
         at oracle.integration.platform.blocks.soap.FabricProvider.processMessage(FabricProvider.java:113)
         at oracle.j2ee.ws.server.provider.ProviderProcessor.doEndpointProcessing(ProviderProcessor.java:1168)
         at oracle.j2ee.ws.server.WebServiceProcessor.invokeEndpointImplementation(WebServiceProcessor.java:996)
         at oracle.j2ee.ws.server.provider.ProviderProcessor.doRequestProcessing(ProviderProcessor.java:562)
         at oracle.j2ee.ws.server.WebServiceProcessor.processRequest(WebServiceProcessor.java:222)
         at oracle.j2ee.ws.server.WebServiceProcessor.doService(WebServiceProcessor.java:185)
         at oracle.j2ee.ws.server.WebServiceServlet.doPost(WebServiceServlet.java:430)
         at oracle.integration.platform.blocks.soap.FabricProviderServlet.doPost(FabricProviderServlet.java:477)
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
         at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
         at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
         at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
         at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:300)
         at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
         at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
         at oracle.dms.wls.DMSServletFilter.doFilter(DMSServletFilter.java:330)
         at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:56)
         at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.doIt(WebAppServletContext.java:3684)
         at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3650)
         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:2268)
         at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2174)
         at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1446)
         at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)
         at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)
    Has anyone had any luck actually getting this to work? If so, how? It simply seems like this particular aspect of the product is broken!
    Your help would be VERY much appreciated!
    Regards,
    Rhian

    Hi SR,
    Thanks for your response. I attempted what you've suggested (1=1 - asset new fact in output), however nothing has changed.
    This is occurring across several Composite Rules projects, including the Oracle provided Chapter 5 Order Approval example. Unless someone can suggest a solution to this issues, it looks like we're going to have to shelf our plans to utilize the Business Rules component via the composite service.
    Very frustrating couple of days, that's for sure! :{
    Regards,
    Rhian

  • How do I deal with problems during business object construction?

    Hi Everyone.
    I'm wondering about best practices for program control flow when business objects can't be constructed properly.
    In my servlet I want to create a new Transaction business object based on the parameters of the HttpServletRequest.
    transaction = new Transaction( request );The Transaction, in turn, has a Customer business object representing the Customer doing the transaction. The Customer is also constructed based on request parameters. So I have in the Transaction constructor,
    public Transaction( HttpServletRequest request ) {
        customer = new Customer( request );
    }In the Customer constructor I want to do some validation. For example, I want to check that the requested Customer exists in the database.
    If the validation fails, should I throw an exception, which could then eventually be caught by the Servlet which would send back an "Invalid Customer" message to the end user?
    But it seems to me like this violates the "never use exceptions for flow control" rule (as described for example at http://onjava.com/pub/a/onjava/2003/11/19/exceptions.html?page=2).
    It is a normal function of my application to deny a transaction to a non-valid customer... so it seems like I shouldn't need to bring in the exception handling overhead for this normal business process.
    OK, so I guess put "is_valid" flags in the business objects and set them on constructor errors then check them??
    public Transaction( HttpServletRequest request ) {
        customer = new Customer( request );  // customer.is_valid flagged false
        if ( !customer.get_is_valid( ) ) {
            this.is_valid = false; // transaction.is_valid is also false now because its Customer is not valid
        } else { // customer is valid
            // finish the rest of the Transaction construction business logic
            // of course this will turn into a mess of deeply nested "else valid" clauses
            // if there are many validation checks...
    }...and then in the servlet...
    transaction = new Transaction( request );
    if ( !transaction.get_is_valid( ) ) {
        // Send back error message to user.
    } else {
        // Finally do some business logic.  Maybe after another mess of nested "else valid" clauses.
    }This gets so hard to read it seems like the throwing Exceptions as part of normal control flow option is preferble.
    Is there third option I am missing?
    What are your opinions?
    Thanks,
    Bishop

    Build your Transaction and Customer objects based on the data in the request. Then validate the customer, since an invalid customer is "normal" for you.
    I'd consider using some sort of factory-like method for creating these objects from the request, since you're tying (sort of) your business stuff to the fact you're currently using a webby (servlet-based) front end...but that's more an aside.
    So, in pseudo-ish code:
    Transaction t = createTransaction(request);
    if (t.validCustomer()) do work;
    else return to wherever;This is only a first-pass idea, and other requirements might knock it for six, but it's a startpoint.

  • Problems with Java and Business Objects

    <p>Hello everybody,<br /><br />I&#39;m new in BusinessObjects/Crystal Report. Now, I have some problems with Business Objects for Java (Business Objects XI Release 2 Developer).</p><p> </p><p>1)  I create a report in the report designer. This report has a parameterfield. Before I run this report within a jsp web application I want fill the parameterfield with some values from the database. I found the following code snippet for this problem in your forum. But it don&#39;t works right, because it occurs a simple input field instead of a combo box with my database values. Where is my mistake? I need the combo box! (In debug mode I saw that the parameterfield was filled with my data!)</p><p><%@page import="com.crystaldecisions.report.web.viewer.CrystalReportViewer,com.crystaldecisions.sdk.occa.report.application.ReportClientDocument,<br />com.crystaldecisions.sdk.occa.report.application.OpenReportOptions,<br />com.crystaldecisions.sdk.occa.report.lib.ReportSDKExceptionBase,<br />java.io.IOException,<br />java.sql.Connection,<br />java.sql.DriverManager,<br />java.sql.ResultSet,<br />java.sql.SQLException,<br />java.sql.Statement,<br />java.util.Locale,<br />com.crystaldecisions.sdk.occa.report.application.DataDefController,<br />com.crystaldecisions.sdk.occa.report.data.FieldDisplayNameType,<br />com.crystaldecisions.sdk.occa.report.data.ParameterField,<br />com.crystaldecisions.sdk.occa.report.data.ParameterFieldDiscreteValue,<br />com.crystaldecisions.sdk.occa.report.data.Values,<br />com.crystaldecisions.sdk.occa.report.reportsource.IReportSource"%><%<br /><br />    try {<br /><br />        String reportName = "avoParameterfeld.rpt";<br />        ReportClientDocument clientDoc = (ReportClientDocument) session.getAttribute(reportName);<br /><br />        if (clientDoc == null) {<br />            // Report can be opened from the relative location specified in the CRConfig.xml, or the report location<br />            // tag can be removed to open the reports as Java resources or using an absolute path<br />            // (absolute path not recommended for Web applications).<br /><br />            clientDoc = new ReportClientDocument();<br />            clientDoc.setReportAppServer("inproc:jrc");<br />            // Open report<br />            clientDoc.open(reportName, OpenReportOptions._openAsReadOnly);<br /><br />             // Connection Info for fetching the resultSet<br />            String connectStr = "jdbc:oracle:thin:@it1srv19:1521:itoracle";<br />            String driverName = "oracle.jdbc.driver.OracleDriver";<br />            String userName = "user";        <br />            String password = "password";    <br /><br />            // TODO: Ensure this query is valid in your database. An exception will be thrown otherwise.<br />            String query = "SELECT DISTINCT AVONR FROM MBDEADM.AVO ORDER BY AVONR";<br />            ResultSet paramData = null;<br />           <br />            //we will now pass the resultset to the parameter to use as Default Values<br />            String parameterName = "AVONR2";<br />            int colIndex = 1; //this is the column in the ResultSet to use as the values<br />           <br />//            Load JDBC driver for the database that will be queried   <br />            Class.forName(driverName);<br /><br />            Connection connection = DriverManager.getConnection(connectStr, userName, password);<br />            Statement statement = connection.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE , ResultSet.CONCUR_READ_ONLY);<br />           <br />            paramData = statement.executeQuery(query);<br />           <br />            DataDefController dataDefController = clientDoc.getDataDefController();<br />           <br />            ParameterField origParamField = (ParameterField)dataDefController.getDataDefinition().getParameterFields().findField(parameterName, FieldDisplayNameType.fieldName, Locale.getDefault());<br />            ParameterField newParamField = (ParameterField)origParamField.clone(true);<br />           <br />            Values newVals = (Values)newParamField.getDefaultValues().clone(true);<br />            newVals.clear(); <br />            paramData.first();<br />            while(!paramData.isLast()){<br />                ParameterFieldDiscreteValue value = new ParameterFieldDiscreteValue();<br />                value.setValue(paramData.getObject(colIndex));<br />                newVals.add(value);<br />                paramData.next();<br />            }<br />            <br />            dataDefController.getParameterFieldController().modify(origParamField, newParamField);<br />            // Store the report document in session<br />            session.setAttribute(reportName, clientDoc);<br /><br />        }<br /><br />            // ****** BEGIN CONNECT CRYSTALREPORTPAGEVIEWER SNIPPET **************** <br />            {<br />                // Create the CrystalReportViewer object<br />                CrystalReportViewer crystalReportPageViewer = new CrystalReportViewer();<br /><br />                //    set the reportsource property of the viewer<br />                IReportSource reportSource = clientDoc.getReportSource();               <br />                crystalReportPageViewer.setReportSource(reportSource);<br /><br />                // set viewer attributes<br />                crystalReportPageViewer.setOwnPage(true);<br />                crystalReportPageViewer.setOwnForm(true);<br /><br />                // Apply the viewer preference attributes<br /><br />                // Process the report<br />                crystalReportPageViewer.processHttpRequest(request, response, application, null);<br /><br />            }<br />            // ****** END CONNECT CRYSTALREPORTPAGEVIEWER SNIPPET ****************       <br /><br />    } catch (ReportSDKExceptionBase e) {<br />        out.println(e);<br />    }<br />   <br />%><br /><br /><br /><br />2) In a other report I tried to update the data source used by the report at runtime. I used the method &#39;setDataSource(ResultSet rs, String oldTableAlias, String newTableAlias)&#39; of the &#39;DatabaseController&#39;. I got a message like this: &#39;At present in Java reporting Component does not implement&#39;. I use JRC and the docs (http://support.businessobjects.com/global/interactive/xi/om/JRC/default.html) show me this method. Is it not possible to change the data at runtime in JRC? (I tried it with the methods &#39;setDataSource(IXMLDataSet rs, String oldTableAlias, String newTableAlias)&#39;, &#39;setDataSource(Object newds)&#39;, &#39;setDataSource(IDataSet ds, String oldTableAlias, String newTableAlias)&#39;, too. But the result was the same!)<br /><br /><br /><br />3) I tried to use Business Objects in JSF framework (Ver MyFaces 1.1.3) with the same samples above. But in JSF nothing work! I got the following exception. What is my problem? Can you get me a tutorial for jsf/BusinessObjects?<br /><br />08:21:43,165 ERROR [[Faces Servlet]] Servlet.service() for servlet Faces Servlet threw exception<br />javax.faces.FacesException: com.businessobjects.reports.sdk.JRCCommunicationAdapter<br />    at org.apache.myfaces.context.servlet.ServletExternalContextImpl.dispatch(ServletExternalContextImpl.java:435)<br />    at org.apache.myfaces.application.jsp.JspTilesViewHandlerImpl.dispatch(JspTilesViewHandlerImpl.java:233)<br />    at org.apache.myfaces.application.jsp.JspTilesViewHandlerImpl.renderView(JspTilesViewHandlerImpl.java:219)<br />    at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:384)<br />    at javax.faces.webapp.FacesServlet.service(FacesServlet.java:138)<br />    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)<br />    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)<br />    at de.itinformatik.mes.web.filter.SynchronizingFilter.doFilter(SynchronizingFilter.java:42)<br />    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)<br />    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)<br />    at org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:144)<br />    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)<br />    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)<br />    at de.itinformatik.mes.web.ajax.aa.AAFilter.doFilter(AAFilter.java:54)<br />    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)<br />    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)<br />    at org.jboss.web.tomcat.filters.ReplyHeaderFilter.doFilter(ReplyHeaderFilter.java:81)<br />    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)<br />    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)<br />    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)<br />    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)<br />    at org.jboss.web.tomcat.security.CustomPrincipalValve.invoke(CustomPrincipalValve.java:39)<br />    at org.jboss.web.tomcat.security.SecurityAssociationValve.invoke(SecurityAssociationValve.java:159)<br />    at org.jboss.web.tomcat.security.JaccContextValve.invoke(JaccContextValve.java:59)<br />    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)<br />    at
    org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)<br />    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)<br />    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)<br />    at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:856)<br />    at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:744)<br />    at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)<br />    at org.apache.tomcat.util.net.MasterSlaveWorkerThread.run(MasterSlaveWorkerThread.java:112)<br />    at java.lang.Thread.run(Thread.java:595)<br />Caused by: java.lang.ClassCastException: com.businessobjects.reports.sdk.JRCCommunicationAdapter<br />    at com.crystaldecisions.sdk.occa.report.application.ReportClientDocumentState.saveContents(Unknown Source)<br />    at com.crystaldecisions.sdk.occa.report.application.ReportClientDocumentState.save(Unknown Source)<br />    at com.crystaldecisions.xml.serialization.XMLObjectSerializer.save(Unknown Source)<br />    at com.crystaldecisions.sdk.occa.report.application.ReportClientDocument.writeExternal(Unknown Source)<br />    at com.crystaldecisions.sdk.occa.report.application.AdvancedReportSource.writeExternal(Unknown Source)<br />    at com.crystaldecisions.sdk.occa.report.application.NonDCPAdvancedReportSource.writeExternal(Unknown Source)<br />    at java.io.ObjectOutputStream.writeExternalData(ObjectOutputStream.java:1304)<br />    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1282)<br />    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1073)<br />    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:291)<br />    at java.util.Hashtable.writeObject(Hashtable.java:813)<br />    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)<br />    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)<br />    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br />    at java.lang.reflect.Method.invoke(Method.java:585)<br />    at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:890)<br />    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1333)<br />    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1284)<br />    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1073)<br />    at java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1245)<br />    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1069)<br />    at java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1245)<br />    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1069)<br />    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:291)<br />    at java.util.ArrayList.writeObject(ArrayList.java:569)<br />    at sun.reflect.GeneratedMethodAccessor669.invoke(Unknown Source)<br />    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br />    at java.lang.reflect.Method.invoke(Method.java:585)<br />    at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:890)<br />    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1333)<br />    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1284)<br />    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1073)<br />    at java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1245)<br />    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1069)<br />    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:291)<br />    at java.util.ArrayList.writeObject(ArrayList.java:569)<br />    at sun.reflect.GeneratedMethodAccessor669.invoke(Unknown Source)<br />    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)<br />    at java.lang.reflect.Method.invoke(Method.java:585)<br />    at java.io.ObjectStreamClass.invokeWriteObject(ObjectStreamClass.java:890)<br />    at java.io.ObjectOutputStream.writeSerialData(ObjectOutputStream.java:1333)<br />    at java.io.ObjectOutputStream.writeOrdinaryObject(ObjectOutputStream.java:1284)<br />    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1073)<br />    at java.io.ObjectOutputStream.writeArray(ObjectOutputStream.java:1245)<br />    at java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1069)<br />    at java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:291)<br />    at org.apache.myfaces.application.jsp.JspStateManagerImpl.serializeView(JspStateManagerImpl.java:590)<br />    at org.apache.myfaces.application.jsp.JspStateManagerImpl.saveSerializedViewInServletSession(JspStateManagerImpl.java:493)<br />    at org.apache.myfaces.application.jsp.JspStateManagerImpl.saveSerializedView(JspStateManagerImpl.java:332)<br />    at org.apache.myfaces.taglib.core.ViewTag.doAfterBody(ViewTag.java:122)<br />    at org.apache.jsp.testCR_jsp._jspx_meth_f_view_0(org.apache.jsp.testCR_jsp:149)<br />    at org.apache.jsp.testCR_jsp._jspService(org.apache.jsp.testCR_jsp:83)<br />    at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)<br />    at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)<br />    at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:322)<br />    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)<br />    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)<br />    at javax.servlet.http.HttpServlet.service(HttpServlet.java:810)<br />    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)<br />    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)<br />    at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:672)<br />    at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:463)<br />    at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:398)<br />    at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)<br />    at org.apache.myfaces.context.servlet.ServletExternalContextImpl.dispatch(ServletExternalContextImpl.java:416)<br />    ... 32 more<br /><br /><br />Thanks for your assistance <br /><br />Tosch</p>

    Which Business Objects are you referring to.
    MS .NET has a thing called Business Objects but they only work in .NET.

  • Business Objects Customization Using Class file without net bean

    Hi,
    Any one please help me out.
    my requirement is like I want to use Business Objects SDK
    <%@ page import="com.crystaldecisions.sdk.framework.CrystalEnterprise" %>
    above is example..
    in Class file of Java without using netbean.
    I try to do this with creating Batch file add all Jar file and set path and but its not working.
    Also can I Login Into business Objects through class file not using netbean(means from command prompt)
    and create user group into CMS.

    Please find following servlet code who dont understand my requirement.
    * GroupCreation.java
    * Created on September 2, 2008, 3:47 PM
    import java.io.*;
    import java.net.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    import com.crystaldecisions.enterprise.ocaframework.ServiceNames;
    import com.crystaldecisions.sdk.exception.SDKException;
    import com.crystaldecisions.sdk.framework.CrystalEnterprise;
    import com.crystaldecisions.sdk.framework.IEnterpriseSession;
    import com.crystaldecisions.sdk.framework.ISessionMgr;
    import com.crystaldecisions.sdk.occa.infostore.IInfoStore;
    import com.crystaldecisions.sdk.occa.managedreports.*;
    import com.crystaldecisions.sdk.occa.security.ILogonTokenMgr;
    import javax.servlet.http.Cookie;
    import com.crystaldecisions.sdk.occa.infostore.*;
    import com.crystaldecisions.sdk.occa.pluginmgr.*;
    import com.crystaldecisions.sdk.plugin.CeProgID;
    import com.crystaldecisions.sdk.plugin.desktop.user.*;
    import com.crystaldecisions.sdk.properties.*;
    import javax.servlet.http.HttpSession;
    * @author prashant.joshi
    * @version
    public class GroupCreation extends HttpServlet
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException
    HttpSession session = request.getSession(true);
    response.setContentType("text/html;charset=UTF-8");
    PrintWriter out = response.getWriter();
    String cms = request.getParameter("CMS");
    String username = request.getParameter("UserID");
    String password = request.getParameter("Password");
    String auth = request.getParameter("Aut");
    IEnterpriseSession enterpriseSession = null;
    try
    ISessionMgr sessionMgr = CrystalEnterprise.getSessionMgr();
    catch(SDKException e)
    out.println(e.getMessage());
    Exception failure = null;
    boolean loggedIn = true;
         // If no session already exists, logon using the specified parameters.
    if (enterpriseSession == null)
    try
    // Attempt logon. Create an Enterprise session
    // manager object.
    ISessionMgr sm = CrystalEnterprise.getSessionMgr();
    // Log on to BusinessObjects Enterprise
    enterpriseSession = sm.logon(username, password, cms, auth);
    catch (Exception error)
    loggedIn = false;
    failure = error;
    if (!loggedIn)
    // If the login failed, redirect the user to the start page.
    out.println("<SCRIPT language=\"javascript\"> " +
    " alert (\"Sorry - you could not be logged on to this server." +
    " Ensure that your user name and password, as well as the CMS name are correct." +
    "\"); </SCRIPT>");
    out.println("<META HTTP-EQUIV='refresh' CONTENT='0;URL=LogonPage.jsp'>");
    return;
    else
    try
    // Store the IEnterpriseSession object in the session.
    session.setAttribute("EnterpriseSession", enterpriseSession);
    // Create the IInfoStore object.
    IInfoStore iStore = (IInfoStore) enterpriseSession.getService("InfoStore",
    ServiceNames.OCA_I_IINFO_STORE);
    // Store the IInfoStore object in the session using the
    // helper functions.
    session.setAttribute("InfoStore", iStore);
    // Create the IReportSourceFactory object.
    IReportSourceFactory reportSourceFactory = (IReportSourceFactory) enterpriseSession.getService("PSReportFactory");
    // Store the IReportSourceFactory object in the session
    // using the helper functions.
    session.setAttribute("ReportSourceFactory", reportSourceFactory);
    // Retrieve the logon token manager.
    ILogonTokenMgr logonTokenMgr = enterpriseSession.getLogonTokenMgr();
    // Retrieve a logon token and store it in the user's cookie
    // file for use later.
    Cookie cookie = new Cookie("LogonToken", logonTokenMgr.createLogonToken("", 60, 100));
    response.addCookie(cookie);
    // LOCUse the plugin manager and the UserGroup plugin to create a new
    // UserGroup object._ENDLOC_
    // LOCIf the infoStore object is not found then display an error message._ENDLOC_
    IInfoStore infoStore = (IInfoStore) session.getAttribute("InfoStore");
    // LOCIf the infoStore object is not found then display an error message._ENDLOC_
    if (infoStore == null)
    throw new Error("_LOC_InfoStore object not found. Please logon again._ENDLOC_");
    IPluginMgr pluginMgr = infoStore.getPluginMgr();
    //IPluginMgr pluginMgr2 = infoStore.getPluginMgr();
    IPluginInfo userGroupPlugin = pluginMgr.getPluginInfo("CrystalEnterprise.UserGroup");
    // IPluginInfo userGroupPlugin2 = pluginMgr.getPluginInfo("CrystalEnterprise.UserGroup");
    // LOCCreate a new InfoObjects collection._ENDLOC_
    IInfoObjects newInfoObjects1 = infoStore.newInfoObjectCollection();
    IInfoObjects newInfoObjects2 = infoStore.newInfoObjectCollection();
    // LOCAdd the UserGroup interface to the new InfoObjects collection._ENDLOC_
    newInfoObjects1.add(userGroupPlugin);
    newInfoObjects2.add(userGroupPlugin);
    // LOCGet the new UserGroup object from the collection._ENDLOC_
    IInfoObject iObject1 = (IInfoObject) newInfoObjects1.get(0);
    IInfoObject iObject2 = (IInfoObject) newInfoObjects2.get(0);
    // LOCOnce you have the new UserGroup object, set its properties._ENDLOC_
    iObject1.setTitle ("Single Home Group");
    iObject1.setDescription ("It is Single Home Group");
    iObject2.setTitle ("Multi home Group");
    iObject2.setDescription ("It is multi Home Group");
    // LOCRetrieve the ID of the InfoObject (user group)._ENDLOC_
    // objectID = iObject.getID();
    // LOCSave the new group to the CMS._ENDLOC_
    infoStore.commit (newInfoObjects1);
    infoStore.commit (newInfoObjects2);
    catch(Exception ex)
    // If the User group is already created.
    out.println("<SCRIPT language=\"javascript\"> " +
    " alert (\"Sorry - The User Group is already created Please enter another User Group." +
    "\");</SCRIPT>");
    out.println("<META HTTP-EQUIV='refresh' CONTENT='0;URL=LogonPage.jsp'>");
    return;
    // If the User is Logged on the Business objects
    out.println("<SCRIPT language=\"javascript\"> " +
    " alert (\"UserGroup get created in CMS.\"); </SCRIPT>");
    out.println("<META HTTP-EQUIV='refresh' CONTENT='0;URL=LogOff.jsp'>");
    out.close();
    /** Returns a short description of the servlet.
    public String getServletInfo() {
    return "Short description";
    // </editor-fold>
    when I paste above code in simple notepad as class file and run this file from command prompt
    it gives error like following 1 example I getting 46 errors for different Business Objects classes
    symbol : variable CrystalEnterprise
    location: class GroupCreation
    ISessionMgr sm = CrystalEnterprise.getSessionMgr();
    Please help me Out.
    Thank you.

  • Business Object Repository ( B O R )

    Can some one please send me some data or links from where I can get data on Business object repository .

    Hi,
         SAP's Business Object Repository gives you an improved way to integrate business processes with external partners -- an increasingly necessary ability in the burgeoning e-marketplace economy.
    The age of e has had a profound effect on the IT industry. Not only has it changed our way of life, but it has also forced systems such as SAP to embrace a new era of openness. Marketplace demands for flexible automation of inter-business workflow and intelligent data exchange have forced formerly very proprietary ERP systems to begin helping customers integrate with other companies and with e-marketplaces data formats. For the first time, companies must expose their business processes to the outside world.
    In order to achieve this openness, SAP provides a technical infrastructure for the R/3 product, the Business Object Repository (BOR), which provides a simple yet powerful mechanism for external systems to trigger core business processes (such as placing an order) without concern for the underlying data structure. This level of abstraction is beneficial because it decouples R/3 from the external system. Either system is therefore free to change its internal business processes without affecting the other. SAP provides this technical infrastructure using a component-based view of its system. Each component or object provides a view of the data and the business processes that interact with that data. External systems can access this data via BAPI methods, which in turn access the underlying data structures of the system. It is the responsibility of the object and the BAPI to ensure the integrity of the data. This encapsulation of the data not only lends itself to external interfaces, but by using objects from within SAP, you can greatly reduce implementation, testing, and maintenance effort via the promotion of code reuse.
    Business Objects
    A business object is a problem-domain entity that you model in the SAP system, such as SalesOrder, BillingDocument, and Employee. The BOR stores all the objects in the R/3 system. The repository is a group of all the objects in the R/3 system. If the focus of objects is to model atomic business processes then it can be said that the BOR provides an enterprisewide view of business processes. By designing your ABAP code to fit your business processes you increase the ability of that code to flex when those processes are altered or integrated with external systems. This had made the object-oriented approach, which the BOR provides, essential to developing inter-business or e-business functionality.
    Attributes
    A business object is primarily represented by its attributes. You perform actions, such as create, update, or delete on the attributes by calling the methods of the object.
    Attribute NetValue of Object BUS2032 (SalesOrder).
    The majority of attributes are data-dictionary fields (for example, the NetValue attribute is defined by VBAK-NETWR). When you access an attribute of an object, you execute a SQL statement that retrieves the corresponding field in the database.
    Definition of attribute NetValue.
    You can also define attributes that do not exist in the data dictionary. These attributes are called virtual attributes. For example, a business partner has an attribute called BirthDate that is stored in the data dictionary. You can add a virtual attribute to the BusinessPartner object called Age. The age of a business partner is not stored in the database, but you can calculate it using the current date and the birth date of the business partner. If you implement the ABAP code that calculates Age, every time you access the Age attribute, the code executes and returns the business partners age.
    Definition of virtual attribute Age.
    This is an excellent example of one of the tools that a component-based approach provides. The external system does not need to concern itself with how to gather the data that it requires. The calling program needs only to access the attribute for the data to be returned. This is how business objects decouple the calling program (whether it be in R/3 or external to R/3) from the internals of R/3.
    The BOR lets you define multi-line attributes. These attributes define one-to-many relationships between an object and other fields. These objects can be defined in the data dictionary or can also be virtual attributes.
    An attribute that uniquely defines an object in the system is called a key attribute. In the case of a SalesOrder, the key attribute is VBAK-VBELN (the TableName and FieldName). It is not uncommon for an object to have several key fields. An example of this is object is the SalesArea (BUS000603) object type which has SalesOrganization (TVTA-VKORG), DistributionChannel (TVTA-VTWEG) and Division (TVTA-SPARTE) as key fields.
    Methods
    As mentioned earlier, the methods of an object represent the actions you take with objects attributes. An action in this example would include retrieving the status of one or more sales orders based on specific criteria. Methods are analogous to function modules in that they have importing and exporting parameters as well as exceptions, which you view by selecting a method and clicking on the toolbar button. This allows external systems (or internal developments) to pass and accept parameters from these methods just as if they were using function modules -- allowing external systems to call methods.
    In Figure 4, the methods shown with the green LED are BAPIs that are called specifically from external systems. They can, however, be called from within the system itself. The method shown with the stop sign is obsolete, but retained for backward compatibility, and should not be used in new developments.
    Methods of SalesOrder.
    Delegation and Subtyping
    One of the most complex concepts in object-oriented development is that of inheritance. This concept lets you extend core functionality by creating a child of the parent object that inherits all of its attributes and methods. For example, a Manager object is a subtype (child) of the Employee object. The Manager object has all the attributes of an Employee object (such as EmployeeID or Name) but also has some extra attributes (such as CompanyCar or ParkingSpace). SAP has not implemented inheritance in the BOR. However, it has provided subtyping and delegation, which offer an alternative way to extend R/3 functionality.
    Subtyping
    A subtype of an object is another object whose creation is based upon a parent object (see the preceding manager/employee example). The subtype maintains references to all the attributes and methods of its parent object. This means that any methods and attributes defined on the parent can be executed and accessed on the child object. I have often heard less-experienced developers refer to subtyping as copying the parent object. Although the effects can be similar, in order to achieve an understanding of some of the more advanced concepts, such as interface inheritance, it is important to realize that this is not accurate.
    If a subtype object were merely a copy of its parent, then all the code contained within the parent would be physically copied to the child. This is not the case. The subtype simply maintains references to its parents methods and attributes. The real difference is that the subtype lets you redefine these methods and attributes. You can easily add your own business rules to the parent methods by redefining the subtypes method. In the following example, I will show why this distinction is so important.
    Subtyping Case Study
    As an ABAP developer at Acme Tyres Pty. Ltd., you have been given the task of implementing some security measures for the companys online store. The requirement is simple: The password must be at least six characters long.
    Modifying SAP code leads to costly and complicated upgrades due to the modified code being overwritten by the newly delivered SAP code. Therefore, The challenge is finding a way of implementing the business logic without modifying SAP code.
    After some investigation, you realize that the method CHANGEPASSWORD (in BAPI) on the object KNA1 (Customer) is called when customers change their passwords. All you need to do is create a subtype of KNA1 and then redefine the CHANGEPASSWORD method adding the ABAP code to ensure that the password is a minimum of six characters long. It is of course not wise to change SAP code even assuming you have the passwords, which can be provided only be SAP. After the method is redefined, you just need to implement the business rules in ABAP.
    FIGURE 5 Redefinition of ChangePassword method.
    It is imperative that once you redefine the method it still behaves in a similar manner. You are allowed to add extra business logic, but the method must still change the password rather than do something unexpected, like delete a customer. This is particularly important when SAP is being accessed from external systems. The external system will expect a method to provide certain functionality. The developer should take care to ensure that this expectation is met.
    Delegation
    Now that you have implemented a new CHANGEPASSWORD method, you need to tell the SAP system to use the redefined version of CHANGEPASSWORD and not the version that was delivered on the KNA1 object. This is similar to object-oriented inheritance but the two concepts do have fundamental differences.
    Delegation for objects.
    By making an entry in the delegation table, you tell R/3 that before executing a method on KNA1, it should first check if that method has been redefined on the subtype. If it has, then the system executes the redefined method . If it hasn't, then the system executes the original method. Figure 7 illustrates this process.
    Execution flow for methods with delegation.
    This delegation is powerful because it lets you implement your own business logic without modifying any SAP code. As long as the objects are properly delegated, your method will be executed.
    Responsibility
    So far I have shown you two major components of an object, its attributes and methods. The difficulty in SAP is that it has traditionally been a data-driven, procedural-development approach. The BOR is not well understood by developers and managers and thus it is shunned by those that stand to gain the most from it. If managers and developers alike would take a formalized approach to development using business objects, significant savings in the development, testing, and maintenance phases would be achieved. This is due to the high level of re-use that business objects encourage.
    Having said this, when a powerful tool is put into the hands of an inexperienced person, chaos can (and usually does) ensue. If object-oriented design principals are not adhered to, then the resulting code has poor reusability and maintainability. Although an in-depth discussion of design issues is beyond the scope of this article, I will introduce in the following section one of the more fundamental design aspects of BOR programming: Responsibility.
    When you are given the task of creating a method or attribute on an object, one of the most important questions you should ask is, Does this attribute or method belong on this object? This question is fundamental to an object-oriented design and the answer can make a world of difference. Answering this question incorrectly has detrimental effects on the development effort resulting in methods and attributes strewn across myriad objects, with no coherent structure. If the methods and attributes were strewn across several objects, it would be more difficult to provide a uniform interface to external systems. If an external system wants to execute a particular business process in R/3, it may need to access several business objects, thus increasing coupling and reducing the layer of abstraction between R/3 and the external system.
    Lets take, for example, the requirement to be able to update a sales order. This is a common requirement and one that SAP usually implements for you. For the sake of the example, lets assume that SAP has not implemented this method. You will need to implement your own UPDATE method on one of the business objects. The question here is: Which object? This question is what I term as defining responsibility. Which object is responsible for having the UPDATE method on it? As shown in Figure 4, the answer in this cases is BUS2032 (SalesOrder). If you put it on any other object then you run the risk of no one else knowing of its existence. Next time there is a requirement to update a sales order, the developer will develop an additional method. You would then have two separate pieces of code that implement the same functionality. This duplication doubles development, testing, and maintenance requirements. On large projects, this can become a real problem and a maintenance and testing nightmare.
    SAP recognizes the challenges facing developers in the e-business era. It is aware that if it wants to take R/3 to the next phase, it needs to continue evolving the ABAP language and ensure that powerful development tools are available to SAP developers.
    Rising to the challenge, SAP has begun developing extensions to the ABAP language called ABAP objects (see "Introducing ABAP Objects," in the IntelligentERP feature archive for an excellent introductory article to ABAP objects by Jürgen Heymann and Horst Keller). These extensions will provide ABAP developers with a full range of object-oriented tools. Eventually, these new extensions will make BOR obsolete. However, the use of object-oriented development is sure to be an integral part of future SAP developments, regardless of where the world of e takes us.
    Reward points
    Regards

  • How to transfer data between spreadsheets without using Business Objects?

    Hello, every time I try and log onto the business objects platform I keep getting "this system can be contacted but there is no central management server running at port 6400".  All I need to do is pass variables between spreadsheets. Both files are located in the same folder. Below are the links ive tried but have been unsuccessful  to pass data.
    (This link I used the swf loader component child and flash variables task Daya posted on Feb 15. However nothing loaded. The link wasnt a link i could display is in a browser. So i kept getting 0% when in preview mode.
    Passing values from dashboard to dashboard with Flash Variables
    Next I tried the following link. I did everything word for word and was able to display both files on the html page, but no link or connection between them existed. I would select a state and noting happened to the other swf files chart. Does this need to be in the Business Objects platform?
    Dashboards 4.0: Connect to an external
    Lastly , I used the link below. I followed everything and was able to get interaction from the parent to child however with only the files that were available on this thread. Their URL was this http://myxcelsius.com/wp-content/uploads/2010/10/child.swf?salesman=Schrute,Dwight. I get the concatenation but I dont get how this URL was generated? How do I develop my URL? My URL is able to display in a browser. My URL is
    http://kln-ftvp/KLNPheonix//LinkToReport.htm?fqn=MyEnterprise.Public.graphtest&run=true
    SWF Loader shows 100% instead of Dashboard.
    Even with my URL being able to display in internet explorer, I still only show 100% and a blank screen. Can anyone help me with any of the issues I am having trouble with? Your help is most appreciated. Thank you.

    It looks like you have more than one problems so it might be good to separate them out.
    Issue 1 - Logging on to BusinessObjects
    You say that when you try log on to the BO Platform you get the error message there is no central management server running on port 6400. I'm assuming you are trying to do this from the Dashboard designer.
    Does it work when you try to log on from the web browser?
    Make sure that you enter the correct system name in the system field when trying to log on from Designer. If you are unsure, either check what system name is used when you log on from your browser or check with your BO administrator.
    Issue 2 - Passing values to a child dashboard
    If you try to preview the dashboard in the designer, remember that the swf loader doesn't work in preview mode, so whatever you are trying to display won't be visible.
    First of all you need to have 2 separate flash files that works independently of each other. The one that you are planning to use as a child flash, make sure that you create the flash variables so you can pass variables to it and use them to filter your data if that is your requirement. But hold off on that for now.
    When you have 2 working flash files, save them both to the BI Launch Pad (or InfoView if you are on 3.1) and make sure they both work there. Then get the opendocument url for the child dashboard and try to open it in your browser directly using this url. If that works, use the same url in the swf viewer in the parent dashboard, save the parent dashboard back to BI Launch Pad and open it. It should now work.
    Let me know if you have any problems with these steps.
    Cheers,
    Josh

  • Need toughts on approach. Client moving to Maconomy/Business Objects

    Post Author: klokhammer
    CA Forum: General Feedback
    Hi.On of our important clients are most likely to migrate between economy systems within the next 9 months. Case as follows:
    We have developed a budgeting/forecast and reporting system for a certain market/company. The solution is based on a Microsoft SQL 2000 database/server with Microsoft Access as application interface. The solution is integrated and gets actual figures from the economy system Aspect on a IBM iSeries (AS400) system. The "edge" of the system lies in sophisticated budgeting/forecast routines, the report module is rather poor....
    The client is now most likely to migrate to Maconomy as the new economy system, and Maconomy AnalytiX as the new BI system (which I understand uses Business Objects.)
    We are new to Business Objects and need general recommendations on what level we should try to integrate on. Should we "ditch" all the development done in Access and build a new solutions through Business Objects, keeping all the business logics, but not the interface?
    Should we try to integrate on a database level, keeping the interface in Access (for budgeting/forecast), and exporting data into Business Objects to allow reporting through Maconomy AnalytiX?
    As you most likely have understood, my knowledge about Business Objects are pretty poor. But please try to give me your thoughts on how we should move along, and what kind of "standard" considerations we must have in mind.
    Kind regardsklokhammer

    Post Author: jsanzone
    CA Forum: General Feedback
    klokhammer,
    I checked out Macanomy's web site and searched for references to Business Objects, and sure enough it is mentioned here and there.  What it sounds like is that Macanomy has developed some "Macanomy Standard Reports" using BusObjects, so if you want these nifty Macanomy reports available to you, you buy the Macanomy product, which is bundled w/ BusObjects, and voila you have the reports.  It sounds like a winning strategy.  On the other hand, in order to get this type of capability, an organization would have to hire a staff to purchase and install Business Objects, then the staff would have to understand the financial database that the client has established and populated, and then the staff would have to set about building the reports that are needed.  With Macanomy, it seems that you get the whole kit and kaboodle in one swoop, which is good for an organization providing that it is on the same wave-length as Macanomy.  In regards to your question about what to do with your existing infrastructure, this is a call only you and your client can make.  In IT, it's always about the data and how it is used.  Peeling back the onion a bit, the process works like this:  in order for the Macanomy reports to work, the report must be properly built and it must read from a "universe", which is a BusObjects term for defining the interface between the user and the database (the meta data process).  In order for the universe to exist, it must be built by a "Universe Designer".   The Universe Designer must have an intracate knowledge of how every table in the database will be used to support the reports that the end-user wants to have (either pre-canned (standard) or ad hoc capability).  The database is still a critical piece, and reviewing the Macanomy offering I have a funny feeling that they come in with their own database structure and universe, which makes their process a much quicker install.  The downside, as it appears to me, is how you would migrate your existing data into the Macanomy structure (this goes back to the two parties being on the same wavelength).  I think in your case it's going to be a matter of ditching your database structure in MS SQL 2000 and Access, and adopting the Macanomy structure, but this may be more painful to do than any one at this point realizes.  It sounds like you need to continue arming yourself with knowledge before making any final decisions.  Good luck, and perhaps keep all of us posted on your experiences.

  • Error while accessing Method from Business Object

    Hello Experts,
    I have created a business object ZBUS7051 by using BUS7051 as a Supertype. I have crated a method GET_DATA in ZBUS7051. If I use BUS7051, Method GET_DATA in a standard task, getting a message that Method GET_DATA not defined for object type BUS7051.
    Why I am getting this error? Is there way I can use BUS7051-GET_DATA instead of ZBUS7051-GET_DATA.
    The workflow triggering event is BUS7051 u2013 CREATED. In the workflow binding, system is showing a warning that u2018Conversion from BO.BUS7051 to BO.ZBUS7051 can cause data-related errorsu2019. How to fix this? Please let me know.
    - Krishna.

    Thanks to everyone.
    I have delegated the custom business object to super type BO 7051. I triggered the workflow using T.Code: SWUE, BO: BUS7051. Event: CREATED. But the workflow is resulted an error as given below.
    Problems occurred when generating a mail
    Error '9' when calling service 'SO_OBJECT_SEND'
    Work item 000000503335: Object BUS7051 method WAIT_1_MINUTE cannot be executed
    Object does not exist
    Object does not exist
    Object does not exist
    Variables of the work item text cannot be generated
    Syntax error in expression &NOTIFICATION.NUMBER&
    (This is a Wait Step, Created in ZBUS7051, Method: WAIT_1_MINUTE)
    Since the delegation has done, I can say BUS7051 - WAIT_1_MINUTE, instead of ZBUS7051- WAIT_1_MINUTE. Is it correct?
    Could some one please let me know, How to fix the above issue?

  • Business Objects, external services and application services in CAs

    Hi All,
    right now we are developing our first eSOA Composite Application with CE and I have some questions regarding Business Objects, the import of external services and the development of application services.
    As I understood there are two ways to provide business functionality for composite applications:
    a. Import backend functionality as an external service (e.g. BAPI, RFC) at the CAF, build the application service which can be used as a callable object for UIs or the GPs
    b. Develop a local Business Object (in CAF) providing the business logic, create the application service which again can be used as a callable object. Furthermore the application service can be exposed as a Web Service (external service).
    My questions:
    1. When is it appropriate to to import external services in stead of developing local BOs?
    2. Under what conditions is it advisable to (solely) develop local BOs?
    3. What are the advantages / disadvantages regarding the reusability of the services (in option a and b)?
    Note: We are developing on NetWeaver 2004s.
    Please let me know, if you need more information to answer the questions!
    Thanks for your advice in advance,
    Regards,
    Ivonne

    Hi Ivonne,
    first of all, the CAF Business Objects (BOs) itself don't contain any business logic, they're basically just local database tables (with some CRUD services on top).
    Business logic is implemented in Application Services (AS).
    Now, regarding local BO's vs. external services, it depends on your use case. If the data is already available somewhere in your backend system it makes sense to use external services. For instance you wouldn't want to store business partners all over different composites. For data that is specific to your composite (in particular configuration, customizing etc.) and not likely to be reused by other applications you should use local BOs.
    Accessing local BO's is also much faster than calling external services.
    You can do reuse in both scenarios, since the CAF services can be exposed as web services.
    Regards,
    Christian
    Edited by: Christian Loos  on Apr 8, 2008 6:11 PM

Maybe you are looking for