By the way. Thanks for the research and message. I noticed I slight decrease in our loading times today as well (as the number of EJBs increased). Please let us know if you have any success with this.
Quintin Beukes On Thu, Oct 8, 2009 at 12:47 PM, Quintin Beukes <quin...@skywalk.co.za> wrote: > This is available on the web site, have a look at the "Plug Points" > section at the bottom of: http://openejb.apache.org/3.0/security.html > > A good example is probably to checkout the JACC provider > implementation in the EJB source. I once considered making a JACC > provider and was planning on this route - especially good if you don't > have much experience with JACC internals. > > The class I'm referring to is: > ./container/openejb-core/src/main/java/org/apache/openejb/core/security/jacc/BasicJaccProvider.java > > I'm sure you can even extend it and simply override the methods that > create the policy configurations, creating your own "open to all" > policies. > > Quintin Beukes > > > > On Mon, Oct 5, 2009 at 11:28 AM, Vikrant Yagnick > <vikrant.yagn...@mastek.com> wrote: >> Hi, >> >> I did some further research on the time that OpenEJB takes to startup when >> the number of EJB's are large. >> It seems the maximum time is taken during >> JACCBuilder.build and JACCBuilder.install >> >> I read up a little on JACC and the reason for the large time is that it goes >> through each EJB's, every method to build the PolicyContext object and >> permissions list. >> >> I was wondering, if I could make my own JACC Provider that did not do all of >> this , as for my use-case we would not need to do permission checking(It can >> be totally permissive, i.e. allow anyone to access an EJB method). >> >> Any tips, on how to make a JACC Provider and use it with OpenEJB would be >> really helpful. >> Alternatively, if someone has made a quick and dirty dummy JACC >> Provider(even for testing), it would be great if they can share the source >> code for that. >> >> Cheers, >> Vikrant >> >> >> >> -----Original Message----- >> From: Quintin Beukes [mailto:quin...@skywalk.co.za] >> Sent: Tuesday, September 08, 2009 8:21 PM >> To: users@openejb.apache.org >> Subject: Re: OpenEJB Startup Performance >> >> When it pauses for those 30 seconds, is the last line printed the >> "Assembling app" line? >> >> Q >> >> On Tue, Sep 8, 2009 at 4:34 PM, Vikrant Yagnick >> <vikrant.yagn...@mastek.com> wrote: >>> Not sure if this email reached the lists, sending again..... >>> -----Original Message----- >>> From: Vikrant Yagnick >>> Sent: Tuesday, September 08, 2009 7:45 PM >>> To: Vikrant Yagnick; 'users@openejb.apache.org' >>> Subject: RE: OpenEJB Startup Performance >>> >>> Sorry, >>> >>> Not sure if the mail-list allows attachments. I am attaching relevant >>> sections (Highlighting things that seem to take time using ************) : >>> >>> >>> 2009-09-08 19:29:53,319 - INFO - openejb.home = >>> D:\mobileclient\mobile_client_oc4j\j2ee\mobileclient\applications\mobileclient\eElixir\WEB-INF >>> 2009-09-08 19:29:53,319 - INFO - openejb.base = >>> D:\mobileclient\mobile_client_oc4j\j2ee\mobileclient\applications\mobileclient\eElixir\WEB-INF >>> 2009-09-08 19:29:53,896 - INFO - Using 'openejb.validation.skip=false' >>> 2009-09-08 19:29:55,146 - INFO - Configuring Service(id=Default Security >>> Service, type=SecurityService, provider-id=Default Security Service) >>> 2009-09-08 19:29:55,146 - INFO - Configuring Service(id=Default >>> Transaction Manager, type=TransactionManager, provider-id=Default >>> Transaction Manager) >>> 2009-09-08 19:29:55,146 - INFO - Configuring Service(id=My Unmanaged >>> DataSource, type=Resource, provider-id=Default JDBC Database) >>> 2009-09-08 19:29:55,146 - INFO - Configuring Service(id=My JMS Resource >>> Adapter, type=Resource, provider-id=Default JMS Resource Adapter) >>> 2009-09-08 19:29:55,162 - INFO - Configuring Service(id=EElixirDS, >>> type=Resource, provider-id=Default JDBC Database) >>> 2009-09-08 19:29:55,162 - INFO - Configuring Service(id=MAYBANSYS, >>> type=Resource, provider-id=Default JDBC Database) >>> 2009-09-08 19:29:55,162 - INFO - Configuring Service(id=My JMS Connection >>> Factory, type=Resource, provider-id=Default JMS Connection Factory) >>> 2009-09-08 19:29:55,162 - INFO - Configuring Service(id=My CMP Container, >>> type=Container, provider-id=Default CMP Container) >>> 2009-09-08 19:29:55,177 - INFO - Configuring Service(id=My BMP Container, >>> type=Container, provider-id=Default BMP Container) >>> 2009-09-08 19:29:55,177 - INFO - Configuring Service(id=My Stateful >>> Container, type=Container, provider-id=Default Stateful Container) >>> 2009-09-08 19:29:55,177 - INFO - Configuring Service(id=My Stateless >>> Container, type=Container, provider-id=Default Stateless Container) >>> 2009-09-08 19:29:55,177 - INFO - Configuring Service(id=My MDB Container , >>> type=Container, provider-id=Default MDB Container) >>> ************************2009-09-08 19:29:57,427 - INFO - Configuring >>> enterprise application: >>> D:\mobileclient\mobile_client_oc4j\j2ee\mobileclient\applications\mobileclient\eElixir\WEB-INF\classes >>> ************************2009-09-08 19:30:22,748 - WARN - WARN ... >>> OccupationExtraEJB: Unused ejbCreate method: ejbCreate() >>> 2009-09-08 19:30:22,748 - WARN - WARN ... PremiumMasterEJB: Unused >>> ejbCreate method: ejbCreate() >>> 2009-09-08 19:30:22,748 - WARN - WARN ... ProductBaseEJB: Unused >>> ejbCreate method: ejbCreate() >>> 2009-09-08 19:30:22,748 - WARN - WARN ... ProductCombinationEJB: >>> Unused ejbCreate method: ejbCreate() >>> 2009-09-08 19:30:22,748 - WARN - WARN ... RidersWaivedEJB: Unused >>> ejbCreate method: ejbCreate() >>> 2009-09-08 19:30:22,764 - WARN - WARN ... StatusEJB: Unused ejbCreate >>> method: ejbCreate() >>> 2009-09-08 19:30:22,764 - WARN - WARN ... CHMInterfaceEJB: Unused >>> ejbCreate method: ejbCreate() >>> 2009-09-08 19:30:22,764 - WARN - WARN ... ILinkPolicyEJB: Unused >>> ejbCreate method: ejbCreate() >>> 2009-09-08 19:30:22,764 - WARN - WARN ... PCG8DividendEJB: Unused >>> ejbCreate method: ejbCreate() >>> 2009-09-08 19:30:22,764 - WARN - WARN ... PCG8DividendEJB: Unused >>> ejbPostCreate method: >>> ejbPostCreate(com.mastek.eElixir.finance.common.helper.PCG8Dividend) >>> 2009-09-08 19:30:22,764 - WARN - WARN ... BenefitRateEJB: Unused >>> ejbCreate method: ejbCreate() >>> 2009-09-08 19:30:22,764 - WARN - WARN ... CommissionRuleEJB: Unused >>> ejbCreate method: ejbCreate() >>> 2009-09-08 19:30:22,764 - WARN - WARN ... AdjustmentEJB: Unused >>> ejbCreate method: ejbCreate() >>> 2009-09-08 19:30:22,764 - WARN - WARN ... RINPremiumMasterEJB: Unused >>> ejbCreate method: ejbCreate() >>> 2009-09-08 19:30:22,764 - INFO - Enterprise application >>> "D:\mobileclient\mobile_client_oc4j\j2ee\mobileclient\applications\mobileclient\eElixir\WEB-INF\classes" >>> loaded. >>> 2009-09-08 19:30:22,764 - INFO - Using >>> 'openejb.deployments.classpath=false' >>> 2009-09-08 19:30:22,764 - INFO - Creating TransactionManager(id=Default >>> Transaction Manager) >>> 2009-09-08 19:30:23,076 - INFO - Creating SecurityService(id=Default >>> Security Service) >>> 2009-09-08 19:30:23,138 - INFO - Creating Resource(id=My Unmanaged >>> DataSource) >>> 2009-09-08 19:30:23,201 - INFO - Creating Resource(id=EElixirDS) >>> 2009-09-08 19:30:23,263 - INFO - Creating Resource(id=MAYBANSYS) >>> 2009-09-08 19:30:23,263 - INFO - Creating Resource(id=My JMS Resource >>> Adapter) >>> 2009-09-08 19:30:24,294 - INFO - Creating Resource(id=My JMS Connection >>> Factory) >>> 2009-09-08 19:30:24,310 - INFO - Creating ConnectionManager for >>> Resource(id=My JMS Connection Factory) >>> 2009-09-08 19:30:24,404 - INFO - Creating Container(id=My CMP Container) >>> 2009-09-08 19:30:24,482 - INFO - Creating Container(id=My BMP Container) >>> 2009-09-08 19:30:24,529 - INFO - Creating Container(id=My Stateful >>> Container) >>> 2009-09-08 19:30:24,966 - INFO - Creating Container(id=My Stateless >>> Container) >>> 2009-09-08 19:30:24,997 - INFO - Creating Container(id=My MDB Container ) >>> ************************************2009-09-08 19:30:25,013 - INFO - >>> Assembling app: >>> D:\mobileclient\mobile_client_oc4j\j2ee\mobileclient\applications\mobileclient\eElixir\WEB-INF\classes >>> ********************************2009-09-08 19:31:55,488 - INFO - Using >>> 'openejb.jndiname.format={interfaceClass}' >>> 2009-09-08 19:31:55,582 - INFO - >>> Jndi(name=com.mastek.eelixirinterfaceservice.common.ejb.sessionbean.TSARCheckSLLocalHome) >>> --> Ejb(deployment-id=TSARCheckSLEJB) >>> 2009-09-08 19:31:55,582 - INFO - >>> Jndi(name=com.mastek.eelixirinterfaceservice.common.ejb.sessionbean.MGCCCommonSLHome) >>> --> Ejb(deployment-id=MGCCCommonSLEJB) >>> 2009-09-08 19:31:55,597 - INFO - >>> Jndi(name=com.mastek.eElixir.product.takaful.ejb.session.TakafulSLLocalHome) >>> --> Ejb(deployment-id=TakafulSLEJB) >>> 2009-09-08 19:31:55,597 - INFO - >>> Jndi(name=com.mastek.eElixir.policyservicing.TakafulTopUp.ejb.sessionbean.TakafulTopUpSLLocalHome) >>> --> Ejb(deployment-id=PSTakafulTopUpSLEJB) >>> 2009-09-08 19:31:55,597 - INFO - >>> Jndi(name=com.mastek.eElixir.reports.ejb.sessionbean.ReportSLHome) --> >>> Ejb(deployment-id=ReportSLEJB) >>> >>> ............................A lot more of JNDI Names ....followed >>> by................... >>> 2009-09-08 19:31:58,034 - INFO - Created >>> Ejb(deployment-id=CommissionRuleEJB, ejb-name=CommissionRuleEJB, >>> container=My BMP Container) >>> 2009-09-08 19:31:58,034 - INFO - Created Ejb(deployment-id=CatastropheEJB, >>> ejb-name=CatastropheEJB, container=My BMP Container) >>> 2009-09-08 19:31:58,034 - INFO - Created >>> Ejb(deployment-id=BillingFrequencySLEJB, ejb-name=BillingFrequencySLEJB, >>> container=My Stateless Container) >>> 2009-09-08 19:31:58,034 - INFO - Created >>> Ejb(deployment-id=UnclaimedMoneyPVSLEJB, ejb-name=UnclaimedMoneyPVSLEJB, >>> container=My Stateless ........................Lots of >>> these................and in the end................... >>> 2009-09-08 19:31:58,565 - INFO - Created >>> Ejb(deployment-id=ProductPrmMapEJB, ejb-name=ProductPrmMapEJB, container=My >>> BMP Container) >>> 2009-09-08 19:31:58,565 - INFO - Created Ejb(deployment-id=ClawbackEJB, >>> ejb-name=ClawbackEJB, container=My BMP Container) >>> 2009-09-08 19:31:58,612 - INFO - Deployed >>> Application(path=D:\mobileclient\mobile_client_oc4j\j2ee\mobileclient\applications\mobileclient\eElixir\WEB-INF\classes) >>> >>> >>> >>> -----Original Message----- >>> From: Vikrant Yagnick >>> Sent: Tuesday, September 08, 2009 7:38 PM >>> To: users@openejb.apache.org >>> Subject: RE: OpenEJB Startup Performance >>> >>> Hi Quintin, >>> >>> Here is a typical startup log. There are a lot of EJB's for sure, but >>> significant time is taken while assembling the app. (Is that when it >>> searches for the EJB classes?) >>> >>> Cheers, >>> Vikrant >>> >>> -----Original Message----- >>> From: Quintin Beukes [mailto:quin...@skywalk.co.za] >>> Sent: Tuesday, September 08, 2009 7:15 PM >>> To: users@openejb.apache.org >>> Subject: Re: OpenEJB Startup Performance >>> >>> Like mentioned. >>> >>> Can you perhaps send us a log output of when OpenEJB starts up. >>> >>> Q >>> >>> On Tue, Sep 8, 2009 at 2:50 PM, Vikrant Yagnick >>> <vikrant.yagn...@mastek.com> wrote: >>>> Hi All, >>>> >>>> Thanks for the replies. >>>> >>>> We already have a ejb-jar.xml since we have been using EJB 2.1(not 3.0 >>>> unfortunately...:(). >>>> The number of EJB's are going to remain pretty static since it has already >>>> been developed. >>>> >>>> This won't really be that big a problem in Production, as once openejb >>>> initializes there is no more delay. I need to figure out a way to >>>> initialize it automatically when the main container starts-up (rather than >>>> on the first request to the application). >>> >>> >>> >>>> >>>> The pain really is while we are in development as for any small change >>>> requiring a container re-start openEJB needs to re-create the entire >>>> application assembly. >>>> >>>> We initialize openEJB using openejb.conf and set the following: >>>> <Deployments dir="classes" /> >>>> >>>> The "classes" folder contains a META-INF folder which in-turn has the >>>> ejb-jar.xml. >>>> >>>> I apologize if this sounds like a real newbie question, but is there a >>>> better way for us to do this? >>>> >>>> Cheers, >>>> Vikrant >>>> >>>> -----Original Message----- >>>> From: Jonathan Gallimore [mailto:jonathan.gallim...@gmail.com] >>>> Sent: Tuesday, September 08, 2009 6:01 PM >>>> To: users@openejb.apache.org >>>> Subject: Re: OpenEJB Startup Performance >>>> >>>> On Mon, Sep 7, 2009 at 10:30 PM, Quintin Beukes >>>> <quin...@skywalk.co.za>wrote: >>>> >>>>> Hey, >>>>> >>>>> I'm no EJB master either, but I can answer your questions with what I >>>>> do know. >>>>> >>>>> 1. Perfectly fine. If you run it in something like Geronimo, it's >>>>> basically just embedded in Geronimo. Your web server is nothing more >>>>> than a Java Application, and OpenEJB has 2 modes, Standalone and >>>>> Embedded (I think there is another one I can't recall). So you're >>>>> just initializing the OpenEJB application inside your VM, and have >>>>> the same stability/functionality provided in any other mode. In fact, >>>>> I would recommend doing this with OpenEJB any day. >>>>> >>>> >>>> This is absolutely right, it should work fine for you, and will >>>> basically just run like the Embedded container. I do this at work for >>>> the day job - we functionally test our app using Jetty and OpenEJB, >>>> and then we can just access our app as if it were running in JBoss or >>>> Geronimo. Its not used in production (yet - but we have considered it) >>>> but it works very well. (I wrote it up here: >>>> http://openejb.apache.org/functional-testing-with-openejb-jetty-and-se >>>> lenium.htmlif >>>> you're interested). >>>> >>>> Let us know if have any problems with this setup. >>>> >>>> >>>> >>>> >>>>> >>>>> 2. How many EJBs do you have for it to take this long? If you have a >>>>> huge classpath you can try trimming down the search to only the >>>>> desired JARs. See: >>>>> http://openejb.apache.org/3.0/application-discovery-via-the-classpath >>>>> .html >>>>> . >>>>> Alternatively you can try and specify static bean configurations in >>>>> ejb-jar.xml. They would be something like this: >>>>> >>>>> <?xml version="1.0" encoding="UTF-8" ?> <ejb-jar >>>>> xmlns="http://java.sun.com/xml/ns/javaee" version="3.0" >>>>> xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" >>>>> xsi:schemaLocation="http://java.sun.com/xml/ns/javaee >>>>> http://java.sun.com/xml/ns/javaee/ejb-jar_3_0.xsd"> >>>>> <enterprise-beans> >>>>> <session> >>>>> <ejb-name>TestBean</ejb-name> >>>>> <local>net.kunye.test.TestLocal</local> >>>>> <remote>net.kunye.test.TestRemote</remote> >>>>> </session> >>>>> <session> >>>>> <ejb-name>PersonnelBean</ejb-name> >>>>> <local>net.kunye.platform.personnel.PersonnelLocal</local> >>>>> <remote>net.kunye.platform.personnel.PersonnelRemote</remote> >>>>> </session> >>>>> </enterprise-beans> >>>>> </ejb-jar> >>>>> >>>>> When you do this all the beans that are listed will be loaded from >>>>> XML (no annotation interpretation afaik) and the rest of the beans >>>>> will be loaded the normal way. >>>>> >>>>> What you can do is perhaps hook in a compile-time task to generate >>>>> this list for you. If you already have such a file with other >>>>> configurations, you can perhaps make a template and generate the >>>>> ejb-jar.xml everytime you compile. >>>>> >>>>> I'm not sure how much this will help. I've never really had to deal >>>>> with this problem. The most EJBs I've loaded was around 50 I think, >>>>> and it went quick. Some of the other guys might be able to help with >>>>> this. >>>>> >>>>> Q >>>>> >>>> >>>> I agree with what others have said here - it might be spending a long >>>> time searching the classpath for EJBs - changing >>>> openejb.deployments.classpath.include/exclude settings might help. If >>>> you can let us know how many EJBs you have, how many Jars are on your >>>> classpath, and maybe a log as well we might be able to help tune this a >>>> bit. >>>> >>>> Jon >>>> >>>> MASTEK LTD. >>>> Mastek is in NASSCOM's 'India Top 20' Software Service Exporters List. >>>> In the US, we're called MAJESCOMASTEK >>>> >>>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >>>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >>>> Opinions expressed in this e-mail are those of the individual and not that >>>> of Mastek Limited, unless specifically indicated to that effect. Mastek >>>> Limited does not accept any responsibility or liability for it. This >>>> e-mail and attachments (if any) transmitted with it are confidential >>>> and/or privileged and solely for the use of the intended person or entity >>>> to which it is addressed. Any review, re-transmission, dissemination or >>>> other use of or taking of any action in reliance upon this information by >>>> persons or entities other than the intended recipient is prohibited. This >>>> e-mail and its attachments have been scanned for the presence of computer >>>> viruses. It is the responsibility of the recipient to run the virus check >>>> on e-mails and attachments before opening them. If you have received this >>>> e-mail in error, kindly delete this e-mail from desktop and server. >>>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >>>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >>>> >>>> >>> >>> >>> >>> -- >>> Quintin Beukes >>> >>> MASTEK LTD. >>> Mastek is in NASSCOM's 'India Top 20' Software Service Exporters List. >>> In the US, we're called MAJESCOMASTEK >>> >>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >>> Opinions expressed in this e-mail are those of the individual and not that >>> of Mastek Limited, unless specifically indicated to that effect. Mastek >>> Limited does not accept any responsibility or liability for it. This e-mail >>> and attachments (if any) transmitted with it are confidential and/or >>> privileged and solely for the use of the intended person or entity to which >>> it is addressed. Any review, re-transmission, dissemination or other use of >>> or taking of any action in reliance upon this information by persons or >>> entities other than the intended recipient is prohibited. This e-mail and >>> its attachments have been scanned for the presence of computer viruses. It >>> is the responsibility of the recipient to run the virus check on e-mails >>> and attachments before opening them. If you have received this e-mail in >>> error, kindly delete this e-mail from desktop and server. >>> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >>> >>> >> >> >> >> -- >> Quintin Beukes >> >> MASTEK LTD. >> Mastek is in NASSCOM's 'India Top 20' Software Service Exporters List. >> In the US, we're called MAJESCOMASTEK >> >> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >> Opinions expressed in this e-mail are those of the individual and not that >> of Mastek Limited, unless specifically indicated to that effect. Mastek >> Limited does not accept any responsibility or liability for it. This e-mail >> and attachments (if any) transmitted with it are confidential and/or >> privileged and solely for the use of the intended person or entity to which >> it is addressed. Any review, re-transmission, dissemination or other use of >> or taking of any action in reliance upon this information by persons or >> entities other than the intended recipient is prohibited. This e-mail and >> its attachments have been scanned for the presence of computer viruses. It >> is the responsibility of the recipient to run the virus check on e-mails and >> attachments before opening them. If you have received this e-mail in error, >> kindly delete this e-mail from desktop and server. >> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ >> >> >