Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.
Panel
titleOn This Page
Table of Contents
indent2em
stylenone
typelist
separatorpipe

Overview

Projects are "dynamic web app" eclipse projects.

In SAP based apps, the service does most of the conversion between SAP objects (proxy) and biz objects, as opposed to Hibernate based apps where the conversion is done by Hibernate in the dao classes.

App specific css and js go in

...

css/app_layout.css

...

and

...

js/app_specific.js.

...

ApplicationResources.properties

...

contains

...

all

...

the

...

props

...

specific

...

to

...

the

...

app

...

itself

...

no

...

matter

...

what

...

machine

...

it

...

runs

...

on.

...

Usually,

...

all

...

messages

...

and

...

displayable

...

strings

...

go

...

here.

...

Apps

...

are

...

normally

...

setup

...

so

...

that

...

eclipse

...

will

...

be

...

able

...

to

...

build

...

the

...

app

...

(with

...

your

...

local

...

machine

...

specific

...

props)

...

and

...

deploy

...

it

...

to

...

your

...

local

...

server.

...

Checking

...

out

...

a

...

project

...

See

...

the

...

iJAG

...

FAQ

...

for

...

instructions

...

on

...

checking

...

out

...

a

...

project.

...

Project

...

structure

...

Projects

...

are

...

"dynamic

...

web

...

app"

...

eclipse

...

projects.

...

They

...

contain

...

this

...

structure:

...

src/

...

 

source

 

edu.mit.appname.controller.action

...

where

...

struts

...

actions

...

go

 

edu.mit.appname.controller.data

...

where

...

struts

...

forms

...

go

 

edu.mit.appname.dao

...

where

...

database

...

methods

...

go

...

(for

...

projects

...

that

...

use

...

hibernate)

...

 

edu.mit.appname.model

...

where

...

biz

...

objects

...

go

...

that

...

are

...

passed

...

to

...

the

...

front

...

end

 

edu.mit.appname.proxy

...

where

...

generated

...

rfc

...

call

...

and

...

data

...

objects

...

go

...

(for

...

sap

...

projects)

...

 

edu.mit.appname.service

...

where

...

the

...

methods

...

the

...

actions

...

call

...

to

...

get

...

backend

...

data

...

converted

...

to

...

the

...

model

...

go

 

conf

used on the server for deploying the app to OAS (ignore this directory)

WebContent/

 

front end

 

css

contains app_layout.css,

...

etc

 

js

contains app_specific.js,

...

etc

 

WEB-INF/classes

...

where

...

ApplicationResources.properties

...

goes,

...

etc

...

site-template

...

 

a set of template files for your site dir

site

 

where your local machine specific properties files go, initially copied from site-template

 

ApplicationLocal.properties

where you place props local to your machine, see below

 

build.properties

where you put build info local to your machine

 

log4j.properties

where you configure logging local to your machine

build.xml

 

used only on the server to build and deploy the app

In sap based apps, the service does most of the conversion between sap objects (proxy) and biz objects, as opposed to hibernate based apps where the conversion is done by hibernate in the dao classes.

App specific css and js go in css/app_layout.css

...

and

...

js/app_specific.js.

...

ApplicationResources.properties

...

contains

...

all

...

the

...

props

...

specific

...

to

...

the

...

app

...

itself

...

no

...

matter

...

what

...

machine

...

it

...

runs

...

on.

...

Usually,

...

all

...

messages

...

and

...

displayable

...

strings

...

go

...

here.

...

Apps

...

are

...

normally

...

setup

...

so

...

that

...

eclipse

...

will

...

be

...

able

...

to

...

build

...

the

...

app

...

(with

...

your

...

local

...

machine

...

specific

...

props)

...

and

...

deploy

...

it

...

to

...

your

...

local

...

server.

...

The

...

proxy

...

classes

...

The

...

proxy

...

classes

...

only

...

exist

...

for

...

apps

...

that

...

talk

...

to

...

SAP.

...

They

...

are

...

generated

...

by

...

sap2java

...

from

...

the

...

RFCs

...

you

...

want

...

to

...

call

...

in

...

the

...

app.

...

See

...

sap2java

...

for

...

how

...

to

...

generate

...

proxies.

...

Proxy

...

classes

...

are

...

sap

...

data

...

types

...

and

...

must

...

be

...

converted

...

by

...

the

...

service

...

class

...

to

...

real

...

biz

...

model

...

classes.

...

The

...

dao

...

classes

...

The

...

dao

...

classes

...

only

...

exist

...

for

...

apps

...

that

...

talk

...

to

...

oracle

...

thru

...

hibernate.

...

They

...

are

...

usually

...

generated

...

by

...

hibernate.

...

Dao

...

classes

...

retrieve

...

data

...

from

...

the

...

database

...

and

...

convert

...

it

...

directly

...

into

...

biz

...

model

...

classes.

...

The

...

service

...

classes

...

There

...

is

...

normally

...

only

...

one

...

service

...

class

...

per

...

app.

...

The

...

service

...

class'

...

job

...

is

...

to

...

get

...

data

...

from

...

the

...

back

...

end

...

and

...

perform

...

some

...

biz

...

logic

...

on

...

it

...

and

...

return

...

it

...

to

...

the

...

front

...

end

...

(actions).

...

There

...

should

...

be

...

one

...

service

...

interface

...

and

...

one

...

class

...

that

...

implements

...

it,

...

e.g.

...

OasSkeletonService,

...

and

...

OasSkeletonServiceImpl.

...

For

...

SAP

...

apps,

...

the

...

service

...

calls

...

RFCs

...

and

...

converts

...

their

...

proxy

...

data

...

into

...

biz

...

model

...

objects.

...

The

...

service

...

class

...

should

...

be

...

a

...

subclass

...

of

...

SAPServiceSupport

...

which

...

provides

...

methods

...

to

...

call

...

the

...

back

...

end

...

and

...

process

...

errors.

...

For

...

hibernate

...

apps,

...

the

...

service

...

calls

...

the

...

daos

...

to

...

get

...

biz

...

objects

...

and

...

performs

...

whatever

...

biz

...

logic

...

is

...

necessary

...

on

...

them.

...

Spring

...

config

...

for

...

Service

...

The

...

service

...

spring

...

beans

...

are

...

configured

...

in

...

applicationContext.xml

...

(not

...

in

...

action-servlet.xml).

...

For

...

SAP

...

apps,

...

there

...

is

...

a

...

default

...

applicationContext

...

that

...

sets

...

up

...

the

...

proper

...

service

...

properties

...

needed

...

to

...

connect

...

to

...

SAP.

...

(There

...

are

...

also

...

some

...

extra

...

property

...

settings

...

for

...

doing

...

mock

...

services;

...

see

...

the

...

file).

...

The

...

service

...

interface

...

allows

...

you

...

to

...

swap

...

out

...

implementations

...

in

...

the

...

spring

...

config

...

so

...

you

...

can

...

use

...

a

...

mock

...

service

...

instead

...

for

...

testing,

...

etc.

...

The

...

spring

...

config

...

for

...

services

...

also

...

specifies

...

where

...

to

...

get

...

RFC

...

messages

...

from.

...

Messages

...

from

...

the

...

back

...

end

...

usually

...

either

...

come

...

as

...

a

...

collection

...

of

...

messages

...

from

...

a

...

table

...

(e.g.

...

ET_RETURN

...

or

...

ET_MESSAGES),

...

or

...

a

...

single

...

message

...

stuffed

...

into

...

a

...

field

...

in

...

the

...

return

...

output

...

object.

...

The

...

SAPBaseAction

...

and

...

SAPServiceSupport

...

classes

...

automatically

...

handle

...

message

...

processing

...

so

...

you

...

don't

...

have

...

to.

...

The

...

only

...

thing

...

you

...

need

...

to

...

do

...

is

...

configure

...

what

...

tables

...

and/or

...

properties

...

the

...

message/messages

...

can

...

be

...

in

...

based

...

on

...

what

...

all

...

its

...

RFCs

...

return.

...

E.g.:

...

  • If

...

  • some

...

  • of

...

  • your

...

  • RFCs

...

  • return

...

  • messages

...

  • in

...

  • the

...

  • ET_MESSAGES

...

  • table

...

  • and

...

  • some

...

  • return

...

  • them

...

  • in

...

  • ET_RETURN,

...

  • you

...

  • would

...

  • add

...

  • both

...

  • of

...

  • these

...

  • to

...

  • the

...

  • spring

...

  • config

...

  • for

...

  • the

...

  • messageKeys

...

  • property.

...

  • If

...

  • some

...

  • of

...

  • your

...

  • RFCs

...

  • return

...

  • a

...

  • single

...

  • message

...

  • in

...

  • the

...

  • output

...

  • object,

...

  • say

...

  • in

...

  • the

...

  • field

...

  • E_RETURN,

...

  • then

...

  • you

...

  • would

...

  • specify

...

  • e_RETURN

...

  • in

...

  • the

...

  • messageKeys.

...


  • You

...

  • should

...

  • specify

...

  • all

...

  • the

...

  • possible

...

  • names

...

  • that

...

  • your

...

  • RFCs

...

  • return

...

  • in

...

  • the

...

  • messageKeys

...

  • property.

...

  • Table

...

  • names

...

  • are

...

  • usually

...

  • all

...

  • uppercase

...

  • (these

...

  • are

...

  • just

...

  • keys

...

  • in

...

  • a

...

  • hash);

...

  • however,

...

  • output

...

  • object

...

  • field

...

  • names

...

  • must

...

  • start

...

  • with

...

  • a

...

  • lowercase

...

  • letter

...

  • (this

...

  • is

...

  • because

...

  • the

...

  • code

...

  • calls

...

  • the

...

  • getter).

...

If

...

the

...

message

...

objects

...

returned

...

from

...

the

...

back

...

end

...

have

...

the

...

following

...

TYPE,

...

MESSAGE,

...

ID,

...

NUMBER,

...

MESSAGE_V1,

...

MESSAGE_V2,

...

MESSAGE_V3

...

and

...

MESSAGE_V4

...

fields,

...

then

...

setting

...

messageKeys

...

is

...

all

...

the

...

configuration

...

you

...

need

...

to

...

do

...

(these

...

are

...

automatically

...

dealt

...

with).

...

However,

...

if

...

some

...

other

...

type

...

of

...

object

...

is

...

returned

...

instead

...

that

...

doesn't

...

have

...

these

...

fields,

...

you

...

will

...

need

...

to

...

add

...

code

...

in

...

the

...

convertRFCMessage

...

method

...

in

...

your

...

service

...

implementation

...

to

...

convert

...

these

...

message

...

objects

...

to

...

the

...

RFCMessage

...

type.

...

See

...

section

...

Spring

...

config

...

for

...

Actions

...

for

...

information

...

on

...

how

...

to

...

override

...

messages

...

returned

...

from

...

RFC.

...

 

The model classes

The model classes are business classes. These classes are not specific to any front end or back end, but model the business itself. So when you design them, they should not be designed around what a page requires (e.g.

...

one

...

object

...

that

...

contains

...

a

...

bunch

...

of

...

stuff

...

for

...

the

...

whole

...

page)

...

or

...

what

...

the

...

back

...

end

...

returns

...

(e.g.

...

direct

...

map

...

to

...

proxies).

...

They

...

should

...

be

...

designed

...

around

...

the

...

business

...

model

...

itself.

...

The

...

controller

...

classes

...

The

...

controller

...

classes

...

are

...

actions

...

and

...

forms.

...

It's

...

the

...

action's

...

job

...

to

...

take

...

biz

...

objects

...

from

...

the

...

service

...

and

...

convert

...

them

...

(if

...

necessary)

...

for

...

display

...

on

...

the

...

screen,

...

and

...

take

...

data

...

from

...

the

...

jsp

...

and

...

convert

...

it

...

to

...

biz

...

objects

...

to

...

send

...

to

...

the

...

service.

...

An

...

action

...

should

...

do

...

only

...

one

...

thing,

...

i.e.

...

we

...

aren't

...

doing

...

actions

...

the

...

"multiple

...

method"

...

way.

...

Forms

...

should

...

be

...

request

...

based

...

unless

...

they

...

are

...

carried

...

across

...

more

...

than

...

one

...

page,

...

e.g.

...

as

...

in

...

a

...

wizard.

...

Most

...

of

...

the

...

time,

...

you

...

should

...

be

...

able

...

to

...

stuff

...

biz

...

objects

...

directly

...

into

...

a

...

form

...

(and

...

not

...

flatten

...

them

...

out;

...

i.e.

...

create

...

fields

...

in

...

the

...

form

...

for

...

each

...

field

...

in

...

the

...

biz

...

object).

...

Struts

...

should

...

be

...

able

...

to

...

deal

...

with

...

populating

...

and

...

returning

...

nested

...

objects.

...

A

...

form's

...

job

...

is

...

data

...

input.

...

It

...

should

...

not

...

be

...

used

...

for

...

data

...

output

...

unless

...

some

...

of

...

that

...

data

...

is

...

used

...

as

...

input

...

too

...

(this

...

does

...

not

...

mean

...

dropdowns,

...

etc).

...

Output

...

data

...

should

...

be

...

stuffed

...

into

...

the

...

request

...

by

...

using

...

request.setAttribute.

...

You

...

can

...

then

...

access

...

the

...

data

...

in

...

the

...

jsp

...

using

...

the

...

c

...

taglib.

...

Any

...

data

...

that

...

is

...

required

...

for

...

more

...

than

...

one

...

screen,

...

e.g.

...

dropdown

...

data

...

that

...

doesn't

...

change,

...

etc,

...

can

...

be

...

stored

...

in

...

the

...

session.

...

For

...

apps

...

that

...

use

...

SAP,

...

all

...

your

...

actions

...

should

...

be

...

subclasses

...

of

...

SAPBaseAction.

...

This

...

provides

...

automatic

...

RFC

...

error

...

message

...

handling

...

(i.e.

...

it

...

takes

...

all

...

rfc

...

messages

...

and

...

stores

...

them

...

into

...

the

...

struts

...

actionmessages

...

automatically).

...

It

...

will

...

stop

...

any

...

time

...

an

...

rfc

...

returns

...

an

...

error

...

message.

...

In

...

the

...

rare

...

case

...

you

...

need

...

to

...

do

...

something

...

else

...

(like

...

continue

...

other

...

processing)

...

when

...

an

...

rfc

...

error

...

message

...

occurs,

...

you

...

can

...

wrap

...

a

...

try

...

catch

...

on

...

MessageRuntimeException

...

around

...

your

...

service

...

execute

...

calls.

...

TBD

...

-

...

talk

...

about

...

how

...

to

...

go

...

to

...

different

...

actions

...

from

...

the

...

jsp

...

using

...

the

...

hidden

...

thingy

...

Spring

...

config

...

for

...

Actions

...

The

...

spring

...

config

...

for

...

actions

...

should

...

be

...

done

...

in

...

action-servlet.xml.

...

This

...

file

...

should

...

contain

...

a

...

bean

...

entry

...

for

...

every

...

action

...

in

...

your

...

app

...

and

...

they

...

should

...

be

...

singletons.

...

There

...

is

...

normally

...

a

...

base

...

action

...

class

...

that

...

is

...

injected

...

with

...

the

...

service

...

all

...

your

...

actions

...

will

...

call.

...

You

...

can

...

use

...

mock

...

services

...

by

...

overriding

...

this.

...

Your

...

app

...

can

...

have

...

any

...

number

...

of

...

entry

...

points.

...

Each

...

of

...

the

...

entry

...

points

...

would

...

have

...

an

...

action

...

that

...

can

...

just

...

be

...

configured

...

in

...

spring

...

to

...

use

...

the

...

class

...

edu.mit.mortar.controller.action.GlobalEntryAction.

...

However,

...

they

...

must

...

be

...

named

...

XXXEntryAction

...

(where

...

XXX

...

is

...

some

...

name

...

you

...

choose),

...

otherwise

...

the

...

session

...

restart

...

mechanism

...

will

...

cause

...

your

...

app

...

to

...

loop

...

infinitely.

...

For

...

SAP

...

apps,

...

your

...

base

...

action

...

should

...

be

...

the

...

class

...

edu.mit.mortar.controller.action.SAPBaseAction

...

(which

...

is

...

usually

...

the

...

default

...

in

...

the

...

skeleton).

...

SAPBaseAction

...

attempts

...

first

...

to

...

find

...

&

...

display

...

messages

...

configured

...

in

...

ApplicationResources.properties

...

based

...

on

...

ID,

...

NUMBER,

...

MESSAGE_V1,

...

MESSAGE_V2,

...

MESSAGE_V3

...

and

...

MESSAGE_V4.

...

If

...

none

...

are

...

found

...

then

...

MESSAGE

...

is

...

used

...

for

...

display.

...

An

...

example

...

of

...

message

...

overrides

...

in

...

ApplicationResources.properties:

...


Struts config

The struts config should have some defaults setup for your app.

Your app can have multple entry points. Each of these should be like the EntryAction example provided.

For each action that accepts input from the user there should be a form attached to it, and a jsp/tile to go back to in case of errors should be specified as the input attribute (see SearchPeople for an example).

For actions that don't need input, they should not have a form.

Tiles config

Tiles config comes preconfigured with some building blocks for your pages.

Pages you create should extend sapweb.standard; see oasskeleton.enter_search_criteria

...

for

...

an

...

example.

...

You

...

must

...

specify

...

a

...

default

...

pageAction

...

that

...

the

...

page

...

will

...

go to.

JSPs (the

...

front

...

end)

...

You

...

can

...

usually

...

base

...

your

...

jsps

...

off

...

one

...

of

...

the

...

example

...

pages,

...

enter_search_criteria.jsp

...

or

...

search_results.jsp.

...

There

...

has

...

been

...

no

...

choice

...

made

...

on

...

whether

...

we

...

should

...

use

...

bean/logic

...

tags

...

or

...

c

...

tags,

...

so

...

that's

...

up

...

to

...

you

...

although

...

c

...

tags

...

are

...

easier

...

to

...

use.

...

TBD

...

-

...

this

...

needs

...

to

...

be

...

filled

...

in

...

more

...

on

...

insidemit

...

css

...

layout,

...

js,

...

etc.

...

TBD

...

-

...

talk

...

about

...

how

...

to

...

go

...

to

...

different

...

actions

...

from

...

the

...

jsp

...

using

...

the

...

hidden

...

thingy

...

TBD

...

-

...

talk

...

about

...

how

...

to

...

do

...

ajax

...

once

...

Seth

...

figures

...

it

...

out

...

Taglibs

Standard jstl and struts taglibs are in the app, including:

  • c
  • fmt
  • html
  • html-el
  • logic
  • logic-el
  • bean
  • bean-el
  • tiles

In addition, some extra jakarta taglibs are included:

  • string
  • datetime

Application settings and messages

Application settings and messages are in the file ApplicationResources.properties.

This file should contain all the messages that the app will display.

It also contains a few other settings:

These need to be configured for each app:

  • sap.proxy.pkg - is the name of the proxy package in your app; the sap2java library uses this property to know where your proxies are; e.g. edu.mit.vpis.proxy

...

  • appname

...

  • -

...

  • this

...

  • should

...

  • be

...

  • set

...

  • to

...

  • the

...

  • name

...

  • of

...

  • your

...

  • app,

...

  • e.g.

...

  • vpis

...


  • These

...

  • are

...

  • standard:

...

  • app.message.generic

...

  • -

...

  • this

...

  • is

...

  • a

...

  • generic

...

  • message

...

  • that

...

  • is

...

  • used

...

  • to

...

  • output

...

  • RFC

...

  • messages

...

  • errors.gateway

...

  • -

...

  • this

...

  • message

...

  • is

...

  • output

...

  • by

...

  • IDDAction

...

  • if

...

  • you

...

  • enter

...

  • via

...

  • a

...

  • non

...

  • EntryAction

...

  • errors.required

...

  • -

...

  • not

...

  • sure

...

  • what

...

  • this

...

  • is...

...

Sap2Java

See sap2java.

Building and Running an Application in Eclipse

If you forget to create your site dir and configure it, your app will not build. This is a common problem.

To run your app, just right click the project and select Run As > Run on Server. The first time you do this it will ask you to pick which server to run on. If you check the checkbox at the bottom it won't ask you this again. By default, it will go to the action EntryAction.do.

You can access your app in your web browser at http://localhost:8888/apps/yourappnamehere/

...

and

...

it

...

will

...

automatically

...

go

...

to

...

EntryAction.

...

If

...

you

...

have

...

more

...

than

...

one

...

entry

...

point

...

you

...

will

...

need

...

to

...

specify

...

which

...

action

...

to

...

go

...

to.

...

For

...

SAP

...

apps,

...

you

...

do

...

not

...

need

...

to

...

specify

...

sapSystemId

...

as

...

this

...

is

...

configured

...

in

...

your

...

site/ApplicationLocal.properties

...

file

...

(the

...

r3default

...

property).

...

When

...

you

...

rebuild

...

your

...

app,

...

you

...

can

...

either

...

do

...

Run

...

As

...

again

...

or

...

you

...

can

...

right

...

click

...

your

...

server

...

and

...

select

...

Publish.

...

To

...

debug

...

your

...

app,

...

make

...

sure

...

you

...

have

...

some

...

breakpoints

...

set

...

and

...

then

...

cause

...

a

...

rebuild

...

to

...

happen

...

(you

...

can

...

do

...

this

...

by

...

doing

...

a

...

Clean).

...

Then

...

restart

...

your

...

server

...

in

...

Debug

...

mode.

...

You

...

can

...

then

...

either

...

right

...

click

...

the

...

project

...

and

...

select

...

Debug

...

As

...

>

...

Debug

...

on

...

Server,

...

or

...

publish

...

the

...

app

...

and

...

just

...

go

...

to

...

your

...

browser.

...

When

...

you

...

reach

...

a

...

breakpoint,

...

eclipse

...

should

...

switch

...

to

...

debug

...

view

...

and

...

your

...

browser

...

will

...

sit

...

there

...

waiting.

...

Demo

...

Application

...

The

...

skeleton

...

we

...

use

...

to

...

create

...

new

...

apps

...

comes

...

with

...

a

...

built-in

...

demo

...

app.

...

You

...

should

...

base

...

your

...

code

...

on

...

this.

...

The

...

source

...

for

...

the

...

demo

...

is

...

in

...

the

...

edu.mit.oasskeleton

...

package

...

structure,

...

and

...

there

...

are

...

a

...

couple

...

jsps

...

and

...

struts

...

configs,

...

etc.

...

Revision

...

History

...

(latest

...

on

...

top)

...

Date

Documentation Updated By

Description of Change

16-Aug-2007

...

Amy

...

King

Original Version