| = Xbean usage in OpenEJB |
| :jbake-type: page |
| :jbake-status: published |
| |
| == How XBean is used in OpenEJB |
| |
| Below is an explanation by David Blevins on the usage of xbean in OpenEJB. |
| This text was taken from an email conversation. |
| To view the full conversation, click http://www.nabble.com/How-is-XBean-used-in-OpenEJB-3--tf2148639.html#a5959172[here] |
| |
| === xbean-reflect |
| |
| xbean-reflect is a beefed up reflection library. |
| |
| Earlier all pluggable components had an "init(Properties props)" method? |
| Same concept except now we throw the component class and the properties into an "ObjectRecipe" and call create(). |
| The recipe will take the props out, convert them to the right data types, and construct the object using the right constructor and setters. |
| |
| So our Containers and stuff now use constructors and setters. |
| Same with anything in a http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/resources/META-INF/org.apache.openejb/service-jar.xml?view=markup[service-jar.xml] file. |
| |
| ==== Some code refs: |
| |
| . http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/assembler/classic/Assembler.java?revision=546308&view=markup[Assembler.java] We also use it to construct Stateful and Stateless session bean instances. |
| . http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/stateful/StatefulInstanceManager.java?revision=546308&view=markup[StatefulInstanceManager.java] |
| . http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/core/stateless/StatelessInstanceManager.java?revision=546308&view=markup[StatelessInstanceManager.java] |
| |
| === xbean-finder |
| |
| xbean-finder is the second coolest library ever. |
| It's a beefed up |
| service finder for grabbing stuff in your classpath. |
| We use it at a couple of places. |
| |
| ==== COMMAND LINE TOOL: |
| |
| The available commands are in properties files in "META-INF/org.openejb.cli/\{name}", where \{name} is the name of the command. |
| See: |
| |
| . http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/resources/META-INF/org.apache.openejb.cli/[openejb cli] |
| . http://svn.apache.org/viewvc/tomee/tomee/trunk/itests/openejb-itests-client/src/main/resources/META-INF/org.openejb.cli/[openejb cli for itests] |
| |
| Earlier we had the "test" |
| command hardcoded in a script, but the person may have uninstalled |
| the itests? |
| Well now, if you have the itests jar, the "test" command |
| will be available. |
| If you don't have the itests jar, the "test" |
| command won't be available. |
| The "test" command itself is in the |
| itests jar. |
| You can put any command in any jar and it will |
| automatically become available on the command line. |
| Remove the jar |
| and the command is gone. |
| |
| When someone types "java -jar openejb.jar start" this guy will look |
| for "META-INF/org.openejb.cli/start". |
| If he finds it, he'll create |
| it and execute it. |
| If he doesn't find it, he'll list the available |
| commands by enumerating over all the files he see's in the classpath |
| under the "META-INF/org.openejb.cli/" directory. |
| See http://svn.apache.org/viewvc/tomee/tomee/trunk/container/openejb-core/src/main/java/org/apache/openejb/cli/MainImpl.java?revision=546308&view=markup[MainImpl.java] |
| |
| An extra cool thing is that each command has in it's properties a |
| "description" property. |
| This is localized, so if the VM locale is |
| "pl" it will look for a "description.pl" property and use its value |
| when printing command line help. |
| I'd like to give Jeremy Whitlock a big shout-out for doing such a |
| bang up job on this. |
| He and I worked out the idea and white-boarded |
| it in the wiki, then Jeremy went off and coded up the whole thing! |
| It was fantastic. |
| |
| ==== SERVER SERVICES: |
| |
| We also use the xbean-finder to create our Server Services (aka. |
| protocols). |
| Our ServerService implementations are in properties |
| files under "META-INF/org.openejb.server.ServerService/\{protocolName}. |
| See: |
| |
| . http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-server/src/main/resources/META-INF/org.apache.openejb.server.ServerService/[OpenEJB Server - ServerService] |
| . http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-ejbd/src/main/resources/META-INF/org.apache.openejb.server.ServerService/[OpenEJB ejbd - ServerService] |
| . http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-telnet/src/main/resources/META-INF/org.apache.openejb.server.ServerService/[OpenEJB Telnet - ServerService] |
| . http://svn.apache.org/viewvc/tomee/tomee/trunk/server/openejb-http/src/main/resources/META-INF/org.apache.openejb.server.ServerService/[OpenEJB HTTP - ServerService] |
| |
| The very first time a ServerService is constructed, we squirt the properties file into the openejb/conf/ directory so the user can edit it. |
| The properties files for ServerServices are very xinet.d like. |
| For example, here is the definition of the "admin" server service: |
| |
| ---- |
| server = org.openejb.server.admin.AdminDaemon |
| bind = 127.0.0.1 |
| port = 4200 |
| disabled = false |
| threads = 1 |
| only_from = localhost |
| ---- |
| |
| You can reconfigure the "admin" server service, for example, via the properties file in openejb/conf/admin.properties. |
| Or you can do it on the command line as such: in-a-shell |
| |
| $ ./bin/openejb start \-Dadmin.bind=192.168.42.13 OPENEJB_HOME=/Users/dblevins/work/openejb1/target/openejb-1.1-SNAPSHOT OpenEJB 1.1-SNAPSHOT build: 20060420-2356 [http://www.openejb.org](http://www.openejb.org) resources 1 OpenEJB ready. \[init\](init\.html) OpenEJB Remote Server *\* Starting Services \*\* NAME IP PORT webadmin 127.0.0.1 4203 httpejbd 127.0.0.1 4204 telnet 127.0.0.1 4202 ejbd 127.0.0.1 4201 admin 192.168.42.13 4200 \------\- Ready\!+++</in-a-shell>+++ |
| |
| You can override any server service property in the same way. |
| Here |
| are a bunch more examples: |
| |
| |
| Option: -D+++<service>+++.bind=<address> |
| |
| openejb start \-Dejbd.bind=10.45.67.8 |
| |
| openejb start \-Dejbd.bind=myhost.foo.com |
| |
| openejb start \-Dtelnet.bind=myhost.foo.com+++</service>+++ |
| |
| |
| Option: -D+++<service>+++.port=+++<port>+++ |
| |
| openejb start \-Dejbd.port=8765 |
| |
| openejb start \-Dhttpejbd.port=8888+++</port>++++++</service>+++ |
| |
| |
| Option: -D+++<service>+++.only_from=+++<addresses>+++ |
| |
| openejb start \-Dadmin.only_from=192.168.1.12 |
| |
| openejb start \-Dadmin.only_from=192.168.1.12,joe.foo.com,robert+++</addresses>++++++</service>+++ |
| |
| |
| Option: -D+++<service>+++.threads=+++<max>+++ |
| |
| openejb start \-Dejbd.threads=200+++</max>++++++</service>+++ |
| |
| |
| Option: -D+++<service>+++.disabled=<true/false> |
| |
| openejb start \-Dtelnet.disabled=true+++</service>+++ |