1 2 3 Previous Next

benny.schaich-lebek

32 Posts

Let's be clear from the beginning. This release has mostly features for Composition Environment (CE) and Process Integration (PI), which in the future will more and more evolve into Process Orchestration (a term so new that I haven't seen anybody yet name it PO...).

As the Marketing guys always tell us, don't talk to customers about features. Well, who is a customer around here? You're DEVELOPERS, right? And here is what you are hungry about: features! Here's a list:

Direct path from business view to process execution

  • Seamless Process Model exchange from SAP StreamWork to BPM (BPMN 2.0)
  • Seamlessly extend core processes, implement a blueprint and document NW BPM processes in the Business Process Library (BPL)
  • Task Instance Collaboration: Extending process flexibility and collaboration through SAP StreamWork
  • Visualization of BWF diagrams in BPM
  • Leverage Public APIs: Enhancements enabling more sophisticated use cases and performance of custom implementations
  • Decentralized Deployment of Business Rules Outside of JEE Application Server

This is actually quite cool. If you have seen Streamwork and even looked into it, you might have thougt: "Anohter project management software, so what?". But the real fun comes only if you use it in collaboration with others. Seeing live updates of the data is really freaky!
Have seen this before?
Yes, but what you surely have not seen is such kind of software doing a BPMN diagram, where several people can work together. And this is what you better should do when designing BPM processes. Please be aware that the BPMN tool for Streamwork (aka Gravity) currently is in beta. 

StreamworkAction

Next generation tooling via SAP Integration Flows

  • Installation in “pure Eclipse”
  • A visual BPMN representation of an integration scenario
  • Modeling based on Enterprise Integration Patterns
  • Complete support for modeling Service Interface and Data types
    in Eclipse
  • Modeling of Mapping in Eclipse
  • Bringing design-time and configuration-time in PI together
  • Easier to understand and integrate systems

Basically the difference is that now you can work in just one IDE to do your work for tasks that fomerly had been done with severly tools.

Enhanced monitoring via SAP Solution Manager

  • Central User Defined Message Search (upon payload)
  • New PI Message Alerting with simplified configuration
  • Trend graph representation based on message alerts

Plain data sometimes can be painful. This how Solution Manager starts to help you interprete it in calculating trends.

Java only deployment option of PI

  • Further functionality provided on the Java stack (Java IDOC adapter completed, FTP proxy server supported, SOAP adapter enhancements)
  • Support requirements towards the Payment Card Industry standard
  • Message status overview enablement for synchronous (logged) messages

We remember that PI used to be partly in ABAP and partly in Java, as in many other areas of NetWeaver. This did not serve neither ABAP nor Java people really well. With going away from this concept youve seen a lot of fornt ends going to ABAP again and finally PI is moving completely into Java. No mix-up of technologies -because it's just better.

Closer integration of BPM and PI

  • Common deployment of AEX and BPM/BRM on one single SID
  • Reliable connectivity between messaging and process layer via proven Java Proxy Runtime
  • Call PI mappings (Java, XSLT) from within a BPM process

As I said, they are moving tohgether anyways...

As you all know restricted access means a specific process to go through to get hands on this release. Unrestricted delivery (aka general availabitlity) is planned for the second quarter of 2012.

As announced at TechEd this year, SAP NetWeaver 7.3 was released for restricted shipment on Monday, November 29th. Restricted shipment, better known as "ramp up" or release to customer (RTC) means the availability of the product to certain customers for productive usage.

Unrestricted shipment is expected to be in first quarter of 2011.

Here are some out of lots of new features:

  • Greatly enhanced Java support: Java EE5 certified, Java-only ESB and JMS pub/sub capabilities
  • Reusable business rule sets with Microsoft Excel integration
  • Enhanced standards support (WS Policy 1.2, SOAP 1.2, WS Trust 1.3, Java SE 6, JSR 168/286, WSRP 1.0, SAML 1.0/2.0)
  • Tighter integration between SAP NetWeaver Business Warehouse and SAP BusinessObjects
  • Individual and team productivity enhancements in the SAP NetWeaver Portal
  • ...and heaps of new features and enhancements in each part of the SAP NetWeaver stack!

Here is more detail by the usage types of NetWeaver:

Enterprise Portal

 

 

Managing and Mashing up Portal Pages with Web Page Composer
Supporting  business key users in  the easy creation and management of  enriched portal pages, blending business applications and user-generated content, generating truly flexible UI.

 

 

Unified Access to Applications and Processes with Lower TCO
Delivering  the best of class integration layer for SAP, Business Objects and non-SAP applications & reports while maintaining low TCO with capabilities such as advanced caching, integration with SAP central Transport System and significant performance and scalability improvements. Common Java stack and improved server administration and development environment.

 

 

Portal Landscape Interoperability and Openness
Providing industry standards integration capabilities for SAP and non-SAP content, both into the SAP Portal and for 3rd party Portals, such as JSR and Java 5 support, or open API’s for navigation connectors.

Business Warehouse

Scalability & Performance have been enhanced for faster decision making. Count in  remarkably accelerated data loads, a next level of performance for BW  Accelerator, and support for Teradata  as additional databases for SAP  NetWeaver BW Increased flexibility  by further integration of SAP BusinessObjects BI and EIM tools like SAP BusinessObjects Data Services and SAP BusinessObjects Metadata Management. Reduced TCO and higher development efficiency is supported by the automated generation of Semantic Partioned Objects and a graphical tool for modeling the data flow in BW.Configuration and operations were simplified with the new integrated Admin Cockpit  into SAP Solution Manager and a wizard based system configuration.

Process Integration

PI has introduced the availability for a high number of solutions to allow out-of-the box integration: For SAP applications there is prepackaged process integration content semantically interlinked with SAP applications and industry solutions and for partners and ISVs SAP provides certification programs that help to ensure quality.

There is ONE platform (and not several) to support all integration scenarios:  A2A, B2B, interoperability with other ESBs, SOA, and so forth.

In addition there is support of replacement of third-party integration solutions to
lower TCO Interoperability with other ESBs to protect investments.

A Broad support of operating environments and databases is made available.

Business Process Management/CE,

With the WD/ABAP Integration you may browse the WD/ABAP UI repository of a backend system and use a WD/ABAP UI in a BPM task.

The API for Managing Processes and Tasks starts process instances, retrieves task lists, and Executes actions on task.

With Business Rule Improvements you now can reuse rules or decision tables across rule sets. Together with this came other usability and developer productivity enhancements.

With zero configuration for local services a big improvement for simplification of SOA Configuration was achieved.

     

Mobile

   In the new version operational costs are reduced through optimized monitoring and administration  capabilities. Robustness was enhanced through improved security and  simplified upgrades.   There is greater flexibility regarding backend interoperability through Web Service interfaces and multiple backend connectivity.

More information is available at the SAP NetWeaver 7.3 or the manuals of NetWeaver 7.3 in the SAP Help Portal.

I'm starting with an explanation of some term, so in case you are already familliar with them you might want to skip a few headlines.

High Availability, what's that?

When talking about High Availability (HA), we talk about the capability to keep a system up and running under all circumstances. Well, that's the goal and it get's obviously more complex the more serious you take what I just said.

Usually HA means to avoid interruption in case of hard- or software going down. In the extended case of losing whole buildings, meaning it is not enough to have two computers that are located side by side, we talk about disaster recovery and not any longer about HA.

Also, at least for SAP context, we always divide HA in two groups of cases. We say there is HA for planned and such for unplanned downtime. Unplanned is the actual case of protection, when something goes wrong with soft- or hardware. Planned downtime is the downtime that occurs at the time when you do specific actions in the system (most well known all kinds of updates, patches etc.).

Today the latter one usually is the more painful one, as many of our customers have so called "closing windows", which means environments that need to run around the clock.

How does it work?

To keep a system up and running is fairly easy as long as there is no state somewhere in that system. For example, if we want to protect a simple website that does only contain static web pages, we just may run two web servers. If one of them goes off-line the traffic just is redirected to the other one. This already includes the use of load balancers because usually we do not want to bother the user about those two servers and only want to provide a single address with one port to access the system.

It gets more complex once our server carries a state or lets say the sessions handled by the server do so. Then we cannot just have the server falling and go to another one, as that server might need some context information about the ongoing applications.

For this we usually use a so called switchover mechanism, that is provided on a operating system level. This basically is a polling program that checks whether  the leading computer still is running. In case it finds this is not the case it starts up the protected program on that reserve computer. In addition it does some magic to take over also the IP address of our failed system and some additional work for example for network drives that have to be reassigned to the new place.

In the smallest scenario only the database is protected with such a switchover system, so that the database comes up again once the switch over happened. Obviously this means that any transaction that was not yet closed (committed) in the failing system will be rolled back and the according work is lost. There are several scenarios how databases handle this, that depend on the database used and the level of effort put into this.

And what has my App Server to do with it?

However, there also may be a state in the application server, specifically in those parts that handle server locking. To those who know their SAP system quite well, that is the Enqueue server. The Enqueue server is quite small, but contains a state, as it does database  independent locking. Loosing such locks during a switch over could result in fatal system problems.

For this a replication system for the Enqueue was developed and today this is mandatory for all HA SAP systems. This means that Enqueue replicates all links on the second computer and in case of a failure just takes over. Don't think this does not involve you, as you are not using such locks. On both ABAP and Java servers these locks are used without your explicit knowledge.

Switchover in less than a minute?

As initially the two components of the SCS instance have been part of main process of an ABAP server,  customers were used to do the switch over for complete systems. This involves at least the start of the server on the switch over system. As this takes  a couple of minutes it usually was not a big issue.

Nowadays the situation has changed. Many systems run Java servers also. As the Java servers  of the 7.0 generation do a lot of preload work, a startup takes much longer for them. But even for an ABAP server many customers today would like to push the downtimes  beyond the scale of minutes.

And this is possible. Since version 7 the architecture of the system has been changed toward an isolation of the SCS (server central services) instance. After installing the system this way it's easy: switchover is only needed for the SCS instance any longer. And as this involves only two quite small services, that instance restarts definitely beyond the one minute border.

Now, usually this does not help much if the database takes more time than this. That's true, but fortunately today there are databases available that support  even continuous availability. With those your SAP system can guarantee to be available always with downtimes less than a minute - for the unplanned downtime case!

Planned downtime unfortunately still has issues that go beyond this. As in such case an upgrade/update is running, we cannot be sure whether there may even be table changes with such and that needs significant time to process. Although such issues may be handled but only by people, not yet by computers. Ask your support for help in that case as SAP Global Support has developed specific consulting solutions for such cases in the meantime.

Just recently I got into a discussion "concerning WD open source framework" on Twitter. Lots of mentors and other fans of Web Dynpro immediately seconded my more on a joke based mentioning of such a possibility. I didn't expect this.

As you might know there is a general change in open source policy at SAP. So far we only used  specific open source products specifically in the tools area for Java (like eclipse). But just using those frameworks makes you very dependent on the work of others. So we still developed proprietary frameworks like MOIN  or MOdeling INfrastructure. Meanwhile we had to find out that this is much more expensive then just to integrate with frameworks that are under development by the open source community like the EMF and GEF  frameworks developed mainly by the eclipse foundation. This changed politics and now the biggest part of SAP contributions goes into the Web Tools Platform (WTP). 

Now, why did we do so? The most easiest explanation that proprietary software makes more money  surely is not the truth. Development software especially for Java surely is not a main revenue driver for SAP. The real reason is that there is a lot of work to enter the open source world. 

Unfortunately in a large company like SAP there are a lot of people involved in all kinds of things and many of those people are non developers. This means they need to be convinced that what is done with open source makes sense for the company and is something more then a socialist idea to spread the assets of the firm. The biggest part here is that lawyers, who's job it is to tell management about the risk of open source, can find a lot of such, you bet. (Most of which is irrelevant to small contributors, don't ask!)

But back to Web Dynpro. WD is my favourite when I explain why open source makes sense for SAP. What we did there was to develop a quite sophisticated framework for UI development. At the same time of course, there have been developments in the community to have comparable functionality on non SAP platforms also. The effect of this was that nowadays besides ISVs who develop multi platform anyways, even SAP customers ask for support of those frameworks. Suddenly we find ourselves in the situation that we have to support other frameworks too - and this is not the idea we had in the first place.

So why not put WD into open source? In my opinion this train already was gone. Proprietary today is a word that in the community at best should be used for your competitors products. But putting WD into OS is in general estimated as too late. I really was surprised to see many people stand up for this. May be we can move something here.

To make it very clear: I'm not in the place to decide for such a step, I'm not even working for Web Dynpro itself. I'm more like a catalyst here, giving voice to the community who does not want to confront SAP with a maybe uncomfortable wish. Let me say so much: many people inside the company likde this idea very much.

Just recently I got this request from a customer: when using the NetWeaver Developer Studio (NWDS) with NetWeaver Development Infrastructure (NWDI), the Studio effectively is using a server and therefore must log in to it. This results in a small login window that appears. To make this easier the password may be stored for further use.

The request was that in case the password is forced to change by the server, it should be possible to do this without logging into the server via a web interface but also from the NWDS. The current situation is that this change request is not handled by the studio and after several tries (as users are not aware that a change is needed) results in a lock of the user. As this seems to make a lot of sense, I talked to development.

After a short discussion I found myself sent to the next department. As this is not what I would call a good start Idecided to first really understand the problem before running around with other peoples knowledge...

What they had told me was that the Studio does not get any more specific information than an "unauthorized"  answer from the server once the password timed out. Unfortuantely it is a security standard to not give more information on login requests for agood reason. In addition, the client does not have any information about when an attempt for a new password will be.

All together this means that to make this requirement happen we would need to either change a security standard or implement a specific login that would keep track on the time left for updating passwords. This seamed pretty much effort to me for such few functionality. I started to think about alternatives.

The actual problem is that the login mechanism doesn't warn the developer and such functions more like a trap that results in a user lock. After this she finds herself searching for an admin to get unlocked. Wouldn't it be enough to just give a hint when the window asks you for an unexpected login?

The final decision hit me yesterday: i was looking into the server to get a better overview on htis problem searching for the admin options for user management. Threre is no such option to  renew passwords after x days. As you might know the User Management Engine (UME) allows to connect to an internal user system, an LDAP one, or an ABAP server. And I know very well that ABAP servers do have that functionality. In other words, the implementation would have to take care about password changes throöugh another server.

This assured me that I'm on the right track with "second best" .

And if you ever come back to me for more, then please let me know why the heck you need renewing passwords on a development system ;-)

Sometimes historical steps are taken without public notice. Usually this happens because  public means a majority who is not really aware about the consequences of things happening.

Just yesterday I got a book from Jeff Jarvis "What would Google do?" and there I found some expressions that bring it so much to the point like: Pipelines, people, products or intellectual property are not any longer key to success. Openness in contrast is. (and hopefully my back translation is correct). Think about the consequences for software companies...

The book starts with an example about how wrong it can go for companies today when ignoring the community around it and I guess by now everybody knows enough examples for this. My early experience with such goes back to pre- internet times when I was running a Compuserve forum (for those who never experienced this, you had to call them as your provider directly and only could access forums and other stuff that were run by them) for the company I was working for in the early nineties. Someday there was a problem with one of our products and many customers complained. Unfortunately it was decided to send a letter to all of those customers that there are only very few of such complaints and therefore this would not be a priority.

As many of those customers met in my forum I soon started to experience the power of community...

Today not many people would be that stupid any more. But meanwhile the power  of internet communities has even grown and as Jeff Jarvis recommends in his book it is not even wise to try to pretend you would not see such discussions going on. The only way to handle them is to participate in them. Not that we wouldn't have done this anyway. But there is a difference between tolerating a behavior or actively promoting it.

And this leads me back to SAP. The fact that we not only released such rules, but at the same time made them public (see ULR of this blog), unfolded a feeling between pride and relief to me. Pride because we do the right thing and relief because we did not do the wrong thing.

No, my dear friends (not by coincidence a phrase used by Leo Apotheker when he wants to make something very clear), this is not such a clear win as you might think. SAP sometimes is a heterogeneous company too. And there are many people who only believe in things they can see - like written documents that make clear statements. Many employees actually believe that it is forbidden to them to speak anywhere in public about any subject concerning the company. If you now experience such behavior hand them over the link and tell  them that their management wants them to talk!

OK, We're on the right track. There is more to come.

As you might have heard, Enhancement Pack 1 of NetWeaver Composition Environment 7.1 is in ramp up.

To those who don't know what that means: Ramp Up (officially called "restricted shipment") is a special phase of product introduction at SAP that allows customers to already use the software productively. But to make really sure we are able to support all kinds of incidents, it is delivered to a restricted set of customers.

The good news is that there are still some places available for the current program, so you may start your composition project immediately.

 

What you get

Some highlights of the new features of this version:

  • Full BPM (Business Process Management) and BRM (Business Rule Management) integration
  • Composite Designer view in NetWeaver Developer Studio
  • Improved Java supportibility and monitoring capabilities
  • Visual Composer in NetWeaver Developer Developer Studio
  • Higher productivity in CAF (Composite Application Framework), e.g. graphical designers
  • Connectivity improvements, e.g. reliable messaging, idempotency, etc.
  • Enhanced devloper productivity in format of integrated NetWeaver Developer Infrastructure (NWDI) and Enterprise Service Repository (ESR)
  • Getting Started with SAP NetWeaver Composition Environment

If you haven't seen it, this is also available as a preview download, which you can check out. This version only runs 90 days and is of course not connected to any service or guarantees of a real product.

What you need to start

As you know, cost may vary due to country and specific agreements your company has with SAP. Therefore the only one who can tell you a price is your local sales representative. But at least I'm able to tell you what kind of licenses you need. This includes a NetWeaver Development License, additional Licenses for the use of Business Process Management and/or Business Rules Management at runtime and a ramp up coach who is available at a local consulting rate.

 [PartI | Real World Composites I - Visual Composer], PartII  (Real World Composites II - Composite Application Framework)We +could+ do the following:Go to the project view on the left and click through the project tree  (LocalDevelopment)getemployee.data-> modeled-> Application Services-> GetEmployeeData. Now right click on the  Service and choose Expose service as WebService.  Give a name to the service like WSGetEmployeeListByQueryEmpName. Choose the method of the bean that should be exposed to the outside, which is GetEmployeeListByQueryEmpName and click OK. The service will be built.   h3. Deploy to a Server In the context menu of the project (left click on getemployee.data) you find the option for Generate Application, Build Application, and Deploy Application. Click on them one after another. Once you reach the deployment action you might run into an error as the Studio does not reach the server. There are two things to check: * Does your server run? If you haven't started it, it does not.  How to act in the first case is documented  (http://help.sap.com/saphelp_nwce10/helpdata/en/46/9ca4cf4e8b0487e10000000a1553f6/frameset.htm). However, if you miss how to get an instance number (or you're not even aware what this is!) read on.  If the server does not run you can start it since this release from the inside of Developer Studio. For this switch to the SAP Management Console perspective via menu Windows-> Open Perspective-> Other... and choose the perspective from the Window. In case the environment ie new to you: don't worry that your whole work seems to go away! All used perspectivesare listed in the upper right corner behind the ">>. Just clicking there and chosing the Composite Designer will bring you back. In the management console you can see your system in a tree on the left side. If it's not green it is not running. A right click on the system (usually named CE1) opens the context menu and the start option. Unfortunately, if the server does not run, it is also not shown in the tree. You first have to add an instance, regardless whether it is set in Prefrerences already (I'd call this a bug), but you can easyily go around this by right-clicking on SAP System and add the instance (try 0 and localhost). Then it shows the whole system and from there the Start option works. Be aware that for starting you call a Windows system service, which means that user and password are your Windows user and password! And don't forget the domain name...ManageConsoleBe aware that it will take a couple of minutes until the server is running (10 minutes is a good number to wait) | h3. Why is the SAP Java Server so Slow ? This is a dangerous question. Don't dare to ask! Well, if you are a customer, this protects you. And I will answer: because this is not a  plain Java server, not even a Java EE serve. This is a full Java EE 5 server, portal, RAD frontend development, service modeling, security included, backend connection ready, and-a-hundred-other-things. And this will not start in three seconds. Of course, your next question is: but why do I have to load all of this? And the answer to this is: You don't have to!  | Since version 7.1 this is configurable in a minute. I explained this in another blog "The Smallest Possible NetWeaver Java Server"  (The Smallest Possible NetWeaver Java Server). With that you +can+ have a pure Java EE server. And in +this+ configuration it +is+ starting in 3 minutes.  Maybe you guessed it already: No Composite Application Framework then. No fun.  Once the server is running the deployment now should work. It will ask you for the server password/user (you have given that at installation time) and then start to deploy. You can follow the actions on the lower right in the Deploy View Console tab. h3. Declare Destinations This seemed a little bit odd for me at first, until I got the explanation from my colleague Volker Stiehl (who wrote a book about all of this too). But lets first see what we have to do. Once the server runs we can call it's main page with "http://localhost:50000" in our development environment. From there you can click the NetWeaver Administrator link or go directly there with "http://localhost:50000/nwa". The NWA appears and you select SOA Management from the menu there. After this select Destination Template Management (You've been here before, configuring the necessary destinations for the service registry of esworkplace). What we now need to do is to define the external services that we want to call as destinations. Click on Create Destination and change Destination Type to WSDL. Then fill in the values for Destination Name and the URL. For WorkAgreementSimpleByElements this is http://erp.esworkplace.sap.com/sap/bc/srt/xip/sap/ecc_workagsimplerelementsqr/version2?sap-client=800&wsdl=1.1&mode=sap_wsdl and for EmployeeBasicDataByEmployee it is http://erp.esworkplace.sap.com/sap/bc/srt/xip/sap/ecc_employeebasicdbyemployeeqr/version2?sap-client=800&wsdl=1.1&mode=sap_wsdl  In the Authentication part use the Basic Http Authentication and the standard user/ password for ES Workplace (sruser/ eswork123).Destination TemplateAnd don't forget the second service. Very nice, but where do you get the WSDL URL's for other services?  Good question. The {code:html}service respository{code} we use, also has an HTML front end. Playing around with it you might have seen it already. Searching services works almost same as from the Developer Studio and clicking on a service shows information about it, including the WSDL URL.I know what you think and you're right! (I +love+ this sentence).   But let's think a little bit further: you surely will have test systems, development systems and productive systems that run services. And you don't want them to interfere. This would mean you have to name your services somehow to distinguish them from the productive ones - and of course  you have to use those names when you call such services and then switch all the names when moving to production. And this with maybe thousands of services. A nightmare.  Instead some clever architects prethought about this and introduced this redirection. This way, service names don't have to be changed and just need to be redeployed to a productive system (in fact, more comfortable with even a transport system). h4. Yes, but... ... talking about several thousands of services, won't it become a nightmare to do the Destination Templates for such a number of services? Yes.  Mass configuration for services is already under development. I'm not sure when this will arrive but it is important to us.    h3. Test The Service For testing I recommend to use the Web Services Navigator, as the internal testing facility of the Developer Studio is less good than this one. For this you point your browser to http://localhost:50000  and choose the link there to Web Services Navigator. From here you search through to the service you just wrote and configured and then start it. What is so good about the Navigator is the fact that you get the real XML that is send backwards and forwards. In our case the servers answer is too big to show it on screen, therefore   adownload of the answer is offered.  Testing Overview But you also can go through the structure of the answer and find out if any useful data came back. Obviously this was the case.  TestingDetail   Great! We have made a service and it delivers useful data. Now we have to back to Visual Composer to give that thing a fancy front end (Yes, it could also be done with Web Dynpro, but you will see that way we are much faster - and use Web Dynpro framework anyways...) h3. Back to Visual Composer Now we can go back to Visual Composer and make a new Model. Once this appears you just go to search and check Search In. If GetEmployeeData does not appear there, remember that it had to be declared in Destination Templates and it appears under the name you entered there. Once you select that service the only method we exposed will appear and you can drag and drop it on to the project pane. Two more drags from Input and EmpList signs let you choose the input and output forms (a form and a list) and here we are.   It is a good idea to uncheck most of the values when the EmpList Define Data window appears and then check only a few useful values. As you might have seen before, this structure is +huge+.   final Model You can either check the design or immediately run the Deploy command. After that  is through you can call the application and get th result.    Service Result

  Real World Composites I - Visual Composer of this Series.

 

Prerequisites

This blog is made in a tutorial style, so you should be able to follow all actions and do this on your own computer. What you need for this is:

  • NetWeaver CE Developer Workplace
    That is a complete NetWeaver AS Java and NetWeaver Developer Studio
    (The download trial available from SDN does it)
  • Configuration for services
  • An ES workplace account
    It's free and can be ordered by Tips, Tricks & Must Knows about ES Workplace

What We Want to do 

The application in the end should do the following: show a single page that lists employees of a company by name. An entry field allows to enter a search phrase.

Actually this was the first thing I wanted to do for this series of articles. As usual I stepped into the complicated thing first. Well, just listing employees of a company, what should be that complicated about it, correct? And I did find the right service for this.

It's called EmployeeBasicDataByEmployeeQueryResponse_In. The challenge here was that it only accepts an id as input to search for an employee. Did I say already that I hate demos where you have to know an id out of the dark? I sat around too often typing in stupid combinations to even guess the pattern that was expected by the system.

Fortunately there is another service that accepts search terms with an asterisk. So you can easily find somebody using the search string "A*" (If there is any employee whose  name starts with A). The service is called WorkagreementSimpleByElementsQueryResponse_In.

Easy to bring them together and then....

EmployeeServices

 As you might see from the picture above, WorkAgreementSimpleblabla delivers a list in the end, while EmployeeBasicdada expects single record inputs. It does work nicely, as long as you like to see only the first line of the list sent to BasicData service and then click blindly through the list to get every time a single call and the value for a specific id that gives you no clue. Not really real world!

Composition with code

In part I we managed to get through without any coding. This stops here. Maybe the next version of Visual Composer will help us here (maybe next year I'll do the same with Galaxy?) but today is today.

Yes, we will see code, but you will be amazed how easy that will be. What we want to do is to:

  1. make a composite service that accepts our search input (e.g. "A*"),
  2. puts it into the first service,
  3. gets the output,
  4. loops through the output to get single id's,
  5. puts id into the second service,
  6. collects the output of the second service, and
  7. drops that collection as a result

Did I say collection? Oh, yes! Java Collections are a big deal in this game. We will go deeper into this later. As this stuff is more complicated than a completely visual environment, I'll use a more step by step approach than I did in part I. Here we go:

Once the NetWeaver Developer Studio has started, you've got to change into the Composite Application Perspective (Window->Open Perspective->Other...->Choose Composite Application from list).

There you initialize a new project (File->New...->Project) 

Even if you do not have a Development Infrastructure in place, you choose Development Infrastructure->Development Component. This will open up a local Development Component, which is necessary for Composites.

Clicking the Next button you see why you did so: There is a tree with a Composite Application Icon to choose. Do so and click Next again.

Now you have to select the software component. If you are not connected to a Development Infrastructure only "Local Development" appears and "My Components", which you should choose. Click Next.

You now have to type in a name for the component. I chose getemployee.data for this.

 

New_dev_Comp


Click Next and Finish.

Now there is happening a lot of generation in the background relax and enjoy your computer working a couple of seconds. 

Service enablement

Before we can import any service, we need  to make sure your Developer Studio is connected to a service repository. For this check Windows->Preferences->Web Services->Services Registry.

If you are using the ESR workplace on SDN, server names for both, UDDI Service and Classification Service  should be set to sr.esworkplace.sap.com. As far as I remember the rest is there already as a default, but please check with the values in the picture:

Service_Reg_Pref

 

Importing Services 

If this is OK, you can go back to the Composition Application Explorer (that should be open in the upper left of the perspective). Open project getemployee.data in the tree and right click on the external icon.

Choose import Webservice. In the opening Window, set the radio button to Services Registry and click Next.

You will be asked for the services registry login. This is the general user/password combination of sruser/eswork123 for all esworkplace users.

In the following screen click on the Show Advanced link  on the upper right side (I experienced a login error after this which could be solved by just clicking Back and from there Next without any further action, maybe some of you will see that too)

In the following tree you have to select BrowseByApplication->ERP Foundation->Business Partner Data Management->Employee and click Next.

 

EmployeeServiceImport

Now click on EmployeeBasicDataByEmployeeQueryResponse_In and Finish.

You are asked about password and user again, but this time you are not connecting to a repository but to the registered server (which could be another system). Therefore this time you need to use the user and password you have been registered in your Enterprise Service account (In case you don't have one, don't worry - Tips, Tricks & Must Knows about ES Workplace, as it's free for testing)

Now you have to do the same again with the second service we want to use searching for BrowseByApplication-> ERP HCM-> Personnel Administration -> Work Agreement. In the Found Service Definitione Window you have to choose WorkAgreementSimpleByElementsQueryResponse_In. Unfortunately you currently cannot do this in a single run through the wizard, as with two services clicked in the list it wont show any services. Whether this is a bug or a feature I also don't know and will put this back to our development.

After this you can see the imported service in the external branch of your project.

 

ImportedServiceInProject

Modelling a Service

Now we want to model another Service that will use the other two. Again this is a piece of cake:

Right click on the "modeled" branch in the project and choose New Application Service.

Lets name this service GetEmployeeData, which is the only thing you will be asked. The service is generated and opened. And how about a "Save all" at this point in time? (File menu, before you ask:)

In the right upper pane of the studios window your new service should now be open. If you cannot see it it should at least be in the tab pane and appear if you click on there. On the low end of the pane there is another tab list with the options General, Dependency, Operations, Datasource, and Implementation.

In the general tab there is a lot of administrative information about the generated service we currently don't care about. 

If you click on the Operations tab, we are where we want to do the next action. Here we define the operations we want to do in our service.

The operations we need in our service are three: one for every service to call and another one that will do the implemented action. Note that the third operation will be the only place where actual coding will happen. Everything else we will do via modeling.

On the Operations tab you see the list of operations on the upper part. This is currently empty, of course. Click the Add button behind it, select  Custom operation and click Next.

Now we can enter some required data about the service. The first service should retrieve a list of IDs, so we want to call it GetIdList. You can also enter a description for documentation purpose. Set the Transaction type field to SUPPORTS, as  this is the option for cases where it does not matter whethere there is transaction support or not.  In our case we don't care.

 

If you want to know more about Transaction properties you can find this in the NetWeaver CE documentation     

 

Very important for us is to uncheck the Implemeted check box. Then click Finish. Why it is so important to uncheck this box we will see in a minute. 

Do exactly the same with an operation called GetEmployee. This will be the operation that is called every time to get the employee data.

And third we need another operation called GetEmployeeListByQueryEmpName. This one will be exposed and actually used from the outside. Therefore it should be more descriptive. And this time we have to keep the Implemented check box checked. Then click Finished.

operations definition

As you can see we now we have three operations where one will be implemented. If you now click on the Datasource tab in the lower section of the pane you'll see that only those operations that are not implemented appear there, which will be important for mapping of our original services.

But before we do that, go back onto the Operations tab, as we have to do some additional work.

Click on the first operation and look at the lower section of the pane named Operation Parameters. Here we will define what the parameters are that go in and out of the operation.

The input parameter for the GetEmployee operation will be the employees ID (remember, that was the reason for the whole service, we have a list of IDs, but the service only accepts a single one).

If you now click through the left tree into [LocalDevelopment]getemployee.data-> external-> sap_xi_ea_hr_se_global-> DataTypes-> Simple Types, there is a type called EmployeeIDContent. Click on it and click on Add to Input (drag and drop would work also).

What Happens Here?

By importing the services we also imported all the data types that are necessary for their use. You can check in the project view where EmployeeBasicData appears. Going down that tree into the Input Parameters you will find the EmployeeID structure with the field simpleContent. This has type EmployeeIDContent and that is the field we need to fill up.

 

 

Open the Input Parameters back in the Operation parameters pane left side tree. You will see that we have a parameter inputParameter1 of type EmployeeIDcontent.

Double click in the parameters name and change it to EmpId. So it will be more descriptive once we have to use it in code.

Now we need to do the same for the Output parameter. This time we will choose from the Complex types the EmployeeBasicDataByEmployeeResponseMessage. Choose it and click Add to Output. This is the complete response as a single structure. We could define a less complex structure, but for the sake of simplicity I will do it this way in this example.

Change the output parameter name to EmployeeData.

Lets continue with operation GetIdList. As input parameter choose type MEDIUM_NameContent from simple types and name it FamilyName (doubleclick on the name, left tree). For output parameters choose complex type WorkAgreementSimpleByElementsResponseMessage and name it IdList. You can check in the project view that the types always correspond with those of the services to call.

And now the last service, where it gets a little bit more complex. GetEmployeeList... has one input parameter of type MEDIUM_NameContent. Lets name it PersonFamilyName. This is only passed through to the original service.

For the output parameter we need something more. Remember, we're getting back the employee data piece by piece and what we actually want is a list of this data. This means we need a type that does not exist yet. Now here comes another cool thing for complex data types: we can actually model that data type.

Modeling a Data Type

Right-Click on the "modeled" branch of the project view and choose New Structure. Name it EmployeeList in the appearing window and click Finish. The newly defined structure opens in the project pane. As you can see there we have a tree of exsiting types and a list of structure fields there.

Open in the left side tree [LocalDevelopment]getemployee.data-> external-> sap_xi_ea_hr_se_global and choose EmployeeBasicDataByEmployeeResponseMessage.

Click on the Move-right button between the two sections. The attribute immediately changes into edit mode and you should rename it to EmployeeDataList. What we have now is nothing more then the output of EmployeeBasicData... But what we actualy wanted was a list of those. If you look at the Structure Fields once more you might recognize the Cardinality column and as smart as you are I'm sure the penny has dropped already. By changing the Cardinality of EmployeeDataList to 0..n this really becomes a list.

Isn't that cool? 

Structure Field Definition

 If I had to do this in Java plain code i'd go mad.

One more word about the data contained in here: As you see the list not only includes the Employee data, but also the Log data, which is Administrative data about the call. It contains for example error messages in case something went wrong. Obviously the call will return such data for every single call of the employee data inside our little service we just built. That is more information then you want. A more sophisticated version should shift that log data to the outside of the list and only transfer once. To make it short: we would have to implement error handling here.

The alternative would be to just drop this part of the structure and delete the log attribute, which I did in the first place. Unfortunately any service without Log info later is not recognized by Visual Composer as a valid structure and will not offer you automatic table handling for your structure.

Going back to the GetEmployeeData view pane, tab Operations you now can use the new data type as output parameter.

Click through the type tree [LocalDevelopment]getemployee.data-> modeled-> Data Types-> Complex Types and drag EmployeeList on the Output Parameters at the right side. Then rename the parameter with a double click on outputParameter1 to EmpList.

 Mapping Services to Operations

Now click into the Datasource tab at the lower end of the pane.

Choose GetEmployee from the Target operations list and click on Create mapping.

Open the tree down to [LocalDevelopment]getemployee.data-> external-> sap_xi_ea_hr_se_global-> EmployeeBasicDataByEmployeeQueryResponse_In->  EmployeeBasicDataByEmployeeQueryResponse_In, choose the last value and click OK. The parameters for the chosen operation now appear in the Source operation pane.

SelectSourceOperation

 Open the tree for the Input Parameters down to simpleContent and drag this value to  the Target operation pane on the left side over EmpId. Drop it there.

Do the same with the Output Parameter EmployeeData. It is unimportant from which direction you draw, just drop on the right data type. After you've done this and opened the trees, you can see where the data is mapping like in the picture.

 Now do this also for the second operation and map GetIdList with WorkAgreementSimpleByElementsQueryResponse_In (Same procedure as before). The Input  Parameter FamilyName needs to be  mapped with Source operation WorkAgreementSimpleByElementsQuery-> WorkagreementSimpleSelectionByElements-> SelectionByEmployee_FamilyName->  LowerBoundaryEmployee_FamilyName-> simpleContent.

And once again you map the Output Parameter IdList with WorkAgreementSimpleByElementsResponse. 

 

An Introduction to Java Collections

Working with CAF Services needs some insight to Java Collections as this is the main data type that is used to map service strutctures. As I did not want to make this blog only for Java programmers, I think this needs a few words.

The definition is that Collections are objects that groups multiple elements into a single unit. For ABAP programmers the most equivalent thing is an internal table (and it's ussed in a simmilar way)

If you want to know more see this tutorial from SUN Microsystems. 

 

Next week we'll continue with coding of the service and some configuration stuff.... 


Starting up on a CE environment

 What I wanted to do was  to find out about the details of the promised world of services and how this new paradigm will feel for those who actually have to live with it. What will it mean to really do a service oriented program?

What the concept says so far, the design should run in general like this:

  1. Design a diagram of actions regardless of available services
  2. Map available services to the desired actions.
  3. Write new services for those actions you could not find a service for.

 This is the most simple explanation I hacked together out of all the material I read about SOA strategies. The full tools from SAP for this approach are not ready yet (like diagram tools, which are scheduled to arrive next year), but we can draw on paper already and assume to go on from there.

By checking for a useful real world problem I browsed through the services available from the ESWorkplace on SDN. What I found was that those services always need some key to identify orders, customers, or any useful data. As an End User of an SAP application you might even prefer to have a unique key for each customer. But I think even  office clerks have a starting day and doing a demo usually gives me a headache to find out a single key.

So why not starting with an easy app that will provide such key through an easy search automatically. Many of you ABAPers and Consultants might know already that I chose the stony way...

Configuration

First of all there is some configuration to do (after installation, which I'll skip). As others have described this already, I will not go through this again in detail. The article Browsing an Enterprise Services Registry in Visual Composer  by Rudi Held et al describes this perfectly. Rudi assumes you have an account on the ESWorkplace (which you can get fast and for free also) but it should also be possible with that data to connect to other repositories in your own environment. Of course this is officially documented also in Defining Destinations.

Shortly spoken, what you do there is to configure the services registry on system HU2 of the ESWorkplace and setting values for UDDI_DESTINATION and CLASSIFICATION_DESTINATION.

Using Visual Composer with ES Workplace

Once this configuration work is done we now can activate the Visual Composer (and just in case you miss any link to VC, its http://localhost:50000/VC/freestyle.jsp on a standard install). To see services in there and it is currently only working with Internet Explorer. Opening a new model with the title "DemoService" opens a pane that has the Search-Button on the right side. As it's already described in Rudi's article, you have to select "Service Registry" in "Search in" and then click "Advanced Search" to open the Classification menu.

Classification List

Click through the tree in Group classifications->BrowseByApplication->ERP Foundation->Business Partner Data Management and click the check box of "Customer". After an OK and clicking the Search-Button again you'll get back two services. Drag and drop "CustomerSimpleByNameAndAdressQuery" on the design pane. The typical service picture appears.

Click on the diamond shape, drag away and drop right beneath the service. On the drop a menu appears that lets me choose a form view as input form.

Choosing such the form view appears, together with a link to the services input and a data mapping menu. I deselect all options and chose the field "First Name Line" 

Define Data

Same happens to the right side, where I choose a table form. And before frustrating you, I'll uncover the fields I activated for the output table. Its the Id, FirstlineName, SecondLineName, and Formofadresscode (the latter is not useful for this, but I wanted to see some data at least...)

Now I click the Deploy Button on the far right and hit Deploy once more in the appearing menu. Once this is done a couple of links appear where you either may check this application in Web Dynpro or Flash Technology. With those links we can already test the application (I don't care for the Layout at the moment, as it's good enough for testing).

Tip:  Handle Service Structure with Two Forms

I'm sure many of you ABAP handlers are familiar with SAP response structures so it's no wonder for you that they are *huge*.  However, some people may wonder about this so I spend a few words to explain this. The structure you have already seen is hierarchical and has a complete table in it's output. This is quite common in the SAP world and as you will see there is order behind that. For example there is always a part in the tree called "Log" that includes data about the last call, including useful error messages that are most of the time better than what the development environment tells you.

As this stuff is structured the problem is: how can I show the flat information together with the table in the same form? 

The answer is: wrong thought. What you want to see is all information on the same page and for this you don't need to fiddle around inside a view. Just make two of them, then one is a form view and the other one is a table view. Then flat data goes to the form and the table ... guess you got it. This also works in case you got more then one table in one response.


And the whole thing looks like this: 

 Two forms

 Whether with or without this little addition, you now can run application DemoService and see the output. I mentioned already that I hate demos where I have to know IDs out of the dark as this seems not very realistic to me (despite sources say that the average daily user always knows the IDs of his most important business partners by heart). With our small app we can work with wild cards and submit for example a "C*". That gives already back the maximum amount of 100 records and lists them in the table.

Customer List

 

 Next Step, Next Service

As you can see from the line going away from my table in design mode already, I added some more services. Well, we do have Customers, so what can we derive from that? Orders of course. Lets go back to Search, click on "Advanced Search" again and go to Group classifications-> BrowseByApplication-> ERP Applications without HCM-> Sales Order Processing and chose Sales Order.

Then choose the service SalesOrderBasicDataByBuyerAndBasicDataQueryResponse_In. This group has only one service with the same name (phew!!) and can be dragged on the Design pane.

Draw a connection from the out-pin of the "Customer" view and connect it to the input of the server.

Right click on the connection to open the mapping window. You can click on the drop down of the "Assigned Value" field of SalesOrderBuyerPartyIntern and connect it with ID.ID. This way the Customer Id gets connected to the same in the order providing service.

 

At the output we  do the same procedure as before, drag away from the output and choose a table in the upcoming menu. Again this data is more then a standard table can take. I'm choosing only a few interesting values like BuyerId, NetAmount, CurrencyCode, and some of the FormattedName fields (which provide values for Organization names and so on).

Let the fun begin

 From this point I first was puzzled a little bit (don't laugh! I'm not supposed to juggle business details), as  I could not find a service that would now easily provide line items. As usual those services expect the line item ID, that I cannot provide in first place, of course. But then I found this service that provides a complete order - with all the detail order including a list of line items, which is SalesOrderByIDQueryResponse_In - and was on our list from the beginning.

The question to raise here is if it really is a good idea to put all  this info on the same screen, as the user has to read and select certain values anyways. That means that service calls may be split into different pages, but it was not my goal to win a design award. We can get access to all the data about a customer concerning their orders. And that was achieved.

Now we can do something more complicated. 

 Full project

 Conclusion

This was relatively easy. But what if we reach areas where Visual Composer does not allow us to go forward? Then of course we are back in code. This is what happens in Part II. Soon to appear in this theater ;-)

I'm really sorry that I have to write this, because my feeling is that an installation should be able to live without such explanations. But live is as it is and the best and fastest thing I can do about it is to write my knowledge down (and of course this goes into the product too, though the next SR will not see this again).   

 Java Version

Let's start with something that is out of SAP's scope : the Java version used. According to the documentation you should use Java 1.4.2_08 for NetWeaver 2004s. Usually this means that you should be able to also use follow up versions, as those are usually compatible with the elder ones.

Usually.

In this case it is a good idea to keep exactly with the recommended version as there is unfortunately a bug in Java 1.4.2_10, that doesn't prevent you from installing, but it slows down the process. Sources say it takes about 20 hours to finish the install this way....

Swap Space 

As you surely know, Windows uses a system file for swapping processes, that means the use of virtual memory. An installation is a primary user of such memory and therefore there is a formula that calculates the need of swap space on your computer. Unfortunatley in Developer Workplace 04s the outcome of this formula is outrageous. On my 2GB RAM laptop the message was to please provide  more then 7GB of swap space. Colleagues reported the need of 10GB on larger servers.

 

   

The trick is to just ignore this message. Unfortunately the concept of sapinst is to let you change things in the system and then repeat the last step by clicking "OK". That means if you just click OK, the same message appears again after some seconds. Logically correct, but intuitively you may feel different (like me). The alternative is the "Cancel" button, but depending on your personal feelings, you might expect this button to end the whole installation. Fortunately it doesn't. Just dauntlessly click on "Cancel" and there you go. And reading the text in the small box will tell you that the text completely describes what you just did.

Deinstallation troubles

Do you sometimes have the feeling that the world turns against you because you get all the odds? That is what happens to me when installing software: when I go through it, I go through it all. If at home or in the job, if there is a flaw in an installation, I seem to be the one who gets it. Which makes me the perfect installation tester...

Good for you, as I can use this for my job and protect at least some of you from this trouble. After I turned down my installation because of the Java troubles I just described, I tried to stop the program and did this in a quite rude manner by breaking the process. Usually this is ok, as Java programms live relatively isolated - If there are only Java programms. At the end there was no way to move either forth or back.

What I found was that there was a service still running in the background. To kill such services is not an easy task and I would be completely stuck, if there hadn't been a colleague giving me this tip:  There is a program in the installation that is able to deinstall such services. You can call it from a windows command line with:

sapstartsrv

This starts a small window to enter the needed parameters like SID, instance number, and profile.

    Screen Shot missing

    With that program it is easy to uninstall the services that are installed by the NetWeaver  AS Java. All you have to do is to enter the SID and the instance number. But be careful by trying out! Without tzhose services the server will not start again.

The Java for the next generation of SAP NetWeaver is based on new technology built directly into the virtual machine. The improved robustness of Java you gain in SAP NetWeaver and how Java standards are kept is demonstrated in this session.  Feel free to comment or ask for directioons you would like to see covered. The session is prepared already, but I can still check for special issues.

Porting J2EE applications from other platforms onto SAP NetWeaver has become a frequent task. SAP customers are interested in running ABAP and Java applications on a single platform to cut down infrastructure costs and simplify the IT landscape.
This session shows how to port a full-blown J2EE application, developed on another server, to SAP NetWeaver using the J2EE migration kit. Also, the source code to the SAP NetWeaver Developer Studio is import and adapted. J2EE is a widely adopted specification, yet still leaves a lot of room for vendor-specific characteristics. These differences are examined in detail.  Feel free to comment or ask for directions you would like to see covered. The session is prepared already, but I can still check for special issues.   One question that hit me right on the mark in Las Vegas was, how to migrate from our own product, aka version 6.20 to the latest NetWeaver. While I was not prepared for this, there is a solution (of course). Please read the  Migration Manual for this purpose.

In part I of this series I was talking about an alternative architecture for the setup of the Developer Workplace to handle it in a smaller environment. Now we want to look into what you can improve to run the environment in the standard single machine mode.



Most of the changes I mention here will be part of Service Release 2 (SR2) which is planned for later this year. Service Release means there will be a complete new installation set that includes all SPs up to that time. Once you have this version and install it, no updating of former SP's is needed (Yes, there are people who might not know this). This means also that once you got this SR2, this article becomes irrelevant! 

Installation Issues

 

There are a couple of minor issues that cannot really stop you if you're tough enough, but my understanding of simplicity (one of our core values) is that these should not appear during the installation of a product.


  • There is a small bug in the JDK of Java 1.4.2_10 that unfortunately hits

  • The installation usually stops and tells you that your system does not meet recommended system values a.k.a. swap space. The value that the installation program expects is based on an erroneous calculation that asks for more then 7 GB of swap space. As you can imagine, this is impractical and can be ignored. Unfortunately the option to ignore this message is named "Cancel". If you really read the message in the window (who does ever?), you will find out that pressing "Cancel" does continue the installation.

        (To the new users: J70 is the three letter system name that SAP uses everywhere for a reason that nobody remembers any longer and JC03 is a instance name, that may vary in your system). We will change a couple of values that are related with the Java Virtual Machine. I don't want to go into the details what they do, but I wrote about this last year in my blog The -X Options: Secrets of Web AS Java


Once you have started the config tool, you have to connect to the database (if you haven't answered the questions at startup to do so) by pressing the icon on the very left of the command menu. After the connection is established you will see the system tree in the navigation path and should go down to the instance level of your system. Here you could write down general values for all processes, but as we usually work with a single server we can be more specific. There are two leaves beyond this and this is your dispatcher and the actual server. Both have the tab "General", which includes the Java parameters.



 

   


Here you can set your parameters to the values according to this table:













 Memory settings for dispatcher
 Memory settings for server

MaxHeap: 32


Xms 15M


NewSize 5M


MaxNewSize 5M



MaxHeap 512


PermSize 64M


MaxPermSize 128M


Xms 50M


NewSize 15M


MaxNewSize 15M




 





As you are already there it is good advice to set your debug default mode ON. This can be done on the last tab of the server configuration called "Debug". Click there on the "Enable Debug Mode" checkbox.


This way you save the turnaround for a debugging reboot of your local server.


Don't forget to push the save button. To make your changes run, your server has to be restarted.




Some Profiling 

 

#----
 
# Start internet graphics server

#----
 
_IG = $(DIR_EXECUTABLE)igswd$(FT_EXE)

Start_Program_05 = local $(_IG) -mode=profile pf=$(_PF)



If you just place a #-sign into the last two lines, you have switched off the internet graphic server that builds graphics for browsers, based on data it gets from the server. Be aware that this means you won't see nifty graphics in the NetWeaver Administrator nor in the graphics you build into your Web Dynpro applications. They will appear as empty space.

Some Servicing

 

At least one system service that is installed with the system is not needed at all in a development system. That is a service called "saposcol". Usually it is collecting system data of a server to forward it to a central system for monitoring in CCMS. As we are not connecting a development system  to such monitoring it does not make sense that it runs. It can be easily deactivated in the  Windows system. To your convenience a short description:



    1. In the Start menu go to the icon of your system and right-click it

    2. chose "Manage"

    3. In the management tree go down to "Services and Applications" and Services



    4. Go down the list to the Service called "SAPoscol"

    5. Right-click the service and chose "Properties"

    6. Change the startup option there to "Manual"

You're done.

Bare Necessities 

 



 

In addition there are a lot of services in your Java server that you do not need. Unfortunately services you switch off depend a lot on what you are doing. Detailed information on this can be found in note   871394 (link only works on access to service marketplace). The note has an attached Excel file that includes a link of all services with notes on importance of a service and effects in case of its switch off, along with other useful information.


The services can be switched off from Visual Administrator as this can be done with NetWeaver Administrator. As the latter is browser based I'll describe this more convenient way.





    1. Start your browser.

    2. Type in the url for a local server. For a first installation this should be localhost:50000 (digit 2 and 3 are the instance number).

    3. Login as the Administrator (with the general password you have assigned during installation).

    4. The browser shows the Engine start page. Choose the link to the NetWeaver Administrator.

    5. From here you navigate through "System Management"-> "Administration"->"Systems"

    6. In the SAP Systems page choose your instance

    7. In the details list choose tab "Services"

    8. Here you can select services and stop them



 A Word On NetWeaver Developer Studio

 

 One small action on the NetWeaver Developer Studio can save you a lot of time. For some reason it seems that the installation misses a small file from eclipse that contains the build number. Without this file the Studio needs more then 5 minutes to start up. With it, this task is done in less then 30 seconds. The file should work, if you open Textpad write to the first line: "Build: 200511250257" and save the file with name "buildnum.txt" to the directory C:Program FilesSAPIDEIDE70eclipse.



 


This is it. If you have more suggestions, you're welcome to post them or email to me. Meanwhile I will check to put all those goodies directly into the product.



 

Post Release Additions

 

A colleague added the following useful hint. There are two things to switch off on a local server because they make no sense there. That is compression and local caching of http output. As your communication is local, it should be obvious that this can be switched off.


To switch of the cache can be already done with the new NetWeaver Administrator. You can call it with your browser pointing to http://localhost:50000/nwa usually (digit 2 and 3 have to show the instance number of your dispatcher, which is the case if it is your only installation).   


Once the Administrator appears you click through to System Management->Configuration-> Virtual Hosts->default->Details. There, in the General tab you can deactivate the "Use Cache"-box.


More has to be done for the deactivation of compression. For this you need to start the Config-Tool, connect it to the database (it will ask to dothis for you when starting) and go in the tree there to the global server configuration->services->http. In the value list you can change the value for AlwaysCompressed to a blank and CacheSize to 0.  



In theses days NetWeaver 2004s goes to final stage, so I thought this is a good time to give you some enhancements that did not make it into the product. This stuff will be documented, but currently isn't and blogging was the fastest way for me to inform you.

 

Big companies release big things. That's the way SAP does too.  Unfortunately those "big Things" are not welcome everywhere and such a case became the Developer Workplace, SAP's Java Development environment. Let me explain what we have here. As usual the Developer Workplace comes with an IDE, the SAP Developer Studio (Eclipse based for those new to the environment) and a local server.

As the latest generation of the NetWeaver Java Server includes design tools that run in a portal, the server logically comes with that. The whole environment runs nicely on 2GB of RAM, but if you add a Developer Studio to that, the going gets tough.

And here the tough get going: manipulating the configuration is the way to go. Additionally it is possible to install your system in an alternative architecture, that was not documented that well. Let's start with that one.

Alternative Architecture

As I said before, Developer Workplace comes with a studio and a local server, as usual for java development environments. As an alternative the Master guide is talking about the installation of the SAP Developer Studio only (in a single part sentence only, I admit). Unfortunately it does not discuss in detail what this means for the server side. "Great!" you might think, "now all of my developers have to work with two computers".

   

Well, that's not quite right. Of course, if you develop with a distributed system, you need a machine to host the application server. Not very helpful for a single developer (except that you can extend your MS Windows capabilities to usually work with a max of 2GB RAM to two computers). But for a group this looks different. If you have several developers work against one server this becomes more useful.  
Yes, I know what you're thinking.  
Yes, I know that debugging of a Java Virtual Machine stops all threads on that VM.  
Yes, I know that deploying your project overwrites the existing version regardless whether it's in use or not.  
But read on.

First of all, we'll talk about debugging. Skip this subchapter if you already know the trick.

Debugging

If you have ever debugged a NetWeaver Java Server with Developer Workplace, you might remember that you have to switch the debug mode on and then have to restart the server. Approaching breakpoints stops the complete process and that means the whole server. The consequences for a single process server are clear: no debugging in a productive server, as this will stop execution on all running sessions.  And of course it is impossible to work with a group of developers against such a server (as long as they ever need to debug their code...)  

If you ever have tried this on a standalone server, you might have found out something interesting. A standalone server can have more then one server process. The debugging mode can be set for those processes each individually.

On top of that, server processes in debug mode are taken out of the dispatching of requests. That means such a process will not accept any standard user request sent to this server environment. The request only is accepted if marked with a specific sign, that is known by your SAP Developer Studio.

This means, if there are as many server processes as developers in the group, there is always a debug session available for everybody. As debug sessions are none responsive to browser calls I'd suggest always having another non debugging process. This means ideally n+1 processes if n equals the number of developers. Of course this again is a matter of memory and you might reduce the number to anything that fits your needs.

By the way: in this environment you even can run heterogeneous, thus run your server in a UNIX environment, which nowadays opens the door in any case to 64 bit memory space.

 The Drawbacks

There is a reason why people started to do development with a local server. Two of them you have to handle in one or the other way to run in a distributed development environment.

The Software Deployment Manager (SDM) is single threaded (there was a reason for that, but I forgot). Because of that only one developer can deploy at a given time. This means if you try to deploy during another session is running you get a nice error message that looks like this:

   

 As you can see there is a correct message appearing. Of course this will happen the more often, the more developers do work against this server. If it happens too often, you can also avoid this by using the NetWeaver Development Infrastructure. If you never heard this term before, then please learn more about it at NetWeaver Development Infrastructure  

Second, this environment introduces the risk of overwriting each other. This means, if I deploy a project that is used by another developer and change anything of his or her preconditions this may have fatal consequences for this developer. On the other hand, these consequences reach us sooner or later, though it might be a philosophical question when this is best (and isn't it better soon anyways?).

Yes, there are other thinkable situations where this effect is more crucial. But there are two facts that convince me: it somewhat forces developers to think more about the consequences of their work (and who would deny that *some* discipline is useful) and we got a large community next door who is living with such effects for over twenty years now and still going strong: our ABAP colleagues.

Again, the effect of overwriting is reduced by using the NetWeaver Development Infrastructure, which I can't stop praising and really would like you to learn more about as it opens new perspectives to Java developers you never even though about ;-)

 Install the Studio Only  

 To do this there is a little trick you have to know. Usually you have to start the installation from the Developer Workplace DVD as sapinst installation. Once in that the sapinst program will start the appropriate installation program for you. To directly install the Developer Studio you just go to the /IDE directory and start the program IDE70setup.exe. Oh, and the DVD is named "SAP NetWeaver 2004s, Developer Workplace" to be precise. I checked with my package I ordered for my desk - something pretty unusual these days.

 

In the next blog I'll talk about setting profiles to more usfull  values.

 

 

 

 

 

Filter Blog

By date: