Java EE 6 using WebLogic 12c, NetBeans, and MySQL (Screencast #39)




Oracle WebLogic Server 12c is now available and comes with a zip installer.

This video shows how to develop and deploy a Java EE 6 application on WebLogic 12c using NetBeans. It builds a simple application using Java Persistence API 2.0, Enterprise JavaBeans 3.1, Servlets 3.0, Java API for RESTful Web Services 1.1, Java Server Faces 2.0, and Contexts & Dependency Injection 1.0. The video also explains how to configure MySQL database in NetBeans and use it for accessing the database tables in the Java EE 6 applications.

Enjoy!



You can also check out the sample code built in this application from here.

What kind of Java EE 6 applications are you deploying on WebLogic ?

What else would you like to see on this blog relating to Java EE 6 and WebLogic ?

Follow the complete series here.

Comments:

Nice thank you for sharing. Does the hot deployment in netbeans 7.1 works with weblogic 10.3.5 as well or it work with 12c only?

Posted by venu on January 04, 2012 at 01:35 PM PST #

Hi Venu, yes, hot deployment also works with WebLogic 10.3.x. If you encounter any problems, please let us know - ideally through the bug tracker: http://netbeans.org/community/issues.html (use category serverplugins/WebLogic).

Posted by Petr Jiricka on January 04, 2012 at 07:02 PM PST #

Is Oracle WebLogic Server opensource ? or I have to pay for license ?
Sorry if it is a stupid question. I'm new here.
Thanks.

Posted by Darren on January 28, 2012 at 05:15 AM PST #

Darren,

Oracle WebLogic Server is not open source. However you can download it for evaluation from oracle.com/weblogic.

Posted by guest on January 30, 2012 at 12:55 PM PST #

Followed the video step by step using Netbeans 7.1.2. TestServlet worked fine, but when I try to inject the data in the index.xhtml - the data content from my EJB session bean does not show up in index.xhtml. Any thoughts on what is happening?

Posted by Ravi on June 10, 2012 at 08:14 PM PDT #

Need to make sure there is beans.xml in WEB-INF folder. Is that there ?

Posted by guest on June 10, 2012 at 08:36 PM PDT #

Yes the beans.xml is in the WEB-INF folder. The EJB session bean is also name tagged - @Named to support the injection into my xhtml

Posted by Ravi on June 11, 2012 at 05:00 AM PDT #

Any errors in the server log ?

Tried putting System.out.println and see if the bean gets invoked ?

Posted by guest on June 11, 2012 at 01:02 PM PDT #

The bean is not being invoked from the xhtml file. In the server log there were couple of Portlet errors - "<Error> <netuix> <BEA-423158> <No content found at contentUri = /PortalConfig/security/providers/AuthenticatorConfigCommon.portlet"

The full server log is below....
.
JAVA Memory arguments: -Xms256m -Xmx512m -XX:CompileThreshold=8000 -XX:PermSize=128m -XX:MaxPermSize=256m
.
WLS Start Mode=Development
.
CLASSPATH=C:\Oracle\MIDDLE~1\patch_wls1211\profiles\default\sys_manifest_classpath\weblogic_patch.jar;C:\Oracle\MIDDLE~1\patch_ocp371\profiles\default\sys_manifest_classpath\weblogic_patch.jar;C:\PROGRA~1\Java\JDK17~1.0_0\lib\tools.jar;C:\Oracle\MIDDLE~1\WLSERV~1.1\server\lib\weblogic_sp.jar;C:\Oracle\MIDDLE~1\WLSERV~1.1\server\lib\weblogic.jar;C:\Oracle\MIDDLE~1\modules\features\weblogic.server.modules_12.1.1.0.jar;C:\Oracle\MIDDLE~1\WLSERV~1.1\server\lib\webservices.jar;C:\Oracle\MIDDLE~1\modules\ORGAPA~1.1/lib/ant-all.jar;C:\Oracle\MIDDLE~1\modules\NETSFA~1.0_1/lib/ant-contrib.jar;C:\Oracle\Middleware\wlserver_12.1\sip\server\lib\weblogic_sip.jar;C:\Oracle\MIDDLE~1\WLSERV~1.1\common\derby\lib\derbyclient.jar;C:\Oracle\MIDDLE~1\WLSERV~1.1\server\lib\xqrl.jar
.
PATH=C:\Oracle\MIDDLE~1\patch_wls1211\profiles\default\native;C:\Oracle\MIDDLE~1\patch_ocp371\profiles\default\native;C:\Oracle\MIDDLE~1\WLSERV~1.1\server\native\win\x64;C:\Oracle\MIDDLE~1\WLSERV~1.1\server\bin;C:\Oracle\MIDDLE~1\modules\ORGAPA~1.1\bin;C:\PROGRA~1\Java\JDK17~1.0_0\jre\bin;C:\PROGRA~1\Java\JDK17~1.0_0\bin;C:\Windows\system32;C:\Windows;C:\Windows\System32\Wbem;C:\Windows\System32\WindowsPowerShell\v1.0\;C:\Windows\idmu\common;C:\Program Files\Microsoft Network Monitor 3\;C:\Oracle\MIDDLE~1\WLSERV~1.1\server\native\win\x64\oci920_8
.
***************************************************
* To start WebLogic Server, use a username and *
* password assigned to an admin-level user. For *
* server administration, use the WebLogic Server *
* console at http:\\hostname:port\console *
***************************************************
starting weblogic with Java version:
Starting WLS with line:
C:\PROGRA~1\Java\JDK17~1.0_0\bin\java -client -Xms256m -Xmx512m -XX:CompileThreshold=8000 -XX:PermSize=128m -XX:MaxPermSize=256m -Dweblogic.Name=AdminServer -Djava.security.policy=C:\Oracle\MIDDLE~1\WLSERV~1.1\server\lib\weblogic.policy -Xverify:none -Djava.endorsed.dirs=C:\PROGRA~1\Java\JDK17~1.0_0/jre/lib/endorsed;C:\Oracle\MIDDLE~1\WLSERV~1.1/endorsed -ea:com.bea.wcp... -da -Dplatform.home=C:\Oracle\MIDDLE~1\WLSERV~1.1 -Dwls.home=C:\Oracle\MIDDLE~1\WLSERV~1.1\server -Dweblogic.home=C:\Oracle\MIDDLE~1\WLSERV~1.1\server -Dweblogic.management.discover=true -Dwlw.iterativeDev= -Dwlw.testConsole= -Dwlw.logErrorsToConsole= -Dweblogic.ext.dirs=C:\Oracle\MIDDLE~1\patch_wls1211\profiles\default\sysext_manifest_classpath;C:\Oracle\MIDDLE~1\patch_ocp371\profiles\default\sysext_manifest_classpath weblogic.Server
java version "1.7.0_03"
Java(TM) SE Runtime Environment (build 1.7.0_03-b05)
Java HotSpot(TM) 64-Bit Server VM (build 22.1-b02, mixed mode)
<Jun 11, 2012 5:07:48 PM EDT> <Info> <Security> <BEA-090905> <Disabling CryptoJ JCE Provider self-integrity check for better startup performance. To enable this check, specify -Dweblogic.security.allowCryptoJDefaultJCEVerification=true>
<Jun 11, 2012 5:07:49 PM EDT> <Info> <Security> <BEA-090906> <Changing the default Random Number Generator in RSA CryptoJ from ECDRBG to FIPS186PRNG. To disable this change, specify -Dweblogic.security.allowCryptoJDefaultPRNG=true>
<Jun 11, 2012 5:07:49 PM EDT> <Notice> <WebLogicServer> <BEA-000395> <The following extensions directory contents added to the end of the classpath:
C:\Oracle\Middleware\user_projects\domains\base_domain\lib\derbyclient.jar;C:\Oracle\Middleware\user_projects\domains\base_domain\lib\sipactivator.jar.>
<Jun 11, 2012 5:07:49 PM EDT> <Info> <Server> <BEA-002647> <The service plug-in, com.oracle.core.sip.activator, was added from C:\Oracle\Middleware\user_projects\domains\base_domain\lib\sipactivator.jar.>
<Jun 11, 2012 5:07:49 PM EDT> <Info> <WebLogicServer> <BEA-000377> <Starting WebLogic Server with Java HotSpot(TM) 64-Bit Server VM Version 22.1-b02 from Oracle Corporation.>
<Jun 11, 2012 5:07:50 PM EDT> <Info> <Management> <BEA-141107> <Version: WebLogic Server Temporary Patch for 13340309 Thu Feb 16 18:30:21 IST 2012
WebLogic Server Temporary Patch for 13019800 Mon Jan 16 16:53:54 IST 2012
WebLogic Server Temporary Patch for BUG13391585 Thu Feb 02 10:18:36 IST 2012
WebLogic Server Temporary Patch for 13516712 Mon Jan 30 15:09:33 IST 2012
WebLogic Server Temporary Patch for BUG13641115 Tue Jan 31 11:19:13 IST 2012
WebLogic Server Temporary Patch for BUG13603813 Wed Feb 15 19:34:13 IST 2012
WebLogic Server Temporary Patch for 13424251 Mon Jan 30 14:32:34 IST 2012
WebLogic Server Temporary Patch for 13361720 Mon Jan 30 15:24:05 IST 2012
WebLogic Server Temporary Patch for BUG13421471 Wed Feb 01 11:24:18 IST 2012
WebLogic Server Temporary Patch for BUG13657792 Thu Feb 23 12:57:33 IST 2012
WebLogic Server 12.1.1.0 Wed Dec 7 08:40:57 PST 2011 1445491 >
<Jun 11, 2012 5:07:52 PM EDT> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to STARTING.>
<Jun 11, 2012 5:07:52 PM EDT> <Info> <WorkManager> <BEA-002900> <Initializing self-tuning thread pool.>
<Jun 11, 2012 5:07:52 PM EDT> <Notice> <LoggingService> <BEA-320400> <The log file C:\Oracle\Middleware\user_projects\domains\base_domain\servers\AdminServer\logs\AdminServer.log will be rotated. Reopen the log file if tailing has stopped. This can happen on some platforms, such as Windows.>
<Jun 11, 2012 5:07:52 PM EDT> <Notice> <LoggingService> <BEA-320401> <The log file has been rotated to C:\Oracle\Middleware\user_projects\domains\base_domain\servers\AdminServer\logs\AdminServer.log00002. Log messages will continue to be logged in C:\Oracle\Middleware\user_projects\domains\base_domain\servers\AdminServer\logs\AdminServer.log.>
<Jun 11, 2012 5:07:52 PM EDT> <Notice> <Log Management> <BEA-170019> <The server log file C:\Oracle\Middleware\user_projects\domains\base_domain\servers\AdminServer\logs\AdminServer.log is opened. All server side log events will be written to this file.>
<Jun 11, 2012 5:07:56 PM EDT> <Notice> <Security> <BEA-090082> <Security initializing using security realm myrealm.>
<Jun 11, 2012 5:07:57 PM EDT> <Notice> <LoggingService> <BEA-320400> <The log file C:\Oracle\Middleware\user_projects\domains\base_domain\servers\AdminServer\logs\access.log will be rotated. Reopen the log file if tailing has stopped. This can happen on some platforms, such as Windows.>
<Jun 11, 2012 5:07:57 PM EDT> <Notice> <LoggingService> <BEA-320401> <The log file has been rotated to C:\Oracle\Middleware\user_projects\domains\base_domain\servers\AdminServer\logs\access.log00002. Log messages will continue to be logged in C:\Oracle\Middleware\user_projects\domains\base_domain\servers\AdminServer\logs\access.log.>
<Jun 11, 2012 5:07:59 PM EDT> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to STANDBY.>
<Jun 11, 2012 5:07:59 PM EDT> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to STARTING.>
<Jun 11, 2012 5:08:09 PM EDT> <Warning> <JDBC> <BEA-001110> <No test table set up for pool "jdbs/sample". Connections will not be tested.>
Jun 11, 2012 5:08:18 PM weblogic.jaxrs.server.portable.servlet.JerseyServletContainerInitializer onStartup
INFO: Number of JAX-RS specific classes to be examined:18
Jun 11, 2012 5:08:18 PM weblogic.jaxrs.server.portable.servlet.BaseServletContainerInitializer addServletWithApplication
INFO: Registering the Jersey servlet application, named org.netbeans.rest.application.config.ApplicationConfig, at the servlet mapping, /resources/*, with the Application class of the same name
<Jun 11, 2012 5:08:21 PM EDT> <Notice> <LoggingService> <BEA-320400> <The log file C:\Oracle\Middleware\user_projects\domains\base_domain\servers\AdminServer\logs\base_domain.log will be rotated. Reopen the log file if tailing has stopped. This can happen on some platforms, such as Windows.>
<Jun 11, 2012 5:08:21 PM EDT> <Notice> <LoggingService> <BEA-320401> <The log file has been rotated to C:\Oracle\Middleware\user_projects\domains\base_domain\servers\AdminServer\logs\base_domain.log00002. Log messages will continue to be logged in C:\Oracle\Middleware\user_projects\domains\base_domain\servers\AdminServer\logs\base_domain.log.>
<Jun 11, 2012 5:08:21 PM EDT> <Notice> <Log Management> <BEA-170027> <The server has successfully established a connection with the Domain level Diagnostic Service.>
<Jun 11, 2012 5:08:22 PM EDT> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to ADMIN.>
<Jun 11, 2012 5:08:22 PM EDT> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to RESUMING.>
<Jun 11, 2012 5:08:22 PM EDT> <Notice> <Security> <BEA-090171> <Loading the identity certificate and private key stored under the alias DemoIdentity from the jks keystore file C:\Oracle\MIDDLE~1\WLSERV~1.1\server\lib\DemoIdentity.jks.>
<Jun 11, 2012 5:08:23 PM EDT> <Notice> <Security> <BEA-090169> <Loading trusted certificates from the jks keystore file C:\Oracle\MIDDLE~1\WLSERV~1.1\server\lib\DemoTrust.jks.>
<Jun 11, 2012 5:08:23 PM EDT> <Notice> <Security> <BEA-090169> <Loading trusted certificates from the jks keystore file C:\PROGRA~1\Java\JDK17~1.0_0\jre\lib\security\cacerts.>
<Jun 11, 2012 5:08:23 PM EDT> <Warning> <Server> <BEA-002611> <The hostname "USWDHSA0SOA07.WDH.mfg.ad.gm.com", maps to multiple IP addresses: 120.250.216.99, 192.168.56.1, 0:0:0:0:0:0:0:1.>
<Jun 11, 2012 5:08:23 PM EDT> <Notice> <Server> <BEA-002613> <Channel "sip" is now listening on 120.250.216.99:5060 for protocols sip.>
<Jun 11, 2012 5:08:23 PM EDT> <Notice> <Server> <BEA-002613> <Channel "DefaultSecure[3]" is now listening on 127.0.0.1:7002 for protocols iiops, t3s, ldaps, https.>
<Jun 11, 2012 5:08:23 PM EDT> <Notice> <Server> <BEA-002613> <Channel "sips" is now listening on 120.250.216.99:5061 for protocols sips.>
<Jun 11, 2012 5:08:23 PM EDT> <Notice> <Server> <BEA-002613> <Channel "sips[3]" is now listening on 127.0.0.1:5061 for protocols sips.>
<Jun 11, 2012 5:08:23 PM EDT> <Notice> <Server> <BEA-002613> <Channel "sip[3]" is now listening on 127.0.0.1:5060 for protocols sip.>
<Jun 11, 2012 5:08:23 PM EDT> <Notice> <Server> <BEA-002613> <Channel "Default[3]" is now listening on 127.0.0.1:7001 for protocols iiop, t3, ldap, snmp, http.>
<Jun 11, 2012 5:08:23 PM EDT> <Notice> <Server> <BEA-002613> <Channel "sip[2]" is now listening on 0:0:0:0:0:0:0:1:5060 for protocols sip.>
<Jun 11, 2012 5:08:23 PM EDT> <Notice> <Server> <BEA-002613> <Channel "sips[2]" is now listening on 0:0:0:0:0:0:0:1:5061 for protocols sips.>
<Jun 11, 2012 5:08:23 PM EDT> <Notice> <Server> <BEA-002613> <Channel "sip[1]" is now listening on 192.168.56.1:5060 for protocols sip.>
<Jun 11, 2012 5:08:23 PM EDT> <Notice> <Server> <BEA-002613> <Channel "DefaultSecure[2]" is now listening on 0:0:0:0:0:0:0:1:7002 for protocols iiops, t3s, ldaps, https.>
<Jun 11, 2012 5:08:23 PM EDT> <Notice> <Server> <BEA-002613> <Channel "sips[1]" is now listening on 192.168.56.1:5061 for protocols sips.>
<Jun 11, 2012 5:08:23 PM EDT> <Notice> <Server> <BEA-002613> <Channel "DefaultSecure[1]" is now listening on 192.168.56.1:7002 for protocols iiops, t3s, ldaps, https.>
<Jun 11, 2012 5:08:23 PM EDT> <Notice> <Server> <BEA-002613> <Channel "DefaultSecure" is now listening on 120.250.216.99:7002 for protocols iiops, t3s, ldaps, https.>
<Jun 11, 2012 5:08:23 PM EDT> <Notice> <Server> <BEA-002613> <Channel "Default[1]" is now listening on 192.168.56.1:7001 for protocols iiop, t3, ldap, snmp, http.>
<Jun 11, 2012 5:08:23 PM EDT> <Notice> <Server> <BEA-002613> <Channel "Default" is now listening on 120.250.216.99:7001 for protocols iiop, t3, ldap, snmp, http.>
<Jun 11, 2012 5:08:23 PM EDT> <Notice> <Server> <BEA-002613> <Channel "Default[2]" is now listening on 0:0:0:0:0:0:0:1:7001 for protocols iiop, t3, ldap, snmp, http.>
<Jun 11, 2012 5:08:23 PM EDT> <Notice> <WebLogicServer> <BEA-000331> <Started the WebLogic Server Administration Server "AdminServer" for domain "base_domain" running in development mode.>
<Jun 11, 2012 5:08:23 PM EDT> <Notice> <WebLogicServer> <BEA-000365> <Server state changed to RUNNING.>
<Jun 11, 2012 5:08:23 PM EDT> <Notice> <WebLogicServer> <BEA-000360> <The server started in RUNNING mode.>
<Jun 11, 2012 5:08:26 PM EDT> <Warning> <Munger> <BEA-2156203> <A version attribute was not found in element "web-app" in the deployment descriptor C:\Oracle\Middleware\user_projects\domains\base_domain\servers\AdminServer\tmp\_WL_internal\consoleapp\jxhze9\console-ext\sipserver-console-ext\WEB-INF\web.xml. A version attribute is required, but this version of the WebLogic Server will assume that the latest version is used. Future versions of WebLogic Server will reject descriptors that do not specify the Java EE version. To eliminate this warning, add an appropriate "version=" to element "web-app" in the deployment descriptor.>
<Jun 11, 2012 5:08:26 PM EDT> <Warning> <Munger> <BEA-2156203> <A version attribute was not found in element "web-app" in the deployment descriptor C:\Oracle\Middleware\user_projects\domains\base_domain\servers\AdminServer\tmp\_WL_internal\consoleapp\jxhze9\console-ext\diameter-console-ext\WEB-INF\web.xml. A version attribute is required, but this version of the WebLogic Server will assume that the latest version is used. Future versions of WebLogic Server will reject descriptors that do not specify the Java EE version. To eliminate this warning, add an appropriate "version=" to element "web-app" in the deployment descriptor.>
<Jun 11, 2012 5:08:35 PM EDT> <Warning> <netuix> <BEA-423225> <The file could not be found in the webapp directory or war. The file name is: /PortalConfig/security/providers/AuthenticatorConfigCommon.portlet; calling from method ServletContext.getResourceAsStream().>
<Jun 11, 2012 5:08:35 PM EDT> <Error> <netuix> <BEA-423158> <No content found at contentUri = /PortalConfig/security/providers/AuthenticatorConfigCommon.portlet.>
<Jun 11, 2012 5:08:35 PM EDT> <Warning> <netuix> <BEA-423225> <The file could not be found in the webapp directory or war. The file name is: /PortalConfig/security/providers/AuthenticatorConfigCommon.portlet; calling from method ServletContext.getResourceAsStream().>
<Jun 11, 2012 5:08:35 PM EDT> <Error> <netuix> <BEA-423158> <No content found at contentUri = /PortalConfig/security/providers/AuthenticatorConfigCommon.portlet.>
<Jun 11, 2012 5:08:35 PM EDT> <Warning> <netuix> <BEA-423225> <The file could not be found in the webapp directory or war. The file name is: /PortalConfig/security/providers/AuthenticatorConfigCommon.portlet; calling from method ServletContext.getResourceAsStream().>
<Jun 11, 2012 5:08:35 PM EDT> <Error> <netuix> <BEA-423158> <No content found at contentUri = /PortalConfig/security/providers/AuthenticatorConfigCommon.portlet.>
<Jun 11, 2012 5:08:35 PM EDT> <Warning> <netuix> <BEA-423225> <The file could not be found in the webapp directory or war. The file name is: /PortalConfig/security/providers/AuthenticatorConfigCommon.portlet; calling from method ServletContext.getResourceAsStream().>
<Jun 11, 2012 5:08:35 PM EDT> <Error> <netuix> <BEA-423158> <No content found at contentUri = /PortalConfig/security/providers/AuthenticatorConfigCommon.portlet.>
<Jun 11, 2012 5:08:35 PM EDT> <Warning> <netuix> <BEA-423225> <The file could not be found in the webapp directory or war. The file name is: /PortalConfig/security/providers/AuthenticatorConfigCommon.portlet; calling from method ServletContext.getResourceAsStream().>
<Jun 11, 2012 5:08:35 PM EDT> <Error> <netuix> <BEA-423158> <No content found at contentUri = /PortalConfig/security/providers/AuthenticatorConfigCommon.portlet.>
<Jun 11, 2012 5:08:35 PM EDT> <Warning> <netuix> <BEA-423225> <The file could not be found in the webapp directory or war. The file name is: /PortalConfig/security/providers/AuthenticatorConfigCommon.portlet; calling from method ServletContext.getResourceAsStream().>
<Jun 11, 2012 5:08:35 PM EDT> <Error> <netuix> <BEA-423158> <No content found at contentUri = /PortalConfig/security/providers/AuthenticatorConfigCommon.portlet.>
<Jun 11, 2012 5:08:35 PM EDT> <Warning> <netuix> <BEA-423225> <The file could not be found in the webapp directory or war. The file name is: /PortalConfig/security/providers/AuthenticatorConfigCommon.portlet; calling from method ServletContext.getResourceAsStream().>
<Jun 11, 2012 5:08:35 PM EDT> <Error> <netuix> <BEA-423158> <No content found at contentUri = /PortalConfig/security/providers/AuthenticatorConfigCommon.portlet.>
The request came to +++++++++++++++++++++ GSSMSessionBean ++++++++++++++++++++++++
<Jun 11, 2012 5:09:29 PM EDT> <Notice> <EclipseLink> <BEA-2005000> <2012-06-11 17:09:29.657--ServerSession(679530917)--EclipseLink, version: Eclipse Persistence Services - 2.3.2.v20111125-r10461>
<Jun 11, 2012 5:09:29 PM EDT> <Notice> <EclipseLink> <BEA-2005000> <2012-06-11 17:09:29.657--ServerSession(679530917)--Server: 12.1.1.0>
<Jun 11, 2012 5:09:30 PM EDT> <Notice> <EclipseLink> <BEA-2005000> <2012-06-11 17:09:30.032--ServerSession(679530917)--GSSMSampleAppfile:/C:/Users/Administrator/Documents/NetBeansProjects/GSSMSampleApp/build/web/WEB-INF/classes/_GSSMSampleAppPU_jtaDataSource=jdbs/sample login successful>
The request came to +++++++++++++++++++++ GSSMSessionBean ++++++++++++++++++++++++

Posted by Ravi on June 11, 2012 at 05:59 PM PDT #

The only way I can get it working is to introduce a Message Bean between my .xhtml page and the EJB to get the data.

index.xhtml --> MessageBean --> EJB

Posted by Ravi on June 12, 2012 at 06:57 AM PDT #

Post a Comment:
Comments are closed for this entry.
About

profile image
Arun Gupta is a technology enthusiast, a passionate runner, author, and a community guy who works for Oracle Corp.


Java EE 7 Samples

Stay Connected

Search

Archives
« April 2014
SunMonTueWedThuFriSat
  
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
   
       
Today