Design Patterns/Best Practices etc...
fellow WLI gurus,
I am looking for design patterns/best practices especially in EAI / WLI.
Books ? Links ?
With patterns/best practices I mean f.i.
* When to use asynchronous/synchronous application view calls
* where to do validation (if your connecting 2 EIS, both EIS, only in WLI,
* what if an EIS is unavailable? How to handle this in your workflow?
* performance issues
Anyone want to share his/her thoughts on this ?
Kris
Hi.
I recently bought WROX Press book Professional J2EE EAI, which discusses Enterprise
Integration. Maybe not on a Design Pattern-level (if there is one), but it gave
me a good overview and helped me make some desig decisions. I´m not sure if its
technical enough for those used to such decisions, but it proved useful to me.
http://www.wrox.com/ACON11.asp?WROXEMPTOKEN=87620ZUwNF3Eaw3YLdhXRpuVzK&ISBN=186100544X
HTH
Oskar
Similar Messages
-
Process modelling : Design patterns & Best Practices
Hi
Could some one please suggest/share any technical information or documents tha's related to 'Process modelling - Design Patterns & Best Practices'
Thanks in Advance
Santosh K.
Edited by: Santosh539 on Jul 29, 2010 4:07 PMHi Santosh,
There is no specific site with all the information you asked for.
But I think these links would be helpful...
on Work Flow Patterns: http://www.workflowpatterns.com/
on BPM Service Pattern: http://enterprisearchitecture.nih.gov/ArchLib/AT/TA/WorkflowServicePattern.htm
HTH
Sharma -
Design Pattern / Best Practice Question
Hi,
I have been using Flex for a while now, but there is a
scenario which I still have not found a solution I'm entirely happy
with. I'm wondering if anyone else out there might have suggestions
on a design pattern or best practice.
Suppose I have a view which depends on model data which
resides in some back end systems. That model data may or may not
have been loaded (e.g. via a web service or remote object call) at
the time the view is displayed.
I don't know if the user will ever visit this part of the
application so I would prefer to defer retrieval of the data until
the user actually navigates to this view. Or I want to retrieve the
data each time the view is displayed because the data is dynamic
and could change between one presentation of the view and the next.
Because the data comes from several systems, I cannot simply
make one service call and display the view when it completes and
all the data is available. I need to call several services which
could complete in any order but I only want to display my view
after I know all of them have completed and all of the model data
is available. Otherwise, I can present the user an incomplete view
(e.g. some combo boxes are empty until the corresponding service
call to get the data completes).
The solution I like best so far is to dispatch a single event
(I am using Cairngorm) handled by a single command which acts as
the caller and responder for all of the services. This command then
remembers which responses it has received and dispatches another
event to navigate to the view once all the results have returned.
If the services being called are used in different
combinations on different screens, this results in proliferation of
events and commands. An event and command for each service and
additional events and commands to bundle the services and the
handling of their responses in the right combinations for each of
the views.
Another approach is to have some helper class listen for all
of the model changes and only display the view when the model
enters some state that is acceptable. It is sometimes difficult to
determine just by looking at the model whether it is in the right
state (e.g. how can I tell that a collection is the new collection
that should just have been requested versus an old one lingering
from a previous call). The logic required can get kind of
convoluted and brittle.
Basically, all of the solutions I've come up with so far seem
less than ideal and a little hackish. I keep thinking there is some
elegant solution out there that I am just missing ... but so far,
no luck finding it. Thoughts?
Thanks.
Billi think a service class is right - to coordinate your calls.
i would have 1 event per call (so you could listen to individual
responses if you wanted to).
then i would use a flag. if you want to check for staleness,
you would probably want two objects to map your service flag to
lastRequested and lastCompleted. when you check, check if it's
completed, and if it's not stale and that your lastRequested is
less than lastCompleted (meaning that you're not currently waiting,
i.e. you've returned since making a request). then make the request
and update your lastRequested.
here's a snippet of what i mean.
./paul
public static const SVC1_LOADED:int = 1;
public static const SVC2_LOADED:int = 2;
public static const SVC3_LOADED:int = 4;
public static const SVCALL_LOADED:int = 7;
private var completedFlag:int = 0;
then each call would have it's own callback.
private function onSvc1Complete( evt:Event):void {
completedFlag |= SVC1_LOADED;
lastCompleted[ SVC1_LOADED ] = getTimer();
dispatchEvent( new Event("svc1complete") );
checkDone();
private function checkDone():void{
if( completedFlag == SVCALL_LOADED )
dispatchEvent(new Event( "allLoaded" )); -
Translation patterns - best practice
We have 300 DIDs from our telco. Currently, only 150 are in use. If a call comes thru for a non-asigned number, I would like to set-up a call handler that states the number is a non-working number that belongs to the company and then give options for contacting the correct person. Also, when a person leaves the company I am currenly forawarding the number to the operator but I would also like to make these numbers part of the call handler.
My question is this - what is the best way to set this up? I currently am removing the number from the directory numbers and setting up a translation pattern to point the number to an end point such as the operator. Is this the best thing to do? I would like to know what is considered to be "best practice" in keeping the phone system as clean as possible.
I appreciate any input.
PatI would setup a catch-all scenario with a translation to a CTIRP that would forward to VM and hit the Call handler you desire. For example if you had the DIDs 212-555-1000 thru 212-555-1299 i would first setup a non-DID CTI RP that matches your call handler dtmf (e.g. 7999 if you use 4 digit extensions). the CTI RP for 7999 would forward to VM and then the Call Handler with DTMF of 7999 would play your message that number is not in use.
Then setup a translation for 212-555-1[012]xx that translates to 7999.
This wildcard match would not route the call if there was a more specific match present within the Calling Search Space for the Gateway. So if extension 1050 was present it would route to that phone, but if extension 1051 was a terminated or unused number it would not be present and therefore the call would hit the translation and be routed to the "number not in use" call handler.
I think this is what you are after, a way to minimize the translations and not have to keep track of individual numbers. Of course modify the length of the translations if you are not routing based on 10 digits. -
XDK -Performance best practices etc
All ,
Am looking for some best practices with specific emphasis on performance
for the Oracle XDK ..
can any one share any such doc or point me to white papers etc ..
ThanksThe following article discusses how to choose the most performant parsing strategy based on your application requirements.
Parsing XML Efficiently
http://www.oracle.com/technology/oramag/oracle/03-sep/o53devxml.html
-Blaise -
Network Design Review - Best Practices
Looking to start a discussion around best practices for inbound network design at the core.
The planned devices are as followings:
Edge Routing / DMVPN - Cisco 2951
Cisco UCM / IP Phone VPN Concentrator - Cisco ASA 5512-X
Cisco AnyConnect SSL Client Concentrator - Cisco ASA 5515-X
Cisco FirePower / IPS Device - Cisco ASA 5515-X
The plan is as follows:
All traffic enters through the 2951.
DMVPN traffic will go directly to the FirePower Device and then to the core network.
IP Phones will pass-through 2951, enter 5512-X for VPN, go to FirePower and then to the core network.
AnyConnect Clients will pass-through 2951, enter 5515-X for VPN, go to FirePower and then to the core network.
Wondering if anyone else has completed a similar setup and any issues you may have fun into.
Basic diagram attached.
Thanks!There really isn't a true two factor authentication you can just do with radius unless its ISE and your doing EAP Chaining. One way that is a workaround and works with ACS or ISE is to use "Was machine authenticated". This again only works for Domain Computers. How Microsoft works:) is you have a setting for user or computer... this does not mean user AND computer. So when a windows machine boots up, it will sen its system name first and then the user credentials. System name or machine authentication only happens once and that is during the boot up. User happens every time there is a full authentication that has to happen.
Check out these threads and it explains it pretty well.
https://supportforums.cisco.com/message/3525085#3525085
https://supportforums.cisco.com/thread/2166573
Thanks,
Scott
Help out other by using the rating system and marking answered questions as "Answered" -
Design Patterns, best approach for this app
Hi all,
i am starting with design patterns, and i would like to hear your opinion on what would be the best approach for this app.
this is basically an app for data monitoring, analysis and logging (voltage, temperature & vibration)
i am using 3 devices for N channels (NI 9211A, NI 9215A, NI PXI 4472) all running at different rates. asynchronous.
and signals are being processed and monitored for logging at a rate specified by the user and in realtime also.
individual devices can be initialized or stopped at any time
basically i'm using 5 loops.
*1.- GUI: Stop App, Reload Plot Names (Event handling)
*2.- Chart & Log: Monitors Data and Start/Stop log data at a specified time in the GUI (State Machine)
*3.- Temperature DAQ monitoring @ 3 S/s (State Machine) NI 9211A
*4.- Voltage DAQ monitoring and scaling @ 1K kS/s (State Machine) NI 9215A
*5.- Vibration DAQ monitoring and Analysis @ 25.6 kS/s (State Machine) NI PXI 4472
i have attached the files for review, thanks in advance for taking the time.
Attachments:
V-T-G Monitor_Logger.llb 355 KBmundo wrote:
thanks Will for your response,
so, basically i could apply a producer/consummer architecture for just the Vibration analysis loop? or all data being collected by the Monitor/Logger loop?
is it ok having individual loops for every DAQ device as is shown?
thanks.
You could use the producer/consumer architecture to split the areas where you are doing both the data collection and teh analysis in the same state machine. If one of these processes is not time critical or the data rate is slow enough you could leave it in a single state machine. I admit that I didn't look through your code but based purely on the descriptions above I would imagine that you could change the three collection state machines to use a producer/consumer architecture. I would leave your UI processing in its own loop as well as the logging process. If this logging is time critical you may want to split that as well.
Mark Yedinak
"Does anyone know where the love of God goes when the waves turn the minutes to hours?"
Wreck of the Edmund Fitzgerald - Gordon Lightfoot -
Subclass design problems/best practices
Hello gurus -
I have a question problem regarding the domain objects I'm sticking in my cache. I have a Product object - and would like to create a few subclasses - say BookProduct and MovieProduct (along with the standard Product objects). These really need to be contained in the same cache. The issue/concern here is that both subclasses have attributes that I'd like to index AND query on.
When I try to create an index on the subclasses attributes when there are just "standard" products - I get the following error (which only exists on one of the subclasses):
2010-10-20 11:08:43.280/227.055 Oracle Coherence GE 3.5.2/463 <Error> (thread=DistributedCache:MyCache, member=2): Exception occured during index rebuild: java.lang.RuntimeException: Missing or inaccessible method: com.test.domain.product.Product.getAuthors()
So I'm not sure the indexing is working or stopping once it hits this exception.
Furthermore, I get a similar error when attempting to Filter based on that attribute. So if I want to add the following filter:
Filter filter = new ContainsAnyFilter( "getAuthors", authors );
I will receive the following exception:
Caused by: Portable(java.lang.RuntimeException): Missing or inaccessible method: com.test.domain.product.Product.getAuthors()
What is considered the best practices for this assuming these really should be part of the same names cache? Should I attempt to subclass the extractors to "inspect" the Object for its class type during indexing or applying filters? Or should I just add all the attribute in the BookProduct and MovieProduct into the parent object and just forget about subclassing? That seems to have a pretty high "yuck" factor to me. I'm assuming people have run into this issue before and am looking for some best practices or perhaps something that deals with this that I'm missing. We're currently using Coherence 3.5.2. Not sure if it matters, but we are using the POF format for serialization.
Thanks!
ChrisHi Chris,
I had a similar problem. The way I solved it was to use a subclass of the ChainedExtractor that catches all RuntimeException occurring during the extraction like the following:
* {@link ChainedExtractor} that catches any exceptions during extraction and returns null instead.
* Use this for cases where you're not certain that an object contains that necessary methods to be extracted.
* F.e. an object in the cache does not contain the getSomeProperty() method. However other objects do.
* When these are put together in the same cache we might want to use a {@link ChainedExtractor} like the following:
* new ChainedExtractor("getSomeProperty.getSomeNestedProperty"). However this will result in a RuntimeException for those entries that
* don't contain the object with the someProperty. Using the this class instead won't result in the exception.
public class SafeChainedExtractor extends ChainedExtractor
public SafeChainedExtractor()
super();
public SafeChainedExtractor( String sMethod )
super( sMethod );
@Override
public Object extract( Object entry )
try
return super.extract( entry );
catch(RuntimeException e)
return null;
@Override
public Object extractFromEntry( Entry entry )
try
return super.extractFromEntry( entry );
catch(RuntimeException e)
return null;
}For all indexes and filters we then use extractors that subclassed the SafeChainedExtractor like the following:
public class NestedPropertyExtractor extends SafeChainedExtractor
private static final long serialVersionUID = 1L;
public NestedPropertyExtractor()
super("getSomeProperty.getSomeNestedProperty");
//adding an index:
myCache.addIndex( new NestedPropertyExtractor(), false, null );
//using a filter:
myCache.keySet(new EqualsFilter(new NestedPropertyExtractor(), "myNestedProperty"));This way, the extractor will just return null when a property doesn't exist on the target class.
Regards
Jan -
Populating users and groups - design considerations/best practice
We are currently running a 4.5 Portal in production. We are doing requirements/design for the 5.0 upgrade.
We currently have a stored procedure that assigns users to the appropriate groups based on the domain info and role info from an ERP database after they are imported and synched up by the authentication source.
We need to migrate this functionality to the 5.0 portal. We are debating whether to provide this functionality by doing this process via a custom Profile Web service. It was recommended during ADC and other presentation that we should stay away from using the database security/membership tables in the database directy and use the EDK/PRC instead.
Please advise on the best way to approach(With details) this issue. We need to finalize the best approach to take asap.
Thanks.
VanitaSo the best way to do this is to write a custom Authentication Web Service. Database customizations can do much more damage and the EDK/PRC/API are designed to prevent inconsistencies and problems.
Along those lines they also make it really easy to rationalize data from multiple backend systems into an orgainzation you'd like for your portal. For example you could write a Custom Authentication Source that would connect to your NT Domain and get all the users and groups, then connect to your ERP system and do the same work your stored procedure would do. It can then present this information to the portal in the way that the portal expects and let the portal maintain its own database and information store.
Another solution is to write an External Operation that encapsulates the logic in your stored procedure but uses the PRC/Server API to manipulate users and group memberships. I suggest you use the PRC interface since the Server API may change in subtle ways from release to release and is not as well documented.
Either of these solutions would be easier in the long term to maintain than a database stored procedure.
Hope this helps,
-Akash -
OID DIT tree design. Best practice.
Can I extend the orcluser object class to include all my application related attributes and define a new object class appusr to define all the user attributes. Similarly I have extended the OrclGroup to appgroup class. And I have configured "User Object Classes" in the User Entry management in OIDDAS to look into my new class and attributes. I didn't modify the defalut "User Search Context" and "Group Search Context". Is this the correct approach if we need to extend application specific user and group information. If so, will this arrangement work well for ALL the associated 9iAS components like Portal, SSO etc...
Apart from the userpassword reset issue for upcoming releases, is there any portability/compatability issues with version upgrades?Hi,
don't have the answer to your question but you might find some guidlines in the 'Oracle9i Directory Service Integration and Deployment Guide' and the chapter about 'Deploying Oracle Products with Oracle Internet Directory'
http://download-west.oracle.com/docs/cd/B10501_01/network.920/a96579/products.htm#1008968
--Olaf -
Best practices Struts for tech. proj. leads
baseBeans engineering won best training by readers of JDJ and published the first book on Struts called FastTrack to Struts.
Upcoming class is live in NYC, on 5/2 from 7:30 AM to 1:00PM. We will cover db driven web site development, process, validation, tiles, multi row, J2EE security, DAO, development process, SQL tuning, etc.
We will teach a project tech lead methods that will increase the productivity of his team and review best practices, so that they can benchmark their environment.
Sign up now for $150, the price will be $450 soon as we get closer to the date (price goes up every few days). The web site to sign up on is baseBeans.net* .
You will receive a lab/content CD when you sign up.
Contact us for more details.
· We preach and teach simple.
· We use a very fast DAO DB Layer – with DAO side data cache
· We use JSTL
· We use a list backed Bean w/ DAO helper design for access to any native source and to switch out DAO.
· We use J2EE security, container managed declarative authorization and authentication. (no code, works on any app. server).
· Struts based Content Management System. A Struts menu entry like this:
<Item name="About_Contacts" title="About/Contacts"
toolTip="About Us and Contact Info" page="/do/cmsPg?content=ABOUT" />
passes to the action the parm of “about” which the DAO populates.
You can peak at the source code at sourceforge.net/projects/basicportal or go to our site baseBeans.net. (16,000 downloads since Oct. 2002)
Note that the baseBeans.net is using the Content Management System (SQL based) that we train on. (our own dog food)
Note: We always offer money back on our public classes.
Vic Cekvenich
Project Recovery Specialist
[email protected]
800-314-3295
<a href =”baseBeans.net”>Struts Training</a>
ps:
to keep on training, details, best practice, etc. sign up to this mail list:
http://www.basebeans.net:8080/mailman/listinfo/mvc-programmers
(1,000 + members)Hi,
We use only Stateful release modes for application modules, defined in the action mappings in struts-config.xml exactly the same way as in your example. Stateful mode releases the module instance back to the pool and it can be reused by other sessions as well. However, all the code that uses the app modules and view objects, etc, must be written with the assumption that the module or the view object the code is operating on can be a different instance from the one in the previous request in the same session.
The concept of BC4J is that this recycling of modules should be transparent for the users of the app modules, but this is not exactly the case. Some things are not passivated in the am's snapshots and are not activated in case of recycling, for example, custom view object properties or entries in the userData map (or at least were not in 9.0.5, I doubt this is changed in 10.1.2.) These are things that you have to manually passivate and activate if you use them to store some information that is relevant to a particular user session.
All chances are that these strange things that you experience only occur in sessions that use recycled application modules, that is, there was passivation and subsequent activation of vo and am states. I have found it useful as a minimum to test the application with only 1 application module in the pool and at least 2 user sessions, constantly recycling this one am instance. Many of the problems that will surface in a real application usage only when there is a high load can be experienced in this artificial setup. -
My customer wants to build their own iaas/paas using Oracle 11g DB, plus x86 or other small computer, running Linux or Solaris or Unix OS.
Oracle Exadata is not feasible for them to use currently.
Customer wants to know whether there are other customers have implemented their cloud solution based on these or not?
If yes, would like to share the experience, presentation slides, best practices etc.
Is there an Oracle email DL for asking this kind of question?
Thanks,
BorisLike Rick, I'm not aware of a specific "cloud implementors forum". Internally, Oracle has lots of material on implementing cloud, using any platform at all, although obviously we feel Engineered Systems are the most cost-effective solution for many customers. Are you interested in IaaS i.e. virtualised hardware, or PaaS i.e. DBaaS? They should not be confused, neither is required for the other, in fact, using IaaS to implement "DBaaS", as the OpenStack trove API attempts to do, is probably the most counter-productive way to go about it. Define the business-visible services you will be offering, and then design the most efficient means of supporting them. That way you gain from economies of scale, and set up appropriate management systems that address issues like patching, security, database virtualisation and so on.
-
Hello all,
I have been working my way through 'Core J2EE Patterns: Best Practices and Design Strategies' in preparation for a web services based project I am responsible for delivering.
Theres just one thing I cannot get my head round. The book identifies a web service broker responsible for dealing with WS requests. However it states its at the integration level. If I have a WS enabled client wanting to communicate with my services, wouldn't the web service broker have to be the first point of contact, almost acting as a Controller?
Much of this is new to me, so perhaps I am barking up the wrong tree. But any help would be greatly appreaciated
Kind regards
KevinMichal
Can you send me your article or anything you have on web services? I am trying to connect to a .NET server and I'm getting the following error:
System.Web.Services.Protocols.SoapHeaderException: WSE012: The input was not a valid SOAP message because the following information is missing: action. at Microsoft.Web.Services3.Utilities.AspNetHelper.SetDefaultAddressingProperties(SoapContext context, HttpContext httpContext) at Microsoft.Web.Services3.WseProtocol.CreateRequestSoapContext(SoapEnvelope requestEnvelope) at Microsoft.Web.Services3.WseProtocol.FilterRequest(SoapEnvelope requestEnvelope) at Microsoft.Web.Services3.WseProtocol.RouteRequest(SoapServerMessage message) at System.Web.Services.Protocols.SoapServerProtocol.Initialize() at System.Web.Services.Protocols.ServerProtocol.SetContext(Type type, HttpContext context, HttpRequest request, HttpResponse response) at System.Web.Services.Protocols.ServerProtocolFactory.Create(Type type, HttpContext context, HttpRequest request, HttpResponse response, Boolean& abortProcessing)
I know it has something to do with Axis but I just don't know enough. Is there a way around it? Do you know if WSE 3.0 requires Axis2?
Thanks for any info you can send my way.
Steve -
What are the best practices in design patterns?
What design patterns are likely popular?
If you go to your local bookstore or online book store you will find at least 20 books that describe this.
Some how I doubt you are going to get 20 books worth of an answer. -
Working on a wireless deployment for a client... wanted to get updated on what the latest best practices are for enterprise wireless.
Right now, I've got the corporate SSID integeatred with AD authentication on the back end via RADIUS.
Would like to implement certificates in addition to the user based authentcation so we have some level of dual factor authentcation.
If a machine is lost, I don't want a certificate to allow an unauthorized user access to a wireless network. I also don't want poorly managed AD credentials (written on a sticky note, for example) opening up the network to an unathorized user either... is it possible to do an AND condition, so that both are required to get access to a wireless network?There really isn't a true two factor authentication you can just do with radius unless its ISE and your doing EAP Chaining. One way that is a workaround and works with ACS or ISE is to use "Was machine authenticated". This again only works for Domain Computers. How Microsoft works:) is you have a setting for user or computer... this does not mean user AND computer. So when a windows machine boots up, it will sen its system name first and then the user credentials. System name or machine authentication only happens once and that is during the boot up. User happens every time there is a full authentication that has to happen.
Check out these threads and it explains it pretty well.
https://supportforums.cisco.com/message/3525085#3525085
https://supportforums.cisco.com/thread/2166573
Thanks,
Scott
Help out other by using the rating system and marking answered questions as "Answered"
Maybe you are looking for
-
I am a developer. Not sure if it was a programming thing or not but now FF 4.0.1 constantly opens up multiple windows each time I open it. Sometime around 3-4 and other times about 15 to 20 windows. I have searched your KB and Google and have tried e
-
Video froze while watching hulu on Apple TV. I pressed the menu button and play button rapidly numerous times with no response. Now apple remote doesn't work, holding menu and right or left doesn't work either. The remote is barely a month old, what
-
HT2693 Itunes cannot be read because it was created by a newer version of itunes
Downloaded latest version of itunes 7 and cannot run. Screen displayed "The itunes library.itl. It cannot be read because it was created by a newer version of itunes." What is the problem and how can it be resolved?
-
While i m starting node manager in weblogic
Dear All, my weblogic server was working fine after restarted the windows server, when i am trying to start the node manager i m getting below error, please guide me please, this is production <Sep 22, 2013 12:58:07 AM> <WARNING> <There was a problem
-
Error Record has been deleted. Your request cannot be processed
Hi Team, We are planning to integrate apps scema with our separate schema by calling oe_order_pub.process_order API, While calling this API we are getting error like creation process :"Record has been deleted. Your request cannot be processed." As pe